本文整理汇总了C++中COutBuffer类的典型用法代码示例。如果您正苦于以下问题:C++ COutBuffer类的具体用法?C++ COutBuffer怎么用?C++ COutBuffer使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了COutBuffer类的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DecodeBlock2Rand
static UInt32 NO_INLINE DecodeBlock2Rand(const UInt32 *tt, UInt32 blockSize, UInt32 OrigPtr, COutBuffer &m_OutStream)
{
CBZip2Crc crc;
UInt32 randIndex = 1;
UInt32 randToGo = kRandNums[0] - 2;
unsigned numReps = 0;
// it's for speed optimization: prefetch & prevByte_init;
UInt32 tPos = tt[tt[OrigPtr] >> 8];
unsigned prevByte = (unsigned)(tPos & 0xFF);
do
{
unsigned b = (unsigned)(tPos & 0xFF);
tPos = tt[tPos >> 8];
{
if (randToGo == 0)
{
b ^= 1;
randToGo = kRandNums[randIndex++];
randIndex &= 0x1FF;
}
randToGo--;
}
if (numReps == kRleModeRepSize)
{
for (; b > 0; b--)
{
crc.UpdateByte(prevByte);
m_OutStream.WriteByte((Byte)prevByte);
}
numReps = 0;
continue;
}
if (b != prevByte)
numReps = 0;
numReps++;
prevByte = b;
crc.UpdateByte(b);
m_OutStream.WriteByte((Byte)b);
}
while (--blockSize != 0);
return crc.GetDigest();
}
示例2: getFreeOutBuffer
COutBuffer* COutBufPacket::buildPacket(unsigned char* pBuf,unsigned int nBufLen,unsigned char nRTPPayloadType
,unsigned int nTimestamp,bool isFirstPacket)
{
if(pBuf == NULL || nBufLen == 0 )
return NULL;
unsigned int nCopySize = 0;
COutBuffer * pOutBuf = getFreeOutBuffer(nBufLen);
if(pOutBuf)
{
m_IsFirstPacket = isFirstPacket;
// Set up the RTP header:
unsigned rtpHdr = 0x80000000; // RTP version 2
rtpHdr |= (nRTPPayloadType<<16);
if(nRTPPayloadType == 0)
{
unsigned short nSeqNo = m_nSeqNo++;
pOutBuf->setSeqNo(nSeqNo);
rtpHdr |= nSeqNo; // sequence number
}
else
{
rtpHdr |= 0;
}
pOutBuf->enqueueWord(rtpHdr);
m_nTimestampPosition = pOutBuf->curPacketSize();
pOutBuf->skipBytes(4);
pOutBuf->enqueueWord(m_nSSRC);
// RTP header:
//m_nSpecialHeaderPosition = pOutBuf->curPacketSize();
//m_nSpecialHeaderSize = specialHeaderSize();
//pOutBuf->skipBytes(m_nSpecialHeaderSize);
//m_nTotalFrameSpecificHeaderSizes = 0;
if(pOutBuf->wouldOverflow(nBufLen))
{
pOutBuf->enqueue(pBuf, nBufLen);
setMarkerBit(pOutBuf);
pOutBuf->insertWord(nTimestamp, m_nTimestampPosition);
return pOutBuf;
}
else
{
PutFreeOutBuffer(pOutBuf);
pOutBuf = NULL;
}
}
return NULL;
}
示例3: CodeReal
HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *outStream,
const UInt64 * /* inSize */, const UInt64 * /* outSize */, ICompressProgressInfo *progress)
{
NBitl::CBaseDecoder<CInBuffer> inBuffer;
COutBuffer outBuffer;
if (!inBuffer.Create(kBufferSize))
return E_OUTOFMEMORY;
inBuffer.SetStream(inStream);
inBuffer.Init();
if (!outBuffer.Create(kBufferSize))
return E_OUTOFMEMORY;
outBuffer.SetStream(outStream);
outBuffer.Init();
{
unsigned i;
for (i = 0; i < 257; i++)
_parents[i] = (UInt16)i;
for (; i < kNumItems; i++)
_parents[i] = kNumItems;
for (i = 0; i < kNumItems; i++)
_suffixes[i] = 0;
}
UInt64 prevPos = 0;
unsigned numBits = kNumMinBits;
unsigned head = 257;
int lastSym = -1;
Byte lastChar2 = 0;
for (;;)
{
UInt32 sym = inBuffer.ReadBits(numBits);
if (inBuffer.ExtraBitsWereRead())
break;
if (sym == 256)
{
sym = inBuffer.ReadBits(numBits);
if (sym == 1)
{
if (numBits >= kNumMaxBits)
return S_FALSE;
numBits++;
continue;
}
if (sym != 2)
return S_FALSE;
{
unsigned i;
for (i = 257; i < kNumItems; i++)
_stack[i] = 0;
for (i = 257; i < kNumItems; i++)
{
unsigned par = _parents[i];
if (par != kNumItems)
_stack[par] = 1;
}
for (i = 257; i < kNumItems; i++)
if (_stack[i] == 0)
_parents[i] = kNumItems;
head = 257;
continue;
}
}
bool needPrev = false;
if (head < kNumItems && lastSym >= 0)
{
while (head < kNumItems && _parents[head] != kNumItems)
head++;
if (head < kNumItems)
{
if (head == (unsigned)lastSym)
{
// we need to fix the code for that case
// _parents[head] is not allowed to link to itself
return E_NOTIMPL;
}
needPrev = true;
_parents[head] = (UInt16)lastSym;
_suffixes[head] = (Byte)lastChar2;
head++;
}
}
if (_parents[sym] == kNumItems)
return S_FALSE;
lastSym = sym;
unsigned cur = sym;
unsigned i = 0;
while (cur >= 256)
{
//.........这里部分代码省略.........
示例4: DecodeBlock2
static UInt32 NO_INLINE DecodeBlock2(const UInt32 *tt, UInt32 blockSize, UInt32 OrigPtr, COutBuffer &m_OutStream)
{
CBZip2Crc crc;
// it's for speed optimization: prefetch & prevByte_init;
UInt32 tPos = tt[tt[OrigPtr] >> 8];
unsigned prevByte = (unsigned)(tPos & 0xFF);
unsigned numReps = 0;
do
{
unsigned b = (unsigned)(tPos & 0xFF);
tPos = tt[tPos >> 8];
if (numReps == kRleModeRepSize)
{
for (; b > 0; b--)
{
crc.UpdateByte(prevByte);
m_OutStream.WriteByte((Byte)prevByte);
}
numReps = 0;
continue;
}
if (b != prevByte)
numReps = 0;
numReps++;
prevByte = b;
crc.UpdateByte(b);
m_OutStream.WriteByte((Byte)b);
/*
prevByte = b;
crc.UpdateByte(b);
m_OutStream.WriteByte((Byte)b);
for (; --blockSize != 0;)
{
b = (unsigned)(tPos & 0xFF);
tPos = tt[tPos >> 8];
crc.UpdateByte(b);
m_OutStream.WriteByte((Byte)b);
if (b != prevByte)
{
prevByte = b;
continue;
}
if (--blockSize == 0)
break;
b = (unsigned)(tPos & 0xFF);
tPos = tt[tPos >> 8];
crc.UpdateByte(b);
m_OutStream.WriteByte((Byte)b);
if (b != prevByte)
{
prevByte = b;
continue;
}
if (--blockSize == 0)
break;
b = (unsigned)(tPos & 0xFF);
tPos = tt[tPos >> 8];
crc.UpdateByte(b);
m_OutStream.WriteByte((Byte)b);
if (b != prevByte)
{
prevByte = b;
continue;
}
--blockSize;
break;
}
if (blockSize == 0)
break;
b = (unsigned)(tPos & 0xFF);
tPos = tt[tPos >> 8];
for (; b > 0; b--)
{
crc.UpdateByte(prevByte);
m_OutStream.WriteByte((Byte)prevByte);
}
*/
}
while (--blockSize != 0);
return crc.GetDigest();
}
示例5: CodeReal
STDMETHODIMP CDecoder::CodeReal(ISequentialInStream *inStream,
ISequentialOutStream *outStream, const UInt64 * /* inSize */, const UInt64 * /* outSize */,
ICompressProgressInfo *progress)
{
NStream::NLSBF::CBaseDecoder<CInBuffer> inBuffer;
COutBuffer outBuffer;
if (!inBuffer.Create(kBufferSize))
return E_OUTOFMEMORY;
inBuffer.SetStream(inStream);
inBuffer.Init();
if (!outBuffer.Create(kBufferSize))
return E_OUTOFMEMORY;
outBuffer.SetStream(outStream);
outBuffer.Init();
int maxbits = _properties & kNumBitsMask;
if (maxbits < kNumMinBits || maxbits > kNumMaxBits)
return S_FALSE;
UInt32 numItems = 1 << maxbits;
bool blockMode = ((_properties & kBlockModeMask) != 0);
if (!blockMode)
return E_NOTIMPL;
if (maxbits != _numMaxBits || _parents == 0 || _suffixes == 0 || _stack == 0)
{
if (!Alloc(numItems))
return E_OUTOFMEMORY;
_numMaxBits = maxbits;
}
UInt64 prevPos = 0;
int numBits = kNumMinBits;
UInt32 head = blockMode ? 257 : 256;
bool needPrev = false;
int keepBits = 0;
_parents[256] = 0; // virus protection
_suffixes[256] = 0;
for (;;)
{
if (keepBits < numBits)
keepBits = numBits * 8;
UInt32 symbol = inBuffer.ReadBits(numBits);
if (inBuffer.ExtraBitsWereRead())
break;
keepBits -= numBits;
if (symbol >= head)
return S_FALSE;
if (blockMode && symbol == 256)
{
for (;keepBits > 0; keepBits--)
inBuffer.ReadBits(1);
numBits = kNumMinBits;
head = 257;
needPrev = false;
continue;
}
UInt32 cur = symbol;
int i = 0;
while (cur >= 256)
{
_stack[i++] = _suffixes[cur];
cur = _parents[cur];
}
_stack[i++] = (Byte)cur;
if (needPrev)
{
_suffixes[head - 1] = (Byte)cur;
if (symbol == head - 1)
_stack[0] = (Byte)cur;
}
while (i > 0)
outBuffer.WriteByte((_stack[--i]));
if (head < numItems)
{
needPrev = true;
_parents[head++] = (UInt16)symbol;
if (head > ((UInt32)1 << numBits))
{
if (numBits < maxbits)
{
numBits++;
keepBits = numBits * 8;
}
}
}
else
needPrev = false;
UInt64 nowPos = outBuffer.GetProcessedSize();
if (progress != NULL && nowPos - prevPos > (1 << 18))
{
prevPos = nowPos;
UInt64 packSize = inBuffer.GetProcessedSize();
RINOK(progress->SetRatioInfo(&packSize, &nowPos));
//.........这里部分代码省略.........
示例6: CodeReal
HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream *outStream,
const UInt64 * /* inSize */, const UInt64 * /* outSize */, ICompressProgressInfo *progress)
{
NBitl::CBaseDecoder<CInBuffer> inBuffer;
COutBuffer outBuffer;
if (!inBuffer.Create(kBufferSize))
return E_OUTOFMEMORY;
inBuffer.SetStream(inStream);
inBuffer.Init();
if (!outBuffer.Create(kBufferSize))
return E_OUTOFMEMORY;
outBuffer.SetStream(outStream);
outBuffer.Init();
UInt64 prevPos = 0;
int numBits = kNumMinBits;
UInt32 head = 257;
bool needPrev = false;
UInt32 lastSymbol = 0;
int i;
for (i = 0; i < kNumItems; i++)
_parents[i] = 0;
for (i = 0; i < kNumItems; i++)
_suffixes[i] = 0;
for (i = 0; i < 257; i++)
_isFree[i] = false;
for (; i < kNumItems; i++)
_isFree[i] = true;
for (;;)
{
UInt32 symbol = inBuffer.ReadBits(numBits);
if (inBuffer.ExtraBitsWereRead())
break;
if (_isFree[symbol])
return S_FALSE;
if (symbol == 256)
{
UInt32 symbol = inBuffer.ReadBits(numBits);
if (symbol == 1)
{
if (numBits < kNumMaxBits)
numBits++;
}
else if (symbol == 2)
{
if (needPrev)
_isFree[head - 1] = true;
for (i = 257; i < kNumItems; i++)
_isParent[i] = false;
for (i = 257; i < kNumItems; i++)
if (!_isFree[i])
_isParent[_parents[i]] = true;
for (i = 257; i < kNumItems; i++)
if (!_isParent[i])
_isFree[i] = true;
head = 257;
while (head < kNumItems && !_isFree[head])
head++;
if (head < kNumItems)
{
needPrev = true;
_isFree[head] = false;
_parents[head] = (UInt16)lastSymbol;
head++;
}
}
else
return S_FALSE;
continue;
}
UInt32 cur = symbol;
i = 0;
int corectionIndex = -1;
while (cur >= 256)
{
if (cur == head - 1)
corectionIndex = i;
_stack[i++] = _suffixes[cur];
cur = _parents[cur];
}
_stack[i++] = (Byte)cur;
if (needPrev)
{
_suffixes[head - 1] = (Byte)cur;
if (corectionIndex >= 0)
_stack[corectionIndex] = (Byte)cur;
}
while (i > 0)
outBuffer.WriteByte((_stack[--i]));
while (head < kNumItems && !_isFree[head])
head++;
if (head < kNumItems)
{
needPrev = true;
_isFree[head] = false;
_parents[head] = (UInt16)symbol;
//.........这里部分代码省略.........