【问题标题】:ffmpeg: how to replace img_convert() with sws_scale()ffmpeg:如何用 sws_scale() 替换 img_convert()
【发布时间】: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 来包含标题。

【问题讨论】:

    标签: c++ c ffmpeg


    【解决方案1】:

    sws_scale 没有 AVPicture 的概念。而是传递数据线和线大小线。这是

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

    顺便说一句,您可以复制AVPicture 结构,因此没有理由使用指针。

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      相关资源
      最近更新 更多