gpt4 book ai didi

c++ - ffmpeg:如何用 sws_scale() 替换 img_convert()

转载 作者:太空宇宙 更新时间:2023-11-04 02:43:57 26 4
gpt4 key购买 nike

我有一个老版本的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 来包含 header 。

最佳答案

sws_scale 没有AVPicture 的概念。而是传递数据线和 linesize 线。哪个是

sws_scale(
img_convert_ctx,
input_picture->data,
input_picture->linesize,
0,
height,
picture->data,
picture->linesize
);

顺便说一下,您可以复制 AVPicture 结构,这样就没有理由使用指针了。

关于c++ - ffmpeg:如何用 sws_scale() 替换 img_convert(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29233769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com