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 値が 4 つの (2x2) ピクセルに使用されることを理解しています。私が理解していないのは、RGB データが Cb 値と Cr 値に「縮小」される方法です。これを行う方法の例はどこにありますか?