H.264句法和语法总结(十一)宏块层预测句法

mb_pred( mb_type ) {  
    if( MbPartPredMode( mb_type, 0 )    = =    Intra_4x4    | |    
        MbPartPredMode( mb_type, 0 )    = =    Intra_16x16 ) {
        if( MbPartPredMode( mb_type, 0 )    = =    Intra_4x4 )        
            for( luma4x4BlkIdx=0; luma4x4BlkIdx<16; luma4x4BlkIdx++ ) {   
                // prev_intra4x4_pred_mode_flag[ luma4x4BlkIdx ] rem_intra4x4_pred_mode[ luma4x4BlkIdx ] 帧内预测的模式也是需要预测的,  prev_intra4x4_pred_mode_flag 用来指明帧内预测时,亮度分量的预测模式的预测值是否就是真实预测模式,如果是,就不需另外再传预测模式。如果不是,就由 rem_intra4x4_pred_mode 指定真实预测模式。       
                prev_intra4x4_pred_mode_flag[ luma4x4BlkIdx ]  
                if( !prev_intra4x4_pred_mode_flag[ luma4x4BlkIdx ] )        
                   rem_intra4x4_pred_mode[ luma4x4BlkIdx ]  
            }        
        // intra_chroma_pred_mode  在帧内预测时指定色度的预测模式,
            intra_chroma_pred_mode        预测模式
            0                                               DC
            1                                               Horizontal
            2                                               Vertical            
            3                                               Plane
 
        intra_chroma_pred_mode  
    } else if( MbPartPredMode( mb_type, 0 )    !=    Direct ) {        
        for( mbPartIdx = 0; mbPartIdx < NumMbPart( mb_type ); mbPartIdx++)                
            if( ( num_ref_idx_l0_active_minus1 > 0    | |
                    mb_field_decoding_flag ) &&    
                MbPartPredMode( mb_type, mbPartIdx )    !=    Pred_L1 )
                // ref_idx_l0[ mbPartIdx]用参考帧队列 L0 进行预测,即前向预测时,参考图像在参考帧队列中的序号。其中 mbPartIdx 是宏块分区的序号。 如 果 当 前 宏 块 是非场宏块 ,  则ref_idx_l0[ mbPartIdx ] 值的范围是0到 num_ref_idx_l0_active_minus1。 否则,如果当前宏块是场宏块,(宏块所在图像是场,当图像是帧场自适应时当前宏块处于场编码的宏块对),ref_idx_l0[ mbPartIdx]值的范围是 0  到 2*num_ref_idx_l0_active_minus1 + 1,如前所述,此时参考帧队列的帧都将拆成场,故参考队列长度加倍。
                ref_idx_l0[ mbPartIdx ]  
        for( mbPartIdx = 0; mbPartIdx < NumMbPart( mb_type ); mbPartIdx++)                
            if( ( num_ref_idx_l1_active_minus1    >    0    | |
                    mb_field_decoding_flag ) &&    
                MbPartPredMode( mb_type, mbPartIdx )    !=    Pred_L0 )
                ref_idx_l1[ mbPartIdx ]  
        for( mbPartIdx = 0; mbPartIdx < NumMbPart( mb_type ); mbPartIdx++)                
            if( MbPartPredMode ( mb_type, mbPartIdx )    !=    Pred_L1 )        
                for( compIdx = 0; compIdx < 2; compIdx++ )        
                   // mvd_l0[ mbPartIdx ][ 0 ][ compIdx ]  运动矢量的预测值和实际值之间的差。mbPartIdx  是宏块分区的序号。CompIdx = 0 时水平运动矢量;  CompIdx = 1 垂直运动矢量。 
                    mvd_l0[ mbPartIdx ][ 0 ][ compIdx ]  
        for( mbPartIdx = 0; mbPartIdx < NumMbPart( mb_type ); mbPartIdx++)                
            if( MbPartPredMode( mb_type, mbPartIdx )    !=    Pred_L0 )        
                for( compIdx = 0; compIdx < 2; compIdx++ )        
                    mvd_l1[ mbPartIdx ][ 0 ][ compIdx ]   
    }        
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值