【发布时间】:2017-07-24 01:36:24
【问题描述】:
我有一个这样的旧版本FFmpeg代码:
int ret = img_convert((AVPicture *)picture, c->pix_fmt,
(AVPicture *)input_picture, (PixelFormat)input_pix_fmt,
width, height);
if (ret < 0)
return false;
我注意到在新的 ffmpeg 中,img_convert() 已被 sws_scale() 取代,我按照格式更改如下:
int w = width;
int h = height;
static struct SwsContext *img_convert_ctx
= sws_getContext(w, h, (PixelFormat)input_pix_fmt,
w, h, c->pix_fmt,
SWS_BICUBIC, NULL, NULL, NULL);
int ret = sws_scale(img_convert_ctx,
input_picture->data,
input_picture->linesize,
0,
height,
(AVPicture *)picture,
(AVPicture *)picture);
if (ret < 0) {
return false;
}
sws_freeContext(img_convert_ctx);
但它给出了错误:
error: cannot convert ‘AVPicture*’ to ⏎
‘uint8_t* const* {aka unsigned char* const*}’ for argument ‘6’ to ⏎
‘int sws_scale(SwsContext*, const uint8_t* const*, ⏎
const int*, int, int, uint8_t* const*, const int*)’
似乎错误出现在 sws_scale 的最后两个参数中。应该怎么修改?
是c和c++不兼容问题造成的吗?我现在在 C 中运行 FFmpeg,并使用 extern C 来包含标题。
【问题讨论】: