📄 omxvcm4p2_quantinvintra_i.c
字号:
/** * * File Name: omxVCM4P2_QuantInvIntra_I.c * OpenMAX DL: v1.0.2 * Revision: 10586 * Date: Wednesday, March 5, 2008 * * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. * * * * Description: * Contains modules for intra inverse Quantization * */ #include "omxtypes.h"#include "armOMX.h"#include "omxVC.h"#include "armCOMM.h"/** * Function: omxVCM4P2_QuantInvIntra_I (6.2.5.3.2) * * Description: * Performs the second inverse quantization mode on an intra/inter coded * block. Supports bits_per_pixel = 8. The output coefficients are clipped to * the range [-2048, 2047]. * * Input Arguments: * * pSrcDst - pointer to the input (quantized) intra/inter block; must be * aligned on a 16-byte boundary. * QP - quantization parameter (quantizer_scale) * videoComp - video component type of the current block. Takes one of the * following flags: OMX_VC_LUMINANCE, OMX_VC_CHROMINANCE (intra * version only). * shortVideoHeader - binary flag indicating presence of short_video_header * (intra version only). * * Output Arguments: * * pSrcDst - pointer to the output (dequantized) intra/inter block * * Return Value: * * OMX_Sts_NoErr - no error * OMX_Sts_BadArgErr - bad arguments; one or more of the following is * true: * - pSrcDst is NULL * - QP <= 0 or QP >=31 * - videoComp is neither OMX_VC_LUMINANCE nor OMX_VC_CHROMINANCE. * */OMXResult omxVCM4P2_QuantInvIntra_I( OMX_S16 * pSrcDst, OMX_INT QP, OMXVCM4P2VideoComponent videoComp, OMX_INT shortVideoHeader){ /* Initialized to remove compilation error */ OMX_INT dcScaler = 0, coeffCount, Sign; /* Argument error checks */ armRetArgErrIf(pSrcDst == NULL, OMX_Sts_BadArgErr); armRetArgErrIf(((QP <= 0) || (QP >= 32)), OMX_Sts_BadArgErr); armRetArgErrIf(((videoComp != OMX_VC_LUMINANCE) && (videoComp != OMX_VC_CHROMINANCE)), OMX_Sts_BadArgErr); /* Calculate the DC scaler value */ /* linear intra DC mode */ if(shortVideoHeader) { dcScaler = 8; } /* nonlinear intra DC mode */ else { if (videoComp == OMX_VC_LUMINANCE) { if (QP >= 1 && QP <= 4) { dcScaler = 8; } else if (QP >= 5 && QP <= 8) { dcScaler = 2 * QP; } else if (QP >= 9 && QP <= 24) { dcScaler = QP + 8; } else { dcScaler = (2 * QP) - 16; } } else if (videoComp == OMX_VC_CHROMINANCE) { if (QP >= 1 && QP <= 4) { dcScaler = 8; } else if (QP >= 5 && QP <= 24) { dcScaler = (QP + 13)/2; } else { dcScaler = QP - 6; } } } /* Dequant the DC value, this applies to both the methods */ pSrcDst[0] = pSrcDst[0] * dcScaler; /* Saturate */ pSrcDst[0] = armClip (-2048, 2047, pSrcDst[0]); /* Second Inverse quantisation method */ for (coeffCount = 1; coeffCount < 64; coeffCount++) { /* check sign */ Sign = armSignCheck (pSrcDst[coeffCount]); if (QP & 0x1) { pSrcDst[coeffCount] = (2* armAbs(pSrcDst[coeffCount]) + 1) * QP; pSrcDst[coeffCount] *= Sign; } else { pSrcDst[coeffCount] = (2* armAbs(pSrcDst[coeffCount]) + 1) * QP - 1; pSrcDst[coeffCount] *= Sign; } /* Saturate */ pSrcDst[coeffCount] = armClip (-2048, 2047, pSrcDst[coeffCount]); } return OMX_Sts_NoErr;}/* End of file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -