更改区域上的FFmpeg sws_scale

时间:2016-09-28 10:00:47

标签: ffmpeg swscale

我使用sws_scale将一组RGB32图像转换为YUV420格式。每个图像与前一个图像非常相似,它们仅在矩形区域Q上有所不同。

我的问题是如何利用Q来加快转换过程?应在sws_scale函数中添加一个附加参数。

sws_scale( ctx, in_plane, in_stride, sliceY, height, out_plane, out_stride, Q){
    // parameter out_plane stores the YUV420 data of previous image
    Instead of scanning the whole image, scan through rectangle Q{
        Do conversion
    }
}

1 个答案:

答案 0 :(得分:0)

当前API中不存在此类参数,但您可以按原样使用sws_scale。你可以创建两个上下文 - 一个用于整个图片,一个用于Q;为了只转换Q:

  • 使用您为Q
  • 创建的上下文
  • 移动所有数据指针,使它们都指向输入/输出图像中Q的第一个像素
  • 保持全面发展的步伐

这里有几点需要注意:首先,由于你使用YUV420作为输出格式,你想增加Q使它从偶数行/列开始并占据均匀的宽度/高度(否则Q边界可能会有一些扭曲的颜色) )。其次,确保所有图像平面的指针指向同一像素 - 这需要根据像素格式为每个平面设置不同的偏移。第三,如果没有缩放,这种方法效果最好 - 否则,由于抖动,所得到的图像可能看起来与完整图像比例看起来不完全相同。