113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi/** 213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * File Name: omxVCM4P2_TransRecBlockCoef_inter.c 413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * OpenMAX DL: v1.0.2 513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * Revision: 9641 613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * Date: Thursday, February 7, 2008 713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. 913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 1013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 1113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 1213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * Description: 1313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * Contains modules DCT->quant and reconstructing the inter texture data 1413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 1513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi */ 1613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 1713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi#include "omxtypes.h" 1813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi#include "armOMX.h" 1913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi#include "omxVC.h" 2013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 214ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi#include "armCOMM.h" 224ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 234ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 2413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi/** 2513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * Function: omxVCM4P2_TransRecBlockCoef_inter (6.2.4.4.5) 2613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 2713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * Description: 2813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * Implements DCT, and quantizes the DCT coefficients of the inter block 2913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * while reconstructing the texture residual. There is no boundary check for 3013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * the bit stream buffer. 3113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 3213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * Input Arguments: 3337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi * 341a9c2615d0933d183fcb1b9e34ec8f0da2a85153Glenn Kasten * pSrc -pointer to the residuals to be encoded; must be aligned on an 354ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi * 16-byte boundary. 364ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi * QP - quantization parameter. 371a9c2615d0933d183fcb1b9e34ec8f0da2a85153Glenn Kasten * shortVideoHeader - binary flag indicating presence of short_video_header; 384ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi * shortVideoHeader==1 selects linear intra DC mode, and 394ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi * shortVideoHeader==0 selects non linear intra DC mode. 404ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi * 414ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi * Output Arguments: 4213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 43e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi * pDst - pointer to the quantized DCT coefficients buffer; must be aligned 4413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * on a 16-byte boundary. 4513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * pRec - pointer to the reconstructed texture residuals; must be aligned 4613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * on a 16-byte boundary. 4737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi * 4837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi * Return Value: 4937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi * 5013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * OMX_Sts_NoErr - no error 5113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * OMX_Sts_BadArgErr - bad arguments: 5213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * - At least one of the following pointers is either NULL or 5313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * not 16-byte aligned: 54e31a69fcbe27894a597176d05a08e04c06092021Glenn Kasten * - pSrc 5513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * - pDst 5613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * - pRec 5713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * - QP <= 0 or QP >= 32. 5813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 5913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi */ 60e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi 6113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel TriviOMXResult omxVCM4P2_TransRecBlockCoef_inter( 62e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi const OMX_S16 *pSrc, 63e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi OMX_S16 * pDst, 64e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi OMX_S16 * pRec, 65e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi OMX_U8 QP, 66e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi OMX_INT shortVideoHeader 6713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi) 6813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi{ 6913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi /* 64 elements are needed but to align it to 16 bytes need 7013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 8 more elements of padding */ 7113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi OMX_S16 tempBuffer[72]; 7213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi OMX_S16 *pTempBuffer; 73e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi OMX_INT i; 74e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi 75e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi /* Aligning the local buffers */ 76e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi pTempBuffer = armAlignTo16Bytes(tempBuffer); 77e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi 78e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi /* Argument error checks */ 79e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi armRetArgErrIf(pSrc == NULL, OMX_Sts_BadArgErr); 80e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi armRetArgErrIf(pRec == NULL, OMX_Sts_BadArgErr); 81e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi armRetArgErrIf(pDst == NULL, OMX_Sts_BadArgErr); 82e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi armRetArgErrIf(!armIs16ByteAligned(pSrc), OMX_Sts_BadArgErr); 83e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi armRetArgErrIf(!armIs16ByteAligned(pRec), OMX_Sts_BadArgErr); 84e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi armRetArgErrIf(!armIs16ByteAligned(pDst), OMX_Sts_BadArgErr); 85e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi armRetArgErrIf(((QP <= 0) || (QP >= 32)), OMX_Sts_BadArgErr); 8613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 87b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten omxVCM4P2_DCT8x8blk (pSrc, pDst); 8813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi omxVCM4P2_QuantInter_I( 8913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi pDst, 9013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi QP, 9113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi shortVideoHeader); 9213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 9313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi for (i = 0; i < 64; i++) 9413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi { 9513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi pTempBuffer[i] = pDst[i]; 9613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 97b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten 9813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi omxVCM4P2_QuantInvInter_I( 9913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi pTempBuffer, 10013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi QP); 10113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi omxVCM4P2_IDCT8x8blk (pTempBuffer, pRec); 10213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 10313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi return OMX_Sts_NoErr; 10413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 10513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 10613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi/* End of file */ 10713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 10813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 10913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi