178e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar/* 278e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * Copyright (C) 2007-2008 ARM Limited 378e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * 478e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * Licensed under the Apache License, Version 2.0 (the "License"); 578e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * you may not use this file except in compliance with the License. 678e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * You may obtain a copy of the License at 778e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * 878e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * http://www.apache.org/licenses/LICENSE-2.0 978e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * 1078e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * Unless required by applicable law or agreed to in writing, software 1178e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * distributed under the License is distributed on an "AS IS" BASIS, 1278e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1378e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * See the License for the specific language governing permissions and 1478e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * limitations under the License. 1578e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * 1678e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar */ 170c1bc742181ded4930842b46e9507372f0b1b963James Dong/** 180c1bc742181ded4930842b46e9507372f0b1b963James Dong * 190c1bc742181ded4930842b46e9507372f0b1b963James Dong * File Name: omxVCM4P10_InterpolateHalfHor_Luma.c 200c1bc742181ded4930842b46e9507372f0b1b963James Dong * OpenMAX DL: v1.0.2 210c1bc742181ded4930842b46e9507372f0b1b963James Dong * Revision: 9641 220c1bc742181ded4930842b46e9507372f0b1b963James Dong * Date: Thursday, February 7, 2008 230c1bc742181ded4930842b46e9507372f0b1b963James Dong * 240c1bc742181ded4930842b46e9507372f0b1b963James Dong * 250c1bc742181ded4930842b46e9507372f0b1b963James Dong * 260c1bc742181ded4930842b46e9507372f0b1b963James Dong * Description: 270c1bc742181ded4930842b46e9507372f0b1b963James Dong * This function will calculate Half horizontal luma interpolation 280c1bc742181ded4930842b46e9507372f0b1b963James Dong * 290c1bc742181ded4930842b46e9507372f0b1b963James Dong */ 300c1bc742181ded4930842b46e9507372f0b1b963James Dong 310c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "omxtypes.h" 320c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "armOMX.h" 330c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "omxVC.h" 340c1bc742181ded4930842b46e9507372f0b1b963James Dong 350c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "armCOMM.h" 360c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "armVC.h" 370c1bc742181ded4930842b46e9507372f0b1b963James Dong 380c1bc742181ded4930842b46e9507372f0b1b963James Dong/** 390c1bc742181ded4930842b46e9507372f0b1b963James Dong * Function: omxVCM4P10_InterpolateHalfHor_Luma (6.3.5.5.1) 400c1bc742181ded4930842b46e9507372f0b1b963James Dong * 410c1bc742181ded4930842b46e9507372f0b1b963James Dong * Description: 420c1bc742181ded4930842b46e9507372f0b1b963James Dong * This function performs interpolation for two horizontal 1/2-pel positions 430c1bc742181ded4930842b46e9507372f0b1b963James Dong * (-1/2,0) and (1/2, 0) - around a full-pel position. 440c1bc742181ded4930842b46e9507372f0b1b963James Dong * 450c1bc742181ded4930842b46e9507372f0b1b963James Dong * Input Arguments: 460c1bc742181ded4930842b46e9507372f0b1b963James Dong * 470c1bc742181ded4930842b46e9507372f0b1b963James Dong * pSrc - Pointer to the top-left corner of the block used to interpolate in 480c1bc742181ded4930842b46e9507372f0b1b963James Dong * the reconstruction frame plane. 490c1bc742181ded4930842b46e9507372f0b1b963James Dong * iSrcStep - Step of the source buffer. 500c1bc742181ded4930842b46e9507372f0b1b963James Dong * iDstStep - Step of the destination(interpolation) buffer; must be a 510c1bc742181ded4930842b46e9507372f0b1b963James Dong * multiple of iWidth. 520c1bc742181ded4930842b46e9507372f0b1b963James Dong * iWidth - Width of the current block; must be equal to either 4, 8, or 16 530c1bc742181ded4930842b46e9507372f0b1b963James Dong * iHeight - Height of the current block; must be equal to 4, 8, or 16 540c1bc742181ded4930842b46e9507372f0b1b963James Dong * 550c1bc742181ded4930842b46e9507372f0b1b963James Dong * Output Arguments: 560c1bc742181ded4930842b46e9507372f0b1b963James Dong * 570c1bc742181ded4930842b46e9507372f0b1b963James Dong * pDstLeft -Pointer to the interpolation buffer of the left -pel position 580c1bc742181ded4930842b46e9507372f0b1b963James Dong * (-1/2, 0) 590c1bc742181ded4930842b46e9507372f0b1b963James Dong * If iWidth==4, 4-byte alignment required. 600c1bc742181ded4930842b46e9507372f0b1b963James Dong * If iWidth==8, 8-byte alignment required. 610c1bc742181ded4930842b46e9507372f0b1b963James Dong * If iWidth==16, 16-byte alignment required. 620c1bc742181ded4930842b46e9507372f0b1b963James Dong * pDstRight -Pointer to the interpolation buffer of the right -pel 630c1bc742181ded4930842b46e9507372f0b1b963James Dong * position (1/2, 0) 640c1bc742181ded4930842b46e9507372f0b1b963James Dong * If iWidth==4, 4-byte alignment required. 650c1bc742181ded4930842b46e9507372f0b1b963James Dong * If iWidth==8, 8-byte alignment required. 660c1bc742181ded4930842b46e9507372f0b1b963James Dong * If iWidth==16, 16-byte alignment required. 670c1bc742181ded4930842b46e9507372f0b1b963James Dong * 680c1bc742181ded4930842b46e9507372f0b1b963James Dong * Return Value: 690c1bc742181ded4930842b46e9507372f0b1b963James Dong * 700c1bc742181ded4930842b46e9507372f0b1b963James Dong * OMX_Sts_NoErr - no error 710c1bc742181ded4930842b46e9507372f0b1b963James Dong * OMX_Sts_BadArgErr - bad arguments; returned if any of the following 720c1bc742181ded4930842b46e9507372f0b1b963James Dong * conditions are true: 730c1bc742181ded4930842b46e9507372f0b1b963James Dong * - at least one of the following pointers is NULL: 740c1bc742181ded4930842b46e9507372f0b1b963James Dong * pSrc, pDstLeft, or pDstRight 750c1bc742181ded4930842b46e9507372f0b1b963James Dong * - iWidth or iHeight have values other than 4, 8, or 16 760c1bc742181ded4930842b46e9507372f0b1b963James Dong * - iWidth==4 but pDstLeft and/or pDstRight is/are not aligned on a 4-byte boundary 770c1bc742181ded4930842b46e9507372f0b1b963James Dong * - iWidth==8 but pDstLeft and/or pDstRight is/are not aligned on a 8-byte boundary 780c1bc742181ded4930842b46e9507372f0b1b963James Dong * - iWidth==16 but pDstLeft and/or pDstRight is/are not aligned on a 16-byte boundary 790c1bc742181ded4930842b46e9507372f0b1b963James Dong * - any alignment restrictions are violated 800c1bc742181ded4930842b46e9507372f0b1b963James Dong * 810c1bc742181ded4930842b46e9507372f0b1b963James Dong */ 820c1bc742181ded4930842b46e9507372f0b1b963James Dong 830c1bc742181ded4930842b46e9507372f0b1b963James DongOMXResult omxVCM4P10_InterpolateHalfHor_Luma( 840c1bc742181ded4930842b46e9507372f0b1b963James Dong const OMX_U8* pSrc, 850c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U32 iSrcStep, 860c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U8* pDstLeft, 870c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U8* pDstRight, 880c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U32 iDstStep, 890c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U32 iWidth, 900c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U32 iHeight 910c1bc742181ded4930842b46e9507372f0b1b963James Dong) 920c1bc742181ded4930842b46e9507372f0b1b963James Dong{ 930c1bc742181ded4930842b46e9507372f0b1b963James Dong OMXResult RetValue; 940c1bc742181ded4930842b46e9507372f0b1b963James Dong 950c1bc742181ded4930842b46e9507372f0b1b963James Dong /* check for argument error */ 960c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf(pSrc == NULL, OMX_Sts_BadArgErr) 970c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf(pDstLeft == NULL, OMX_Sts_BadArgErr) 980c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf(pDstRight == NULL, OMX_Sts_BadArgErr) 990c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf((iWidth == 4) && 1000c1bc742181ded4930842b46e9507372f0b1b963James Dong armNot4ByteAligned(pDstLeft) && 1010c1bc742181ded4930842b46e9507372f0b1b963James Dong armNot4ByteAligned(pDstRight), OMX_Sts_BadArgErr) 1020c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf((iWidth == 8) && 1030c1bc742181ded4930842b46e9507372f0b1b963James Dong armNot8ByteAligned(pDstLeft) && 1040c1bc742181ded4930842b46e9507372f0b1b963James Dong armNot8ByteAligned(pDstRight), OMX_Sts_BadArgErr) 1050c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf((iWidth == 16) && 1060c1bc742181ded4930842b46e9507372f0b1b963James Dong armNot16ByteAligned(pDstLeft) && 1070c1bc742181ded4930842b46e9507372f0b1b963James Dong armNot16ByteAligned(pDstRight), OMX_Sts_BadArgErr) 1080c1bc742181ded4930842b46e9507372f0b1b963James Dong 1090c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf((iHeight != 16) && (iHeight != 8)&& (iHeight != 4), OMX_Sts_BadArgErr) 1100c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf((iWidth != 16) && (iWidth != 8)&& (iWidth != 4), OMX_Sts_BadArgErr) 1110c1bc742181ded4930842b46e9507372f0b1b963James Dong 1120c1bc742181ded4930842b46e9507372f0b1b963James Dong RetValue = armVCM4P10_InterpolateHalfHor_Luma ( 1130c1bc742181ded4930842b46e9507372f0b1b963James Dong pSrc - 1, 1140c1bc742181ded4930842b46e9507372f0b1b963James Dong iSrcStep, 1150c1bc742181ded4930842b46e9507372f0b1b963James Dong pDstLeft, 1160c1bc742181ded4930842b46e9507372f0b1b963James Dong iDstStep, 1170c1bc742181ded4930842b46e9507372f0b1b963James Dong iWidth, 1180c1bc742181ded4930842b46e9507372f0b1b963James Dong iHeight); 1190c1bc742181ded4930842b46e9507372f0b1b963James Dong 1200c1bc742181ded4930842b46e9507372f0b1b963James Dong if (RetValue != OMX_Sts_NoErr) 1210c1bc742181ded4930842b46e9507372f0b1b963James Dong { 1220c1bc742181ded4930842b46e9507372f0b1b963James Dong return RetValue; 1230c1bc742181ded4930842b46e9507372f0b1b963James Dong } 1240c1bc742181ded4930842b46e9507372f0b1b963James Dong 1250c1bc742181ded4930842b46e9507372f0b1b963James Dong RetValue = armVCM4P10_InterpolateHalfHor_Luma ( 1260c1bc742181ded4930842b46e9507372f0b1b963James Dong pSrc, 1270c1bc742181ded4930842b46e9507372f0b1b963James Dong iSrcStep, 1280c1bc742181ded4930842b46e9507372f0b1b963James Dong pDstRight, 1290c1bc742181ded4930842b46e9507372f0b1b963James Dong iDstStep, 1300c1bc742181ded4930842b46e9507372f0b1b963James Dong iWidth, 1310c1bc742181ded4930842b46e9507372f0b1b963James Dong iHeight); 1320c1bc742181ded4930842b46e9507372f0b1b963James Dong 1330c1bc742181ded4930842b46e9507372f0b1b963James Dong return RetValue; 1340c1bc742181ded4930842b46e9507372f0b1b963James Dong} 1350c1bc742181ded4930842b46e9507372f0b1b963James Dong 1360c1bc742181ded4930842b46e9507372f0b1b963James Dong/***************************************************************************** 1370c1bc742181ded4930842b46e9507372f0b1b963James Dong * END OF FILE 1380c1bc742181ded4930842b46e9507372f0b1b963James Dong *****************************************************************************/ 1390c1bc742181ded4930842b46e9507372f0b1b963James Dong 140