omxVCM4P10_InterpolateHalfVer_Luma.c revision 78e52bfac041d71ce53b5b13c2abf78af742b09d
172e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov/* 272e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * Copyright (C) 2007-2008 ARM Limited 372e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * 472e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 572e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * you may not use this file except in compliance with the License. 672e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * You may obtain a copy of the License at 772e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * 872e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 972e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * 1072e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 1172e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 1272e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1372e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * See the License for the specific language governing permissions and 1472e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * limitations under the License. 1572e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * 1672e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov */ 1772e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov/** 1872e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * 1972e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * File Name: omxVCM4P10_InterpolateHalfVer_Luma.c 2072e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * OpenMAX DL: v1.0.2 2172e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * Revision: 9641 2272e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * Date: Thursday, February 7, 2008 23ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki * 24ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki * 2572e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * 2672e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * Description: 2772e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * This function will calculate SAD for 4x4 blocks 2872e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * 2972e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov */ 3072e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov 3109ae48b82b17e24016b14a1ab64706222ab1071fDmitri Plotnikov#include "omxtypes.h" 3272e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov#include "armOMX.h" 3372e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov#include "omxVC.h" 3472e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov 3572e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov#include "armCOMM.h" 3685077339f2e0c6f21fd92fb8df335f3aae004fbaDave Santoro#include "armVC.h" 37ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki 3872e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov 3938210445730ee04c351c7cc1b3800cfe23e34325Makoto Onuki/** 40e0465a7fce448e4f55fff30e04e946b9a3572737Makoto Onuki * Function: omxVCM4P10_InterpolateHalfVer_Luma (6.3.5.5.2) 4138210445730ee04c351c7cc1b3800cfe23e34325Makoto Onuki * 4238210445730ee04c351c7cc1b3800cfe23e34325Makoto Onuki * Description: 4372e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * This function performs interpolation for two vertical 1/2-pel positions - 4472e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * (0, -1/2) and (0, 1/2) - around a full-pel position. 45ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki * 46ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki * Input Arguments: 47ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki * 48ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki * pSrc - Pointer to top-left corner of block used to interpolate in the 4972e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * reconstructed frame plane 5085077339f2e0c6f21fd92fb8df335f3aae004fbaDave Santoro * iSrcStep - Step of the source buffer. 5172e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * iDstStep - Step of the destination (interpolation) buffer; must be a 52ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki * multiple of iWidth. 5372e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * iWidth - Width of the current block; must be equal to either 4, 8, or 16 5472e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * iHeight - Height of the current block; must be equal to either 4, 8, or 16 5572e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * 5672e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * Output Arguments: 5772e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * 5872e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * pDstUp -Pointer to the interpolation buffer of the -pel position above 5972e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * the current full-pel position (0, -1/2) 6072e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * If iWidth==4, 4-byte alignment required. 6172e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * If iWidth==8, 8-byte alignment required. 6272e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * If iWidth==16, 16-byte alignment required. 6372e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * pDstDown -Pointer to the interpolation buffer of the -pel position below 6472e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * the current full-pel position (0, 1/2) 6572e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * If iWidth==4, 4-byte alignment required. 6672e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * If iWidth==8, 8-byte alignment required. 676800627f331da6be1ea7cc82202eb6d94588c44fDianne Hackborn * If iWidth==16, 16-byte alignment required. 6872e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * 6972e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * Return Value: 7072e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * 7172e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * OMX_Sts_NoErr - no error 7272e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * OMX_Sts_BadArgErr - bad arguments; returned if any of the following 7372e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * conditions are true: 7472e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * - at least one of the following pointers is NULL: 75994c32a995a85937faf59e37a9fc88b526470d7dDmitri Plotnikov * pSrc, pDstUp, or pDstDown 76994c32a995a85937faf59e37a9fc88b526470d7dDmitri Plotnikov * - iWidth or iHeight have values other than 4, 8, or 16 7772e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * - iWidth==4 but pDstUp and/or pDstDown is/are not aligned on a 4-byte boundary 7872e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * - iWidth==8 but pDstUp and/or pDstDown is/are not aligned on a 8-byte boundary 7972e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * - iWidth==16 but pDstUp and/or pDstDown is/are not aligned on a 16-byte boundary 8072e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov * 8172e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov */ 8272e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov OMXResult omxVCM4P10_InterpolateHalfVer_Luma( 8372e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov const OMX_U8* pSrc, 8472e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov OMX_U32 iSrcStep, 8572e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov OMX_U8* pDstUp, 8637f0bdbb0a99b12abcc319f49a2caa5ab648add0Daisuke Miyakawa OMX_U8* pDstDown, 8737f0bdbb0a99b12abcc319f49a2caa5ab648add0Daisuke Miyakawa OMX_U32 iDstStep, 8872e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov OMX_U32 iWidth, 8972e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov OMX_U32 iHeight 9072e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov) 9172e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov{ 9272e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov OMXResult RetValue; 9372e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov 9472e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov /* check for argument error */ 9572e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov armRetArgErrIf(pSrc == NULL, OMX_Sts_BadArgErr) 9672e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov armRetArgErrIf(pDstUp == NULL, OMX_Sts_BadArgErr) 9772e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov armRetArgErrIf(pDstDown == NULL, OMX_Sts_BadArgErr) 9872e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov armRetArgErrIf((iWidth == 4) && 9972e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov armNot4ByteAligned(pDstUp) && 10072e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov armNot4ByteAligned(pDstDown), OMX_Sts_BadArgErr) 10172e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov armRetArgErrIf((iWidth == 8) && 10209ae48b82b17e24016b14a1ab64706222ab1071fDmitri Plotnikov armNot8ByteAligned(pDstUp) && 10309ae48b82b17e24016b14a1ab64706222ab1071fDmitri Plotnikov armNot8ByteAligned(pDstDown), OMX_Sts_BadArgErr) 10409ae48b82b17e24016b14a1ab64706222ab1071fDmitri Plotnikov armRetArgErrIf((iWidth == 16) && 10572e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov armNot16ByteAligned(pDstUp) && 10672e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov armNot16ByteAligned(pDstDown), OMX_Sts_BadArgErr) 10772e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov 10872e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov armRetArgErrIf((iHeight != 16) && (iHeight != 8)&& (iHeight != 4), OMX_Sts_BadArgErr) 10972e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov armRetArgErrIf((iWidth != 16) && (iWidth != 8)&& (iWidth != 4), OMX_Sts_BadArgErr) 11072e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov 11172e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov RetValue = armVCM4P10_InterpolateHalfVer_Luma( 11272e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov pSrc - iSrcStep, 11372e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov iSrcStep, 11472e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov pDstUp, 11572e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov iDstStep, 11672e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov iWidth, 117ed78fd6df5e9f3a2d572162e5d374d1f4a625bddDmitri Plotnikov iHeight); 11872e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov 11972e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov if (RetValue != OMX_Sts_NoErr) 12072e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov { 12172e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov return RetValue; 12272e3003a810fb4793a1513d17a40f8ab83d7d0afDmitri Plotnikov } 123ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki 124ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki RetValue = armVCM4P10_InterpolateHalfVer_Luma( 125ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki pSrc, 1266522ca932caf4a4921115a2a3d13068c2357084cMakoto Onuki iSrcStep, 1276522ca932caf4a4921115a2a3d13068c2357084cMakoto Onuki pDstDown, 1286522ca932caf4a4921115a2a3d13068c2357084cMakoto Onuki iDstStep, 129ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki iWidth, 130ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki iHeight); 131ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki 132ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki return RetValue; 133ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki} 134ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki 135ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki/***************************************************************************** 136ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki * END OF FILE 137ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki *****************************************************************************/ 138ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki 139ac6f0b8a92fccb3611a7841d0f04e4ac24a58c91Makoto Onuki