C++ 从Windows ffmpeg 0.52迁移到linux ffmpeg 0.61的代码错误。如何修复它?

C++ 从Windows ffmpeg 0.52迁移到linux ffmpeg 0.61的代码错误。如何修复它?,c++,windows,linux,ffmpeg,C++,Windows,Linux,Ffmpeg,以前我在windows上使用ffmpeg(我在某处找到了0.52版本)。现在我正在移植到linux和最新的ffmpeg。到目前为止,我在两行中有4个错误 简单地说: size = avpicture_get_size(pix_fmt, nWidth, nHeight); 我得到: initializing argument 1 of ‘int avpicture_get_size(PixelFormat, int, int)’ C/C++ Problem initializing

以前我在windows上使用ffmpeg(我在某处找到了0.52版本)。现在我正在移植到linux和最新的ffmpeg。到目前为止,我在两行中有4个错误 简单地说:

size = avpicture_get_size(pix_fmt, nWidth, nHeight);
我得到:

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

在这么简单的线路上

 avpicture_fill((AVPicture *)picture, picture_buf, pix_fmt, nWidth, nHeight);
我得到:

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

该代码在Windows ffmpeg 0.52下编译并运行良好,但现在在ffmpeg 0.6.1上的linux g++上出现了这样的错误


如何修复这些错误?

FFMPEG API已经从原来的0.52更改为0.6.1。您必须检查新的API调用并调整它们。pix_fmt是一个整数,现在是一个像素格式,正如您的错误所指出的:)

在您的例子中,像素格式是旧FFMPEG中API调用中的
int
,现在是(0.6)格式


my2c

FFMPEG API已经从原来的0.52更改为0.6.1。您必须检查新的API调用并调整它们。pix_fmt是一个整数,现在是一个像素格式,正如您的错误所指出的:)

在您的例子中,像素格式是旧FFMPEG中API调用中的
int
,现在是(0.6)格式


my2c在pixfmt.h中定义为枚举。我认为问题是在C++中,没有从代码< int /c> >到<代码>枚举< /COD>的隐式转换。因此,您需要显式地将
int
转换为
PixelFormat
。试试这个:

size = avpicture_get_size(static_cast<PixelFormat>(pix_fmt), nWidth, nHeight);
size=avpicture\u get\u size(静态投影(pix\u fmt)、nWidth、nHeight);
或者,您可以只使用
pix\u fmt
a
PixelFormat
而不是int

<>我不知道为什么以前这样做,因为C++不允许<代码> int >代码> <代码> EnUM < /Case>没有转换的转换。我认为C确实允许这样做,所以可能它以前是用C编译的


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

PixelFormat
在pixfmt.h中定义为枚举。我认为问题是在C++中,没有从代码< int /c> >到<代码>枚举< /COD>的隐式转换。因此,您需要显式地将
int
转换为
PixelFormat
。试试这个:

size = avpicture_get_size(static_cast<PixelFormat>(pix_fmt), nWidth, nHeight);
size=avpicture\u get\u size(静态投影(pix\u fmt)、nWidth、nHeight);
或者,您可以只使用
pix\u fmt
a
PixelFormat
而不是int

<>我不知道为什么以前这样做,因为C++不允许<代码> int >代码> <代码> EnUM < /Case>没有转换的转换。我认为C确实允许这样做,所以可能它以前是用C编译的


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

除了上面的答案,还可以看看API的新旧版本


除了上述答案,还可以看看API的新旧版本