⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 armvcm4p2_putvlcbits.c

📁 The OpenMAX DL (Development Layer) APIs contain a comprehensive set of audio, video, signal processi
💻 C
字号:
/** *  * File Name:  armVCM4P2_PutVLCBits.c * OpenMAX DL: v1.0.2 * Revision:   10586 * Date:       Wednesday, March 5, 2008 *  * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. *  *  *  * Description: * Contains module for VLC put bits to bitstream  * */ #include "omxtypes.h"#include "armOMX.h"#include "armVC.h"#include "armCOMM.h"#include "armCOMM_Bitstream.h"#include "armVCM4P2_ZigZag_Tables.h"#include "armVCM4P2_Huff_Tables_VLC.h" /** * Function: armVCM4P2_PutVLCBits * * Description: * Checks the type of Escape Mode and put encoded bits for  * quantized DCT coefficients. * * Remarks: * * Parameters: * [in]	 ppBitStream      pointer to the pointer to the current byte in *						  the bit stream * [in]	 pBitOffset       pointer to the bit position in the byte pointed *                        by *ppBitStream. Valid within 0 to 7 * [in] shortVideoHeader binary flag indicating presence of short_video_header; escape modes 0-3 are used if shortVideoHeader==0, *                           and escape mode 4 is used when shortVideoHeader==1. * [in]  start            start indicates whether the encoding begins with  *                        0th element or 1st. * [in]  maxStoreRunL0    Max store possible (considering last and inter/intra) *                        for last = 0 * [in]  maxStoreRunL1    Max store possible (considering last and inter/intra) *                        for last = 1 * [in]  maxRunForMultipleEntriesL0  *                        The run value after which level  *                        will be equal to 1:  *                        (considering last and inter/intra status) for last = 0 * [in]  maxRunForMultipleEntriesL1  *                        The run value after which level  *                        will be equal to 1:  *                        (considering last and inter/intra status) for last = 1 * [in]  pRunIndexTableL0 Run Index table defined in  *                        armVCM4P2_Huff_Tables_VLC.c for last == 0 * [in]  pVlcTableL0      VLC table for last == 0 * [in]  pRunIndexTableL1 Run Index table defined in  *                        armVCM4P2_Huff_Tables_VLC.c for last == 1 * [in]  pVlcTableL1      VLC table for last == 1 * [in]  pLMAXTableL0     Level MAX table defined in  *                        armVCM4P2_Huff_Tables_VLC.c for last == 0 * [in]  pLMAXTableL1     Level MAX table defined in  *                        armVCM4P2_Huff_Tables_VLC.c for last == 1 * [in]  pRMAXTableL0     Run MAX table defined in  *                        armVCM4P2_Huff_Tables_VLC.c for last == 0 * [in]  pRMAXTableL1     Run MAX table defined in  *                        armVCM4P2_Huff_Tables_VLC.c for last == 1 * [out] pQDctBlkCoef     pointer to the quantized DCT coefficient * [out] ppBitStream      *ppBitStream is updated after the block is encoded *                        so that it points to the current byte in the bit *                        stream buffer. * [out] pBitOffset       *pBitOffset is updated so that it points to the *                        current bit position in the byte pointed by *                        *ppBitStream. * * Return Value: * Standard OMXResult result. See enumeration for possible result codes. * */OMXResult armVCM4P2_PutVLCBits (              OMX_U8 **ppBitStream,              OMX_INT * pBitOffset,              const OMX_S16 *pQDctBlkCoef,              OMX_INT shortVideoHeader,              OMX_U8 start,              OMX_U8 maxStoreRunL0,              OMX_U8 maxStoreRunL1,              OMX_U8  maxRunForMultipleEntriesL0,              OMX_U8  maxRunForMultipleEntriesL1,              const OMX_U8  * pRunIndexTableL0,              const ARM_VLC32 *pVlcTableL0,			  const OMX_U8  * pRunIndexTableL1,              const ARM_VLC32 *pVlcTableL1,              const OMX_U8  * pLMAXTableL0,              const OMX_U8  * pLMAXTableL1,              const OMX_U8  * pRMAXTableL0,              const OMX_U8  * pRMAXTableL1,              const OMX_U8  * pZigzagTable){    OMX_U32 storeRun = 0, run, storeRunPlus;    OMX_U8  last = 0, first = 1, fMode;    OMX_S16 level, storeLevel = 0, storeLevelPlus;    OMX_INT i;            /* RLE encoding and packing the bits into the streams */        for (i = start, run=0; i < 64; i++)        {            level   = pQDctBlkCoef[pZigzagTable[i]];            /* Counting the run */            if (level == 0)            {                run++;            }            /* Found a non-zero coeff */            else            {                if (first == 0)                {                    last = 0;                                        /* Check for a valid entry in the VLC table */                    storeLevelPlus = armSignCheck(storeLevel) *                       (armAbs(storeLevel) - pLMAXTableL0[storeRun]);                    storeRunPlus = storeRun -                                   (pRMAXTableL0[armAbs(storeLevel) - 1] + 1);                                                                          fMode = armVCM4P2_CheckVLCEscapeMode(                                             storeRun,                                             storeRunPlus,                                             storeLevel,                                             storeLevelPlus,                                             maxStoreRunL0,                                             maxRunForMultipleEntriesL0,                                             shortVideoHeader,                                             pRunIndexTableL0);                                        armVCM4P2_FillVLCBuffer (                                      ppBitStream,                                       pBitOffset,                                      storeRun,                                      storeLevel, 									  storeRunPlus,                                      storeLevelPlus,                                       fMode,									  last,                                      maxRunForMultipleEntriesL0,                                       pRunIndexTableL0,                                      pVlcTableL0);                                                                  }                storeLevel = level;                storeRun   = run;                first = 0;                run = 0;            }        } /* end of for loop for 64 elements */        /* writing the last element */        last = 1;                /* Check for a valid entry in the VLC table */        storeLevelPlus = armSignCheck(storeLevel) *                         (armAbs(storeLevel) - pLMAXTableL1[run]);        storeRunPlus = storeRun -                       (pRMAXTableL1[armAbs(storeLevel) - 1] + 1);        fMode = armVCM4P2_CheckVLCEscapeMode(                                 storeRun,                                 storeRunPlus,                                 storeLevel,                                 storeLevelPlus,                                 maxStoreRunL1,                                 maxRunForMultipleEntriesL1,                                 shortVideoHeader,                                 pRunIndexTableL1);                armVCM4P2_FillVLCBuffer (                          ppBitStream,                           pBitOffset,                          storeRun,                          storeLevel, 						  storeRunPlus,                          storeLevelPlus,                          fMode,						  last,                          maxRunForMultipleEntriesL1,                          pRunIndexTableL1,                          pVlcTableL1);	return OMX_Sts_NoErr;                          }/* End of File */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -