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

时间:2016-08-09 09:04:04

标签: c++ c opencv gcc 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. 我的编译命令适用于应用程序:

      

    g ++ -std = c ++ 11 -I / home / dep / ffmpeg / install / include / Queue.cpp Image.cpp CaptureFFMPEGFrame.cpp Object.cpp main.cpp -o main -L / home / dep / ffmpeg / install / lib -lavutil -lavcodec -lavformat -lavdevice -lavfilter -lswscale -lswresample -lpostproc -lpthread -lz -lrt -llzma -lbz2

  3. 我面临的错误是:

    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)
    

    我的努力和理解:

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

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

    3. 我可能错过了什么?

      非常感谢。

1 个答案:

答案 0 :(得分:10)

截至提交78071a14,像素格式已添加AV_前缀,PIX_FMT_*定义移至libavutil/old_pix_fmts.h(原始{{1}包含}})。然后在下一个主要版本中删除此文件。

修复(如评论中所述)只是将此前缀添加到尚未更新的任何pixfmt.h语句中。