x265をビルドしてみた(だけ)

x265をビルドしてみただけのお話。
Debian GNU/Linux 7.1をインストールしたついでに、適当にやってみた。

x265とはなんぞやっていうお話は面倒なので、次のリンクをご参照くださいなっと。

やってることは x265 developer wiki に従って実施しているだけなので、実はそっち見たほうが早いとゆー。

 

とりあえずこれでやったよ的な。
shirase@develsv12:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.1 (wheezy)
Release:	7.1
Codename:	wheezy
shirase@develsv12:~$ 
shirase@develsv12:~$ uname -a
Linux develsv12 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1+deb7u1 x86_64 GNU/Linux

 

  1. 指示に従って必要なパッケージを入れておく
  2. root@develsv12:~# apt-get install mercurial cmake cmake-curses-gui build-essential yasm
    

     

  3. ソースを取得
  4. shirase@develsv12:~$ hg clone https://bitbucket.org/multicoreware/x265
    複製先ディレクトリ: x265
    全リビジョンを取得中
    リビジョンを追加中
    マニフェストを追加中
    ファイルの変更を追加中
    3954 個のリビジョン(9010 の変更を 563 ファイルに適用)を追加
    ブランチ default へ更新中
    ファイルの更新数 281、 マージ数 0、 削除数 0、 衝突未解消数 0
    

     

  5. 設定(特に変更してません)
  6. shirase@develsv12:~$ cd x265/build/linux
    shirase@develsv12:~/x265/build/linux$ 
    shirase@develsv12:~/x265/build/linux$ ./make-Makefiles.bash
    

    x265 CMake Curses GUI
    x265 CMake Curses GUI

     

  7. make
  8. shirase@develsv12:~/x265/build/linux$ make
    Scanning dependencies of target OutputFiles
    [  1%] Building CXX object output/CMakeFiles/OutputFiles.dir/output.cpp.o
    [  2%] Building CXX object output/CMakeFiles/OutputFiles.dir/y4m.cpp.o
    [  3%] Building CXX object output/CMakeFiles/OutputFiles.dir/yuv.cpp.o
    Linking CXX static library libOutputFiles.a
    [  3%] Built target OutputFiles
    Scanning dependencies of target PrimitivesVec
    [  4%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/vec-primitives.cpp.o
    [  5%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/sse3.cpp.o
    [  6%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/ssse3.cpp.o
    [  7%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/sse41.cpp.o
    [  8%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/blockcopy-sse3.cpp.o
    [  9%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/blockcopy-ssse3.cpp.o
    [ 10%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/blockcopy-sse41.cpp.o
    [ 11%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/pixel-sse3.cpp.o
    [ 12%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/pixel-ssse3.cpp.o
    [ 13%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/pixel-sse41.cpp.o
    [ 14%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/ipfilter-sse3.cpp.o
    [ 15%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/ipfilter-ssse3.cpp.o
    [ 16%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/ipfilter-sse41.cpp.o
    In file included from /home/shirase/x265/source/common/vec/ipfilter.inc:37:0,
                     from /home/shirase/x265/source/common/vec/ipfilter-sse41.cpp:31:
    /home/shirase/x265/source/common/vec/ipfilter8.inc: In instantiation of ‘void {anonymous}::filterHorizontal_p_p(pixel*, intptr_t, pixel*, intptr_t, int, int, const short int*) [with int N = 4; pixel = unsigned char; intptr_t = long int]’:
    /home/shirase/x265/source/common/vec/ipfilter.inc:50:37:   required from here
    /home/shirase/x265/source/common/vec/ipfilter8.inc:863:11: warning: variable ‘maxVal’ set but not used [-Wunused-but-set-variable]
    /home/shirase/x265/source/common/vec/ipfilter8.inc: In instantiation of ‘void {anonymous}::filterHorizontal_p_p(pixel*, intptr_t, pixel*, intptr_t, int, int, const short int*) [with int N = 8; pixel = unsigned char; intptr_t = long int]’:
    /home/shirase/x265/source/common/vec/ipfilter.inc:51:37:   required from here
    /home/shirase/x265/source/common/vec/ipfilter8.inc:863:11: warning: variable ‘maxVal’ set but not used [-Wunused-but-set-variable]
    [ 17%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/dct-sse3.cpp.o
    [ 18%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/dct-ssse3.cpp.o
    [ 20%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/dct-sse41.cpp.o
    [ 21%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/intra-sse3.cpp.o
    [ 22%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/intra-ssse3.cpp.o
    [ 23%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/intra-sse41.cpp.o
    [ 24%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/blockcopy-avx.cpp.o
    [ 25%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/pixel-avx.cpp.o
    [ 26%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/ipfilter-avx.cpp.o
    In file included from /home/shirase/x265/source/common/vec/ipfilter.inc:37:0,
                     from /home/shirase/x265/source/common/vec/ipfilter-avx.cpp:31:
    /home/shirase/x265/source/common/vec/ipfilter8.inc: In instantiation of ‘void {anonymous}::filterHorizontal_p_p(pixel*, intptr_t, pixel*, intptr_t, int, int, const short int*) [with int N = 4; pixel = unsigned char; intptr_t = long int]’:
    /home/shirase/x265/source/common/vec/ipfilter.inc:50:37:   required from here
    /home/shirase/x265/source/common/vec/ipfilter8.inc:863:11: warning: variable ‘maxVal’ set but not used [-Wunused-but-set-variable]
    /home/shirase/x265/source/common/vec/ipfilter8.inc: In instantiation of ‘void {anonymous}::filterHorizontal_p_p(pixel*, intptr_t, pixel*, intptr_t, int, int, const short int*) [with int N = 8; pixel = unsigned char; intptr_t = long int]’:
    /home/shirase/x265/source/common/vec/ipfilter.inc:51:37:   required from here
    /home/shirase/x265/source/common/vec/ipfilter8.inc:863:11: warning: variable ‘maxVal’ set but not used [-Wunused-but-set-variable]
    [ 27%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/intra-avx.cpp.o
    [ 28%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/dct-avx.cpp.o
    [ 29%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/avx.cpp.o
    [ 30%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/blockcopy-avx2.cpp.o
    [ 31%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/pixel-avx2.cpp.o
    [ 32%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/ipfilter-avx2.cpp.o
    In file included from /home/shirase/x265/source/common/vec/ipfilter.inc:37:0,
                     from /home/shirase/x265/source/common/vec/ipfilter-avx2.cpp:31:
    /home/shirase/x265/source/common/vec/ipfilter8.inc: In instantiation of ‘void {anonymous}::filterHorizontal_p_p(pixel*, intptr_t, pixel*, intptr_t, int, int, const short int*) [with int N = 4; pixel = unsigned char; intptr_t = long int]’:
    /home/shirase/x265/source/common/vec/ipfilter.inc:50:37:   required from here
    /home/shirase/x265/source/common/vec/ipfilter8.inc:863:11: warning: variable ‘maxVal’ set but not used [-Wunused-but-set-variable]
    /home/shirase/x265/source/common/vec/ipfilter8.inc: In instantiation of ‘void {anonymous}::filterHorizontal_p_p(pixel*, intptr_t, pixel*, intptr_t, int, int, const short int*) [with int N = 8; pixel = unsigned char; intptr_t = long int]’:
    /home/shirase/x265/source/common/vec/ipfilter.inc:51:37:   required from here
    /home/shirase/x265/source/common/vec/ipfilter8.inc:863:11: warning: variable ‘maxVal’ set but not used [-Wunused-but-set-variable]
    [ 33%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/intra-avx2.cpp.o
    [ 34%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/dct-avx2.cpp.o
    [ 35%] Building CXX object common/vec/CMakeFiles/PrimitivesVec.dir/avx2.cpp.o
    Linking CXX static library libPrimitivesVec.a
    [ 35%] Built target PrimitivesVec
    Scanning dependencies of target common
    [ 36%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComLoopFilter.cpp.o
    [ 37%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComRom.cpp.o
    [ 38%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/ContextModel.cpp.o
    [ 40%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComMotionInfo.cpp.o
    [ 41%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComTrQuant.cpp.o
    [ 42%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/SEI.cpp.o
    [ 43%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/ContextModel3DBuffer.cpp.o
    [ 44%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComWeightPrediction.cpp.o
    [ 45%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComSampleAdaptiveOffset.cpp.o
    [ 46%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComPicYuvMD5.cpp.o
    [ 47%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComSlice.cpp.o
    [ 48%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComPicYuv.cpp.o
    [ 49%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComPicSym.cpp.o
    [ 50%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComPrediction.cpp.o
    [ 51%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComYuv.cpp.o
    [ 52%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComBitStream.cpp.o
    [ 53%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComDataCU.cpp.o
    [ 54%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComPattern.cpp.o
    [ 55%] Building CXX object common/CMakeFiles/common.dir/__/Lib/TLibCommon/TComPic.cpp.o
    [ 56%] Building CXX object common/CMakeFiles/common.dir/primitives.cpp.o
    [ 57%] Building CXX object common/CMakeFiles/common.dir/pixel.cpp.o
    [ 58%] Building CXX object common/CMakeFiles/common.dir/dct.cpp.o
    [ 60%] Building CXX object common/CMakeFiles/common.dir/ipfilter.cpp.o
    [ 61%] Building CXX object common/CMakeFiles/common.dir/intrapred.cpp.o
    [ 62%] Building CXX object common/CMakeFiles/common.dir/__/VectorClass/instrset_detect.cpp.o
    [ 63%] Building CXX object common/CMakeFiles/common.dir/threading.cpp.o
    [ 64%] Building CXX object common/CMakeFiles/common.dir/threadpool.cpp.o
    [ 65%] Building CXX object common/CMakeFiles/common.dir/wavefront.cpp.o
    [ 66%] Building CXX object common/CMakeFiles/common.dir/md5.cpp.o
    [ 67%] Building CXX object common/CMakeFiles/common.dir/TShortYUV.cpp.o
    [ 68%] Building CXX object common/CMakeFiles/common.dir/reference.cpp.o
    [ 69%] Building CXX object common/CMakeFiles/common.dir/common.cpp.o
    [ 70%] Building CXX object common/CMakeFiles/common.dir/lowres.cpp.o
    Linking CXX static library libcommon.a
    [ 70%] Built target common
    Scanning dependencies of target InputFiles
    [ 71%] Building CXX object input/CMakeFiles/InputFiles.dir/input.cpp.o
    [ 72%] Building CXX object input/CMakeFiles/InputFiles.dir/y4m.cpp.o
    [ 73%] Building CXX object input/CMakeFiles/InputFiles.dir/yuv.cpp.o
    Linking CXX static library libInputFiles.a
    [ 73%] Built target InputFiles
    Scanning dependencies of target encoder
    [ 74%] Building CXX object encoder/CMakeFiles/encoder.dir/__/Lib/TLibEncoder/TEncSbac.cpp.o
    [ 75%] Building CXX object encoder/CMakeFiles/encoder.dir/__/Lib/TLibEncoder/TEncBinCoderCABACCounter.cpp.o
    [ 76%] Building CXX object encoder/CMakeFiles/encoder.dir/__/Lib/TLibEncoder/TEncBinCoderCABAC.cpp.o
    [ 77%] Building CXX object encoder/CMakeFiles/encoder.dir/__/Lib/TLibEncoder/WeightPredAnalysis.cpp.o
    [ 78%] Building CXX object encoder/CMakeFiles/encoder.dir/__/Lib/TLibEncoder/TEncSampleAdaptiveOffset.cpp.o
    [ 80%] Building CXX object encoder/CMakeFiles/encoder.dir/__/Lib/TLibEncoder/TEncSearch.cpp.o
    [ 81%] Building CXX object encoder/CMakeFiles/encoder.dir/__/Lib/TLibEncoder/TEncEntropy.cpp.o
    [ 82%] Building CXX object encoder/CMakeFiles/encoder.dir/__/Lib/TLibEncoder/TEncCavlc.cpp.o
    [ 83%] Building CXX object encoder/CMakeFiles/encoder.dir/__/Lib/TLibEncoder/TEncCu.cpp.o
    [ 84%] Building CXX object encoder/CMakeFiles/encoder.dir/__/Lib/TLibEncoder/SyntaxElementWriter.cpp.o
    [ 85%] Building CXX object encoder/CMakeFiles/encoder.dir/__/Lib/TLibEncoder/NALwrite.cpp.o
    [ 86%] Building CXX object encoder/CMakeFiles/encoder.dir/__/Lib/TLibEncoder/SEIwrite.cpp.o
    [ 87%] Building CXX object encoder/CMakeFiles/encoder.dir/__/Lib/TLibEncoder/TEncTop.cpp.o
    [ 88%] Building CXX object encoder/CMakeFiles/encoder.dir/bitcost.cpp.o
    [ 89%] Building CXX object encoder/CMakeFiles/encoder.dir/motion.cpp.o
    [ 90%] Building CXX object encoder/CMakeFiles/encoder.dir/slicetype.cpp.o
    [ 91%] Building CXX object encoder/CMakeFiles/encoder.dir/frameencoder.cpp.o
    [ 92%] Building CXX object encoder/CMakeFiles/encoder.dir/framefilter.cpp.o
    [ 93%] Building CXX object encoder/CMakeFiles/encoder.dir/cturow.cpp.o
    [ 94%] Building CXX object encoder/CMakeFiles/encoder.dir/dpb.cpp.o
    [ 95%] Building CXX object encoder/CMakeFiles/encoder.dir/ratecontrol.cpp.o
    [ 96%] Building CXX object encoder/CMakeFiles/encoder.dir/compress.cpp.o
    [ 97%] Building CXX object encoder/CMakeFiles/encoder.dir/encoder.cpp.o
    Linking CXX static library libencoder.a
    [ 97%] Built target encoder
    Scanning dependencies of target x265
    [ 98%] Building CXX object CMakeFiles/x265.dir/x265.cpp.o
    [100%] Building C object CMakeFiles/x265.dir/compat/msvc/getopt.c.o
    Linking CXX executable x265
    [100%] Built target x265
    shirase@develsv12:~/x265/build/linux$ 
    

     

  9. x265 の help を見てみる
  10. shirase@develsv12:~/x265/build/linux$ ./x265 --help
    x265 [info]: HEVC encoder version 0.3+790-f9150ab39bf9
    x265 [info]: build info [Linux][GCC 4.7.2][64 bit] 8bpp
    x265 [info]: detected SIMD architectures SSE2 SSE3 
    x265 [info]: performance primitives: intrinsic
    
    Syntax: x265 [options] infile [-o] outfile
        infile can be YUV or Y4M
        outfile is raw HEVC bitstream
    
    Standalone Executable Options:
    -h/--help                	Show this help text
    				Default: Enabled
       --cpuid               	Limit SIMD arch 0:auto 1:None 2:SSE2 .. 8:AVX2
    				Default: 0
       --threads             	Number of threads for thread pool (0: detect CPU core count)
    				Default: 0
    -F/--frame-threads       	Number of concurrently encoded frames
    				Default: 1
       --log                 	Logging level 0:ERROR 1:WARNING 2:INFO 3:DEBUG -1:NONE
    				Default: 2
       --csv                 	`Comma separated value' log file, appends one line per run
       --no-progress         	Disable progress reports
    -o/--output              	Bitstream output file name
    
    Input Options:
       --input               	Raw YUV or Y4M input file name
       --input-depth         	Bit-depth of input file (YUV only)
    				Default: 8
       --input-res           	Source picture size [w x h], auto-detect if Y4M
       --fps                 	Frame rate, auto-detect if Y4M
    				Default: 0
       --frame-skip          	Number of frames to skip at start of input file
    				Default: 0
    -f/--frames              	Number of frames to be encoded (0 implies all)
    				Default: 0
    
    Reconstructed video options (debugging):
    -r/--recon               	Reconstructed image YUV or Y4M output file name
       --recon-depth         	Bit-depth of output file
    				Default: 8
    
    Quad-Tree analysis:
       --no-wpp              	Disable Wavefront Parallel Processing
       --wpp                 	Enable Wavefront Parallel Processing
    				Default: Enabled
    -s/--ctu                 	Maximum CU size (default: 64x64)
    				Default: 64
       --tu-intra-depth      	Max TU recursive depth for intra CUs
    				Default: 3
       --tu-inter-depth      	Max TU recursive depth for inter CUs
    				Default: 3
    
    Temporal / motion search options:
       --me                  	Motion search method 0:dia 1:hex 2:umh 3:star 4:full
    				Default: 3
    -m/--subme               	Amount of subpel refinement to perform (0:least .. 7:most)
    				Default: 5
       --merange             	Motion search range
    				Default: 60
       --bpredrange          	Motion search range for bipred refinement
    				Default: 4
       --no-rect             	Disable rectangular motion partitions Nx2N and 2NxN
       --rect                	Enable rectangular motion partitions Nx2N and 2NxN
    				Default: Enabled
       --no-amp              	Disable asymmetric motion partitions
       --amp                 	Enable asymmetric motion partitions, requires --rect
    				Default: Enabled
       --no-rdo              	Enable mode decision without rate distortion optimization
       --rdo                 	Enable rate distortion-based mode decision
    				Default: Enabled
       --max-merge           	Maximum number of merge candidates
    				Default: 5
       --no-early-skip       	Disable early SKIP detection
       --early-skip          	Enable early SKIP detection
    				Default: Disabled
       --no-fast-cbf         	Disable Cbf fast mode
       --fast-cbf            	Enable Cbf fast mode
    				Default: Disabled
    
    Spatial / intra options:
       --rdpenalty           	penalty for 32x32 intra TU in non-I slices. 0:disabled 1:RD-penalty 2:maximum
    				Default: 0
       --no-tskip            	Disable intra transform skipping
       --tskip               	Enable intra transform skipping
    				Default: Enabled
       --no-tskip-fast       	Disable fast intra transform skipping
       --tskip-fast          	Enable fast intra transform skipping
    				Default: Enabled
       --no-strong-intra-smoothing	Disable strong intra smoothing for 32x32 blocks
       --strong-intra-smoothing	Enable strong intra smoothing for 32x32 blocks
    				Default: Enabled
       --no-constrained-intra	Disable constrained intra prediction (use only intra coded reference pixels)
       --constrained-intra   	Constrained intra prediction (use only intra coded reference pixels)
    				Default: Disabled
    
    Slice decision options:
       --refresh             	Intra refresh type - 0:none, 1:CDR, 2:IDR (default: CDR)
    				Default: 1
    -i/--keyint              	Max intra period in frames
    				Default: 250
       --rc-lookahead        	Number of frames for frame-type lookahead (determines encoder latency)
    				Default: 10
    -b/--bframes             	Maximum number of consecutive b-frames (now it only enables B GOP structure)
    				Default: 0
       --bframe-bias         	Bias towards B frame decisions
    				Default: 0
    
    QP, rate control and rate distortion options:
       --bitrate             	Target bitrate (kbps), implies ABR
    				Default: 0
    -q/--qp                  	Base QP for CQP mode
    				Default: 32
       --cbqpoffs            	Chroma Cb QP Offset
    				Default: 0
       --crqpoffs            	Chroma Cr QP Offset
    				Default: 0
       --no-rdoq             	Disable RDO quantization
       --rdoq                	Enable RDO quantization
    				Default: Enabled
       --no-rdoqts           	Disable RDO quantization with transform skip
       --rdoqts              	Enable RDO quantization with transform skip
    				Default: Enabled
       --no-signhide         	Disable hide sign bit of one coeff per TU (rdo)
       --signhide            	Hide sign bit of one coeff per TU (rdo)
    				Default: Enabled
    
    Loop filter:
       --no-lft              	Disable Loop Filter
       --lft                 	Enable Loop Filter
    				Default: Enabled
    
    Sample Adaptive Offset loop filter:
       --no-sao              	Disable Sample Adaptive Offset
       --sao                 	Enable Sample Adaptive Offset
    				Default: Enabled
       --sao-lcu-bounds      	0: right/bottom boundary areas skipped  1: non-deblocked pixels are used
    				Default: 0
       --sao-lcu-opt         	0: SAO picture-based optimization, 1: SAO LCU-based optimization 
    				Default: 1
    
    SEI options:
       --hash                	Decoded Picture Hash SEI 0: disabled, 1: MD5, 2: CRC, 3: Checksum 
    				Default: 0
    shirase@develsv12:~/x265/build/linux$ 
    

 

タイトル通りビルドしてみた「だけ」なので、エンコードとかはやってません。
そもそも昔みたいにエンコードテスト用の素材とか作ってないですし、x264すら年単位で使ってない……(素材は古いUSBフラッシュメモリなんかを漁ったら出てくるかもですが。)
エンコードのレビューなんかは、いろんな人がやってそうなので調べたほうが早いかなと思います。はい。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中