📄 imgcomdata.cpp
字号:
_pEncoderSpec->pSegSymbol->GetTileComVal(nTileNumber,nComNumber))
{
temp|=OPT_SEG_MARKERS;
}
m_pHeadBuffer->writeByte(temp);
temp=0;
if (m_pEncoderSpec->pWTFilter->GetTileComVal(nTileNumber,nComNumber)==INT53)
{
temp=1;
}
m_pHeadBuffer->writeByte(temp);
if (bPrecinctUsed)
{
CSizVector *PrecinctSizeDef=&(m_pEncoderSpec->pPrecinctSize->GetTileComVal(nTileNumber,nComNumber));
int veclenth=PrecinctSizeDef->GetSize();
int lev;
int nPPX,nPPY;
CSiz resPrecinct;
int tt=0;
for (lev=nDecLev;lev>=0;lev--)
{
temp=0;
tt=0;
if (lev>=veclenth)
{
resPrecinct=PrecinctSizeDef->GetAt(veclenth-1);
}
else
{
resPrecinct=PrecinctSizeDef->GetAt(lev);
}
nPPX=resPrecinct.GetWidth();
nPPY=resPrecinct.GetHeight();
temp=(BYTE)((nPPY<<4)&(0xf0));
temp|=(BYTE)(nPPX &0x0f);
m_pHeadBuffer->writeByte((BYTE)temp);
}
}
}
void CHeaderEncoder::WriteMainQCD()
{
// int nComNumber;
int nDecLev=m_pEncoderSpec->pWTDecLev->GetDefault();
int *tcIdx=m_pEncoderSpec->pWTDecLev->GetDefRep();
QuantizerType eQuanType=m_pEncoderSpec->pQuantizerType->GetDefault();
m_pHeadBuffer->writeWord(QCD);
int marklenth;
int GuardBits=m_pEncoderSpec->pGuardBits->GetDefault();
BYTE Sqcd=0;
Sqcd=((BYTE)GuardBits)<<SQCX_GB_SHIFT;
/**
此处仅考虑mallat二进制塔式小波分解;
*/
if (tcIdx[0]<0||tcIdx[1]<0)
{
delete []tcIdx;
printf("tile or component index exceeds!\n");
return ;
}
CTileBlkWTData *pCodedTileBlkWTData=m_pCodedImgData->GetTileBlkWTData(tcIdx[0],tcIdx[1]);
delete []tcIdx;
CBandBlkWTData *pCodedBandBlkWTData=pCodedTileBlkWTData->GetTileBlkWTData();
CBand BandInfo;
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&SQCX_EXP_MASK));
}
}
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();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -