JM73中encode_one_marcoblock()中关于帧内预测的函数流程===附:帧内预测的算法流程

 

if (input->rdopt)


 

      IntraChromaPrediction8x8() //8*8色度块的帧内预测,挑选最佳模式

 

 

      Loop over 8*8 chroma intra prediction modes:


 

             垂直、水平、平面预测模式不能进行的条件,跳出循环

 

 

             Loop over macroblock mode


 

                    for INTER16x16 check all prediction directions


 

                    if(valid mode)


 

                           SetModesAndRefframeForBlocks() //设置各种块类型(帧间和帧内)下的参考帧及预测模式

 

 

                           If (MB type is intra and chroma prediction mode is DC ,RDCost_for_macroblocks(mode)>0)


 

                                store_macroblock_parameters()   //计算帧内7种编码模块亮度编码RD_cost,并保存其结果

 

 

                    if(b_skip andRDCost_for_macroblocks(mode)>0)


 

                           store_macroblock_parameters()


 

else  //从下面几种模式中选取最佳预测模式,这个为什么没分 亮度和色度块来考虑难道非率失真模式下的拉格朗日方法不需同时考虑亮度和色度的开销

 

 

      check DIRECT MODE


 

      check INTRA4*4


 

      check INTRA16*16


 

if (input->rdopt)


 

      set_stored_macroblock_parameters ()  //保存宏块参数

 

 

else //对不同模式保存不同的参数

 

 

      SetModesAndRefframeForBlocks()


 

      If(best_mode==p8*8)


 

             SetCoeffAndReconstruction8x8()


 

      else


 

             if (best_mode!=I4MB)


 

                    帧内预测模式设为DC


 

                    if (best_mode!=I16MB)


 

                           LumaResidualCoding () //rdo==0情况下,前面只是计算了预测值,并没有算dct


 

      IntraChromaPrediction8x8() //对色差进行8*8帧内预测,选出一个最好的

 

 

      ChromaResidualCoding()  

      SetMotionVectorsMB()


 

      check for SKIP mode


 

Decide if this MB will restrict the reference frames

 

 

附:帧内预测的算法流程(转载)

       对一个宏块进行帧内预测的具体过程如下:
            (1)对于8x8色度块就选择一种帧内色度预测模式建立相应的帧内预测块;
            (2)按遍历的方法分别计算4种Intra_16x16帧内预测模式的代价(Rdcost16x16),选择具有最小代价(Rdcost16x16)的模式作为16x16亮度块的最佳帧内预测模式,进而获得该宏块在16x16亮度块帧内预测模式下的率失真开销(RdcostMB)。
            (3)对于4x4亮度块选择一种Intra_4x4帧内预测模式建立相应的帧内预测块。
            (4)用拉格朗日率失真函数计算该预测模式下的代价(Rdcost4x4)。
            (5)重复3,4步,遍历所有9种4x4亮度块帧内预测模式,选择具有最小代价(Rdcost4x4)的模式作为4x4亮度块的最佳帧内预测模式。
            (6)对当前宏块中16个4x4亮度块重复第3步至第5步,获得每一个4x4亮度块的最佳帧内预测模式和相应的代价Rdcost4x4,进而获得该宏块在4x4亮度块帧内预测模式下的率失真开销(RdcostMB)。
           (7)选择第2步和第6步中具有最小宏块率失真开销(RdcostMB)的模式作为该色度下的最优模式组合。
           (8)重复第1步至第7步,遍历所有8x8色度块帧内预测模式下的最优模式组合,选择具有最小RdcostMB的模式组合作为该宏块的最佳帧内预测模式组合。

             这样每一个宏块都要进行M8 x (M4 x 16 + M16)次RDO计算,其中M8、M4、M16分别表示8x8色度块、4x4亮度块、16x16亮度块的预测模式数,这也就意味着每个宏块要进行592次RDO计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值