深入剖析H.264帧间预测(P宏块)



来自:http://blog.csdn.net/stpeace/article/details/8115392

工具:foreman_qcif.yuv, JM8.6, H.264visa. 下面仅讨论P宏块的亮度Y分量,为简便起见,只讨论整数像素.

 

步骤1:用JM8.6编码foreman_qcif.yuv的3帧(IPP), 得到test.264,用H.264visa打开test.264. 在第二帧中,用H.264visa选中第4行的第9个宏块(宏块共有9行11列),在H.264visa中该宏块位置显示为: MB 41(8, 3)  

 

步骤2:先给出该宏块的重要信息,然后对这个宏块进行分析.

 

              用H.264visa提取的该宏块的基本信息为:

==== MB 41(8, 3) ====
    Location : (128, 48),
    Slice No. : 0
    Slice Type : P Slice
    MB Type : (4)P_8x8ref0
    NumMbPart : 4
    MbPartSize : (8, 8)
    Subblock Type:
       +—————–+—————-+
       |    (2)P_L0_4x8  |    (1)P_L0_8x4 |
       +—————–+—————-+
       |    (1)P_L0_8x4  |    (2)P_L0_4x8 |
       +—————–+—————-+

****** Inter Info ******

Block(0, 0):
  (0,0) L0=MV(-11, 5),POC: 0,refIdx:0,DecNo: 1
  (1,0) L0=MV(-13,-3),POC: 0,refIdx:0,DecNo: 1

Block(1, 0):
  (0,0) L0=MV(-28, 0),POC: 0,refIdx:0,DecNo: 1
  (0,1) L0=MV(-10,-8),POC: 0,refIdx:0,DecNo: 1

Block(0, 1):
  (0,0) L0=MV(-7,-4),POC: 0,refIdx:0,DecNo: 1
  (0,1) L0=MV(-2, 0),POC: 0,refIdx:0,DecNo: 1

Block(1, 1):
  (0,0) L0=MV(-10,-6),POC: 0,refIdx:0,DecNo: 1
  (1,0) L0=MV(-14,-10),POC: 0,refIdx:0,DecNo: 1

 《深入剖析H.264帧间预测(P宏块)》

 

 

            可以看到,其中一块的实际运动矢量为:(-7, 0)(说明-28/4=7, 0/4=0),该块的预测值如下:

====================== Y Data ======================
+—————-+—————-+—————-+—————-+
|177,182,183,184,|182,184,186,185,|184,185,186,184,|187,195,201,202,|
|164,176,181,187,|184,185,187,185,|185,186,187,184,|191,198,201,201,|
|145,169,180,186,|185,186,187,185,|186,187,185,187,|195,199,201,200,|
|135,161,176,177,|187,187,185,188,|187,187,184,191,|198,199,201,199,|
+—————-+—————-+—————-+—————-+
|131,153,171,170,|188,187,184,185,|198,200,201,200,|201,202,202,203,|
|131,148,166,175,|182,189,186,174,|199,200,200,199,|202,203,203,203,|
|133,146,165,182,|176,186,185,169,|173,195,202,198,|201,203,203,202,|
|133,152,171,177,|177,177,171,154,|123,150,190,203,|200,200,201,201,|
+—————-+—————-+—————-+—————-+
|145,164,182,178,|169,150,132,138,|123,110,130,172,|201,200,198,199,|
|150,170,178,181,|184,148,105,130,|142,128,113,127,|172,196,201,199,|
|158,170,174,185,|197,179,144,126,|128,136,126,108,|127,165,205,211,|
|166,173,181,200,|204,209,196,150,|123,117,127,121,|108,123,169,202,|
+—————-+—————-+—————-+—————-+
|199,203,206,210,|199,199,202,203,|163,115,108,129,|121,110,116,155,|
|204,204,198,201,|202,203,205,211,|201,173,132,117,|129,129,112,116,|
|206,206,191,190,|208,209,207,209,|204,215,193,137,|117,129,127,116,|
|211,212,189,196,|213,207,207,208,|206,209,210,194,|137,112,120,127,|
+—————-+—————-+—————-+—————-+

《深入剖析H.264帧间预测(P宏块)》

 

         

          那么这些预测值究竟是怎么得来的呢?第二帧的参考帧是第一帧(帧间),所以该预测值是从第一帧中得来的,平移向量为(-7, 0). 我们知道,帧间预测的参考值是参考块的滤波后的值(这一点与帧内预测不同),下面给出第一帧的滤波后的值(该值又叫重建值):

====================== Y Data ======================
+—————-+—————-+—————-+—————-+
|183,184,185,186,|184,187,195,201,|202,201,201,202,|202,203,204,204,|
|184,185,186,187,|184,191,198,201,|201,201,201,202,|202,203,204,204,|
|185,186,187,185,|187,195,199,201,|200,200,202,202,|202,203,203,203,|
|187,187,187,184,|191,198,199,201,|199,200,203,203,|203,203,203,203,|
+—————-+—————-+—————-+—————-+
|178,186,188,183,|174,169,183,202,|198,200,202,203,|203,202,202,202,|
|168,180,189,185,|166,130,132,172,|199,202,200,201,|201,201,202,202,|
|170,180,180,173,|150,119,110,131,|174,197,198,199,|199,201,202,202,|
|180,180,171,158,|131,138,127,111,|131,167,197,206,|202,202,203,203,|
+—————-+—————-+—————-+—————-+
|178,179,184,165,|104,124,137,128,|114,124,167,208,|207,204,203,202,|
|173,180,196,187,|151,129,122,130,|120,110,124,159,|194,201,202,202,|
|176,197,203,207,|204,162,121,114,|124,123,110,116,|155,189,200,200,|
|188,208,202,204,|211,204,163,119,|115,132,128,116,|117,152,186,197,|
+—————-+—————-+—————-+—————-+
|206,200,213,203,|199,201,203,191,|138,116,122,123,|119,108,133,179,|
|206,200,199,202,|202,205,207,212,|189,144,119,121,|121,118,116,136,|
|206,201,185,201,|210,207,208,209,|209,207,164,116,|115,127,122,115,|
|214,202,185,210,|209,207,208,208,|210,222,204,163,|118,117,129,129,|
+—————-+—————-+—————-+—————-+

《深入剖析H.264帧间预测(P宏块)》    

          

        可以看出,刚好是移动了7个像素. 以上就是帧间预测的基本原理。

点赞