日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HM_SCC的调色板模式palette_mode编码流程整理

發布時間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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编码流程整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。