出现如下错误:
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 |