Centos opencv3.0 ffmpeg 的兼容性

從最新的 ffmpeg 上拉下來的最新代碼(FFmpeg 2.7.2 "Nash") 和Opencv3.0 做兼容性,編譯。

出現如下錯誤:

In file included from /home/share/opencv/opencv3/modules/videoio/src/cap_ffmpeg.cpp:45:
/home/share/opencv/opencv3/modules/videoio/src/cap_ffmpeg_impl.hpp: In member function ‘void CvCapture_FFMPEG::close()’:
/home/share/opencv/opencv3/modules/videoio/src/cap_ffmpeg_impl.hpp:317: error: ‘avcodec_free_frame’ was not declared in this scope
/home/share/opencv/opencv3/modules/videoio/src/cap_ffmpeg_impl.hpp: In member function ‘bool CvCapture_FFMPEG::open(const char*)’:
/home/share/opencv/opencv3/modules/videoio/src/cap_ffmpeg_impl.hpp:632: error: ‘avcodec_alloc_frame’ was not declared in this scope
/home/share/opencv/opencv3/modules/videoio/src/cap_ffmpeg_impl.hpp:635: error: ‘PIX_FMT_BGR24’ was not declared in this scope
/home/share/opencv/opencv3/modules/videoio/src/cap_ffmpeg_impl.hpp: In member function ‘bool CvCapture_FFMPEG::retrieveFrame(int, unsigned char**, int*, int*, int*, int*)’:


看了下代碼, 在 FFmpeg 2.7.2 "Nash" 中已經取消了 avcodec_free_frame 這樣的幀處理接口。

看來 ffmpeg的版本 還需要回歸 FFmpeg 2.6.4 "Grothendieck".


編譯到 26%, 出現 gcc 版本兼容問題。

[ 26%] Building CXX object modules/core/CMakeFiles/opencv_perf_core.dir/perf/perf_cvround.cpp.o
Linking CXX executable ../../bin/opencv_perf_core
../../lib/libopencv_core.so.3.0.0: undefined reference to `parallel_pthreads_set_threads_num(int)'
../../lib/libopencv_core.so.3.0.0: undefined reference to `parallel_pthreads_get_threads_num()'
../../lib/libopencv_core.so.3.0.0: undefined reference to `parallel_for_pthreads(cv::Range const&, cv::ParallelLoopBody const&, double)'


更改源碼的函數聲明方式:

namespace cv
    {
    ParallelLoopBody::~ParallelLoopBody() {}
    +#if defined HAVE_PTHREADS && HAVE_PTHREADS
    + void parallel_for_pthreads(const cv::Range& range, const cv::ParallelLoopBody& body, double nstripes);
    + size_t parallel_pthreads_get_threads_num();
    + void parallel_pthreads_set_threads_num(int num);
    +#endif
    }
   


#elif defined HAVE_PTHREADS
    - void parallel_for_pthreads(const Range& range, const ParallelLoopBody& body, double nstripes);
    +
    parallel_for_pthreads(range, body, nstripes);
   
    #else

#elif defined HAVE_PTHREADS
   
    - size_t parallel_pthreads_get_threads_num();
    -
    return parallel_pthreads_get_threads_num();
   
    #else
@@ -424,8 +428,6 @@ void cv::setNumThreads( int threads )
   
    #elif defined HAVE_PTHREADS
   
    - void parallel_pthreads_set_threads_num(int num);
    -
    parallel_pthreads_set_threads_num(threads);
   
    #endif

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章