?? pktheaderbitreader.cpp
字號:
][nComNumber][r][s],sizeof(int)*nBlkNums);
memcpy(m_pnbakprevCBlkTruncIndex[nTileNumber][nComNumber][r][s],m_pnlastCBlkTruncIndex[nTileNumber][nComNumber][r][s],sizeof(int)*nBlkNums);
for (nPrecNumber=0;nPrecNumber<nPrecNums;nPrecNumber++)
{
m_ptagtreeCBlkInclusion[nTileNumber][nComNumber][r][s][nPrecNumber].Save();
m_ptagtreeCBlkMaxBitPlane[nTileNumber][nComNumber][r][s][nPrecNumber].Save();
}
}
}
/*
分辨率r=0時;
*/
nPrecNums=(m_pcoordPrecNums[nTileNumber][nComNumber][0].m_nX)*(m_pcoordPrecNums[nTileNumber][nComNumber][0].m_nY);
nBlkNums=m_pnBlkNumsInSuband[nTileNumber][nComNumber][0];
memcpy(m_pnbakLBlock[nTileNumber][nComNumber][0][0],m_pnLBlock[nTileNumber][nComNumber][r][0],sizeof(int)*nBlkNums);
memcpy(m_pnbakprevCBlkTruncIndex[nTileNumber][nComNumber][0][0],m_pnlastCBlkTruncIndex[nTileNumber][nComNumber][r][0],sizeof(int)*nBlkNums);
for (nPrecNumber=0;nPrecNumber<nPrecNums;nPrecNumber++)
{
m_ptagtreeCBlkInclusion[nTileNumber][nComNumber][0][0][nPrecNumber].Save();
m_ptagtreeCBlkMaxBitPlane[nTileNumber][nComNumber][0][0][nPrecNumber].Save();
}
}
m_bSaved=true;
}
bool CPacketEncoder::EncodePacket(int Layer, int nComNumber, int nTileNumber, int r, int nPrecIndex, CBlkRateDistStats ***pBlkRateDistStats, int **pnBlkTruncIndex)
{
int starts,ends,s;
if (r==0)
{
starts=0;
ends=0;
}
else
{
starts=1;
ends=3;
}
bool bIsPrecUsed=pEncoderSpec->pPrecinctSize->IsPrecinctPartitionUsed(nTileNumber,nComNumber);
/*-------首先,判斷與該precinct對應(yīng)的packet是否為空-----*/
bool bIsPktEmpty=true;
int *pnCBlkInPrec=0;
for (s=starts;s<=ends;s++)
{
if (m_pPrecInResTile[nTileNumber][nComNumber][r][s]==0)
{
continue;
}
else
{
pnCBlkInPrec=GetBlkInPrec(nTileNumber,nComNumber,r,s,nPrecIndex);
if (pnCBlkInPrec==0)//沒有碼塊位于這個PrecIndex所指的區(qū)域中;
{
continue;
}
else
{
bIsPktEmpty=false;
delete []pnCBlkInPrec;
pnCBlkInPrec=0;
break;
}
}
}
/*
重置包頭編碼緩沖區(qū),以編碼新包;
*/
m_PktHeaderBuf.Reset();
/*
重置包體,釋放所占的空間;
*/
if (m_pPktBody!=0)
{
delete []m_pPktBody;
m_pPktBody=0;
m_nPktBodyLenth=0;
}
/*---如果包是空的---*/
if (bIsPktEmpty)
{
m_bIsPktWritable=true;
m_PktHeaderBuf.WriteBit(0);
return true;
}
/*-------若包不為空-------*/
m_PktHeaderBuf.WriteBit(1);
int nXBlkNums,nYBlkNums;
int nBlkIndex,nBlkNumber;
int nBlkInPrecNums;
int nXBlkNumber,nYBlkNumber;
int nfirstXBlkNumber,nfirstYBlkNumber;
int nSkipBP;
int **pnlastCBlkTruncIndex=m_pnlastCBlkTruncIndex[nTileNumber][nComNumber][r];
CTagTreeEncoder **ptagtreeCBlkInclusion=m_ptagtreeCBlkInclusion[nTileNumber][nComNumber][r];
CTagTreeEncoder **ptagtreeCBlkMaxBitPlane=m_ptagtreeCBlkMaxBitPlane[nTileNumber][nComNumber][r];
int i,thmax;
int nNewpassNums;
int nMaxpassIndex;
int nBlkInPktLenth;
int nMinBits;
int nPredBits;
int nBits;
bool bIsPrecExist=false;
/*---------------------------
* 包的頭信息編碼
----------------------------*/
/*
按LL,HL,LH,HH子帶順序依次進行編碼;
參考P64;
*/
for (s=starts;s<=ends;s++)
{
if (m_pPrecInResTile[nTileNumber][nComNumber][r][s]==0)
{
continue;
}
/*判斷由nPrecIndex所指的區(qū)域是否在s子帶上;
m_pPrecInResTile[nTileNumber][nComNumber][r][s][nPrecIndex]的UnitNumber初始化
為-1;
*/
if (m_pPrecInResTile[nTileNumber][nComNumber][r][s][nPrecIndex].GetUnitNumber()<0)
//
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -