?? entropystatic.cpp
字號(hào):
ileNumber][nComNumber][r];
delete []m_pcoordSot_EotResTiles[nTileNumber][nComNumber][r];
}
for (l=0;l<m_niniLayerNums;l++)
{
delete []m_pnTruncIndex[nTileNumber][l][nComNumber];
}
delete []m_pBlkRateDistStats[nTileNumber][nComNumber];
delete []m_pcoordSot_EotResTiles[nTileNumber][nComNumber];
delete []m_pPrecNums[nTileNumber][nComNumber];
}
for (l=0;l<m_niniLayerNums;l++)
{
delete []m_pnTruncIndex[nTileNumber][l];
}
delete []m_pBlkRateDistStats[nTileNumber];
delete []m_pcoordSot_EotResTiles[nTileNumber];
delete []m_pnTruncIndex[nTileNumber];
delete []m_pnMrl[nTileNumber];
delete []m_pPrecNums[nTileNumber];
}
delete []m_pnTruncIndex;
delete []m_pBlkRateDistStats;
delete []m_pcoordSot_EotResTiles;
delete []m_pnMrl;
delete []m_pPrecNums;
}
CCoord *** CEBCOTRateAllocator::GetPrecNums()
{
return m_pPrecNums;
}
CCoord **** CEBCOTRateAllocator::GetSot_EotResTiles()
{
return m_pcoordSot_EotResTiles;
}
int CEBCOTRateAllocator::GetLimitedSIndexFromSlope(double slope)
{
int idx;
idx = (int)floor(log2(slope)) + RD_SUMMARY_OFF;
if (idx < 0)
{
return 0;
}
else
if (idx >= RD_SUMMARY_SIZE)
{
return RD_SUMMARY_SIZE-1;
}
else
{
return idx;
}
}
double CEBCOTRateAllocator::GetSlopeFromSIndex(int index)
{
return (double)pow(2,(index-RD_SUMMARY_OFF));
}
void CEBCOTRateAllocator::Initialize()
{
int nTileNums,nComNums;
nTileNums=m_pCodedImgBlkData->GetTileNums();
nComNums=m_pCodedImgBlkData->GetImgComNums();
/*-----------------估計(jì)整個(gè)碼流的字節(jié)數(shù)------------------------*/
//粗略估計(jì)整個(gè)壓縮碼流的字節(jié)數(shù),包括包頭以及壓縮碼流頭等;
//對(duì)包頭進(jìn)行粗略估計(jì),假設(shè)每個(gè)包頭平均有2個(gè)字節(jié);
int nTotLength=0;
nTotLength=m_pnRDSlopesRates[0];
int nAvgPktLenth=0;
int nTileNumber,nComNumber;
int mrl,r;
int nMaxPktNums;
CCoord coordTileOrg,coordTileSiz;
CUnitInfo TileInfo;
bool bIsPrecUsed;
for (nTileNumber=0;nTileNumber<nTileNums;nTileNumber++)
{
nAvgPktLenth=2;
if (pEncoderSpec->pEPHUsed->IsTileSpecified(nTileNumber))
nAvgPktLenth+=CMarkers::EPH_LENGTH;
if (pEncoderSpec->pSOPUsed->IsTileSpecified(nTileNumber))
nAvgPktLenth+=CMarkers::SOP_LENGTH;
for (nComNumber=0;nComNumber<nComNums;nComNumber++)
{
mrl=m_pnMrl[nTileNumber][nComNumber];
bIsPrecUsed=pEncoderSpec->pPrecinctSize->IsPrecinctPartitionUsed(nTileNumber,nComNumber);
if (!bIsPrecUsed)// 未用precinct,則把每一個(gè)分辨率看成是一個(gè)precinct;
{
nTotLength+=m_nLayerNums*nAvgPktLenth*mrl;
}
else
{
for(r=0;r<mrl;r++)
{
nMaxPktNums=m_pPrecNums[nTileNumber][nComNumber][r].m_nX*m_pPrecNums[nTileNumber][nComNumber][r].m_nY;
nTotLength+=nMaxPktNums*nAvgPktLenth*m_nLayerNums;
}
}
}
}//結(jié)束估計(jì)TotLength;
/*-------------估計(jì)每一層的最小字節(jié)數(shù)-----------------*/
//如果某一層的目標(biāo)比特率大于nTotlength,則將該層的目標(biāo)比特率置為nTotlength;
//估計(jì)header的長(zhǎng)度;
int nHeaderLength=m_pHeadEncoder->GetBufferLength();//表示碼流頭的長(zhǎng)度;
for (nTileNumber=0;nTileNumber<nTileNums;nTileNumber++)
{
m_pHeadEncoder->Reset();
m_pHeadEncoder->WriteTilePartHeader(0,nTileNumber);
nHeaderLength+=m_pHeadEncoder->GetBufferLength();
}
double fPixelBits;//整個(gè)圖像的象素?cái)?shù)除以8bit;
fPixelBits=m_pCodedImgBlkData->GetImgInfo().GetImgHeight()*m_pCodedImgBlkData->GetImgInfo().GetImgWidth()/8.0;
m_pEBCOTLayer=new CEBCOTLayer[m_nLayerNums];
int nMinLayerSize=0;//每一層的最小字節(jié)數(shù);
for (nTileNumber=0;nTileNumber<nTileNums;nTileNumber++)
{
for (nComNumber=0;nComNumber<nComNums;nComNumber++)
{
bIsPrecUsed=pEncoderSpec->pPrecinctSize->IsPrecinctPartitionUsed(nTileNumber,nComNumber);
mrl=m_pnMrl[nTileNumber][nComNumber];
if (!bIsPrecUsed)// 未用precinct,則把每一個(gè)分辨率看成是一個(gè)precinct;
{
nMinLayerSize+=MIN_AVG_PACKET_SZ*mrl;
}
else
{
for(r=0;r<mrl;r++)
{
nMaxPktNums=m_pPrecNums[nTileNumber][nComNumber][r].m_nX*m_pPrecNums[nTileNum
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -