blob: e7e9f845166a250cd3b6ab02dc6a1a9930351010 [file]
//==========================================================================
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
// PURPOSE.
//
// Copyright (c) 1999 - 2001 On2 Technologies Inc. All Rights Reserved.
//
//--------------------------------------------------------------------------
#include <assert.h>
#include "colorconversions.h"
#include "lutbl.h"
#include "ccstr.h"
//------------------------------------------------------------------------------
// See CCLIB.H for a more detailed description of this function
void CC_UYVYtoYV12_C(unsigned char* UYVYBuffer, int ImageWidth, int ImageHeight,
unsigned char* YBuffer, unsigned char* UBuffer, unsigned char* VBuffer, int SrcPitch, int DstPitch)
{
unsigned char* pDestY = YBuffer;
unsigned char* pDestU = UBuffer;
unsigned char* pDestV = VBuffer;
int i;
int j;
// For each destination U and V pixel
for (i = 0; i < ImageHeight / 2; ++i)
{
for (j = 0; j < ImageWidth / 2; ++j)
{
int u;
int v;
// Subsample U
u = UYVYBuffer[j * 4];
u += UYVYBuffer[j * 4 + SrcPitch];
u /= 2;
pDestU[j] = u;
// Subsample V
v = UYVYBuffer[j * 4 + 2];
v += UYVYBuffer[j * 4 + 2 + SrcPitch];
v /= 2;
pDestV[j] = v;
// Copy Y
pDestY[j * 2] = UYVYBuffer[j * 4 + 1];
pDestY[j * 2 + 1] = UYVYBuffer[j * 4 + 3];
pDestY[DstPitch + j * 2] = UYVYBuffer[j * 4 + SrcPitch + 1];
pDestY[DstPitch + j * 2 + 1] = UYVYBuffer[j * 4 + SrcPitch + 3];
}
pDestY += DstPitch * 2; // Step 2 Y rows
pDestU += DstPitch / 2; // Step 1 U row
pDestV += DstPitch / 2; // Step 1 V row
UYVYBuffer += SrcPitch * 2; // Step 2 source rows
}
return;
}