/**************************************************************************** * * Module Title : borders.c * * Description : * ****************************************************************************/ #define STRICT /* Strict type checking */ /**************************************************************************** * Header Files ****************************************************************************/ #include "postp.h" #ifdef MAPCA #include "eti/mm.h" #include "eti_loopdir.h" #endif #ifdef MAPCA void CopyYLeftRightBorder ( UINT8 *restrict SrcPtr1, UINT8 *restrict SrcPtr2, UINT8 *restrict DestPtr1, UINT8 *restrict DestPtr2, UINT32 PlaneHeight, UINT32 PlaneStride ) { n64 *restrict DstPtr64_1 = (n64* restrict)DestPtr1; n64 *restrict DstPtr64_2 = (n64* restrict)DestPtr2; n32 PlaneStride64 = (PlaneStride>>3); n32 Left, Right; n64 Left64, Right64; int i; loop_directives ( ELD_SWP_IVDEP ); for ( i=0; i>3); n32 Left, Right; n64 Left64, Right64; int i; loop_directives ( ELD_SWP_IVDEP ); for ( i=0; iMVBorder; INT32 PlaneStride = pbi->YStride; /***********/ /* Y Plane */ /***********/ PlaneStride = pbi->YStride; PlaneHeight = pbi->VFragments * 8; // copy the left and right most columns out SrcPtr1 = DestReconPtr + pbi->ReconYDataOffset; SrcPtr2 = SrcPtr1 + 8 * pbi->HFragments - 1; DestPtr1= SrcPtr1 - Border; DestPtr2= SrcPtr2 + 1; #ifdef MAPCA CopyYLeftRightBorder ( SrcPtr1, SrcPtr2, DestPtr1,DestPtr2, PlaneHeight, PlaneStride ); #else for ( i=0; iVFragments * 8 * PlaneStride)- PlaneStride; DestPtr1= DestReconPtr; DestPtr2= SrcPtr2 + PlaneStride; for ( i=0; i<(INT32)Border; i++ ) { memcpy ( DestPtr1, SrcPtr1, PlaneStride ); memcpy ( DestPtr2, SrcPtr2, PlaneStride ); DestPtr1 += PlaneStride; DestPtr2 += PlaneStride; } PlaneStride = pbi->UVStride; PlaneHeight = pbi->VFragments * 4; /***********/ /* U Plane */ /***********/ // copy the left and right most columns out SrcPtr1 = DestReconPtr + pbi->ReconUDataOffset; SrcPtr2 = SrcPtr1 + 4 * pbi->HFragments - 1; DestPtr1= SrcPtr1 - Border/2; DestPtr2= SrcPtr2 + 1; #ifdef MAPCA CopyUVLeftRightBorder ( SrcPtr1, SrcPtr2, DestPtr1,DestPtr2, PlaneHeight, PlaneStride ); #else for ( i=0; iReconUDataOffset - Border/2; SrcPtr2 = SrcPtr1 + (pbi->VFragments * 4 * PlaneStride)- PlaneStride; DestPtr1= SrcPtr1 - Border/2*PlaneStride; DestPtr2= SrcPtr2 + PlaneStride; for ( i=0; i<(INT32)(Border/2); i++ ) { memcpy ( DestPtr1, SrcPtr1, PlaneStride ); memcpy ( DestPtr2, SrcPtr2, PlaneStride ); DestPtr1 += PlaneStride; DestPtr2 += PlaneStride; } /***********/ /* V Plane */ /***********/ // copy the left and right most columns out SrcPtr1 = DestReconPtr + pbi->ReconVDataOffset; SrcPtr2 = SrcPtr1 + 4 * pbi->HFragments - 1; DestPtr1= SrcPtr1 - Border/2; DestPtr2= SrcPtr2 + 1; #ifdef MAPCA CopyUVLeftRightBorder ( SrcPtr1, SrcPtr2, DestPtr1,DestPtr2, PlaneHeight, PlaneStride ); #else for ( i=0; iReconVDataOffset - Border/2; SrcPtr2 = SrcPtr1 + (pbi->VFragments * 4 * PlaneStride)- PlaneStride; DestPtr1= SrcPtr1 - Border/2*PlaneStride; DestPtr2= SrcPtr2 + PlaneStride; for ( i=0; i<(INT32)(Border/2); i++ ) { memcpy ( DestPtr1, SrcPtr1, PlaneStride ); memcpy ( DestPtr2, SrcPtr2, PlaneStride ); DestPtr1 += PlaneStride; DestPtr2 += PlaneStride; } } /**************************************************************************** * * ROUTINE : CopyFrame * * INPUTS : POSTPROC_INSTANCE *pbi : Pointer to post-processor instance. * YUV_BUFFER_CONFIG *b : Pointer to source image. * UINT8 *DestReconPtr : Pointer to destination image. * * OUTPUTS : None. * * RETURNS : void * * FUNCTION : Copies the source image into the destination image and * updates the destination's UMV borders. * * SPECIAL NOTES : None. * ****************************************************************************/ void CopyFrame ( POSTPROC_INSTANCE *pbi, YUV_BUFFER_CONFIG *b, UINT8 *DestReconPtr ) { int row; unsigned char *source, *dest; source = (unsigned char *) b->YBuffer; dest = DestReconPtr + pbi->ReconYDataOffset; for ( row=0; rowYHeight; row++ ) { memcpy ( dest, source, b->YWidth ); source += b->YStride; dest += pbi->YStride; } source = (unsigned char *) b->UBuffer; dest = DestReconPtr + pbi->ReconUDataOffset; for ( row=0; rowUVHeight; row++ ) { memcpy ( dest, source, b->UVWidth ); source += b->UVStride; dest += pbi->UVStride; } source = (unsigned char *) b->VBuffer; dest = DestReconPtr + pbi->ReconVDataOffset; for ( row=0; rowUVHeight; row++ ) { memcpy ( dest, source, b->UVWidth ); source += b->UVStride; dest += pbi->UVStride; } UpdateUMVBorder ( pbi, DestReconPtr ); }