使用libswscale缩放YUV420P - 获取灰色图像

时间:2013-04-29 19:34:31

标签: image-processing ffmpeg yuv libavcodec

我对YUV420p数据的格式有了基本的了解。我理解它在飞机上并且Y数据基本上是黑色和白色亮度,应该是宽度*高度像素的长度。

U和V平面我相信每个平面的宽度*高度/ 4个。

所有这些知识,我正在尝试使用libswscale扩展yuv420p图像。输出图像是灰色的,就像我错过了U和V平面。

这就是我正在做的事情:

  int src_stride[3] = {0, 0, 0};
  src_stride[0] = mInputWidth;
  src_stride[1] = mInputWidth / 4;
  src_stride[2] = mInputWidth / 4;


  const uint8_t *input_planes[3];
  input_planes[0] = input.GetData(); // returns pointer to image data
  input_planes[1] = input_planes[0] + (mInputWidth * mInputHeight);
  input_planes[2] = input_planes[0] + (mInputWidth * mInputHeight) + (mInputWidth * mInputHeight / 4); 


  int scale_rc = sws_scale(mSwsEncodeContext, input_planes,
                       src_stride, 0, mInputHeight, mEncodeAvFrame->data,
                       mEncodeAvFrame->linesize);

不知道我是在捣乱src_stride还是input_planes?

1 个答案:

答案 0 :(得分:0)

上述代码适用于缩放YUV420P数据。事实证明我的数据不是YUV420P,而是NV21,它具有相同的大小,但U和V数据不在不同的平面中,它们在1个平面中并且是交错的。