亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? arithmeticcoderc.cpp

?? The implementaion of CABAC encoding and decoding process in H264 standard.
?? CPP
字號:
#include "ArithmeticCoderC.h"
#include "tools.h"

// constants to split the number space of 32 bit integers
// most significant bit kept free to prevent overflows
const unsigned int g_FirstQuarter = 0x20000000;
const unsigned int g_ThirdQuarter = 0x60000000;
const unsigned int g_Half         = 0x40000000;

ArithmeticCoderC::ArithmeticCoderC()
{
	mBitCount = 0;
	mBitBuffer = 0;

	mLow = 0;
	mHigh = 0x7FFFFFFF; // just work with least significant 31 bits
	mScale = 0;

	mBuffer = 0;
	mStep = 0;
}

void ArithmeticCoderC::SetFile( fstream *file )
{
	mFile = file;
}

void ArithmeticCoderC::SetBit( const unsigned char bit )
{
	// add bit to the buffer
	mBitBuffer = (mBitBuffer << 1) | bit;
	mBitCount++;

	if(mBitCount == 8) // buffer full
	{
		// write
		mFile->write(reinterpret_cast<char*>(&mBitBuffer),sizeof(mBitBuffer));
		mBitCount = 0;
	}
}

void ArithmeticCoderC::SetBitFlush()
{
	// fill buffer with 0 up to the next byte
	while( mBitCount != 0 )
		SetBit( 0 );
}

unsigned char ArithmeticCoderC::GetBit()
{
	if(mBitCount == 0) // buffer empty
	{
		if( !( mFile->eof() ) ) // file read completely?
			mFile->read(reinterpret_cast<char*>(&mBitBuffer),sizeof(mBitBuffer));
		else
			mBitBuffer = 0; // append zeros

		mBitCount = 8;
	}

	// extract bit from buffer
	unsigned char bit = mBitBuffer >> 7;
	mBitBuffer <<= 1;
	mBitCount--;

	return bit;
}

void ArithmeticCoderC::Encode( const unsigned int low_count,
															 const unsigned int high_count,
															 const unsigned int total )
// total < 2^29
{
	// partition number space into single steps
	mStep = ( mHigh - mLow + 1 ) / total; // interval open at the top => +1

	// update upper bound
	mHigh = mLow + mStep * high_count - 1; // interval open at the top => -1

	// update lower bound
	mLow = mLow + mStep * low_count;

	// apply e1/e2 mapping
	while( ( mHigh < g_Half ) || ( mLow >= g_Half ) )
		{
			if( mHigh < g_Half )
			{
				SetBit( 0 );
				mLow = mLow * 2;
				mHigh = mHigh * 2 + 1;

				// perform e3 mappings
				for(; mScale > 0; mScale-- )
					SetBit( 1 );
			}
			else if( mLow >= g_Half )
			{
				SetBit( 1 );
				mLow = 2 * ( mLow - g_Half );
				mHigh = 2 * ( mHigh - g_Half ) + 1;

				// perform e3 mappings
				for(; mScale > 0; mScale-- )
					SetBit( 0 );
			}
		}

	// e3
	while( ( g_FirstQuarter <= mLow ) && ( mHigh < g_ThirdQuarter ) )
	{
		// keep necessary e3 mappings in mind
		mScale++;
		mLow = 2 * ( mLow - g_FirstQuarter );
		mHigh = 2 * ( mHigh - g_FirstQuarter ) + 1;
	}
}

void ArithmeticCoderC::EncodeFinish()
{
	// There are two possibilities of how mLow and mHigh can be distributed,
	// which means that two bits are enough to distinguish them.

	if( mLow < g_FirstQuarter ) // mLow < FirstQuarter < Half <= mHigh
	{
		SetBit( 0 );

		for( int i=0; i<mScale+1; i++ ) // perform e3-skaling
			SetBit(1);
	}
	else // mLow < Half < ThirdQuarter <= mHigh
	{
		SetBit( 1 ); // zeros added automatically by the decoder; no need to send them
	}

	// empty the output buffer
	SetBitFlush();
}

void ArithmeticCoderC::DecodeStart()
{
	// Fill buffer with bits from the input stream
	for( int i=0; i<31; i++ ) // just use the 31 least significant bits
		mBuffer = ( mBuffer << 1 ) | GetBit();
}

