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: omxVCM4P2_TransRecBlockCoef_inter.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 * 270c1bc742181ded4930842b46e9507372f0b1b963James Dong * Description: 280c1bc742181ded4930842b46e9507372f0b1b963James Dong * Contains modules DCT->quant and reconstructing the inter texture data 290c1bc742181ded4930842b46e9507372f0b1b963James Dong * 300c1bc742181ded4930842b46e9507372f0b1b963James Dong */ 310c1bc742181ded4930842b46e9507372f0b1b963James Dong 320c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "omxtypes.h" 330c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "armOMX.h" 340c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "omxVC.h" 350c1bc742181ded4930842b46e9507372f0b1b963James Dong 360c1bc742181ded4930842b46e9507372f0b1b963James Dong#include "armCOMM.h" 370c1bc742181ded4930842b46e9507372f0b1b963James Dong 380c1bc742181ded4930842b46e9507372f0b1b963James Dong 390c1bc742181ded4930842b46e9507372f0b1b963James Dong/** 400c1bc742181ded4930842b46e9507372f0b1b963James Dong * Function: omxVCM4P2_TransRecBlockCoef_inter (6.2.4.4.5) 410c1bc742181ded4930842b46e9507372f0b1b963James Dong * 420c1bc742181ded4930842b46e9507372f0b1b963James Dong * Description: 430c1bc742181ded4930842b46e9507372f0b1b963James Dong * Implements DCT, and quantizes the DCT coefficients of the inter block 440c1bc742181ded4930842b46e9507372f0b1b963James Dong * while reconstructing the texture residual. There is no boundary check for 450c1bc742181ded4930842b46e9507372f0b1b963James Dong * the bit stream buffer. 460c1bc742181ded4930842b46e9507372f0b1b963James Dong * 470c1bc742181ded4930842b46e9507372f0b1b963James Dong * Input Arguments: 480c1bc742181ded4930842b46e9507372f0b1b963James Dong * 490c1bc742181ded4930842b46e9507372f0b1b963James Dong * pSrc -pointer to the residuals to be encoded; must be aligned on an 500c1bc742181ded4930842b46e9507372f0b1b963James Dong * 16-byte boundary. 510c1bc742181ded4930842b46e9507372f0b1b963James Dong * QP - quantization parameter. 520c1bc742181ded4930842b46e9507372f0b1b963James Dong * shortVideoHeader - binary flag indicating presence of short_video_header; 530c1bc742181ded4930842b46e9507372f0b1b963James Dong * shortVideoHeader==1 selects linear intra DC mode, and 540c1bc742181ded4930842b46e9507372f0b1b963James Dong * shortVideoHeader==0 selects non linear intra DC mode. 550c1bc742181ded4930842b46e9507372f0b1b963James Dong * 560c1bc742181ded4930842b46e9507372f0b1b963James Dong * Output Arguments: 570c1bc742181ded4930842b46e9507372f0b1b963James Dong * 580c1bc742181ded4930842b46e9507372f0b1b963James Dong * pDst - pointer to the quantized DCT coefficients buffer; must be aligned 590c1bc742181ded4930842b46e9507372f0b1b963James Dong * on a 16-byte boundary. 600c1bc742181ded4930842b46e9507372f0b1b963James Dong * pRec - pointer to the reconstructed texture residuals; must be aligned 610c1bc742181ded4930842b46e9507372f0b1b963James Dong * on a 16-byte boundary. 620c1bc742181ded4930842b46e9507372f0b1b963James Dong * 630c1bc742181ded4930842b46e9507372f0b1b963James Dong * Return Value: 640c1bc742181ded4930842b46e9507372f0b1b963James Dong * 650c1bc742181ded4930842b46e9507372f0b1b963James Dong * OMX_Sts_NoErr - no error 660c1bc742181ded4930842b46e9507372f0b1b963James Dong * OMX_Sts_BadArgErr - bad arguments: 670c1bc742181ded4930842b46e9507372f0b1b963James Dong * - At least one of the following pointers is either NULL or 680c1bc742181ded4930842b46e9507372f0b1b963James Dong * not 16-byte aligned: 690c1bc742181ded4930842b46e9507372f0b1b963James Dong * - pSrc 700c1bc742181ded4930842b46e9507372f0b1b963James Dong * - pDst 710c1bc742181ded4930842b46e9507372f0b1b963James Dong * - pRec 720c1bc742181ded4930842b46e9507372f0b1b963James Dong * - QP <= 0 or QP >= 32. 730c1bc742181ded4930842b46e9507372f0b1b963James Dong * 740c1bc742181ded4930842b46e9507372f0b1b963James Dong */ 750c1bc742181ded4930842b46e9507372f0b1b963James Dong 760c1bc742181ded4930842b46e9507372f0b1b963James DongOMXResult omxVCM4P2_TransRecBlockCoef_inter( 770c1bc742181ded4930842b46e9507372f0b1b963James Dong const OMX_S16 *pSrc, 780c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_S16 * pDst, 790c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_S16 * pRec, 800c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_U8 QP, 810c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_INT shortVideoHeader 820c1bc742181ded4930842b46e9507372f0b1b963James Dong) 830c1bc742181ded4930842b46e9507372f0b1b963James Dong{ 840c1bc742181ded4930842b46e9507372f0b1b963James Dong /* 64 elements are needed but to align it to 16 bytes need 850c1bc742181ded4930842b46e9507372f0b1b963James Dong 8 more elements of padding */ 860c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_S16 tempBuffer[72]; 870c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_S16 *pTempBuffer; 880c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_INT i; 890c1bc742181ded4930842b46e9507372f0b1b963James Dong 900c1bc742181ded4930842b46e9507372f0b1b963James Dong /* Aligning the local buffers */ 910c1bc742181ded4930842b46e9507372f0b1b963James Dong pTempBuffer = armAlignTo16Bytes(tempBuffer); 920c1bc742181ded4930842b46e9507372f0b1b963James Dong 930c1bc742181ded4930842b46e9507372f0b1b963James Dong /* Argument error checks */ 940c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf(pSrc == NULL, OMX_Sts_BadArgErr); 950c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf(pRec == NULL, OMX_Sts_BadArgErr); 960c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf(pDst == NULL, OMX_Sts_BadArgErr); 970c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf(!armIs16ByteAligned(pSrc), OMX_Sts_BadArgErr); 980c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf(!armIs16ByteAligned(pRec), OMX_Sts_BadArgErr); 990c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf(!armIs16ByteAligned(pDst), OMX_Sts_BadArgErr); 1000c1bc742181ded4930842b46e9507372f0b1b963James Dong armRetArgErrIf(((QP <= 0) || (QP >= 32)), OMX_Sts_BadArgErr); 1010c1bc742181ded4930842b46e9507372f0b1b963James Dong 1020c1bc742181ded4930842b46e9507372f0b1b963James Dong omxVCM4P2_DCT8x8blk (pSrc, pDst); 1030c1bc742181ded4930842b46e9507372f0b1b963James Dong omxVCM4P2_QuantInter_I( 1040c1bc742181ded4930842b46e9507372f0b1b963James Dong pDst, 1050c1bc742181ded4930842b46e9507372f0b1b963James Dong QP, 1060c1bc742181ded4930842b46e9507372f0b1b963James Dong shortVideoHeader); 1070c1bc742181ded4930842b46e9507372f0b1b963James Dong 1080c1bc742181ded4930842b46e9507372f0b1b963James Dong for (i = 0; i < 64; i++) 1090c1bc742181ded4930842b46e9507372f0b1b963James Dong { 1100c1bc742181ded4930842b46e9507372f0b1b963James Dong pTempBuffer[i] = pDst[i]; 1110c1bc742181ded4930842b46e9507372f0b1b963James Dong } 1120c1bc742181ded4930842b46e9507372f0b1b963James Dong 1130c1bc742181ded4930842b46e9507372f0b1b963James Dong omxVCM4P2_QuantInvInter_I( 1140c1bc742181ded4930842b46e9507372f0b1b963James Dong pTempBuffer, 1150c1bc742181ded4930842b46e9507372f0b1b963James Dong QP); 1160c1bc742181ded4930842b46e9507372f0b1b963James Dong omxVCM4P2_IDCT8x8blk (pTempBuffer, pRec); 1170c1bc742181ded4930842b46e9507372f0b1b963James Dong 1180c1bc742181ded4930842b46e9507372f0b1b963James Dong return OMX_Sts_NoErr; 1190c1bc742181ded4930842b46e9507372f0b1b963James Dong} 1200c1bc742181ded4930842b46e9507372f0b1b963James Dong 1210c1bc742181ded4930842b46e9507372f0b1b963James Dong/* End of file */ 1220c1bc742181ded4930842b46e9507372f0b1b963James Dong 1230c1bc742181ded4930842b46e9507372f0b1b963James Dong 124