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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? arithmeticcoderc.cpp

?? 轉自德國Eric Bodden的數據壓縮算術編碼專著。有極強的學術價值。
?? CPP
字號:
#include "ArithmeticCoderC.h"
#include "tools.h"

// Konstanten zur Bereichsunterteilung bei 32-Bit-Integern 
// oberstes Bit wird zur Vermeidung von 躡erl鋟fen freigehalten
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; // arbeite nur mit den unteren 31 bit
	mScale = 0;

	mBuffer = 0;
	mStep = 0;
}

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

void ArithmeticCoderC::SetBit( const unsigned char bit )
{
	// Bit dem Puffer hinzuf黦en
	mBitBuffer = (mBitBuffer << 1) | bit;
	mBitCount++;

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

void ArithmeticCoderC::SetBitFlush()
{
	// Puffer bis zur n鋍hsten Byte-Grenze mit Nullen auff黮len
	while( mBitCount != 0 )
		SetBit( 0 );
}

unsigned char ArithmeticCoderC::GetBit()
{
	if(mBitCount == 0) // Puffer leer
	{
		if( !( mFile->eof() ) ) // Datei komplett eingelesen?
			mFile->read(reinterpret_cast<char*>(&mBitBuffer),sizeof(mBitBuffer));
		else
			mBitBuffer = 0; // Nullen anh鋘gen

		mBitCount = 8;
	}

	// Bit aus Puffer extrahieren
	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
{
	// Bereich in Schritte unterteilen
	mStep = ( mHigh - mLow + 1 ) / total; // oben offenes intervall => +1

	// obere Grenze aktualisieren
	mHigh = mLow + mStep * high_count - 1; // oben offenes intervall => -1
	
	// untere Grenze aktualisieren
	mLow = mLow + mStep * low_count;

	// e1/e2 Mapping durchf黨ren
	while( ( mHigh < g_Half ) || ( mLow >= g_Half ) )
		{
			if( mHigh < g_Half )
			{
				SetBit( 0 );
				mLow = mLow * 2;
				mHigh = mHigh * 2 + 1;

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

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

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

void ArithmeticCoderC::EncodeFinish()
{
	// Es gibt zwei M鰃lichkeiten, wie mLow und mHigh liegen, d.h.
	// zwei Bits reichen zur Entscheidung aus.
	
	if( mLow < g_FirstQuarter ) // mLow < FirstQuarter < Half <= mHigh
	{
		SetBit( 0 );

		for( int i=0; i<mScale+1; i++ ) // 1 + e3-Skalierung abbauen
			SetBit(1);
	}
	else // mLow < Half < ThirdQuarter <= mHigh
	{
		SetBit( 1 ); // der Decoder f黦t die Nullen automatisch an
	}

	// Ausgabepuffer leeren
	SetBitFlush();
}

void ArithmeticCoderC::DecodeStart()
{
	// Puffer mit Bits aus dem Eingabe-Code f黮len
	for( int i=0; i<31; i++ ) // benutze nur die unteren 31 bit
		mBuffer = ( mBuffer << 1 ) | GetBit();
}

unsigned int ArithmeticCoderC::DecodeTarget( const unsigned int total )
// total < 2^29
{
	// Bereich in Schritte unterteilen
	mStep = ( mHigh - mLow + 1 ) / total; // oben offenes intervall => +1

	// aktuellen Wert zur點kgeben
	return ( mBuffer - mLow ) / mStep;	
}

void ArithmeticCoderC::Decode( const unsigned int low_count, 
															 const unsigned int high_count )
{	
	// obere Grenze aktualisieren
	mHigh = mLow + mStep * high_count - 1; // oben offenes intervall => -1

	// untere Grenze aktualisieren
	mLow = mLow + mStep * low_count;

	// e1/e2
	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
	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();
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一卡二卡三卡四卡| 国产欧美日韩另类一区| 精品国产乱码久久久久久久| 亚洲图片欧美激情| 久久99国内精品| 欧美日韩视频第一区| 国产精品嫩草影院com| 麻豆精品一区二区三区| 欧洲亚洲国产日韩| 亚洲欧美在线高清| 国产成人鲁色资源国产91色综| 欧美精品国产精品| 一区二区三区不卡视频| 成人av手机在线观看| 久久精品人人做人人爽人人| 日本女优在线视频一区二区| 91精品福利在线| 成人欧美一区二区三区小说| 国产精品一品二品| 久久婷婷色综合| 久久99精品国产麻豆不卡| 欧美一区二区三区播放老司机 | 欧美日韩国产精选| 一区二区三区小说| 一本大道综合伊人精品热热 | 日韩亚洲欧美成人一区| 亚洲国产成人av网| 欧美私人免费视频| 亚洲美女精品一区| 色综合色综合色综合| 亚洲欧美日韩系列| 色又黄又爽网站www久久| 亚洲天堂精品在线观看| a美女胸又www黄视频久久| 国产精品免费久久| 99久久久久久| 亚洲色图欧美激情| 欧美做爰猛烈大尺度电影无法无天| 国产精品国产a级| 91色|porny| 亚洲一区二区3| 69精品人人人人| 日本美女视频一区二区| 精品久久久久一区| 国产91精品入口| 亚洲蜜臀av乱码久久精品| 欧美色图片你懂的| 免费高清成人在线| 2021国产精品久久精品| 免费成人av在线| 蜜桃久久久久久| 欧美刺激午夜性久久久久久久 | 欧美日韩情趣电影| 日韩国产精品91| 日韩欧美国产wwwww| 国产精品一二三区在线| 亚洲三级在线看| 欧美性色aⅴ视频一区日韩精品| 日韩高清电影一区| 久久久久久久电影| 日本韩国精品在线| 三级欧美韩日大片在线看| 精品伦理精品一区| 色综合天天做天天爱| 日韩专区一卡二卡| 亚洲国产成人私人影院tom| 色综合一个色综合| 精品一区二区免费在线观看| 中文字幕一区二区三区不卡| 91精品福利在线一区二区三区| 国产成a人亚洲精品| 一区二区三区四区不卡在线| 精品国产sm最大网站免费看| 91丨porny丨国产入口| 毛片一区二区三区| 亚洲欧美精品午睡沙发| 精品国产欧美一区二区| 欧美制服丝袜第一页| 国产精品乡下勾搭老头1| 日韩午夜激情免费电影| 成人在线视频首页| 亚洲成人av一区二区三区| 中文字幕亚洲视频| 精品国产一区二区三区久久影院| 色88888久久久久久影院按摩| 久久国产精品色| 亚洲图片一区二区| 国产精品不卡视频| 久久久亚洲精品一区二区三区| 欧美最猛性xxxxx直播| 成人激情小说网站| 国产美女精品一区二区三区| 日韩一区精品字幕| 亚洲欧美激情插| 欧美激情一区二区三区全黄| 日韩欧美高清一区| 欧美麻豆精品久久久久久| 色久综合一二码| 91在线精品一区二区三区| 国产在线观看免费一区| 美女网站色91| 日韩经典中文字幕一区| 亚洲v中文字幕| 亚洲欧洲一区二区在线播放| 亚洲国产高清在线观看视频| 欧美久久久久久久久| 97se亚洲国产综合自在线不卡| 国产在线精品不卡| 毛片av一区二区三区| 日av在线不卡| 青椒成人免费视频| 日韩av在线发布| 亚洲美女在线国产| 亚洲男人电影天堂| 一区二区三区日韩欧美精品 | 国产精品久久久久久久久搜平片| 精品国产亚洲在线| 精品国产免费人成在线观看| 日韩欧美一二三区| 欧美xxx久久| 久久久影视传媒| 久久精品人人做人人爽97| 欧美激情中文不卡| 国产精品福利在线播放| 国产精品福利一区二区三区| 亚洲丝袜美腿综合| 亚洲最新在线观看| 三级不卡在线观看| 美脚の诱脚舐め脚责91| 国产一区二三区| 成人激情小说网站| 欧美中文一区二区三区| 国产偷v国产偷v亚洲高清| 欧美韩国日本不卡| 一级日本不卡的影视| 亚洲一区免费在线观看| 日韩av不卡在线观看| 激情综合色丁香一区二区| 国产成人综合网| 色一情一伦一子一伦一区| 欧美三级三级三级爽爽爽| 日韩精品中文字幕在线不卡尤物| 久久精品男人天堂av| 亚洲人成小说网站色在线| 婷婷开心激情综合| 国产精品一二三四区| 色国产综合视频| 欧美xxx久久| 亚洲人成在线播放网站岛国| 日韩电影在线观看电影| 风间由美性色一区二区三区| 欧美少妇bbb| 久久综合丝袜日本网| 一区二区三区国产精品| 激情欧美日韩一区二区| 色悠悠久久综合| 久久精品视频免费观看| 亚洲高清三级视频| 风间由美性色一区二区三区| 91.com在线观看| 国产精品久久免费看| 美腿丝袜亚洲三区| 97久久久精品综合88久久| 欧美大片一区二区三区| 亚洲精品乱码久久久久久| 国产乱码字幕精品高清av| 欧美亚洲愉拍一区二区| 久久精品一级爱片| 日韩经典一区二区| 一本大道久久a久久综合婷婷 | 欧美三级三级三级| 国产精品色哟哟| 看电视剧不卡顿的网站| 欧美午夜一区二区三区| 中文字幕一区三区| 国产在线不卡一区| 欧美大肚乱孕交hd孕妇| 亚洲成a人v欧美综合天堂 | 国产精品美日韩| 狠狠狠色丁香婷婷综合激情| 欧美精品一二三四| 亚洲一区二区三区四区在线| 成人国产亚洲欧美成人综合网| 精品久久久久久久久久久久包黑料| 亚洲一区在线观看免费观看电影高清| 成人免费视频免费观看| 欧美精品一区二区三区视频| 美美哒免费高清在线观看视频一区二区 | 成人免费在线观看入口| 国产在线精品不卡| 精品欧美久久久| 美女网站在线免费欧美精品| 69堂精品视频| 日韩制服丝袜av| 91精品国产综合久久香蕉的特点 | 美女爽到高潮91| 欧美二区在线观看| 午夜亚洲福利老司机| 欧美日韩国产美| 亚洲v日本v欧美v久久精品|