深入剖析H.264帧间预测(B宏块)
来源:互联网 发布:网络mba 编辑:程序博客网 时间:2024/04/25 08:56
B宏块可以只向前参考,可以只向后参考,也可以同时向前后两个方向参考,下面分别予以详述. ( 所用视频序列为foreman, 编码器为JM8.6, profile是main profile, 分析工具是H.264visa, 参考帧数默认为5,编码结构为:IBPBPBIBPBPBI...)
一、只向前参考
在第二帧(B帧)中选一宏块,该宏块基本信息为:
==== MB 38(5, 3) ====
Location : (80, 48),
Slice No. : 0
Slice Type : B Slice
MB Type : (1)B_L0_16x16
NumMbPart : 1
MbPartSize : (16, 16)
****** Inter Info ******
Pos(0, 0):
L0=MV(-16, 4),POC: 0,refIdx:0,DecNo:1
由L0=MV(-16, 4)可知,该宏块只向前参考(参考第一帧),真正的运动矢量为: (-4, 1), 该宏块的预测值为:
====================== Y Data ======================
+----------------+----------------+----------------+----------------+
|103, 95, 87, 87,| 88, 89, 88, 87,| 87, 86, 86, 86,| 86, 86, 87, 87,|
|106, 98, 91, 92,| 97, 99,101,101,|104,110,112,113,|113,113,113,113,|
|108,112,115,116,|117,118,118,118,|117,118,117,117,|118,118,118,118,|
|113,117,124,125,|124,124,122,121,|120,119,120,120,|120,120,119,120,|
+----------------+----------------+----------------+----------------+
|120,123,128,128,|127,127,126,125,|125,124,121,121,|120,119,119,119,|
|121,120,118,117,|116,115,115,115,|116,116,117,119,|119,118,118,118,|
|116,114,108,106,|103,102,103,103,|104,105,107,108,|110,113,115,117,|
|103, 98, 94, 93,| 91, 90, 92, 93,| 95, 97,100,102,|105,109,112,114,|
+----------------+----------------+----------------+----------------+
| 81, 81, 81, 81,| 83, 84, 86, 89,| 95, 97,100,102,|105,108,110,112,|
| 81, 81, 80, 83,| 88, 91, 93, 94,| 98, 99,102,104,|107,108,110,112,|
| 94, 96, 97, 98,| 99,100,100,103,|104,103,105,106,|108,109,110,112,|
|116,118,121,119,|114,111,111,108,|107,107,108,108,|110,110,111,112,|
+----------------+----------------+----------------+----------------+
|120,121,121,119,|114,111,111,109,|109,109,110,110,|111,111,112,113,|
|121,121,121,119,|114,111,111,111,|111,110,111,111,|112,112,113,114,|
|121,121,121,119,|114,111,111,111,|111,109,110,111,|112,112,113,114,|
|113,110,108,107,|105,105,105,105,|107,106,108,110,|111,111,113,114,|
+----------------+----------------+----------------+----------------+
第一帧对应宏块的重建值为:
====================== Y Data ======================
+----------------+----------------+----------------+----------------+
|104,103,103,102,|101, 94, 83, 84,| 84, 84, 82, 81,| 76, 78, 81, 85,|
| 88, 89, 88, 87,|87, 86, 86, 86,| 86, 86, 87, 87,| 90, 95, 97, 97,|
| 97, 99,101,101,|104,110,112,113,|113,113,113,113,|112,109,107,106,|
|117,118,118,118,|117,118,117,117,|118,118,118,118,|117,114,112,111,|
+----------------+----------------+----------------+----------------+
|124,124,122,121,|120,119,120,120,|120,120,119,120,|119,117,115,114,|
|127,127,126,125,|125,124,121,121,|120,119,119,119,|119,117,116,116,|
|116,115,115,115,|116,116,117,119,|119,118,118,118,|118,117,116,116,|
|103,102,103,103,|104,105,107,108,|110,113,115,117,|118,117,116,116,|
+----------------+----------------+----------------+----------------+
| 91, 90, 92, 93,| 95, 97,100,102,|105,109,112,114,|115,116,116,117,|
| 83, 84, 86, 89,| 95, 97,100,102,|105,108,110,112,|114,115,116,116,|
| 88, 91, 93, 94,| 98, 99,102,104,|107,108,110,112,|113,114,115,115,|
| 99,100,100,103,|104,103,105,106,|108,109,110,112,|113,114,115,115,|
+----------------+----------------+----------------+----------------+
|114,111,111,108,|107,107,108,108,|110,110,111,112,|113,113,114,114,|
|114,111,111,109,|109,109,110,110,|111,111,112,113,|114,114,114,114,|
|114,111,111,111,|111,110,111,111,|112,112,113,114,|114,114,115,115,|
|114,111,111,111,|111,109,110,111,|112,112,113,114,|115,115,115,115,|
+----------------+----------------+----------------+----------------+
可见,运动矢量刚好为(-4, 1).
二、只向后参考
在第十帧中选择一宏块,宏块基本信息为:
==== MB 48(4, 4) ====
Location : (64, 64),
Slice No. : 0
Slice Type : B Slice
MB Type : (2)B_L1_16x16
NumMbPart : 1
MbPartSize : (16, 16)
****** Inter Info ******
Pos(0, 0):
L1=MV( 4, 0),POC:20,refIdx:0,DecNo:10
由宏块基本信息可知,只向后参考,且实际运行矢量为(1, 0). 该宏块的预测值为:
====================== Y Data ======================
+----------------+----------------+----------------+----------------+
| 95, 77, 59, 53,| 57, 57, 60, 63,| 65, 65, 68, 73,| 79, 88, 96, 97,|
| 72, 59, 51, 53,| 57, 60, 62, 63,| 64, 64, 67, 74,| 80, 86, 95, 98,|
| 69, 61, 55, 51,| 56, 63, 64, 60,| 61, 65, 67, 73,| 79, 85, 96,100,|
|106, 95, 80, 65,| 59, 61, 63, 59,| 62, 68, 75, 81,| 84, 88, 97,104,|
+----------------+----------------+----------------+----------------+
|130,128,119,102,| 76, 64, 65, 67,| 71, 76, 82, 85,| 86, 91,100,110,|
|120,120,126,124,|103, 84, 78, 78,| 81, 82, 82, 81,| 82, 92,104,120,|
|110,112,118,121,|117,109,104,100,| 89, 85, 87, 81,| 82, 95,110,126,|
|116,119,120,116,|116,119,118,116,|102, 98,103, 96,| 94,106,120,135,|
+----------------+----------------+----------------+----------------+
|127,127,117,107,|115,121,120,119,|119,117,115,116,|119,129,139,146,|
|134,133,117,106,|118,126,125,125,|124,124,124,125,|130,138,148,155,|
|140,137,129,127,|131,130,128,129,|128,128,128,128,|133,142,152,166,|
|146,144,147,149,|130,119,127,134,|131,132,132,133,|135,146,156,169,|
+----------------+----------------+----------------+----------------+
|150,150,159,138,|101,103,127,134,|134,134,134,136,|137,145,154,155,|
|169,157,143,110,| 86,108,124,134,|138,139,138,137,|138,142,147,147,|
|168,152,121, 94,| 95,112,121,134,|145,145,141,139,|139,141,141,143,|
|171,146,110,100,|104,109,127,150,|153,150,145,142,|140,140,141,140,|
+----------------+----------------+----------------+----------------+
第十一帧中,对应宏块的重建值为:
====================== Y Data ======================
+----------------+----------------+----------------+----------------+
|108, 95, 77, 59,| 53, 57, 57, 60,| 63, 65, 65, 68,| 73, 79, 88, 96,|
| 80, 72, 59, 51,| 53, 57, 60, 62,| 63, 64, 64, 67,| 74, 80, 86, 95,|
| 76, 69, 61, 55,| 51, 56, 63, 64,| 60, 61, 65, 67,| 73, 79, 85, 96,|
|108,106, 95, 80,| 65, 59, 61, 63,| 59, 62, 68, 75,| 81, 84, 88, 97,|
+----------------+----------------+----------------+----------------+
|131,130,128,119,|102, 76, 64, 65,| 67, 71, 76, 82,| 85, 86, 91,100,|
|121,120,120,126,|124,103, 84, 78,| 78, 81, 82, 82,| 81, 82, 92,104,|
|108,110,112,118,|121,117,109,104,|100, 89, 85, 87,| 81, 82, 95,110,|
|114,116,119,120,|116,116,119,118,|116,102, 98,103,| 96, 94,106,120,|
+----------------+----------------+----------------+----------------+
|123,127,127,117,|107,115,121,120,|119,119,117,115,|116,119,129,139,|
|128,134,133,117,|106,118,126,125,|125,124,124,124,|125,130,138,148,|
|132,140,137,129,|127,131,130,128,|129,128,128,128,|128,133,142,152,|
|139,146,144,147,|149,130,119,127,|134,131,132,132,|133,135,146,156,|
+----------------+----------------+----------------+----------------+
|148,150,150,159,|138,101,103,127,|134,134,134,134,|136,137,145,154,|
|168,169,157,143,|110, 86,108,124,|134,138,139,138,|137,138,142,147,|
|162,168,152,121,| 94, 95,112,121,|134,145,145,141,|139,139,141,141,|
|156,171,146,110,|100,104,109,127,|150,153,150,145,|142,140,140,141,|
+----------------+----------------+----------------+----------------+
可见,运动矢量刚好为(1, 0).
三、同时向前向后参考
在第二帧(B帧)中选择第六个宏块,宏块基本信息为:
==== MB 5(5, 0) ====
Location : (80, 0),
Slice No. : 0
Slice Type : B Slice
MB Type : B_Skip (为了简化分析,突出主要问题,姑且选择非常特殊的B_Skip宏块吧)
NumMbPart : 4
MbPartSize : (8, 8)
****** Inter Info ******
Block(0, 0):
(0,0) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(0,0) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
(1,0) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(1,0) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
(0,1) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(0,1) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
(1,1) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(1,1) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
Block(1, 0):
(0,0) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(0,0) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
(1,0) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(1,0) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
(0,1) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(0,1) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
(1,1) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(1,1) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
Block(0, 1):
(0,0) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(0,0) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
(1,0) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(1,0) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
(0,1) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(0,1) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
(1,1) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(1,1) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
Block(1, 1):
(0,0) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(0,0) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
(1,0) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(1,0) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
(0,1) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(0,1) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
(1,1) L0=MV( 0, 0),POC: 0,refIdx:0,DecNo: 1
(1,1) L1=MV( 0, 0),POC: 4,refIdx:0,DecNo: 2
可见,既向前参考,也向后参考, 且运动矢量都为(0,0),该宏块的预测值为:
+----------------+----------------+----------------+----------------+
|116,120,136,167,|216,223,221,222,|222,220,216,213,|206,217,220,207,|
|135,170,207,219,|221,221,222,222,|222,221,216,213,|209,215,215,208,|
|208,226,231,219,|221,223,223,223,|223,222,217,214,|212,212,212,211,|
|232,225,219,226,|224,222,223,224,|225,225,222,220,|218,216,214,213,|
+----------------+----------------+----------------+----------------+
|223,223,225,227,|225,224,225,228,|228,229,229,228,|226,225,223,222,|
|213,214,217,221,|225,227,230,233,|234,234,234,234,|233,234,234,232,|
|216,219,223,227,|228,231,232,234,|235,235,235,235,|235,235,236,236,|
|227,230,232,235,|235,234,234,235,|235,235,235,235,|234,235,235,235,|
+----------------+----------------+----------------+----------------+
|231,232,233,234,|234,235,235,235,|235,235,235,235,|235,234,234,234,|
|233,233,233,234,|234,234,234,235,|235,235,235,235,|235,235,235,235,|
|233,233,233,234,|234,234,234,235,|235,235,235,235,|235,235,235,235,|
|233,233,233,234,|234,234,234,235,|235,235,235,235,|235,235,235,235,|
+----------------+----------------+----------------+----------------+
|233,233,234,234,|235,235,235,235,|235,235,235,235,|235,235,235,235,|
|233,233,234,234,|235,235,235,235,|235,235,235,235,|235,235,235,235,|
|234,234,234,235,|235,235,235,235,|235,235,235,235,|235,235,235,235,|
|234,234,234,235,|235,235,235,235,|235,235,235,235,|235,235,235,235,|
+----------------+----------------+----------------+----------------+
前向参考帧(I帧)对应宏块的重建值为:
====================== Y Data ======================
+----------------+----------------+----------------+----------------+
|115,121,138,172,|221,221,221,222,|221,220,215,212,|203,221,221,203,|
|137,175,210,219,|221,221,221,222,|221,220,215,212,|206,219,219,206,|
|212,227,230,217,|222,222,222,223,|222,222,215,212,|211,212,212,211,|
|232,223,219,226,|223,222,222,223,|223,222,215,213,|212,212,211,211,|
+----------------+----------------+----------------+----------------+
|223,223,225,227,|224,224,224,226,|225,225,225,223,|218,215,213,212,|
|213,214,217,221,|225,227,230,233,|233,233,232,232,|232,231,231,227,|
|216,219,223,227,|228,231,232,234,|234,234,234,234,|235,236,236,236,|
|227,230,232,235,|235,234,234,235,|235,235,235,235,|234,235,236,236,|
+----------------+----------------+----------------+----------------+
|231,232,233,234,|234,235,235,235,|235,235,234,234,|234,234,234,234,|
|233,233,233,234,|234,234,234,235,|235,235,235,235,|234,234,234,234,|
|233,233,233,234,|234,234,234,235,|235,235,235,235,|234,234,234,234,|
|233,233,233,234,|234,234,234,235,|235,235,235,235,|235,235,235,235,|
+----------------+----------------+----------------+----------------+
|233,233,234,234,|235,235,235,235,|235,235,235,235,|235,235,235,235,|
|233,233,234,234,|235,235,235,235,|235,235,235,235,|235,235,235,235,|
|234,234,234,235,|235,235,235,235,|235,235,235,235,|235,235,235,235,|
|234,234,234,235,|235,235,235,235,|235,235,235,235,|235,235,235,235,|
+----------------+----------------+----------------+----------------+
后向参考帧对应宏块的重建值为:
====================== Y Data ======================
+----------------+----------------+----------------+----------------+
|116,119,133,162,|211,224,221,222,|222,220,217,213,|208,213,219,211,|
|132,165,203,218,|221,221,222,222,|223,222,217,213,|212,211,211,210,|
|204,225,231,220,|220,223,223,223,|223,222,219,215,|213,212,211,211,|
|231,226,219,225,|225,222,223,225,|226,227,228,227,|223,220,217,214,|
+----------------+----------------+----------------+----------------+
|223,223,225,227,|225,224,225,229,|231,233,233,233,|234,234,233,232,|
|213,214,216,220,|224,227,230,233,|234,234,235,235,|234,236,236,236,|
|215,219,222,226,|228,230,232,234,|235,235,235,235,|234,234,235,235,|
|226,230,232,235,|235,234,234,235,|235,235,235,234,|234,234,234,234,|
+----------------+----------------+----------------+----------------+
|231,232,233,234,|234,235,235,235,|235,235,235,235,|235,234,234,234,|
|233,233,233,234,|234,234,234,235,|235,235,235,235,|235,235,235,235,|
|233,233,233,234,|234,234,234,235,|235,235,235,235,|235,235,235,235,|
|233,233,233,234,|234,234,234,235,|235,235,235,235,|235,235,235,235,|
+----------------+----------------+----------------+----------------+
|233,233,234,234,|235,235,235,235,|235,235,235,235,|235,235,235,235,|
|233,233,234,234,|235,235,235,235,|235,235,235,235,|235,235,235,235,|
|234,234,234,235,|235,235,235,235,|235,235,235,235,|235,235,235,235,|
|234,234,234,235,|235,235,235,235,|235,235,235,235,|235,235,235,235,|
+----------------+----------------+----------------+----------------+
由于运动矢量为(0,0),所以补偿帧和重建帧相等,设该B宏块的预测值为predictedMB, 前向补偿帧和后向补偿帧对应的宏块分写为preMcMB和postMcMB, 显而易见有:predictedMB = ceil ( ( preMcMB + postMcMB ) / 2 ).
最后说一句:在MPEG2中,B帧不做参考帧,但是在H.264中,B帧可以做参考帧,JM8.6的配置文件(main profile)中的StoredBPictures就是一个对应的开关.
- 深入剖析H.264帧间预测(B宏块)
- 深入剖析H.264帧间预测(P宏块)
- 深入剖析H.264帧间预测(P宏块)
- 深入剖析H.264帧内预测(I宏块)
- 深入剖析H.264帧内预测(I宏块)
- 深入剖析H.264帧内预测(I宏块)
- 深入剖析H.264中的多帧预测
- H.264边缘块进行帧内预测时,上边缘和左边缘块的预测情况。
- h.264 B条带预测模式
- H.264预测编码之帧间预测
- H.264预测编码之帧间预测
- 【H.264/AVC视频编解码技术详解】十二、解析H.264码流的宏块结构(下):H.264帧内编码宏块的预测结构
- H.264 像素块预测与运动补偿
- H.264 像素块预测与运动补偿
- H.264中的P-Skip宏块和B-Skip宏块简介
- H.264帧间预测以及P帧
- H.264预测编码之帧内预测
- H.264快速帧内预测算法
- jquery.ui.accordion 1.8.18与jQuery UI Tabs 1.8.18冲突的解决办法
- sql语句执行顺序
- Android开发之旅:环境搭建及HelloWorld
- squid编译参数之见
- 在建立项目的时候在new菜单栏里没有android的选项,只有在project里面才有
- 深入剖析H.264帧间预测(B宏块)
- android 条码识别软件开发全解析
- UML总结4---UML九种图关系说明
- JAVA中TCP/UDP编程实例
- [Win32]C++多线程编程实例
- js注册模块
- mstsc保存用户名和密码,实现自动登录远程桌面
- 整型数组负数放左面,其他放右面,要求时空复杂度:O(n), O(1)。
- 揭秘Android 4.2 开发者的天堂与地狱