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

📄 blkdec.no-opt

📁 au1200 linux2.6.11 硬件解码mae驱动和maiplayer播放器源码
💻 NO-OPT
📖 第 1 页 / 共 3 页
字号:
    			g_pIQOutput [i ^ 1] = rgiCoefQ [i];    	}    }    //save Qcoef in memory	for (i = 1, j = 8; i < BLOCK_SIZE; i++, j += BLOCK_SIZE)    {		pmbmCurr->rgblkm [iBlk - 1] [i] = rgiCoefQ [i];		pmbmCurr->rgblkm [iBlk - 1] [i + BLOCK_SIZE - 1] = rgiCoefQ [j];	}// ~HV - Perf Changes}inline Void decodeTextureInterBlock (Int iQP){// HV - Perf Changes	Int* rgiCoefQ = g_pVO->m_rgpiCoefQ [0];	Int* scan = grgiStandardZigzag;    int i;    int iCoef;	scan = (g_pVOP->bAlternateScan) ? grgiVerticalZigzag : grgiStandardZigzag;	decodeInterTCOEF (rgiCoefQ, 0, scan);//else don't add error signal    // Get the pointer to the block that we need to fill in. Also, custom memset this to 0    ClearBlockDataPointer(nCodedBlocks);    // Copy the INTER Weighting Matrices only when we are processing the first block    if (!nCodedBlocks)    {        // Update IQMUL2        g_pHeader0->iqmul2 = iQP;        // Update IQDIV3        if (g_pVOL->fQuantizer == Q_MPEG)            g_pHeader1->iqdiv3 = 4;  // 2 ** 4 = 16    }	// Update IQUANT params for MAE	// ****************************    // Setting up block data here to avoid the function call overhead    // inverseQuantizeDCTcoefH263 (rgiCoefQ, 0, iQP);    // inverseQuantizeInterDCTcoefMPEG (rgiCoefQ, 0, iQP, bAlphaBlock, iAuxComp );    for (i = 0; i < BLOCK_SQUARE_SIZE; i++)    {        iCoef =  rgiCoefQ [i];        if (iCoef)            g_pIQOutput [i ^ 1] = iCoef + iCoef + sign(iCoef);    }// ~HV - Perf Changes}inline BlockMemory decideIntraPred (CMBMode* pmbmdCurr, Int *iQPpred, Int blkn, MacroBlockMemory* pmbmLeft,                              MacroBlockMemory* pmbmTop, MacroBlockMemory* pmbmLeftTop, MacroBlockMemory* pmbmCurr,                             CMBMode* pmbmdLeft, CMBMode* pmbmdTop,CMBMode* pmbmdLeftTop){	UInt nBits = g_pVOL->nBits; // NBIT	Int iQPpredTop, iQPpredLeftTop, iQPpredLeft;    BlockMemory blkmRet = NULL;	BlockMemory blkmTop;    BlockMemory blkmLeftTop;    BlockMemory blkmLeft;	Int iDefVal = 1<<(nBits+2); // NBIT	Int iPredLeftTop, iHorizontalGrad, iVerticalGrad;    blkmTop		= findPredictorBlock (blkn, VERTICAL,   pmbmLeft, pmbmTop, pmbmLeftTop, pmbmCurr, pmbmdLeft, pmbmdTop, pmbmdLeftTop, pmbmdCurr, &iQPpredTop);    blkmLeftTop = findPredictorBlock (blkn, DIAGONAL,   pmbmLeft, pmbmTop, pmbmLeftTop, pmbmCurr, pmbmdLeft, pmbmdTop, pmbmdLeftTop, pmbmdCurr, &iQPpredLeftTop);    blkmLeft	= findPredictorBlock (blkn, HORIZONTAL, pmbmLeft, pmbmTop, pmbmLeftTop, pmbmCurr, pmbmdLeft, pmbmdTop, pmbmdLeftTop, pmbmdCurr, &iQPpredLeft);    iPredLeftTop                = (blkmLeftTop == NULL) ? iDefVal : blkmLeftTop [0];    iHorizontalGrad				= ((blkmTop  == NULL) ? iDefVal : blkmTop  [0]) - iPredLeftTop;    iVerticalGrad				= ((blkmLeft == NULL) ? iDefVal : blkmLeft [0]) - iPredLeftTop;	if (abs(iVerticalGrad)  < abs (iHorizontalGrad))   	{		pmbmdCurr->m_preddir [blkn - 1] = VERTICAL;		if (blkmTop != NULL)	        {			blkmRet = (BlockMemory)blkmTop;			*iQPpred = iQPpredTop;		}	}	else   	{		pmbmdCurr->m_preddir [blkn - 1] = HORIZONTAL;		if (blkmLeft != NULL)	        {			blkmRet = (BlockMemory)blkmLeft;			*iQPpred = iQPpredLeft;		}	}    return blkmRet;}#ifdef MP4V_NEW_VLDVoid decodeEscape_Test (Int *iLevel, Int *iRun, Int *bIsLastRun, Int* rgiLMAX, Int* rgiRMAX, Bool bIntra){    Int iIndex, iLevelPlusAbs, iLevelAbs, iLevelBits, iMarker, iLevelIndex;	if (!main_short_video_header) // Added bij KPN [FDS]    {        MP4V_GETSINGLEBIT (); //vlc; Level+        if (!nSingBitRet)        {            if (bIntra)            {                iIndex = decodeSymbol_Test(TABLE_ID_DCTINTRA, MAX_SYMBOLS_FOR_DCTINTRA, MAX_SYMBOL_LENGTH_IN_DCTINTRA);                decodeIntraVLCtableIndex (iIndex, iLevel, iRun, bIsLastRun);            }            else            {                iIndex = decodeSymbol_Test(TABLE_ID_DCT, MAX_SYMBOLS_FOR_DCT, MAX_SYMBOL_LENGTH_IN_DCT);                decodeInterVLCtableIndex (iIndex, iLevel, iRun, bIsLastRun);            }    		//get level back    		iLevelPlusAbs = abs (*iLevel);    		iLevelAbs = iLevelPlusAbs + rgiLMAX [(*iRun & 0x0000003F) + (*bIsLastRun << 6)];		//hashing the table    		*iLevel = sign(*iLevel) * iLevelAbs;        }        else // vlc; Run+        {            MP4V_GETSINGLEBIT ();            if (!nSingBitRet)            {                if (bIntra)                {                    iIndex = decodeSymbol_Test(TABLE_ID_DCTINTRA, MAX_SYMBOLS_FOR_DCTINTRA, MAX_SYMBOL_LENGTH_IN_DCTINTRA);                    decodeIntraVLCtableIndex (iIndex, iLevel, iRun, bIsLastRun);                }                else                {                    iIndex = decodeSymbol_Test(TABLE_ID_DCT, MAX_SYMBOLS_FOR_DCT, MAX_SYMBOL_LENGTH_IN_DCT);                    decodeInterVLCtableIndex (iIndex, iLevel, iRun, bIsLastRun);                }            		*iRun = *iRun + rgiRMAX [(abs(*iLevel) & 0x0000001F) + (*bIsLastRun << 5)];	//get run back; RMAX tabl incl. + 1 already            }            else // flc            {                MP4V_GETSINGLEBIT ();        		*bIsLastRun = (Bool) nSingBitRet;		        		*iRun =	(Int) getBits (NUMBITS_ESC_RUN);        		assert (*iRun < BLOCK_SQUARE_SIZE);            		iLevelBits = 12; // = m_volmd.nBits;                MP4V_GETSINGLEBIT ();        		iMarker = nSingBitRet;        		assert(iMarker == 1);            		*iLevel = (Int) getBits (iLevelBits);                MP4V_GETSINGLEBIT ();                iMarker = nSingBitRet;            		assert(iMarker == 1);            		Int iMaxAC = (1<<(iLevelBits-1)) - 1;        		assert(*iLevel!=iMaxAC+1);            		if (*iLevel > iMaxAC)        			*iLevel -= (1<<iLevelBits);        		assert(*iLevel != 0);            }        }	} // Escape coding short headers. Added by KPN	else	{        MP4V_GETSINGLEBIT ();        *bIsLastRun = nSingBitRet;		*iRun = (Int) getBits (6);		iLevelIndex = (Int) getBits(8);		if (iLevelIndex == 0 || iLevelIndex == 128) 		{			fprintf(stderr,"Short header mode. Levels 0 and 128 are not allowed\n");			exit(2);		}		if (iLevelIndex >= 0 && iLevelIndex < 128) 			*iLevel = iLevelIndex;        else 			*iLevel = iLevelIndex-256;	}}#elseVoid decodeEscape (Int *iLevel, Int *iRun, Int *bIsLastRun, Int* rgiLMAX, Int* rgiRMAX, PPHUFFMAN_DEC_STRUCT pHD, Bool bIntra){    Int iIndex, iLevelPlusAbs, iLevelAbs, iLevelBits, iMarker, iLevelIndex;	if (!main_short_video_header) // Added bij KPN [FDS]    {        MP4V_GETSINGLEBIT (); //vlc; Level+        if (!nSingBitRet)        {#ifdef MPV4_VLD_WITH_PEEK            iIndex = decodeSymbol_WithPeek(pHD, MAX_SYMBOL_LENGTH_IN_DCT);#else            iIndex = decodeSymbol(pHD);#endif            MP4V_GETSINGLEBIT (); // sign bit            if (bIntra)                decodeIntraVLCtableIndex (iIndex, iLevel, iRun, bIsLastRun, nSingBitRet);            else                decodeInterVLCtableIndex (iIndex, iLevel, iRun, bIsLastRun, nSingBitRet);    		//get level back    		iLevelPlusAbs = abs (*iLevel);    		iLevelAbs = iLevelPlusAbs + rgiLMAX [(*iRun & 0x0000003F) + (*bIsLastRun << 6)];		//hashing the table    		*iLevel = sign(*iLevel) * iLevelAbs;        }        else // vlc; Run+        {            MP4V_GETSINGLEBIT ();            if (!nSingBitRet)            {#ifdef MPV4_VLD_WITH_PEEK                iIndex = decodeSymbol_WithPeek(pHD, MAX_SYMBOL_LENGTH_IN_DCT);#else        		iIndex = decodeSymbol(pHD);#endif                MP4V_GETSINGLEBIT (); // sign bit                if (bIntra)                    decodeIntraVLCtableIndex (iIndex, iLevel, iRun, bIsLastRun, nSingBitRet);                else                    decodeInterVLCtableIndex (iIndex, iLevel, iRun, bIsLastRun, nSingBitRet);            		*iRun = *iRun + rgiRMAX [(abs(*iLevel) & 0x0000001F) + (*bIsLastRun << 5)];	//get run back; RMAX tabl incl. + 1 already            }            else // flc            {                MP4V_GETSINGLEBIT ();        		*bIsLastRun = (Bool) nSingBitRet;		        		*iRun =	(Int) getBits (NUMBITS_ESC_RUN);        		assert (*iRun < BLOCK_SQUARE_SIZE);            		iLevelBits = 12; // = m_volmd.nBits;                MP4V_GETSINGLEBIT ();        		iMarker = nSingBitRet;        		assert(iMarker == 1);            		*iLevel = (Int) getBits (iLevelBits);                MP4V_GETSINGLEBIT ();                iMarker = nSingBitRet;            		assert(iMarker == 1);            		Int iMaxAC = (1<<(iLevelBits-1)) - 1;        		assert(*iLevel!=iMaxAC+1);            		if (*iLevel > iMaxAC)        			*iLevel -= (1<<iLevelBits);        		assert(*iLevel != 0);            }        }	} // Escape coding short headers. Added by KPN	else	{        MP4V_GETSINGLEBIT ();        *bIsLastRun = nSingBitRet;		*iRun = (Int) getBits (6);		iLevelIndex = (Int) getBits(8);		if (iLevelIndex == 0 || iLevelIndex == 128) 		{			fprintf(stderr,"Short header mode. Levels 0 and 128 are not allowed\n");			exit(2);		}		if (iLevelIndex >= 0 && iLevelIndex < 128) 			*iLevel = iLevelIndex;        else 			*iLevel = iLevelIndex-256;	}}#endifVoid decodeEscape_WithFastBS (Int *iLevel, Int *iRun, Int *bIsLastRun, Int* rgiLMAX, Int* rgiRMAX, PPHUFFMAN_DEC_STRUCT pHD, Bool bIntra,                                                            UInt cbits, UInt *pBitsUsed){    Int iIndex, iLevelPlusAbs, iLevelAbs, iLevelBits, iMarker, iLevelIndex;    UInt uNextBit;    UInt iBitsUsed=0;    *pBitsUsed=0;	if (!main_short_video_header) // Added bij KPN [FDS]    {        _BSFastGetBits2(cbits,1,*pBitsUsed, uNextBit);         if (!uNextBit) // vlc; Level+        {            iIndex = decodeSymbol_WithFastBS(pHD,cbits,&iBitsUsed);            (*pBitsUsed)+=iBitsUsed;            cbits<<=iBitsUsed;            _BSFastGetBits2(cbits,1,*pBitsUsed,uNextBit); // sign bit            if (bIntra)                decodeIntraVLCtableIndex (iIndex, iLevel, iRun, bIsLastRun, uNextBit);            else                decodeInterVLCtableIndex (iIndex, iLevel, iRun, bIsLastRun, uNextBit);            //printf("1, bits used is %d\n", *pBitsUsed);    		//get level back    		iLevelPlusAbs = abs (*iLevel);    		iLevelAbs = iLevelPlusAbs + rgiLMAX [(*iRun & 0x0000003F) + (*bIsLastRun << 6)];		//hashing the table    		*iLevel = sign(*iLevel) * iLevelAbs;        }        else // vlc; Run+        {            _BSFastGetBits2(cbits,1,*pBitsUsed, uNextBit );             if (!uNextBit)            {                iIndex = decodeSymbol_WithFastBS(pHD,cbits,&iBitsUsed);                (*pBitsUsed)+=iBitsUsed;                cbits<<=iBitsUsed;                _BSFastGetBits2(cbits,1,*pBitsUsed, uNextBit ); // sign bit                if (bIntra)                    decodeIntraVLCtableIndex (iIndex, iLevel, iRun, bIsLastRun, uNextBit);                else                    decodeInterVLCtableIndex (iIndex, iLevel, iRun, bIsLastRun, uNextBit);                //printf("2, bits used is %d\n", *pBitsUsed);            		*iRun = *iRun + rgiRMAX [(abs(*iLevel) & 0x0000001F) + (*bIsLastRun << 5)];	//get run back; RMAX tabl incl. + 1 already            }            else // flc            {                 _BSFastGetBits2(cbits,1,*pBitsUsed, *bIsLastRun);         		 _BSFastGetBits2(cbits,NUMBITS_ESC_RUN,*pBitsUsed, *iRun);        		assert (*iRun < BLOCK_SQUARE_SIZE);            		iLevelBits = 12; // = m_volmd.nBits;                 _BSFastGetBits2(cbits,1,*pBitsUsed, iMarker);         		assert(iMarker == 1);                                 _BSFastGetBits2(cbits,iLevelBits,*pBitsUsed, *iLevel);                  _BSFastGetBits2(cbits,1,*pBitsUsed, iMarker);         		assert(iMarker == 1);               //printf("3, bits used is %d\n", *pBitsUsed);            		Int iMaxAC = (1<<(iLevelBits-1)) - 1;        		assert(*iLevel!=iMaxAC+1);            		if (*iLevel > iMaxAC)        			*iLevel -= (1<<iLevelBits);        		assert(*iLevel != 0);            }        }	} // Escape coding short headers. Added by KPN	else	{         _BSFastGetBits2(cbits,1,*pBitsUsed, *bIsLastRun);		 _BSFastGetBits2(cbits,6,*pBitsUsed, *iRun); 		 _BSFastGetBits2(cbits,8,*pBitsUsed, iLevelIndex);        // printf("4, bits used is %d\n", *pBitsUsed);		if (iLevelIndex == 0 || iLevelIndex == 128) 		{			fprintf(stderr,"Short header mode. Levels 0 and 128 are not allowed\n");			exit(2);		}		if (iLevelIndex >= 0 && iLevelIndex < 128) 			*iLevel = iLevelIndex;        else 			*iLevel = iLevelIndex-256;	}

⌨️ 快捷键说明

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