📄 imgcomdatabyte.cpp
字号:
fo;
int bandIdx;
int nEb,nUb;
WORD usEb,usUb,temp;
switch (eQuanType)
{
case TYPE_NO_QUANT:
{
marklenth=3+nDecLev*3+1;
m_pHeadBuffer->writeWord((WORD)marklenth);
Sqcd|=(BYTE)SQCX_NO_QUANTIZATION;
m_pHeadBuffer->writeByte(Sqcd);
for (bandIdx=0;bandIdx<3*nDecLev+1;bandIdx++)
{
BandInfo=pCodedBandBlkWTData[bandIdx].GetBandInfo();
nEb=BandInfo.GetEb();
m_pHeadBuffer->writeByte((BYTE)(nEb&0x1F));
}
}
break;
case TYPE_IMPLICIT_QUANT:
{
marklenth=3+2;
m_pHeadBuffer->writeWord((WORD)marklenth);
Sqcd|=(BYTE)SQCX_SCALAR_DERIVED;
m_pHeadBuffer->writeByte(Sqcd);
BandInfo=pCodedBandBlkWTData[0].GetBandInfo();
nEb=BandInfo.GetEb();
nUb=BandInfo.GetUb();
usEb=(WORD)(nEb&CQuantizerStd::QSTEP_MAX_EXPONENT);
usUb=(WORD)(nUb&CQuantizerStd::QSTEP_MAX_MANTISSA);
temp=0;
temp=(usEb<<(CQuantizerStd::QSTEP_MANTISSA_BITS))|usUb;
m_pHeadBuffer->writeWord(temp);
}
break;
case TYPE_EXPLICIT_QUANT:
{
marklenth=3+2*(nDecLev*3+1);
m_pHeadBuffer->writeWord((WORD)marklenth);
Sqcd|=(BYTE)SQCX_SCALAR_EXPOUNDED;
m_pHeadBuffer->writeByte(Sqcd);
for (bandIdx=0;bandIdx<3*nDecLev+1;bandIdx++)
{
BandInfo=pCodedBandBlkWTData[bandIdx].GetBandInfo();
nEb=BandInfo.GetEb();
nUb=BandInfo.GetUb();
usEb=(WORD)(nEb&CQuantizerStd::QSTEP_MAX_EXPONENT);
usUb=(WORD)(nUb&CQuantizerStd::QSTEP_MAX_MANTISSA);
temp=0;
temp=(usEb<<(CQuantizerStd::QSTEP_MANTISSA_BITS))|usUb;
m_pHeadBuffer->writeWord(temp);
}
}
break;
default:
{
printf("quantizer type unknown!\n");
return;
}
}
}
void CHeaderEncoder::WriteTileQCC(int nTileNumber, int nComNumber)
{
int nDecLev=m_pEncoderSpec->pWTDecLev->GetTileComVal(nTileNumber,nComNumber);
QuantizerType eQuanType=m_pEncoderSpec->pQuantizerType->GetTileComVal(nTileNumber,nComNumber);
m_pHeadBuffer->writeWord(QCC);
int nComNums=m_pCodedImgData->GetImgComNums();
int nCqcclenth=1;
if (nComNums>=257)
{
nCqcclenth=2;
}
int marklenth;
int GuardBits=m_pEncoderSpec->pGuardBits->GetTileComVal(nTileNumber,nComNumber);
BYTE Sqcc=0;
Sqcc=((BYTE)GuardBits)<<SQCX_GB_SHIFT;
/**
此处仅考虑mallat二进制塔式小波分解;
*/
CTileBlkWTData *pCodedTileBlkWTData=m_pCodedImgData->GetTileBlkWTData(nTileNumber,nComNumber);
CBandBlkWTData *pCodedBandBlkWTData=pCodedTileBlkWTData->GetTileBlkWTData();
CBand BandInfo;
int bandIdx;
int nEb,nUb;
WORD usEb,usUb,temp;
switch (eQuanType)
{
case TYPE_NO_QUANT:
{
marklenth=2+nCqcclenth+nDecLev*3+1;
m_pHeadBuffer->writeWord((WORD)marklenth);
if (nComNums>=257)
m_pHeadBuffer->writeWord((WORD)nComNumber);
else
m_pHeadBuffer->writeByte((BYTE)nComNumber);
Sqcc|=(BYTE)SQC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -