| /** |
| * |
| * File Name: omxVCM4P2_QuantInter_I.c |
| * OpenMAX DL: v1.0.2 |
| * Revision: 9641 |
| * Date: Thursday, February 7, 2008 |
| * |
| * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. |
| * |
| * |
| * |
| * Description: |
| * Contains modules for inter Quantization |
| * |
| */ |
| |
| #include "omxtypes.h" |
| #include "armOMX.h" |
| #include "omxVC.h" |
| |
| #include "armCOMM.h" |
| |
| /** |
| * Function: omxVCM4P2_QuantInter_I (6.2.4.4.3) |
| * |
| * Description: |
| * Performs quantization on an inter coefficient block; supports |
| * bits_per_pixel == 8. |
| * |
| * Input Arguments: |
| * |
| * pSrcDst - pointer to the input inter block coefficients; must be aligned |
| * on a 16-byte boundary. |
| * QP - quantization parameter (quantizer_scale) |
| * shortVideoHeader - binary flag indicating presence of short_video_header; |
| * shortVideoHeader==1 selects linear intra DC mode, and |
| * shortVideoHeader==0 selects non linear intra DC mode. |
| * |
| * Output Arguments: |
| * |
| * pSrcDst - pointer to the output (quantized) interblock coefficients. |
| * When shortVideoHeader==1, AC coefficients are saturated on the |
| * interval [-127, 127], and DC coefficients are saturated on the |
| * interval [1, 254]. When shortVideoHeader==0, AC coefficients |
| * are saturated on the interval [-2047, 2047]. |
| * |
| * Return Value: |
| * |
| * OMX_Sts_NoErr - no error |
| * OMX_Sts_BadArgErr - bad arguments: |
| * - pSrcDst is NULL. |
| * - QP <= 0 or QP >= 32. |
| * |
| */ |
| |
| OMXResult omxVCM4P2_QuantInter_I( |
| OMX_S16 * pSrcDst, |
| OMX_U8 QP, |
| OMX_INT shortVideoHeader |
| ) |
| { |
| |
| /* Definitions and Initializations*/ |
| OMX_INT coeffCount; |
| OMX_INT fSign; |
| OMX_INT maxClpAC = 0, minClpAC = 0; |
| OMX_INT maxClpDC = 0, minClpDC = 0; |
| |
| /* Argument error checks */ |
| armRetArgErrIf(pSrcDst == NULL, OMX_Sts_BadArgErr); |
| armRetArgErrIf(((QP <= 0) || (QP >= 32)), OMX_Sts_BadArgErr); |
| /* One argument check is delayed until we have ascertained that */ |
| /* pQMatrix is not NULL. */ |
| |
| /* Set the Clip Range based on SVH on/off */ |
| if(shortVideoHeader == 1) |
| { |
| maxClpDC = 254; |
| minClpDC = 1; |
| maxClpAC = 127; |
| minClpAC = -127; |
| } |
| else |
| { |
| maxClpDC = 2047; |
| minClpDC = -2047; |
| maxClpAC = 2047; |
| minClpAC = -2047; |
| } |
| |
| /* Second Inverse quantisation method */ |
| for (coeffCount = 0; coeffCount < 64; coeffCount++) |
| { |
| fSign = armSignCheck (pSrcDst[coeffCount]); |
| pSrcDst[coeffCount] = (armAbs(pSrcDst[coeffCount]) |
| - (QP/2))/(2 * QP); |
| pSrcDst[coeffCount] *= fSign; |
| |
| /* Clip */ |
| if (coeffCount == 0) |
| { |
| pSrcDst[coeffCount] = |
| (OMX_S16) armClip (minClpDC, maxClpDC, pSrcDst[coeffCount]); |
| } |
| else |
| { |
| pSrcDst[coeffCount] = |
| (OMX_S16) armClip (minClpAC, maxClpAC, pSrcDst[coeffCount]); |
| } |
| } |
| return OMX_Sts_NoErr; |
| |
| } |
| |
| /* End of file */ |
| |
| |