FFMPEG:未在此范围内声明'PIX_FMT_BGR24'

msz*_*msz 7 c c++ gcc opencv ffmpeg

我正在使用FFMPEG API构建一个简单的解码应用程序.我知道OpenCV中有解决方案,但出于特殊原因我不会使用它.由于我对FFMPEG(以及这个社区)都很新,我想知道在构建FFMPEG时我是否有任何错误.

编译器:我正在使用gcc 5.3.0进行编译和构建.

以下是我遵循的步骤:

  1. 我使用以下配置构建了FFMPEG库:

    ./configure --prefix =/home/dep/ffmpeg/install/--pkg-config-flags = - static --enable-gpl --disable-yasm

  2. 我的编译命令是针对应用程序的:

    克++ -std = C++ 11 -I /家/沉积/ FFMPEG /安装/包含/ Queue.cpp Image.cpp CaptureFFMPEGFrame.cpp Object.cpp的main.cpp -o主-L /家/沉积/ FFMPEG /安装/ LIB -lavutil -lavcodec -lavformat -lavdevice -lavfilter -lswscale -lswresample -lpostproc -lpthread -lz -lrt -llzma -lbz2

我面临的错误是:

CaptureFFMPEGFrame.cpp:203:169: error: ‘PIX_FMT_BGR24’ was not declared in this scope
     mpFrameSwsContext = sws_getContext(mpAVCodecContext->width, mpAVCodecContext->height, mpAVCodecContext->pix_fmt, mpAVCodecContext->width, mpAVCodecContext->height, PIX_FMT_BGR24, SWS_BICUBIC, NULL, NULL, NULL)
Run Code Online (Sandbox Code Playgroud)

我的努力和理解:

  1. 根据我的理解,libavutil/pixfmt.h包含我包含的像素格式以及其他包含,并且错误仍然存​​在.您还可以查看我的应用程序中包含的库.

  2. 由于我的程序是cpp代码,因此我的标题已经包含在extern"C"中,即 #include "libavcodec/avcodec.h"

我可能错过了什么?

非常感谢.

Jos*_*ock 11

从提交78071a14开始,像素格式已经被添加了前缀AV_,并且PIX_FMT_*定义被移动到libavutil/old_pix_fmts.h(原始包含的内容pixfmt.h).然后在下一个主要版本中删除此文件.

修复(如注释中所述)只是将此前缀添加到PIX_FMT_*尚未更新的任何语句中.