unsigned int ArithmeticCoderC::DecodeTarget( const unsigned int total )
// total < 2^29
{
	// split number space into single steps
	mStep = ( mHigh - mLow + 1 ) / total; // interval open at the top => +1

	// return current value
	return ( mBuffer - mLow ) / mStep;
}

void ArithmeticCoderC::Decode( const unsigned int low_count,
															 const unsigned int high_count )
{
	// update upper bound
	mHigh = mLow + mStep * high_count - 1; // interval open at the top => -1

	// update lower bound
	mLow = mLow + mStep * low_count;

	// e1/e2 mapping
	while( ( mHigh < g_Half ) || ( mLow >= g_Half ) )
		{
			if( mHigh < g_Half )
			{
				mLow = mLow * 2;
				mHigh = mHigh * 2 + 1;
				mBuffer = 2 * mBuffer + GetBit();
			}
			else if( mLow >= g_Half )
			{
				mLow = 2 * ( mLow - g_Half );
				mHigh = 2 * ( mHigh - g_Half ) + 1;
				mBuffer = 2 * ( mBuffer - g_Half ) + GetBit();
			}
			mScale = 0;
		}

	// e3 mapping
	while( ( g_FirstQuarter <= mLow ) && ( mHigh < g_ThirdQuarter ) )
	{
		mScale++;
		mLow = 2 * ( mLow - g_FirstQuarter );
		mHigh = 2 * ( mHigh - g_FirstQuarter ) + 1;
		mBuffer = 2 * ( mBuffer - g_FirstQuarter ) + GetBit();
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲天堂a在线| 蜜臀精品久久久久久蜜臀| 99久久er热在这里只有精品66| 久久久久久久久久电影| 国产成人福利片| 亚洲人妖av一区二区| 欧美三级韩国三级日本三斤| 青青草91视频| 国产欧美日韩中文久久| 99久久综合精品| 亚洲成人免费在线| 精品1区2区在线观看| 成人av动漫网站| 欧美日韩在线播放三区四区| 日本va欧美va欧美va精品| 久久香蕉国产线看观看99| 99re在线精品| 午夜一区二区三区视频| 2023国产精品自拍| 成人av在线播放网址| 亚洲高清在线精品| 久久众筹精品私拍模特| a在线欧美一区| 无码av中文一区二区三区桃花岛| 欧美精品一区二区久久婷婷| 成人成人成人在线视频| 三级不卡在线观看| 中文一区二区在线观看| 欧美三级电影在线观看| 国产激情视频一区二区三区欧美| 亚洲色图制服诱惑 | 日韩一区二区精品| 成人一区二区三区视频在线观看| 亚洲一区二区av电影| 久久久综合九色合综国产精品| 91在线观看污| 蜜桃一区二区三区在线观看| 国产精品国产馆在线真实露脸| 欧美精品在线观看一区二区| 成人午夜视频福利| 日产欧产美韩系列久久99| 国产精品每日更新在线播放网址| 911国产精品| 99久精品国产| 久久国产夜色精品鲁鲁99| 日本久久一区二区| 精品在线你懂的| 亚洲精品国产一区二区三区四区在线| 日韩欧美国产三级| 日本精品视频一区二区三区| 国产麻豆成人传媒免费观看| 亚洲成人av在线电影| 欧美激情艳妇裸体舞| 91精品国产欧美一区二区| 99久久99久久精品免费看蜜桃| 美女脱光内衣内裤视频久久影院| 亚洲欧美日韩在线播放| 国产午夜精品美女毛片视频| 在线91免费看| 91久久香蕉国产日韩欧美9色| 国产一区二区三区美女| 日韩精品欧美精品| 亚洲精品高清视频在线观看| 国产亚洲精品aa午夜观看| 7777精品伊人久久久大香线蕉的 | 久99久精品视频免费观看| 一区二区三区国产| 欧美色涩在线第一页| 成人av资源网站| 国产精品一区不卡| 秋霞电影网一区二区| 一区二区三区产品免费精品久久75 | 99久久777色| 国产亚洲综合色| 日韩午夜三级在线| 欧美日韩亚洲综合一区 | 一本大道久久a久久综合婷婷| 国产精品亚洲一区二区三区在线| 日韩精品1区2区3区| 亚洲一区二区三区在线看| 国产精品国产馆在线真实露脸| 国产亚洲一区二区三区| 日韩精品一区二区三区三区免费| 欧美中文字幕一区二区三区 | 亚洲欧美国产高清| 国产精品美女久久久久高潮| 国产亚洲精品bt天堂精选| 精品少妇一区二区三区日产乱码 | 午夜国产不卡在线观看视频| 亚洲综合色区另类av| 亚洲欧美日韩久久精品| 国产精品久久久久9999吃药| 日本一区二区免费在线观看视频| 久久综合久久综合久久综合| 欧美v日韩v国产v| 精品国产一区二区亚洲人成毛片 | 亚洲女同ⅹxx女同tv| 国产不卡在线视频| 国内成+人亚洲+欧美+综合在线| 日韩不卡在线观看日韩不卡视频| 五月综合激情日本mⅴ| 亚洲第一激情av| 亚洲va欧美va人人爽午夜| 亚洲成人免费看| 日韩精品每日更新| 免费不卡在线观看| 精品一区免费av| 激情综合网天天干| 国产剧情一区二区| 国产成人免费在线| 成人av片在线观看| 91在线视频免费观看| 色婷婷久久99综合精品jk白丝| 在线看日韩精品电影| 欧美日韩一区久久| 宅男在线国产精品| 精品国产乱码久久久久久牛牛| 欧美精品一区二区在线观看| 久久精品一区二区| 国产精品美女久久久久aⅴ国产馆| 综合欧美亚洲日本| 亚洲综合久久久| 日本午夜精品一区二区三区电影| 美国毛片一区二区| 国产毛片一区二区| www.成人在线| 在线观看视频欧美| 91麻豆精品国产91| 久久这里只精品最新地址| 国产欧美视频一区二区| 亚洲女人的天堂| 石原莉奈在线亚洲二区| 久久99精品国产.久久久久久| 国产mv日韩mv欧美| 日本精品一级二级| 88在线观看91蜜桃国自产| 久久综合五月天婷婷伊人| 成人黄色软件下载| 欧美中文字幕一区二区三区 | 日韩欧美一二三| 久久网站最新地址| 亚洲你懂的在线视频| 免费观看在线色综合| 国产大片一区二区| 在线日韩一区二区| 欧美哺乳videos| 中文字幕在线一区| 天天操天天综合网| 国产精品羞羞答答xxdd | 99久久精品国产毛片| 欧美日韩精品一区二区三区蜜桃| 欧美成人性战久久| 亚洲婷婷国产精品电影人久久| 午夜免费欧美电影| 国产高清视频一区| 欧美性受xxxx| 久久久精品2019中文字幕之3| 亚洲精品国产视频| 麻豆精品久久精品色综合| 成人精品视频一区| 91精品国产入口在线| 欧美激情一区二区| 日本视频免费一区| av亚洲产国偷v产偷v自拍| 91麻豆精品国产91久久久 | 欧美日韩成人高清| 国产女人水真多18毛片18精品视频| 一片黄亚洲嫩模| 国产精品1区2区3区| 欧美在线高清视频| 国产欧美精品在线观看| 午夜视频一区二区三区| 丰满白嫩尤物一区二区| 日韩av电影天堂| www.66久久| 精品福利在线导航| 一区二区三区在线视频播放| 国产一区二区导航在线播放| 欧美午夜不卡视频| 欧美国产精品劲爆| 免费成人结看片| 91精品福利在线| 亚洲国产成人午夜在线一区| 天天操天天干天天综合网| av中文字幕在线不卡| 精品入口麻豆88视频| 亚洲二区在线视频| 成人免费高清视频| 欧美电视剧在线看免费| 亚洲图片有声小说| 成人午夜免费视频| 日韩欧美黄色影院| 午夜婷婷国产麻豆精品| 99久久久久久| 国产三级欧美三级| 免费观看日韩av| 欧美日韩成人综合| 亚洲狠狠丁香婷婷综合久久久| 国产成人av电影免费在线观看| 日韩精品一区二区在线|