58 lines
1.1 KiB
C++
58 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include "Types.h"
|
|
#include "Utils.h"
|
|
|
|
namespace Jpeg2000
|
|
{
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
Raw* Raw_Create()
|
|
{
|
|
Raw *pRaw = (Raw*)Malloc(sizeof(Raw));
|
|
return pRaw;
|
|
}
|
|
|
|
void Raw_Destroy(Raw *pRaw)
|
|
{
|
|
Free(pRaw);
|
|
}
|
|
|
|
int Raw_BytesCount(Raw *pRaw)
|
|
{
|
|
return pRaw->pBufferPointer - pRaw->pBufferStart;
|
|
}
|
|
|
|
void Raw_InitDecoder(Raw *pRaw, unsigned char *pBuffer, int nLen)
|
|
{
|
|
pRaw->pBufferStart = pBuffer;
|
|
pRaw->nMaxLen = nLen;
|
|
pRaw->nLen = 0;
|
|
pRaw->nBuffer = 0;
|
|
pRaw->nFreeBitsCount = 0;
|
|
}
|
|
|
|
int Raw_Decode(Raw *pRaw)
|
|
{
|
|
if (pRaw->nFreeBitsCount == 0)
|
|
{
|
|
pRaw->nFreeBitsCount = 8;
|
|
if (pRaw->nLen == pRaw->nMaxLen)
|
|
{
|
|
pRaw->nBuffer = 0xff;
|
|
}
|
|
else
|
|
{
|
|
if (pRaw->nBuffer == 0xff)
|
|
{
|
|
pRaw->nFreeBitsCount = 7;
|
|
}
|
|
pRaw->nBuffer = *(pRaw->pBufferStart + pRaw->nLen);
|
|
pRaw->nLen++;
|
|
}
|
|
}
|
|
pRaw->nFreeBitsCount--;
|
|
int nResult = (pRaw->nBuffer >> pRaw->nFreeBitsCount) & 0x01;
|
|
|
|
return nResult;
|
|
}
|
|
} |