【发布时间】:2013-01-27 12:18:45
【问题描述】:
我正在尝试使用 libav 将 RGB 图像数据向量(源自 .png 图像)转换为 YUV420p 格式。
在 libav 示例代码中,以下内容用于创建虚拟图像:
/* prepare a dummy image */
static void fill_yuv_image(AVFrame *pict, int frame_index, int width, int height)
{
int x, y, i;
i = frame_index;
/* Y */
for(y=0;y<height;y++) {
for(x=0;x<width;x++) {
pict->data[0][y * pict->linesize[0] + x] = x + y + i * 3;
}
}
/* Cb and Cr */
for(y=0;y<height/2;y++) {
for(x=0;x<width/2;x++) {
pict->data[1][y * pict->linesize[1] + x] = 128 + y + i * 2;
pict->data[2][y * pict->linesize[2] + x] = 64 + x + i * 5;
}
}
}
这里有几件事我不清楚:
首先,我是否需要重新排列输入向量中的 RGB 数据,使其适合编码为 YUV420p?
其次,我知道每个像素都有一个 Y 值,而 Cb 和 Cr 值用于四个 (2x2) 像素。我不明白的是 RGB 数据是如何“减少”到 Cb 和 Cr 值的 - 是否有示例说明如何在任何地方执行此操作?
【问题讨论】:
标签: rgb multimedia yuv libav