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

📄 armvcm4p2_fillvlcbuffer.c

📁 The OpenMAX DL (Development Layer) APIs contain a comprehensive set of audio, video, signal processi
💻 C
字号:
/** *  * File Name:  armVCM4P2_FillVLCBuffer.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 putting VLC bits * */  #include "omxtypes.h"#include "armOMX.h"#include "armVC.h"#include "armCOMM.h"#include "armCOMM_Bitstream.h"/** * Function: armVCM4P2_FillVLCBuffer * * Description: * Performs calculating the VLC bits depending on the escape type and insert  * the same in the bitstream * * 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]  run                Run value (count of zeros) to be encoded   * [in]  level              Level value (non-zero value) to be encoded * [in]  runPlus            Calculated as runPlus = run - (RMAX + 1)   * [in]  levelPlus          Calculated as  *                          levelPlus = sign(level)*[abs(level) - LMAX] * [in]  fMode              Flag indicating the escape modes * [in]  last               status of the last flag * [in]  maxRunForMultipleEntries  *                          The run value after which level will be equal to 1:  *                          (considering last and inter/intra status) * [in]  pRunIndexTable     Run Index table defined in *                          armVCM4P2_Huff_Tables_VLC.h * [in]  pVlcTable          VLC table defined in armVCM4P2_Huff_Tables_VLC.h * [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_FillVLCBuffer (              OMX_U8 **ppBitStream,              OMX_INT * pBitOffset,              OMX_U32 run,              OMX_S16 level, 			  OMX_U32 runPlus,              OMX_S16 levelPlus,               OMX_U8  fMode,			  OMX_U8  last,              OMX_U8  maxRunForMultipleEntries,               const OMX_U8  *pRunIndexTable,              const ARM_VLC32 *pVlcTable){    OMX_INT tempIndex;	OMX_U32 tempRun = run, sign = 0;    OMX_S16 tempLevel = level;         /* Escape sequence addition */    if (fMode == 1)    {        armPackBits(ppBitStream, pBitOffset, 3, 7);        armPackBits(ppBitStream, pBitOffset, 0, 1);		tempLevel = levelPlus;    }    else if(fMode == 2)    {        armPackBits(ppBitStream, pBitOffset, 3, 7);        armPackBits(ppBitStream, pBitOffset, 2, 2);		tempRun = runPlus;    }    else if (fMode == 3)    {        armPackBits(ppBitStream, pBitOffset, 3, 7);        armPackBits(ppBitStream, pBitOffset, 3, 2);    }    else if (fMode == 4)    {        armPackBits(ppBitStream, pBitOffset, 3, 7);        armPackBits(ppBitStream, pBitOffset, (OMX_U32)last, 1);		armPackBits(ppBitStream, pBitOffset, tempRun, 6);		if((tempLevel != 0) && (tempLevel != -128))		{		    armPackBits(ppBitStream, pBitOffset,			   (OMX_U32) tempLevel, 8);		}		return OMX_Sts_NoErr;		    }        if (tempLevel < 0)    {        sign = 1;        tempLevel = armAbs(tempLevel);    }    /* Putting VLC bits in the stream */	if (fMode < 3)	{		if (tempRun > maxRunForMultipleEntries)		{			tempIndex = pRunIndexTable [maxRunForMultipleEntries + 1] + 						(tempRun - maxRunForMultipleEntries - 1);		}		else		{			tempIndex = pRunIndexTable [tempRun] + (tempLevel -1);		}    		armPackVLC32 (ppBitStream, pBitOffset,					  pVlcTable [tempIndex]);		armPackBits(ppBitStream, pBitOffset, (OMX_U32)sign, 1);	}    else	{		if (sign)		{			tempLevel = -tempLevel;		}		tempRun  = run;		armPackBits(ppBitStream, pBitOffset, (OMX_U32)last, 1);		armPackBits(ppBitStream, pBitOffset, tempRun, 6);		armPackBits(ppBitStream, pBitOffset, 1, 1);		armPackBits(ppBitStream, pBitOffset,			   (OMX_U32) tempLevel, 12);		armPackBits(ppBitStream, pBitOffset, 1, 1);	}    return OMX_Sts_NoErr;}/*End of File*/

⌨️ 快捷键说明

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