OpenCVの定番のネタとして、ffmpeg込みでクロスコンパイルってのがあるが
成功したので覚え書き
まず以下の作業の前にemscriptenの環境を整えて下さい。
それについては省略
私のemscripten のバージョンは1.38.9
またOS環境はubuntu 16.04
1.まずffmpegの最新をgithubから入手
https://github.com/FFmpeg/FFmpeg
私のはchangelogから見て4.0です
でconfigure
emconfigure ./configure --cc=emcc --ar=emar --ranlib=emranlib --prefix=$(pwd)/…/dist --enable-cross-compile --target-os=none --arch=x86_32 --cpu=generic --disable-stripping --disable-programs --disable-asm --disable-doc --disable-pthreads --disable-w32threads --disable-debug --enable-decoder=hevc --enable-parser=hevc --enable-demuxer=hevc --enable-decoder=h264 --enable-parser=h264 --enable-demuxer=h264
この後
make
make install
で出力確認
$(pwd)/…/dist
に
libavcodec.a libavfilter.a libavutil.a libswscale.a
libavdevice.a libavformat.a libswresample.a pkgconfig
こんな感じです
pkgconfigに注意して下さい。後で使います。
2.OpenCVをダウンロード
https://github.com/opencv/opencv
contribもいるのならダウンロード
これはいろいろあって最新でなく3.2.0固定です。(最悪)
それ以外だとうまくいかない。
具体的には これより下位バージョンじゃpkgconfigが読めない。
上位だとsoftfloatの機能がうまくコンパイルできなかった。
でcmake
emcmake cmake .. -DCMAKE_INSTALL_PREFIX="hogehoge"
-DCMAKE_BUILD_TYPE="Release"
-DCMAKE_C_FLAGS=-I${EMSCRIPTEN}/system/lib/libcxxabi/include/
-DCMAKE_CXX_FLAGS=-I${EMSCRIPTEN}/system/lib/libcxxabi/include/
-DBUILD_SHARED_LIBS=OFF
-DBUILD_DOCS=OFF
-DBUILD_EXAMPLES=OFF
-DBUILD_FAT_JAVA_LIB=OFF
-DBUILD_JASPER=OFF
-DBUILD_PACKAGE=OFF
-DBUILD_CUDA_STUBS=OFF
-DBUILD_opencv_java=OFF
-DBUILD_opencv_python=OFF
-DBUILD_opencv_apps=OFF
-DBUILD_JPEG=OFF
-DBUILD_PNG=OFF
-DBUILD_opencv_apps=OFF
-DBUILD_opencv_videoio=OFF
-DBUILD_opencv_highgui=OFF
-DBUILD_opencv_imgcodecs=OFF
-DBUILD_opencv_python2=OFF
-DENABLE_SSE=OFF
-DENABLE_SSE2=OFF
-DENABLE_SSE3=OFF
-DENABLE_SSE41=OFF
-DENABLE_SSE42=OFF
-DENABLE_SSSE3=OFF
-DENABLE_AVX=OFF
-DWITH_TIFF=OFF
-DWITH_OPENEXR=OFF
-DWITH_1394=OFF
-DWITH_JPEG=OFF
-DWITH_PNG=OFF
-DWITH_FFMPEG=OFF
-DWITH_OPENCL=OFF
-DWITH_GIGEAPI=OFF
-DWITH_CUDA=OFF
-DWITH_CUFFT=OFF
-DWITH_FFMPEG=OFF
-DWITH_GIGEAPI=OFF
-DWITH_GPHOTO2=OFF
-DWITH_GSTREAMER=OFF
-DWITH_GSTREAMER_0_10=OFF
-DWITH_JASPER=OFF
-DWITH_IMAGEIO=OFF
-DWITH_IPP=OFF
-DWITH_IPP_A=OFF
-DWITH_TBB=OFF
-DWITH_OPENNI=OFF
-DWITH_QT=OFF
-DWITH_QUICKTIME=OFF
-DWITH_V4L=OFF
-DWITH_LIBV4L=OFF
-DWITH_MATLAB=OFF
-DWITH_OPENCL=OFF
-DWITH_OPENCLCLAMDBLAS=OFF
-DWITH_OPENCLCLAMDFFT=OFF
-DWITH_OPENCL_SVM=OFF
-DWITH_WEBP=OFF
-DWITH_VTK=OFF
-DWITH_PVAPI=OFF
-DWITH_EIGEN=OFF
-DWITH_GTK=OFF
-DWITH_OPENCLAMDBLAS=OFF
-DWITH_OPENCLAMDFFT=OFF
-DBUILD_TESTS=OFF
-DBUILD_PERF_TESTS=OFF
-DWITH_PTHREAD_PF=OFF
でこのあとcmake-guiでちまちまいじるが注意としてスレッド絡みの機能はONにしないこと
extra module入れたりprefixを変えたりしてください。
で make
make install
うまくいくと *.a が大量に出ます。
-j4とか入れたいなら入れてください。
まずこれで自分のソースにいれ使って確認。
私はopenframeworksでした。
3.pkgconfigを使ってffmpegを取り込む
具体的には
$ export PKG_CONFIG_LIBDIR="hogehoge/pkgconfig"
ほげほげは1のpkgconfignの場所です。
このあとcmake-guiでWITH_FFMPEGをONでgenerateすると
Video I/O:
FFMPEG: YES
avcodec: YES (ver 58.33.100)
avformat: YES (ver 58.19.100)
avutil: YES (ver 56.19.101)
swscale: YES (ver 5.2.100)
avresample: NO
みたいのがうまく行くと出ます。
最後のNOがちょっと気になるがそれはネットで調べるとノーマターらしいです。
なに言ってるか分からん人はLINUXに詳しい人に聞いてください。
でmake
make install
で最終的に*.aを自分のソースにいれ確認
私はopenframeworksでした。