分享

关于Slice和Slice Group- H.264乐园 - 视频技术论坛 中...

 oskycar 2011-01-12
我在H.264乐园里看了一下关于Slice和Slice Group的相关资料 仍是有很多不明白的地方:


1、Slice Group到底有什么来组成的 是Slice?是MB?


2、如果Slice  Group有Slice组成 哪为何MB可以直接映射到SliceGroup中?


3、如果Slice Group有MB组成,那Slice也是有MB组成的,那如何区别Slice和Group呢?


4、Slice的目的是为了独立解码、避免错误扩散,那SliceGroup的作用又是什么呢?

5、存在不存在一个MB即属于某个Slice有属于某个Slice Group?


(*^__^*) 嘻嘻…… 真厉害呀!一下问了5个相关的问题!我刚进群,回答错了还请批评指教!
1.slice group = n*slice ; slice = n*mb;即其是由slice组成,而slice当然是由mb组成;
2.我不知道你这个版本的代码是怎么写的,但是我知道对于每个mb在编码时,都有一个标志位是标识该宏块是哪个slice的(比如说像mb.[slice_no]这样),我把这理解为slice与mb的映射,在有slice group的情况下,再加个标识位表示属于哪个slice group也很合理呀?因为编码会方便一些,为何会方便一些,请看问题3、问题4的回答。
3.slice 和 slice group的区别是作用不同,或说作用侧重不同。slice的作用你问题四中说了,那slice group的作用呢?请看问题4的回答。
4.slice group我个人认为是把有相关性的slice拼组在一起建一个group,为何这样呢,举两个例子:A,在感兴趣编码中,需要把感兴趣区域ROI单独用\小qp编码,于是可以把ROI区域的slice拼在一起建个group,标识出这个区域,编码时不用统一的QP而用小qp编码;B,h.264中好像对重要slice进行了冗余编码,即会写入两次码流,丢了一次写入了,还可以收第二次的,但是那些slice要冗余编,哪些不用,需要标识出来,所以也建个group标识这些条带需要冗余。这两个例子不知我说清了吗?
5.当然存在:slice group>slice>mb,mb是最基本的编码单位,最后的编码都会落脚到encode_one_macroblock、write_one_macroblock是吧?所以无论上层是分成slice、slice group、片组、帧、gop……下层最终都是mb。
 
这样理解不知道对不对:
图像映射成Slice Group,就是把宏块或者宏块对进行映射成不同的Slice Group(Slice Group,0、Slice Group,1等等),在不同的Slice Group中再进行分成Slice ,相对于Slice Group来说,Slice 包含Slice Group内部按照光栅扫描顺序排列的整数个宏块或宏块对,但是若是相对于图像来说并不一定是按光栅扫描的顺序连续排列的,因为中间经过了图像到Slice Group的映射。Slice Group的提出是为了采用FMO实现错误隐藏。若是采用映射,那么在同一Slice Group中的相邻宏块在实际图像中不一定是相邻的,那么当某一个Slice Group内的Slice 的宏块发生丢包等错误的时候,就可以利用其他Slice Group内的Slice的宏块对其进行预测恢复,因为其他Slice Group中的宏块或宏块对与该丢失宏块或宏块对在位置上是相邻的,相关性最强,预测误差最小。当不采用Slice Group的时候,若是Slice的宏块发生错误,那么就导致一部分空间位置相邻的宏块或宏块对无法解出,那么就得利用周边宏块或宏块对对其进行预测,这样的预测效果随着越靠近出错区域中心越差。显然,采用Slice Group方法的预测效果要好。
更详细的解释见本人博客:[url]http://blog.csdn.net/sunnymov/archive/2009/08/26/4486922.aspx[/url]
以上皆是个人理解的,欢迎相互探讨,thx!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多