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

📄 mbheaddec.c

📁 au1200 linux2.6.11 硬件解码mae驱动和maiplayer播放器源码
💻 C
📖 第 1 页 / 共 2 页
字号:
        {		    case 0:                pmbmd->m_intStepDelta = -1;			break;		    case 1:                pmbmd->m_intStepDelta = -2;			break;		    case 2:                pmbmd->m_intStepDelta = 1;			break;		    case 3:                pmbmd->m_intStepDelta = 2;			break;#ifndef NO_ASSERTS		    default:    			assert (FALSE);#endif		}		(*iCurrentQP) += pmbmd->m_intStepDelta;		iQuantMax = (1<<g_pVOL->uiQuantPrecision) - 1;		CHECKRANGE ((*iCurrentQP), 1, iQuantMax);	}	pmbmd->m_stepSize = (*iCurrentQP);#ifdef ENABLE_INTERLACING	if (m_vopmd.bInterlace && !pmbmd->m_bSkip)     {		if ((pmbmd->m_dctMd == INTRA) || (pmbmd->m_dctMd == INTRAQ) || (iCBPY || iCBPC)) 			pmbmd->m_bFieldDCT = getSingleBit (); // get dct_type		else			pmbmd->m_bFieldDCT = FALSE;// GMC		pmbmd->m_bFieldMV = FALSE;// ~GMC		if (((pmbmd->m_dctMd == INTERQ) || (pmbmd->m_dctMd == INTER)) && (pmbmd -> m_bhas4MVForward == FALSE) && (pmbmd -> m_bMCSEL == FALSE)) { // GMC			pmbmd->m_bFieldMV = getSingleBit (); // get field_prediction			if (pmbmd->m_bFieldMV == TRUE) {				pmbmd->m_bForwardTop = getSingleBit (); // get top field reference				pmbmd->m_bForwardBottom = getSingleBit (); // get bottom field reference			}		}	}#endif#ifdef USE_BSFAST    _BSFAST_DONE();#endif	setDCVLCMode(pmbmd, pbRestart);}// B-VOP#ifndef USE_BSFASTINLINE Void decodeMBTextureHeadOfBVOP (CMBMode* pmbmd, Int *iCurrQP){	Int iBlk = 0, iMODB = 0, iMCBPC = 0, iCBPC = 0, iCBPY = 0, iMbType, uiCBPB = 0;    Int nNextBit;	pmbmd->m_bhas4MVForward = pmbmd->m_bhas4MVBackward = FALSE;	pmbmd->m_bMCSEL = FALSE;	pmbmd->m_bSkip = FALSE;	pmbmd->m_dctMd = INTER;	pmbmd->m_intStepDelta = 0;	pmbmd->m_bFieldDCT = FALSE;	pmbmd->m_bFieldMV = FALSE;    MP4V_RETSINGLEBIT(&nNextBit);    if (MP4V_EOF())        return;	if (nNextBit == 1) //MODB=1 colocated non-skip but curr skip    {		pmbmd->m_bSkip = TRUE;  		iMODB = 0;		pmbmd->m_mbType = (!(g_pVOL->volType == ENHN_LAYER && g_pVOP->iRefSelectCode == 0))? DIRECT : FORWARD;#ifdef DUAL_MODE		if(g_pVOL->volType == ENHN_LAYER && m_vopmd.iRefSelectCode == 0)			return;#endif	}    else    {        MP4V_RETSINGLEBIT(&nNextBit);        if (nNextBit == 1) //MODB="01"        {#ifdef DUAL_MODE            if (g_pVOL->volType == BASE_LAYER || (g_pVOL->volType == ENHN_LAYER && g_pVOP->iRefSelectCode != 0))#endif                iMbType = decodeSymbol (m_pentrdecMbTypeBVOP);#ifdef DUAL_MODE    		else	            {    			if (getSingleBit () == 1)	    				iMbType = FORWARD;    			else if (getSingleBit () == 1)	    				iMbType = INTERPOLATE;    			else if (getSingleBit () == 1)    				iMbType = BACKWARD;    			else                 {    				fprintf(stderr,"MB Type 0000 does not exsit.\n");    				exit(2);    			}    		}#endif#ifndef NO_ASSERTS            assert (iMbType >= 0 && iMbType <= 3);#endif    		pmbmd->m_mbType = (MBType) iMbType;    		iMODB = 1;        }        else //MODB="00"        {#ifdef DUAL_MODE            if (g_pVOL->volType == BASE_LAYER || (g_pVOL->volType == ENHN_LAYER && g_pVOP->iRefSelectCode != 0))#endif                iMbType = decodeSymbol (m_pentrdecMbTypeBVOP);#ifdef DUAL_MODE    		else	            {    			if (getSingleBit () == 1)	    				iMbType = FORWARD;    			else if (getSingleBit () == 1)	    				iMbType = INTERPOLATE;    			else if (getSingleBit () == 1)    				iMbType = BACKWARD;    			else                {    				fprintf(stderr,"MB Type 0000 is not exsit.\n");    				exit(2);    			}    		}#endif#ifndef NO_ASSERTS            assert (iMbType >= 0 && iMbType <= 3);#endif    		pmbmd->m_mbType = (MBType) iMbType;		    		iMODB = 2;    		uiCBPB = getBits (6);    		pmbmd->m_bhas4MVForward = pmbmd->m_bhas4MVBackward = FALSE;	//this is okay; will be reset later    									//Only one mv for B-VOP except direct mode (will be reset in mvdec.cpp)    		iCBPC = uiCBPB & 0x0003;    		iCBPY = (uiCBPB >> 2) & 0x000F;    		    		if (pmbmd->m_mbType != DIRECT)	            {    			Int DQUANT = 0, iQuantMax;                MP4V_RETSINGLEBIT(&nNextBit);                    if (nNextBit)                {                    DQUANT = -2;                    MP4V_RETSINGLEBIT(&nNextBit);                        if (nNextBit)                        DQUANT = 2;                }        			pmbmd->m_intStepDelta = DQUANT;    			(*iCurrQP) += pmbmd->m_intStepDelta;    			iQuantMax = (1<<g_pVOL->uiQuantPrecision) - 1;                CHECKRANGE ((*iCurrQP), 1, iQuantMax);     		}        }    }	pmbmd->m_stepSize = (*iCurrQP);	SETCBPYANDC (pmbmd, iCBPC, iCBPY);	if (pmbmd->m_mbType == DIRECT)		pmbmd->m_dctMd = INTER;		//direct mode doesn't have dquant	else			pmbmd->m_dctMd = INTERQ;		//meaningless in B_VOP 'cause DQUANT is always sent#ifdef ENABLE_INTERLACING	if (m_vopmd.bInterlace)     {		if (uiCBPB != 0)			pmbmd->m_bFieldDCT = getSingleBit (); // get dct_type		if (pmbmd->m_mbType != DIRECT) {			pmbmd->m_bFieldMV = getSingleBit ();			if (pmbmd->m_bFieldMV) {				if (pmbmd->m_mbType != BACKWARD) {					pmbmd->m_bForwardTop = getSingleBit ();					pmbmd->m_bForwardBottom = getSingleBit ();				}				if (pmbmd->m_mbType != FORWARD) {					pmbmd->m_bBackwardTop = getSingleBit ();					pmbmd->m_bBackwardBottom = getSingleBit ();				}			}		}	}#endif}#else // USE_BSFASTINLINE Void decodeMBTextureHeadOfBVOP (CMBMode* pmbmd, Int *iCurrQP){	Int iBlk = 0, iMODB = 0, iMCBPC = 0, iCBPC = 0, iCBPY = 0, iMbType, uiCBPB = 0;    Int nNextBit, nPeakNextBit = 0;  _BSFAST_DECL;  UInt bitsread;  _BSFAST_INIT();	pmbmd->m_bhas4MVForward = pmbmd->m_bhas4MVBackward = FALSE;	pmbmd->m_bMCSEL = FALSE;	pmbmd->m_bSkip = FALSE;	pmbmd->m_dctMd = INTER;	pmbmd->m_intStepDelta = 0;	pmbmd->m_bFieldDCT = FALSE;	pmbmd->m_bFieldMV = FALSE;    nNextBit = _BSFastGetBits(1);    nPeakNextBit = _BSFastPeekBits(1);    if (MP4V_EOF())        return;	if (nNextBit == 1) //MODB=1 colocated non-skip but curr skip    {		pmbmd->m_bSkip = TRUE;  		iMODB = 0;		pmbmd->m_mbType = (!(g_pVOL->volType == ENHN_LAYER && g_pVOP->iRefSelectCode == 0))? DIRECT : FORWARD;#ifdef DUAL_MODE		if(g_pVOL->volType == ENHN_LAYER && m_vopmd.iRefSelectCode == 0)			return;#endif	}    else if (nPeakNextBit == 1) //MODB="01"    {        _BSFastGetBits(1); // now read the actual bit we just peaked#ifdef DUAL_MODE		if (g_pVOL->volType == BASE_LAYER || (g_pVOL->volType == ENHN_LAYER && g_pVOP->iRefSelectCode != 0))#endif            {                iMbType = decodeSymbol_WithFastBS (m_pentrdecMbTypeBVOP,_BSFastCurrentBits(), &bitsread);                _BSFastSkipBits(bitsread);                _BSFastCheckedPreload();            }#ifdef DUAL_MODE		else	        {			if (getSingleBit () == 1)					iMbType = FORWARD;			else if (getSingleBit () == 1)					iMbType = INTERPOLATE;			else if (getSingleBit () == 1)				iMbType = BACKWARD;			else             {				fprintf(stderr,"MB Type 0000 does not exsit.\n");				exit(2);			}		}#endif#ifndef NO_ASSERTS		assert (iMbType >= 0 && iMbType <= 3);#endif		pmbmd->m_mbType = (MBType) iMbType;		iMODB = 1;	}    else //MODB="00"    {        _BSFastGetBits(1); // now read the actual bit we just peaked#ifdef DUAL_MODE		if (g_pVOL->volType == BASE_LAYER || (g_pVOL->volType == ENHN_LAYER && g_pVOP->iRefSelectCode != 0))#endif            {                iMbType = decodeSymbol_WithFastBS (m_pentrdecMbTypeBVOP,_BSFastCurrentBits(), &bitsread);                _BSFastSkipBits(bitsread);                _BSFastCheckedPreload();            }#ifdef DUAL_MODE		else	        {			if (getSingleBit () == 1)					iMbType = FORWARD;			else if (getSingleBit () == 1)					iMbType = INTERPOLATE;			else if (getSingleBit () == 1)				iMbType = BACKWARD;			else            {				fprintf(stderr,"MB Type 0000 is not exsit.\n");				exit(2);			}		}#endif#ifndef NO_ASSERTS		assert (iMbType >= 0 && iMbType <= 3);#endif		pmbmd->m_mbType = (MBType) iMbType;				iMODB = 2;        uiCBPB =_BSFastGetBits(6);		pmbmd->m_bhas4MVForward = pmbmd->m_bhas4MVBackward = FALSE;	//this is okay; will be reset later									//Only one mv for B-VOP except direct mode (will be reset in mvdec.cpp)		iCBPC = uiCBPB & 0x0003;		iCBPY = (uiCBPB >> 2) & 0x000F;				if (pmbmd->m_mbType != DIRECT)	        {			Int DQUANT;      Int iQuantMax;            nNextBit = _BSFastGetBits(1);            if (!nNextBit)				DQUANT = 0;            else            {                nNextBit = _BSFastGetBits(1);                if (!nNextBit)                    DQUANT = -2;                else                    DQUANT = 2;            }			pmbmd->m_intStepDelta = DQUANT;			(*iCurrQP) += pmbmd->m_intStepDelta;			iQuantMax = (1<<g_pVOL->uiQuantPrecision) - 1;            CHECKRANGE ((*iCurrQP), 1, iQuantMax); 		}	}	pmbmd->m_stepSize = (*iCurrQP);	SETCBPYANDC (pmbmd, iCBPC, iCBPY);	if (pmbmd->m_mbType == DIRECT)		pmbmd->m_dctMd = INTER;		//direct mode doesn't have dquant	else			pmbmd->m_dctMd = INTERQ;		//meaningless in B_VOP 'cause DQUANT is always sent#ifdef ENABLE_INTERLACING	if (m_vopmd.bInterlace)     {		if (uiCBPB != 0)			pmbmd->m_bFieldDCT = getSingleBit (); // get dct_type		if (pmbmd->m_mbType != DIRECT) {			pmbmd->m_bFieldMV = getSingleBit ();			if (pmbmd->m_bFieldMV) {				if (pmbmd->m_mbType != BACKWARD) {					pmbmd->m_bForwardTop = getSingleBit ();					pmbmd->m_bForwardBottom = getSingleBit ();				}				if (pmbmd->m_mbType != FORWARD) {					pmbmd->m_bBackwardTop = getSingleBit ();					pmbmd->m_bBackwardBottom = getSingleBit ();				}			}		}	}#endif    _BSFAST_DONE();}#endif // USE_BSFAST

⌨️ 快捷键说明

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