emscriptenでopencvをffmpeg込みでクロスコンパイルした。

OpenCVの定番のネタとして、ffmpeg込みでクロスコンパイルってのがあるが
成功したので覚え書き

まず以下の作業の前にemscriptenの環境を整えて下さい。
それについては省略
私のemscripten のバージョンは1.38.9
またOS環境はubuntu 16.04

１．まず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もいるのならダウンロード
これはいろいろあって最新でなく３．２．０固定です。（最悪）
それ以外だとうまくいかない。
具体的には　これより下位バージョンじゃ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でした。

３．pkgconfigを使ってffmpegを取り込む
具体的には
$ export PKG_CONFIG_LIBDIR="hogehoge/pkgconfig"
ほげほげは１の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でした。