題記:
hevc 標準中所推薦的位元速率控制模型不像h.264中推薦 《二次率失真模型》, 而採用了 r-lambda 模型。
模型較簡單,主要提案涉及三個
jct-vc k0103
jct-vc m0257
jct-vc m0036
在hm中對應的**如下:
group level group_level_rc
#if rate_control_lambda_domain
if ( m_rcenableratecontrol )
#endif
slice level slice_level_rc
#if rate_control_lambda_domain
double lambda = 0.0;
int actualheadbits = 0;
int actualtotalbits = 0;
int estimatedbits = 0;
int tmpbitsbeforewriting = 0;
if ( m_pccfg->getuseratectrl() )
m_pcratectrl->initrcpic( framelevel );
estimatedbits = m_pcratectrl->getrcpic()->gettargetbits();
int sliceqp = m_pccfg->getinitialqp();
if ( ( pcslice->getpoc() == 0 && m_pccfg->getinitialqp() > 0 ) || ( framelevel == 0 && m_pccfg->getforceintraqp() ) ) // qp is specified
else if ( framelevel == 0 ) // intra case, but use the model
m_pcratectrl->getrcpic()->settargetbits( bits );
}listlistpreviouspicture = m_pcratectrl->getpiclist();
#if rate_control_intra
m_pcratectrl->getrcpic()->getlcuinittargetbits(); // to set lcu target bits
lambda = m_pcratectrl->getrcpic()->estimatepiclambda( listpreviouspicture, pcslice->getslicetype());
#else
lambda = m_pcratectrl->getrcpic()->estimatepiclambda( listpreviouspicture );
#endif
sliceqp = m_pcratectrl->getrcpic()->estimatepicqp( lambda, listpreviouspicture );
}else // normal case
sliceqp = clip3( -pcslice->getsps()->getqpbdoffsety(), max_qp, sliceqp );
m_pcratectrl->getrcpic()->setpicestqp( sliceqp );
m_pcsliceencoder->resetqp( pcpic, sliceqp, lambda );
}#endif
lcu level cu_level_rc
#if rate_control_lambda_domain
double oldlambda = m_pcrdcost->getlambda();
if ( m_pccfg->getuseratectrl() )
else
else
#else
bpp = m_pcratectrl->getrcpic()->getlcutargetbpp();
estlambda = m_pcratectrl->getrcpic()->getlcuestlambda( bpp );
estqp = m_pcratectrl->getrcpic()->getlcuestqp ( estlambda, pcslice->getsliceqp() );
#endif
estqp = clip3( -pcslice->getsps()->getqpbdoffsety(), max_qp, estqp );
m_pcrdcost->setlambda(estlambda); //set lambda in rd-cost function
#if m0036_rc_improvement
#if rdoq_chroma_lambda
// set lambda for rdoq
double weight=m_pcrdcost->getchromaweight();
m_pctrquant->setlambda( estlambda, estlambda / weight );
#else
m_pctrquant->setlambda( estlambda ); //set lambda in transquant function
#endif
#endif
}m_pcratectrl->setrcqp( estqp );
#if adaptive_qp_selection //mhwang
pccu->getslice()->setsliceqpbase( estqp );
#endif
}#endif
HEVC 位元速率控制
位元速率控制通常分為三個level,分別為gop級 frame級 lcu級,其中frame級分為三種方案,分別為等bit位元速率分配 固定比例位元速率分配 自適應比例的位元速率分配,其中固定比例分配方案是李斌博士提出,自適應比例分配是其師弟在其基礎上提出的,本文給出了李斌博士提出的方案。gop級位元...
HEVC位元速率控制資料整理
本篇部落格主要記錄專案過程中參考過 寫得比較好的部落格。hevc專案 可以跟著嶽麓吹雪大神的hevc 學習專欄去學,遇到不清楚或者需要重點了解的再去搜其他的資料。專欄第一篇部落格鏈結 專案內容是要在hevc上修改,使得每幀影象有兩種qp。首先定位到是在slice層或者ctu層或cu上進行qp修改。通...
DVSDK位元速率控制的理解
1.動態引數和靜態引數 建立編碼器的時候,有params和dynparams兩種引數,顧名思義,venc根據params建立,執行過程中又可以對dynparams改變配置 venc1 handle venc1 create engine handle hengine,char codecname,v...