1

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 値に「縮小」される方法です。これを行う方法の例はどこにありますか?

4

1 に答える 1