算术编码作业-整数
算术编码解码,内附论文,完整源代码,论文相关ppt,还有个exe相关程序。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 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个文件信息
#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个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)