0

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
    }
}
4

1 回答 1

0

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

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

这里要注意几个注意事项:首先,由于您使用 YUV420 作为输出格式,因此您希望增加 Q 以便它从偶数行/列开始并占据偶数宽度/高度(否则 Q 边框可能会出现一些扭曲的颜色)。其次,确保所有图片平面的指针都指向同一个像素——这需要根据像素格式为每个平面提供不同的偏移量。第三,如果没有缩放,这效果最好 - 否则由于抖动,结果图片可能看起来与全图片比例不完全相同。

于 2016-10-01T19:36:58.703 回答