【问题标题】:Migration from Windows ffmpeg 0.52 to linux ffmpeg 0.61 code error. How to fix it?从 Windows ffmpeg 0.52 迁移到 linux ffmpeg 0.61 代码错误。如何解决?
【发布时间】:2011-07-01 09:56:47
【问题描述】:

以前我在 Windows 上使用过 ffmpeg(我在某处找到了 0.52 版本)。现在我正在移植到 linux 和最新的 ffmpeg。到目前为止,我在 2 行中有 4 个错误 就这么简单的一行:

size = avpicture_get_size(pix_fmt, nWidth, nHeight);

我明白了:

  initializing argument 1 of ‘int avpicture_get_size(PixelFormat, int, int)’    C/C++ Problem

invalid conversion from ‘int’ to ‘PixelFormat’      C/C++ Problem

就这么简单的线

 avpicture_fill((AVPicture *)picture, picture_buf, pix_fmt, nWidth, nHeight);

我明白了:

 initializing argument 3 of ‘int avpicture_fill(AVPicture*, uint8_t*, PixelFormat, int, int)’       C/C++ Problem

invalid conversion from ‘int’ to ‘PixelFormat’      C/C++ Problem

代码在 Windows ffmpeg 0.52 下编译并完美运行,但现在在 ffmpeg 0.6.1 上的 linux g++ 上出现此类错误

如何修复此类错误?

【问题讨论】:

    标签: c++ windows linux ffmpeg


    【解决方案1】:

    PixelFormat 在 pixfmt.h 中定义为枚举。我认为问题在于在 C++ 中,没有从 intenum 的隐式转换。因此,您需要将int 显式转换为PixelFormat。试试这个:

    size = avpicture_get_size(static_cast<PixelFormat>(pix_fmt), nWidth, nHeight);
    

    或者您可以将 pix_fmt 设为 PixelFormat 而不是 int。

    我不知道以前为什么会这样,因为 C++ 不允许在没有强制转换的情况下将 int 转换为 enum。我认为 C 确实允许这样做,所以它之前可能被编译为 C。

    编辑:我刚刚看到 API 从 int 变为 enum。所以这就是它之前编译的原因。

    【讨论】:

      【解决方案2】:

      FFMPEG API 已经从旧的 0.52 更改为 0.6.1。您必须检查新的 API 调用并对其进行调整。 pix_fmt 是一个 int,现在是一个 PixelFormat,因为您的错误指出:)

      在您的情况下,像素格式在旧 FFMPEG 的 API 调用中是 int,现在 (0.6) 是 enum PixelFormat

      my2c

      【讨论】:

        【解决方案3】:

        除了上面的答案,看看新旧版本的API。

        Old

        New

        【讨论】:

          猜你喜欢
          • 2013-10-18
          • 2012-08-11
          • 2013-09-17
          • 1970-01-01
          • 1970-01-01
          • 2015-06-07
          • 1970-01-01
          • 2023-03-16
          • 1970-01-01
          相关资源
          最近更新 更多