• 大小: 1.11MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-31
  • 语言: 其他
  • 标签: 整数型  

资源简介

算术编码解码,内附论文,完整源代码,论文相关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  code\ac.dsp

     文件        555  2001-11-15 17:51  code\ac.dsw

     文件      58368  2011-11-06 15:00  code\ac.ncb

     文件      56832  2011-11-06 15:00  code\ac.opt

     文件       1759  2011-10-26 20:36  code\ac.plg

     文件       4634  2011-10-26 20:36  code\ArithmeticCoderC.cpp

     文件       1167  2011-10-26 20:41  code\ArithmeticCoderC.h

     文件         72  2011-10-26 20:24  code\data.txt

     文件        480  2011-10-26 20:45  code\main.cpp

     文件        331  2011-10-26 20:25  code\ModelI.cpp

     文件        377  2001-11-27 18:26  code\ModelI.h

     文件       1401  2001-11-27 23:29  code\ModelOrder0C.cpp

     文件        270  2001-11-27 18:25  code\ModelOrder0C.h

     文件        638  2011-10-26 20:24  code\outdata.txt

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

     文件      22528  2002-02-24 14:39  scale\acvis.dll

     文件     637952  2002-03-15 14:10  scale\ACVis.exe

     文件        371  2002-02-18 19:48  scale\NO.gif

     文件        245  2002-02-18 19:54  scale\NOs.gif

     文件         78  2002-02-18 19:43  scale\O.gif

     文件        434  2002-02-18 19:48  scale\SO.gif

     文件        243  2002-02-18 19:54  scale\SOs.gif

     文件       4565  2003-06-23 14:50  source_en\ArithmeticCoderC.cpp

     文件        923  2001-11-27 17:25  source_en\ArithmeticCoderC.h

     文件       1312  2003-06-23 14:51  source_en\Main.cpp

     文件        365  2003-06-23 14:51  source_en\ModelI.cpp

     文件        377  2001-11-27 17:26  source_en\ModelI.h

     文件       1448  2003-06-23 14:54  source_en\ModelOrder0C.cpp

     文件        270  2001-11-27 17:25  source_en\ModelOrder0C.h

     文件        109  2001-11-15 17:50  source_en\Tools.h

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

评论

共有 条评论