| //========================================================================== |
| // |
| // 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" |
| |
| /* |
| * **-CC_YVYUtoYV12_C |
| * |
| * See CCLIB.H for a more detailed description of this function |
| */ |
| void CC_YVYUtoYV12_C( unsigned char *src, int ImageWidth, int ImageHeight, |
| unsigned char *YBuffer, unsigned char *UBuffer, unsigned char *VBuffer, int SrcPitch,int DstPitch ) |
| { |
| int i,j; |
| |
| unsigned char *YDst=YBuffer; |
| unsigned char *UDst=UBuffer; |
| unsigned char *VDst=VBuffer; |
| |
| // for each destination u and v pixel |
| for(i=0;i<ImageHeight/2;i++) |
| { |
| for(j=0;j<ImageWidth/2;j++) |
| { |
| int u,v; |
| |
| // subsample u |
| u = src[j*4+3]; |
| u +=src[j*4+3+SrcPitch]; |
| u /= 2; |
| UDst[j] = u ; |
| |
| // subsample v |
| v = src[j*4+1]; |
| v += src[j*4+1+SrcPitch]; |
| v /= 2; |
| VDst[j] = v; |
| |
| // calculate the 4 y's |
| YDst[j*2] = src[j*4]; |
| YDst[j*2+1] = src[j*4+2]; |
| YDst[DstPitch + j*2] = src[j*4+SrcPitch]; |
| YDst[DstPitch + j*2 + 1] = src[j*4+SrcPitch + 2]; |
| |
| } |
| YDst+=DstPitch*2; // step 2 y rows |
| UDst+=DstPitch/2; // step 1 u row |
| VDst+=DstPitch/2; // step 1 v row |
| src+=SrcPitch*2; // step 2 source rows |
| } |
| } |