libswscalePIX_FMT_YUYV422タイプのイメージを水平方向にミラーリングしようとしています。ピクセルあたり16ビットの各行に単純なループを使用すると、色が間違ってしまいます。たとえば、青いオブジェクトはオレンジ色になります。これが私のコードです:
typedef unsigned short YUVPixel; // 16 bits per pixel
for (int y = 0; y < outHeight; y++)
{
YUVPixel *p1 = (YUVPixel*)pBits + y * outWidth;
YUVPixel *p2 = p1 + outWidth - 1;
for (int x = 0; x < outWidth/2; x++) // outWidth is image width in pixels
{
// packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
unsigned short tmp;
tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
}
次に、YUVPixelを32ビットタイプとして再定義し、それに応じてループを変更してみました。これにより正しい色になりますが、隣接するピクセルが入れ替わっているように見えます。何かアイデアはありますか、私はこれで完全に迷っていますか?