宏块到条带组的映射类型及解码
来源:互联网 发布:卢宇彤 知乎 编辑:程序博客网 时间:2024/06/05 03:15
一、宏块到条带组的映射类型及解码
条带组是一个编码图象中若干宏块的一个子集,它可包含一个或若干个条带。在一个条带组中,每个条带的宏块按光栅扫描次序被编码,如果每幅图象仅取一个条带组,则该图象中所有的宏块均按光栅扫描次序被编码(除非使用ASO,即任意的条带次序,即一个编码帧中的条带之后可跟随任一解码程序的条带)。
还有一种条带组,叫灵活宏块次序(FMO),它可用灵活的方法,把编码宏块序列映射到解码图象中宏块的分配用宏块到条带组之间的映射来确定,它表示每一个MB属于哪个条带组。FMO能够提高错误恢复的性能,因为每个条带可以被独立解码。
宏块到条带组的各种映射类型如表1所示。
表1 宏块到条带组的各种映射类型
二、宏块到条带组的映射解码
slice_group_map_type是图像参数集PPS的语法元素,标识条带组映射单元到条带组的映射类型,该语法元素的取值范围为0到6,与表1中的Type对应。
num_slice_groups_minus1是PPS的语法元素,加1表示图像中的条带总数。该值为0表示图像中的所有条带都只属于一个条带组。当num_slice_groups_minus1的值为1,且slice_group_map_type的值为3、4和5时,条带组0和1的大小和形状由slice_group_change_direction_flag决定,如表2所示:
在这种情况下,MapUnitsInSliceGroup0 条带组映射单元按照规定的增长顺序分配给条带组0,图像的其他的PicSizeInMapUnits − MapUnitsInSliceGroup0个条带组映射单元分配到条带组1。
当num_slice_groups_minus1等于1并且slice_group_map_type等于4、5时:
sizeOfUpperLeftGroup = ( slice_group_change_direction_flag ?
( PicSizeInMapUnits − MapUnitsInSliceGroup0 ) : MapUnitsInSliceGroup0 )
在得到宏块到条带组的映射之前,要先得到条带组映射单元到条带组的映射,然后在将条带组映射单元到条带组的映射转换成宏块到条带组的映射。
如果num_slice_groups_minus1的值为0,说明图像中的所有条带都只属于一个条带组0,则:
mapUnitToSliceGroupMap[ i ] = 0。
如果num_slice_groups_minus1的值为1,则需要根据slice_group_map_type不同的值去获得mapUnitToSliceGroupMap。
获得mapUnitToSliceGroupMap之后,将其转换为宏块到条带组的映射MbToSliceGroupMap,过程如下所示:
if (frame_mbs_only_flag == 1 || field_pic_flag ==1) {
MbToSliceGroupMap[ i ] = mapUnitToSliceGroupMap[ i ];
} else if (MbaffFrameFlag == 1) {
MbToSliceGroupMap[ i ] = mapUnitToSliceGroupMap[ i / 2 ];
} else if (!frame_mbs_only_flag && !mb_adaptive_frame_field_flag && !field_pic_flag) {
MbToSliceGroupMap[ i ] = mapUnitToSliceGroupMap[ ( i / ( 2 * PicWidthInMbs ) )
* PicWidthInMbs + ( i % PicWidthInMbs ) ];
}
- 宏块到条带组的映射类型及解码
- h.264的条带类型
- 数据库应用:RAID的条带的概念及条带大小设置的原则
- HEVC的并行解码语法和条带结构Slice和Tile
- Java 时间和日期类型的 Hibernate 映射及二进制映射及大文本的映射
- SpringMVC 映射Date类型时的问题,及解决
- Hibernate及Mysql到Java基本类型的映射
- Hibernate映射类型、对应的Java时间和日期类型及对应的标准SQL类型
- Java 类型, Hibernate 映射类型及 SQL 类型之间的对应关系
- HEVC的条带头解析
- HEVC的条带头解析
- Hibernate的映射类型
- Hibernate的映射类型
- 枚举类型的映射
- Hibernate的映射类型
- map的类型映射
- Hibernate的映射类型
- HIBERNATE的映射类型
- 查看apk签名信息
- 有关正则表达式 测试下
- One or more breakpoints cannot be set and have been disabled...
- Could not find the main class: Error exist in required project(s);
- 杭电1089
- 宏块到条带组的映射类型及解码
- IE7下position的z-index Bug解决方案
- 自定义动态生成页面打印以及打印预览的一个实现例子
- 在ti-SDK-am335x-evm-05.07.00.00里面编译时若干文件找不到的问题
- 杭电1090
- Linus Torvalds - 从单链表中删除节点
- 初识HAL<一>
- GGrid网页手写签批控件个人实现在页面上自定义显示的一个例子
- android项目反编译和混淆