C++ 从Windows ffmpeg 0.52迁移到linux ffmpeg 0.61的代码错误。如何修复它?
以前我在windows上使用ffmpeg(我在某处找到了0.52版本)。现在我正在移植到linux和最新的ffmpeg。到目前为止,我在两行中有4个错误 简单地说: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
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)格式
my2cFFMPEG 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
aPixelFormat
而不是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
aPixelFormat
而不是int
<>我不知道为什么以前这样做,因为C++不允许<代码> int >代码> <代码> EnUM < /Case>没有转换的转换。我认为C确实允许这样做,所以可能它以前是用C编译的
编辑:我刚刚看到API从int更改为enum。这就是它以前编译的原因。除了上面的答案,还可以看看API的新旧版本
除了上述答案,还可以看看API的新旧版本