FFMPEG: ' PIX_FMT_BGR24 '没有在此范围内声明

FFMPEG: ‘PIX_FMT_BGR24’ was not declared in this scope

本文关键字:范围内 声明 FMT PIX FFMPEG BGR24      更新时间:2023-10-16

我正在使用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 - lswsample -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)

我的努力和理解:

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

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

有什么我可能错过的吗?

许多谢谢。

在提交78071a14时,像素格式已经以AV_为前缀,并且PIX_FMT_*定义被移动到libavutil/old_pix_fmts.h(由原始pixfmt.h包含)。然后在下一个主要版本中删除该文件。

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