HM编码器代码阅读(15)——帧间预测之AMVP模式(三)xGetBlkBits函数

GetBlkBits函数的主要功能是计算使用某种PU划分模式的时候,该种模式占用的比特数

Void TEncSearch::xGetBlkBits( PartSize eCUMode, Bool bPSlice, Int iPartIdx, UInt uiLastMode, UInt uiBlkBit[3])
{
	if ( eCUMode == SIZE_2Nx2N )
	{
		uiBlkBit[0] = (! bPSlice) ? 3 : 1;
		uiBlkBit[1] = 3;
		uiBlkBit[2] = 5;
	}
	else if ( (eCUMode == SIZE_2NxN || eCUMode == SIZE_2NxnU) || eCUMode == SIZE_2NxnD )
	{
		UInt aauiMbBits[2][3][3] = { { {0,0,3}, {0,0,0}, {0,0,0} } , { {5,7,7}, {7,5,7}, {9-3,9-3,9-3} } };
		if ( bPSlice )
		{
			uiBlkBit[0] = 3;
			uiBlkBit[1] = 0;
			uiBlkBit[2] = 0;
		}
		else
		{
			::memcpy( uiBlkBit, aauiMbBits[iPartIdx][uiLastMode], 3*sizeof(UInt) );
		}
	}
	else if ( (eCUMode == SIZE_Nx2N || eCUMode == SIZE_nLx2N) || eCUMode == SIZE_nRx2N )
	{
		UInt aauiMbBits[2][3][3] = { { {0,2,3}, {0,0,0}, {0,0,0} } , { {5,7,7}, {7-2,7-2,9-2}, {9-3,9-3,9-3} } };
		if ( bPSlice )
		{
			uiBlkBit[0] = 3;
			uiBlkBit[1] = 0;
			uiBlkBit[2] = 0;
		}
		else
		{
			::memcpy( uiBlkBit, aauiMbBits[iPartIdx][uiLastMode], 3*sizeof(UInt) );
		}
	}
	else if ( eCUMode == SIZE_NxN )
	{
		uiBlkBit[0] = (! bPSlice) ? 3 : 1;
		uiBlkBit[1] = 3;
		uiBlkBit[2] = 5;
	}
	else
	{
		printf("Wrong!\n");
		assert( 0 );
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值