算术编码作业-整数


算术编码解码,内附论文,完整源代码,论文相关ppt,还有个exe相关程序。
资源截图
代码片段和文件信息
#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
{
v_char.push_back(mBitBuffer);//
// schreiben
mFile->write(reinterpret_cast(&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(&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;
v_mStep.push_back(mStep);
v_mHigh.push_back(mHigh);
v_mLow.push_back(mLow);

// 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;
}
v_mScale.push_back(mScale);
}

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

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4733  2011-10-23 22:22  codeac.dsp

     文件        555  2001-11-15 17:51  codeac.dsw

     文件      58368  2011-11-06 15:00  codeac.ncb

     文件      56832  2011-11-06 15:00  codeac.opt

     文件       1759  2011-10-26 20:36  codeac.plg

     文件       4634  2011-10-26 20:36  codeArithmeticCoderC.cpp

     文件       1167  2011-10-26 20:41  codeArithmeticCoderC.h

     文件         72  2011-10-26 20:24  codedata.txt

     文件        480  2011-10-26 20:45  codemain.cpp

     文件        331  2011-10-26 20:25  codeModelI.cpp

     文件        377  2001-11-27 18:26  codeModelI.h

     文件       1401  2001-11-27 23:29  codeModelOrder0C.cpp

     文件        270  2001-11-27 18:25  codeModelOrder0C.h

     文件        638  2011-10-26 20:24  codeoutdata.txt

     文件        109  2001-11-15 18:50  code ools.h

     文件      22528  2002-02-24 14:39  scaleacvis.dll

     文件     637952  2002-03-15 14:10  scaleACVis.exe

     文件        371  2002-02-18 19:48  scaleNO.gif

     文件        245  2002-02-18 19:54  scaleNOs.gif

     文件         78  2002-02-18 19:43  scaleO.gif

     文件        434  2002-02-18 19:48  scaleSO.gif

     文件        243  2002-02-18 19:54  scaleSOs.gif

     文件       4565  2003-06-23 14:50  source_enArithmeticCoderC.cpp

     文件        923  2001-11-27 17:25  source_enArithmeticCoderC.h

     文件       1312  2003-06-23 14:51  source_enMain.cpp

     文件        365  2003-06-23 14:51  source_enModelI.cpp

     文件        377  2001-11-27 17:26  source_enModelI.h

     文件       1448  2003-06-23 14:54  source_enModelOrder0C.cpp

     文件        270  2001-11-27 17:25  source_enModelOrder0C.h

     文件        109  2001-11-15 17:50  source_enTools.h

............此处省略9个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)