我对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?