10c1bc742181ded4930842b46e9507372f0b1b963James Dong/** 20c1bc742181ded4930842b46e9507372f0b1b963James Dong * 30c1bc742181ded4930842b46e9507372f0b1b963James Dong * File Name: omxVCM4P10_InterpolateHalfVer_Luma.c 40c1bc742181ded4930842b46e9507372f0b1b963James Dong * OpenMAX DL: v1.0.2 50c1bc742181ded4930842b46e9507372f0b1b963James Dong * Revision: 9641 60c1bc742181ded4930842b46e9507372f0b1b963James Dong * Date: Thursday, February 7, 2008 70c1bc742181ded4930842b46e9507372f0b1b963James Dong * 80c1bc742181ded4930842b46e9507372f0b1b963James Dong * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. 90c1bc742181ded4930842b46e9507372f0b1b963James Dong * 100c1bc742181ded4930842b46e9507372f0b1b963James Dong * 110c1bc742181ded4930842b46e9507372f0b1b963James Dong * Description: 120c1bc742181ded4930842b46e9507372f0b1b963James Dong * This function will calculate SAD for 4x4 blocks 130c1bc742181ded4930842b46e9507372f0b1b963James Dong * 140c1bc742181ded4930842b46e9507372f0b1b963James Dong */ 150c1bc742181ded4930842b46e9507372f0b1b963James Dong 160c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "omxtypes.h" 170c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "armOMX.h" 180c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "omxVC.h" 190c1bc742181ded4930842b46e9507372f0b1b963James Dong 200c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "armCOMM.h" 210c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "armVC.h" 220c1bc742181ded4930842b46e9507372f0b1b963James Dong 230c1bc742181ded4930842b46e9507372f0b1b963James Dong 240c1bc742181ded4930842b46e9507372f0b1b963James Dong/** 250c1bc742181ded4930842b46e9507372f0b1b963James Dong * Function: omxVCM4P10_InterpolateHalfVer_Luma (6.3.5.5.2) 260c1bc742181ded4930842b46e9507372f0b1b963James Dong * 270c1bc742181ded4930842b46e9507372f0b1b963James Dong * Description: 280c1bc742181ded4930842b46e9507372f0b1b963James Dong * This function performs interpolation for two vertical 1/2-pel positions - 290c1bc742181ded4930842b46e9507372f0b1b963James Dong * (0, -1/2) and (0, 1/2) - around a full-pel position. 300c1bc742181ded4930842b46e9507372f0b1b963James Dong * 310c1bc742181ded4930842b46e9507372f0b1b963James Dong * Input Arguments: 320c1bc742181ded4930842b46e9507372f0b1b963James Dong * 330c1bc742181ded4930842b46e9507372f0b1b963James Dong * pSrc - Pointer to top-left corner of block used to interpolate in the 340c1bc742181ded4930842b46e9507372f0b1b963James Dong * reconstructed frame plane 350c1bc742181ded4930842b46e9507372f0b1b963James Dong * iSrcStep - Step of the source buffer. 360c1bc742181ded4930842b46e9507372f0b1b963James Dong * iDstStep - Step of the destination (interpolation) buffer; must be a 370c1bc742181ded4930842b46e9507372f0b1b963James Dong * multiple of iWidth. 380c1bc742181ded4930842b46e9507372f0b1b963James Dong * iWidth - Width of the current block; must be equal to either 4, 8, or 16 390c1bc742181ded4930842b46e9507372f0b1b963James Dong * iHeight - Height of the current block; must be equal to either 4, 8, or 16 400c1bc742181ded4930842b46e9507372f0b1b963James Dong * 410c1bc742181ded4930842b46e9507372f0b1b963James Dong * Output Arguments: 420c1bc742181ded4930842b46e9507372f0b1b963James Dong * 430c1bc742181ded4930842b46e9507372f0b1b963James Dong * pDstUp -Pointer to the interpolation buffer of the -pel position above 440c1bc742181ded4930842b46e9507372f0b1b963James Dong * the current full-pel position (0, -1/2) 450c1bc742181ded4930842b46e9507372f0b1b963James Dong * If iWidth==4, 4-byte alignment required. 460c1bc742181ded4930842b46e9507372f0b1b963James Dong * If iWidth==8, 8-byte alignment required. 470c1bc742181ded4930842b46e9507372f0b1b963James Dong * If iWidth==16, 16-byte alignment required. 480c1bc742181ded4930842b46e9507372f0b1b963James Dong * pDstDown -Pointer to the interpolation buffer of the -pel position below 490c1bc742181ded4930842b46e9507372f0b1b963James Dong * the current full-pel position (0, 1/2) 500c1bc742181ded4930842b46e9507372f0b1b963James Dong * If iWidth==4, 4-byte alignment required. 510c1bc742181ded4930842b46e9507372f0b1b963James Dong * If iWidth==8, 8-byte alignment required. 520c1bc742181ded4930842b46e9507372f0b1b963James Dong * If iWidth==16, 16-byte alignment required. 530c1bc742181ded4930842b46e9507372f0b1b963James Dong * 540c1bc742181ded4930842b46e9507372f0b1b963James Dong * Return Value: 550c1bc742181ded4930842b46e9507372f0b1b963James Dong * 560c1bc742181ded4930842b46e9507372f0b1b963James Dong * OMX_Sts_NoErr - no error 570c1bc742181ded4930842b46e9507372f0b1b963James Dong * OMX_Sts_BadArgErr - bad arguments; returned if any of the following 580c1bc742181ded4930842b46e9507372f0b1b963James Dong * conditions are true: 590c1bc742181ded4930842b46e9507372f0b1b963James Dong * - at least one of the following pointers is NULL: 600c1bc742181ded4930842b46e9507372f0b1b963James Dong * pSrc, pDstUp, or pDstDown 610c1bc742181ded4930842b46e9507372f0b1b963James Dong * - iWidth or iHeight have values other than 4, 8, or 16 620c1bc742181ded4930842b46e9507372f0b1b963James Dong * - iWidth==4 but pDstUp and/or pDstDown is/are not aligned on a 4-byte boundary 630c1bc742181ded4930842b46e9507372f0b1b963James Dong * - iWidth==8 but pDstUp and/or pDstDown is/are not aligned on a 8-byte boundary 640c1bc742181ded4930842b46e9507372f0b1b963James Dong * - iWidth==16 but pDstUp and/or pDstDown is/are not aligned on a 16-byte boundary 650c1bc742181ded4930842b46e9507372f0b1b963James Dong * 660c1bc742181ded4930842b46e9507372f0b1b963James Dong */ 670c1bc742181ded4930842b46e9507372f0b1b963James Dong OMXResult omxVCM4P10_InterpolateHalfVer_Luma( 680c1bc742181ded4930842b46e9507372f0b1b963James Dong const OMX_U8* pSrc, 690c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U32 iSrcStep, 700c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U8* pDstUp, 710c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U8* pDstDown, 720c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U32 iDstStep, 730c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U32 iWidth, 740c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U32 iHeight 750c1bc742181ded4930842b46e9507372f0b1b963James Dong) 760c1bc742181ded4930842b46e9507372f0b1b963James Dong{ 770c1bc742181ded4930842b46e9507372f0b1b963James Dong OMXResult RetValue; 780c1bc742181ded4930842b46e9507372f0b1b963James Dong 790c1bc742181ded4930842b46e9507372f0b1b963James Dong /* check for argument error */ 800c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf(pSrc == NULL, OMX_Sts_BadArgErr) 810c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf(pDstUp == NULL, OMX_Sts_BadArgErr) 820c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf(pDstDown == NULL, OMX_Sts_BadArgErr) 830c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf((iWidth == 4) && 840c1bc742181ded4930842b46e9507372f0b1b963James Dong armNot4ByteAligned(pDstUp) && 850c1bc742181ded4930842b46e9507372f0b1b963James Dong armNot4ByteAligned(pDstDown), OMX_Sts_BadArgErr) 860c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf((iWidth == 8) && 870c1bc742181ded4930842b46e9507372f0b1b963James Dong armNot8ByteAligned(pDstUp) && 880c1bc742181ded4930842b46e9507372f0b1b963James Dong armNot8ByteAligned(pDstDown), OMX_Sts_BadArgErr) 890c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf((iWidth == 16) && 900c1bc742181ded4930842b46e9507372f0b1b963James Dong armNot16ByteAligned(pDstUp) && 910c1bc742181ded4930842b46e9507372f0b1b963James Dong armNot16ByteAligned(pDstDown), OMX_Sts_BadArgErr) 920c1bc742181ded4930842b46e9507372f0b1b963James Dong 930c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf((iHeight != 16) && (iHeight != 8)&& (iHeight != 4), OMX_Sts_BadArgErr) 940c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf((iWidth != 16) && (iWidth != 8)&& (iWidth != 4), OMX_Sts_BadArgErr) 950c1bc742181ded4930842b46e9507372f0b1b963James Dong 960c1bc742181ded4930842b46e9507372f0b1b963James Dong RetValue = armVCM4P10_InterpolateHalfVer_Luma( 970c1bc742181ded4930842b46e9507372f0b1b963James Dong pSrc - iSrcStep, 980c1bc742181ded4930842b46e9507372f0b1b963James Dong iSrcStep, 990c1bc742181ded4930842b46e9507372f0b1b963James Dong pDstUp, 1000c1bc742181ded4930842b46e9507372f0b1b963James Dong iDstStep, 1010c1bc742181ded4930842b46e9507372f0b1b963James Dong iWidth, 1020c1bc742181ded4930842b46e9507372f0b1b963James Dong iHeight); 1030c1bc742181ded4930842b46e9507372f0b1b963James Dong 1040c1bc742181ded4930842b46e9507372f0b1b963James Dong if (RetValue != OMX_Sts_NoErr) 1050c1bc742181ded4930842b46e9507372f0b1b963James Dong { 1060c1bc742181ded4930842b46e9507372f0b1b963James Dong return RetValue; 1070c1bc742181ded4930842b46e9507372f0b1b963James Dong } 1080c1bc742181ded4930842b46e9507372f0b1b963James Dong 1090c1bc742181ded4930842b46e9507372f0b1b963James Dong RetValue = armVCM4P10_InterpolateHalfVer_Luma( 1100c1bc742181ded4930842b46e9507372f0b1b963James Dong pSrc, 1110c1bc742181ded4930842b46e9507372f0b1b963James Dong iSrcStep, 1120c1bc742181ded4930842b46e9507372f0b1b963James Dong pDstDown, 1130c1bc742181ded4930842b46e9507372f0b1b963James Dong iDstStep, 1140c1bc742181ded4930842b46e9507372f0b1b963James Dong iWidth, 1150c1bc742181ded4930842b46e9507372f0b1b963James Dong iHeight); 1160c1bc742181ded4930842b46e9507372f0b1b963James Dong 1170c1bc742181ded4930842b46e9507372f0b1b963James Dong return RetValue; 1180c1bc742181ded4930842b46e9507372f0b1b963James Dong} 1190c1bc742181ded4930842b46e9507372f0b1b963James Dong 1200c1bc742181ded4930842b46e9507372f0b1b963James Dong/***************************************************************************** 1210c1bc742181ded4930842b46e9507372f0b1b963James Dong * END OF FILE 1220c1bc742181ded4930842b46e9507372f0b1b963James Dong *****************************************************************************/ 1230c1bc742181ded4930842b46e9507372f0b1b963James Dong 124