1

NV12から、YUV形式でUとVのビットを入れ替えたい

YYYYYYYY UVUV // each letter presents a bit

NV21へ

YYYYYYYY VUVU

Y 平面はそのままにして、以下の関数で U 平面と V 平面を処理します。

uchar swap(uchar in) {
    uchar out = ((in >> 1) & 0x55) | ((in << 1) & 0xaa);
    return out;
}

しかし、私は望ましい結果を得ることができません.出力画像の色はまだ正しくありません.

U 平面と V 平面を正しく入れ替えるにはどうすればよいですか?

4

2 に答える 2

0

問題が見つかりました。UV は、ビットではなくバイト形式で操作する必要があります。

    byte[] yuv = // ...
    final int length = yuv.length;
    for (int i1 = 0; i1 < length; i1 += 2) {
        if (i1 >= width * height) {
            byte tmp = yuv[i1];
            yuv[i1] = yuv[i1+1];
            yuv[i1+1] = tmp;
        }
    }
于 2016-06-22T09:38:24.300 に答える