从Windows ffmpeg 0.52迁移到linux ffmpeg 0.61代码错误。 如何解决它?

以前我在Windows上使用ffmpeg(我在某处find了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 ++上出现这样的错误

如何解决这样的错误?

PixelFormat被定义为pixfmt.h中的枚举。 我认为问题是,在C ++中,没有从intenum隐式转换。 所以,你需要显式地将int转换为PixelFormat 。 尝试这个:

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

或者你可以使pix_fmt成为PixelFormat而不是int。

我不知道为什么以前工作,因为C + +不允许int转换没有转换。 我认为C确实允许这个,所以也许这是以前编译C的。

编辑:我刚刚看到API从int更改为枚举。 所以这就是之前编译的原因。

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

在你的情况下,像素格式是旧的FFMPEG API调用中的一个int ,现在(0.6)一个枚举PixelFormat 。

MY2C

除了上面的答案之外,还要看看API的新旧版本。