zoukankan      html  css  js  c++  java
  • H264帧内预测模式编号的编码过程

    1 本文词汇约定

      宏块:H264编码基本单元,16x16像素(或采样)构成

      块:   由8x8像素(或采样)构成的单位

      子块:   由4x4像素(或采样)构成的单位

      

    2 帧内亮度预测模式

      H264规范中,宏块有4种帧内亮度预测模式,模式编号为0,1,2,3;块与子块分别有9种帧内亮度预测模式,模式编号从0至9,即0,1,2,.......,8。具体不细说了,可查H264标准。下文以子块为例说明其亮度预测模式如何编码进码流中的。

      

    3 子块亮度预测模式编码的句法元素

      prev_intra4x4_pred_mode_flag:是否使用该子块的上左子块亮度预测模式编号的最小值,在计算出该子块的最佳亮度预测模式后,若基编号与该子块上左子块亮度预测模式编号的最小值相等,prev_intra4x4_pred_mode_flag为1,否则为0。

      rem_intra4x4_pred_mode:prev_intra4x4_pred_mode_flag为0时,指示计算出的该子块的最佳亮度预测模式编号或该子块的最佳亮度预测模式编号减1。

    4 子块亮度预测模式编码的句法元素赋值的伪代码过程

      

      for( luma4x4BlkIdx=0; luma4x4BlkIdx<16; luma4x4BlkIdx++ ) {
    
        MinModeBetwennLeftAndUpSubBlock[luma4x4BlkIdx] = (如果左边子块或上边子块不可用,比如跨片片界或为非帧内编码模式) ? 2 : Min(MinModeOfLeftSubBlock,MinModeOfUpSubBlock);
        BestMode[luma4x4BlkIdx] = 计算子块的最佳亮度预测模式();
        if(BestMode[luma4x4BlkIdx]  == MinModeBetwennLeftAndUpSubBlock[luma4x4BlkIdx]) 
        {
          prev_intra4x4_pred_mode_flag[ luma4x4BlkIdx ] = 1;
        }  
        else
        {
          prev_intra4x4_pred_mode_flag[ luma4x4BlkIdx ] = 0;
        }
    
        if(!prev_intra4x4_pred_mode_flag[ luma4x4BlkIdx ])
        {
          if(BestMode[luma4x4BlkIdx]  < MinModeBetwennLeftAndUpSubBlock[luma4x4BlkIdx])
          {
            rem_intra4x4_pred_mode[ luma4x4BlkIdx ] = BestMode[luma4x4BlkIdx];
          }
          else
          {
            rem_intra4x4_pred_mode[ luma4x4BlkIdx ] = BestMode[luma4x4BlkIdx] - 1;//标注4
          }
        }
      }

    5 为什么要计算MinModeBetwennLeftAndUpSubBlock

      每个4×4 块帧内亮度预测模式编号必须编码传给解码器以便解码。该信息可能需大量比特表示,但邻
      的帧内模式通常是相关的。例如,A、B 、E 分别为左边、上边和当前块,如果 A 和B 预测模式
      式1 ,E 的最佳预测模式很可能也为模式 1 。所以通常利用这种关联性编码 4×4 帧内亮度预测模式编号。

    6 体会H264之博大精深  

      帧内亮度预测模式有9种,其编号为0,1,......,8,其范围上界(8)用2进制数表示需要4位,通过标注4可将rem_intra4x4_pred_mode的值的范围的上界限定为7,从而3位即可表达。少了一位,H264就是通过这样的巧妙设计达到提升编码效率的目的的。

      

      

  • 相关阅读:
    BZOJ 3881: [Coci2015]Divljak
    BZOJ 2434: [Noi2011]阿狸的打字机
    BZOJ 2580: [Usaco2012 Jan]Video Game
    BZOJ 3940: [Usaco2015 Feb]Censoring
    BZOJ 3942: [Usaco2015 Feb]Censoring
    PTA L2-002 链表去重 团体程序设计天梯赛-练习集
    PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集
    PTA L1-020 帅到没朋友 团体程序设计天梯赛-练习集
    Codeforces 429 B. Working out-dp( Codeforces Round #245 (Div. 1))
    HDU 6467.简单数学题-数学题 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
  • 原文地址:https://www.cnblogs.com/oldmanlv/p/6009283.html
Copyright © 2011-2022 走看看