HM_SCC的调色板模式palette_mode编码流程整理
生活随笔
收集整理的這篇文章主要介紹了
HM_SCC的调色板模式palette_mode编码流程整理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
HM_SCC的調色板模式palette_mode編碼流程整理
不足之處,還請各位大佬多多指教。
HM_SCC_plt_frameworkTEncGOP::TEncGOP(){m_numPalettePred = 0; m_encodePPSPalette = false;}Void TAppEncTop::encode(){ // initialize internal class & member variablesxInitLibCfg();Void TAppEncTop::xInitLibCfg(){ // SCM new added variablesm_cTEncTop.setUsePaletteMode ( m_usePaletteMode );(542-546)m_cTEncTop.setPaletteMaxSize ( m_paletteMaxSize );m_cTEncTop.setPaletteMaxPredSize ( m_paletteMaxPredSize );m_cTEncTop.setPalettePredInSPSEnabled ( m_palettePredInSPSEnabled );m_cTEncTop.setPalettePredInPPSEnabled ( m_palettePredInPPSEnabled );}xCreateLib();Void TAppEncTop::xCreateLib(){m_cTEncTop.create();Void TEncTop::create (){ m_cCuEncoder.create( m_maxTotalCUDepth, m_maxCUWidth, m_maxCUHeight, m_chromaFormatIDC, m_paletteMaxSize, m_paletteMaxPredSize );Void TEncCu::create(){ ... } }}xInitLib(m_isField);Void TAppEncTop::xInitLib(Bool isFieldCoding){m_cTEncTop.init(isFieldCoding);Void TEncTop::init(Bool isFieldCoding){Void TEncTop::xInitSPS(TComSPS &sps){ // Set up SPS screen extension settingssps.getSpsScreenExtension().setUsePaletteMode( m_usePaletteMode ); sps.getSpsScreenExtension().setPaletteMaxSize( m_paletteMaxSize );sps.getSpsScreenExtension().setPaletteMaxPredSize( m_paletteMaxPredSize );sps.getSpsScreenExtension().setMotionVectorResolutionControlIdc( m_motionVectorResolutionControlIdc );assert( m_paletteMaxPredSize <= 128 );}}}// call encoding function for one frameif ( m_isField ) //場編碼// { (399-476,TEncTop.cpp)// m_cTEncTop.encode( bEos, flush ? 0 : pcPicYuvOrg, flush ? 0 : &cPicYuvTrueOrg, snrCSC, m_cListPicYuvRec, outputAccessUnits, iNumEncoded, m_isTopFieldFirst );// Void TEncTop::encode(){// compressGOP(); 469// }// }else{ m_cTEncTop.encode( bEos, flush ? 0 : pcPicYuvOrg, flush ? 0 : &cPicYuvTrueOrg, snrCSC, m_cListPicYuvRec, outputAccessUnits, iNumEncoded );Void TEncTop::encode(){compressGOP(); }}Void TEncGOP::compressGOP(){printf(" => sending PPS %u with %u elements\n", pcSlice->getPPS()->getPPSId(), pcSlice->getPPS()->getPpsScreenExtension().getNumPalettePred()); //1853m_pcSliceEncoder->precompressSlice( pcPic ); Void TEncSlice::precompressSlice( TComPic* pcPic ){}m_pcSliceEncoder->compressSlice ( pcPic, false, false ); Void TEncSlice::compressSlice( TComPic* pcPic, const Bool bCompressEntireSlice, const Bool bFastDeltaQP ){ /* slice-plt-initialize*/palette_initialize {...}; else{xSetPredDefault(lastPalette, lastPaletteSize, pcSlice);} // This will only occur if dependent slice-segments (m_entropyCodingSyncContextState=true) are being used. if( pCurrentTile->getTileWidthInCtus() >= 2 || !m_pcCfg->getEntropyCodingSyncEnabledFlag() ){ //初始化;}// run CTU trial encoderm_pcCuEncoder->compressCtu( pCtu, lastPaletteSize, lastPalette ); 933 //默認不執行這個m_pcCuEncoder->compressCtu( pCtu, lastPaletteSize, lastPalette ); 1254 //************默認執行這句********************//Void TEncCu::compressCtu( TComDataCU* pCtu, UChar* lastPaletteSize, Pel lastPalette[][MAX_PALETTE_PRED_SIZE] ){ palette_initialize;xcompressCU();Void TEncCu::xCompressCU( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, const UInt uiDepth DEBUG_STRING_FN_DECLARE(sDebug_), PartSize eParentPartSize ){...palette_initialize;/***********************************************************************************************************************************/testedModes[iterNumber]=xCheckPaletteMode( rpcBestCU, rpcTempCU, false, iterNumber, paletteSize); 1094,1102,1109,1116,unsigned int TEncCu::xCheckPaletteMode(){3447-3470//搜索最佳調色板,返回無符號整型 testedModes表示成功與否。UInt testedModes=m_pcPredSearch->paletteSearch(...); 3460UInt TEncSearch::paletteSearch(){ 8038-8334}}/***********************************************************************************************************************************/Void TEncCu::xCheckRDCostIntra( TComDataCU *&rpcBestCU,TComDataCU *&rpcTempCU,Double &cost,PartSize eSize DEBUG_STRING_FN_DECLARE(sDebug), Bool bRGBIntraModeReuse){m_pcEntropyCoder->encodePaletteModeInfo( rpcTempCU, 0, true, &bCodeDQP, &codeChromaQpAdjFlag ); }Void TEncCu::xCheckIntraPCM( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU ){m_pcEntropyCoder->encodePaletteModeInfo( rpcTempCU, 0, true ); }Void TEncCu::xCheckDQP( TComDataCU* pcCU ){if ( pcCU->getQtRootCbf( 0) || ( pcCU->getPaletteModeFlag(0) && pcCU->getPaletteEscape(COMPONENT_Y, 0) ) ){...} }Void TEncCu::xCheckRDCostIntraCSC(){m_pcEntropyCoder->encodePaletteModeInfo( rpcTempCU, 0, true, &bCodeDQP, &codeChromaQpAdjFlag ); }}}// encode CTU and calculate the true bit counters.m_pcCuEncoder->encodeCtu( pCtu ); m_pcCuEncoder->encodeCtu( pCtu ); 1596 //************默認執行這句進入CTU編碼********************//Void TEncCu::encodeCtu ( TComDataCU* pCtu ){// Encode CU dataxEncodeCU( pCtu, 0, 0 );Void TEncCu::xEncodeCU( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ){}}}// SCM added functionsVoid TEncSlice::xSetPredFromPPS(Pel lastPalette[MAX_NUM_COMPONENT][MAX_PALETTE_PRED_SIZE], UChar lastPaletteSize[MAX_NUM_COMPONENT], TComSlice *pcSlice)Void TEncSlice::xSetPredFromSPS(Pel lastPalette[MAX_NUM_COMPONENT][MAX_PALETTE_PRED_SIZE], UChar lastPaletteSize[MAX_NUM_COMPONENT], TComSlice *pcSlice)Void TEncSlice::xSetPredDefault(Pel lastPalette[MAX_NUM_COMPONENT][MAX_PALETTE_PRED_SIZE], UChar lastPaletteSize[MAX_NUM_COMPONENT], TComSlice *pcSlice)}}總結
以上是生活随笔為你收集整理的HM_SCC的调色板模式palette_mode编码流程整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习使用php的stripslashe(
- 下一篇: 电脑城奸商最怕顾客知道的十条经验