⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 entropystatic.cpp

📁 jpeg 2000 压缩算法源代码 核心ebcot
💻 CPP
字号:
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();
   

	
    /*-----------------估计整个码流的字节数------------------------*/
  
	//粗略估计整个压缩码流的字节数,包括包头以及压缩码流头等;
	//对包头进行粗略估计,假设每个包头平均有2个字节;

	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,则把每一个分辨率看成是一个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;
				}
			}
			
		}

	}//结束估计TotLength;

    
	/*-------------估计每一层的最小字节数-----------------*/

    //如果某一层的目标比特率大于nTotlength,则将该层的目标比特率置为nTotlength;
    
	//估计header的长度;
	int nHeaderLength=m_pHeadEncoder->GetBufferLength();//表示码流头的长度;

	for (nTileNumber=0;nTileNumber<nTileNums;nTileNumber++)
	{
		m_pHeadEncoder->Reset();
		m_pHeadEncoder->WriteTilePartHeader(0,nTileNumber);
		nHeaderLength+=m_pHeadEncoder->GetBufferLength();
	}

	double fPixelBits;//整个图像的象素数除以8bit;
    

	fPixelBits=m_pCodedImgBlkData->GetImgInfo().GetImgHeight()*m_pCodedImgBlkData->GetImgInfo().GetImgWidth()/8.0;




	m_pEBCOTLayer=new CEBCOTLayer[m_nLayerNums];

	int nMinLayerSize=0;//每一层的最小字节数;

	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,则把每一个分辨率看成是一个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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -