ubuntu(linux)下安装openCV(ffmpeg导致的编译不通过的解决办法)
1.opencv-3.1.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1313:21: error: ‘CODEC_FLAG_GLOBAL_HEADER’ was not declared in this scope
c->flags |= CODEC_FLAG_GLOBAL_HEADER;
2.opencv-3.1.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1525:35: error: ‘AVFMT_RAWPICTURE’ was not declared in this scope
以上两个错误均属于用一类型,由ffmpeg的版本问题引起。在最新版本的ffmpeg中对很多关键字进行了重命名,例如
CODEC_FLAG_GLOBAL_HEADER就被重新命名为AV_CODEC_FLAG_GLOBAL_HEADER,因此以老版本ffmpeg开发的opencv无法编译。解决方法也很简单,装旧版本的ffmpeg或者修改opencv的源码
以上错误的解决方案为:
在 opencv-3.1.0/modules/videoio/src/cap_ffmpeg_impl.hpp 里最顶端添加:
#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020
其他由ffmpeg版本引起的错误处理方法类似,找到报错的宏对应的定义,将其复制到出错的源码文件头