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