H.264 CABAC总结

转载 2015年07月08日 16:32:55
CABAC对算术编码的特性做了许多优化,这其中也包括从统计角度对输入流做的一套预编码方法,当前处理的字符为MPS时,区间递进只是子区间长度发生变化,而作为影响实际输出值的L却并未变化,这个现象意味着如果输入流中连续出现大量的MPS,或者MPS对LPS的概率比非常高时,可以达到极高的压缩效果。   这个预编码的过程叫做输入流的二进制化,经它输出的是MPS概率极高的比特流。

    二进制化包括四种方法:U , TU, UEGK, FL

H.264 将一个条带内的数据划分为399个上下文模型,每个模型以ctxIdx标示,在每个模型内部进行概率的查找和更新。

    解码器对输入的每一个比特首先要做的工作时查找它属于哪个上下文模型,然后查找该上下文模型对应的概率表以递进区间。查找某个比特对应的上下文模型一般有以下两个步骤:

     (1)确定该比特所属的句法元素,由句法元素查找上下文模型(区间)索引ctxIdx(表9-11)

     (2)按照法则为当前比特在(1)中得到的区间找到对应的ctxIdx.该法则对于每个句法元素都不同。一般情况下是用表定义的(表9-30)

 

初始化:CABAC的生命周期是slice,每个slice开始时,要对460种上下文模型全部进行初始化工作:

(1)递进区间复位到  [0,1)

(2)为每个上下文模型制定一个初始的ω(MPS),σ(Plps索引)

                                                            (1) 通过查表获得上下文模型对应的m,n获得初值

                                                            (2)按照算法计算得到ω,σ

CABAC编码流程(引自《新一代视频压缩编码标准H.264》毕厚杰):在建立了概率模型和乘法模型之后,在递进计算过程中CABAC必须保存以下变量的记录状态:

(1)当前区间的下限L

(2)当前区间的大小R

(3)当前MPS字符ω

 (4)LPS打概率编号(索引)

注意,MPS对应的区间始终在左边

 

                                                                                    图 1 算术编码流程

 

CABAC解码流程(引自H.264规范):

算术解码过程,输入:bypassFlag,ctxIdx,算术解码引擎中的状态变量codIRange和codIOffset

输出:二进制码值

 核心解码步骤包括:

       (1) 二进制判决的算术解码过程

                   获得LPS对应的区间间隔:codIRangeLPS = rangeTabLPS[pStateIdx][qCodeIRangeIdx]

                   更新codIRange = codIRange - codIRangeLPS

                   if(codIOffset >= codIRange){

                          binVal = 1 - valMPS;

                          codIOffset  -= codIRange;

                    }else{

                          binVal = valMPS;

                   }

                  执行规定的状态转移,注意MPS和LPS置换,之所以执行状态转移,是因为自适应需要对概率模型进行刷新

           (2)算术解码引擎的重归一化过程

           (3)二进制判决的解码旁路过程

           (4)结束前的二进制判决解码过程

 

                                                                      图 2 解码判决流程图



h264 cabac编码详解

CABAC是H.264/AVC标准中两种熵编码方法中的一种,是将自适应的二进制算术编码与一个设计精良的上下文模型结合起来得到的方法。它很好地利用了语法元素数值之间的高阶信息,使得熵编码的效率得到了进一...
  • u010970855
  • u010970855
  • 2014年03月06日 14:27
  • 1592

H264基本原理

H264视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的。随着 x264/openh264以及ffmpeg等开源库的推出,大多数使用者无需再对H264的细节做过多的研究,这大降低了人们使用...
  • garrylea
  • garrylea
  • 2017年11月15日 02:23
  • 134

H.264中的CABAC编码原理

《The H.264 Advanced Video Compression Standard》 7.4.3 Context Adaptive Binary Arithmetic Coding, C...
  • lyuan1314
  • lyuan1314
  • 2013年05月29日 18:59
  • 2494

CABAC整体讲解1

参考的博客http://blog.sina.com.cn/s/blog_520811730101ljiw.html 1、CABAC熵编码 熵编码是视频编码的最后一步和解码的第一步所使用的一种无损编...
  • xietingcandice
  • xietingcandice
  • 2014年12月12日 15:38
  • 1257

CABAC基础四-CABAC熵解码算法FFmpeg实现

1.  CABAC熵解码算法FFmpeg实现 本章主要讲解FFmpeg中对CABAC熵解码算法的实现和优化思路。由于算术编码算术在H264和H265中没有发生变化,所以FFmpeg中H265的熵解码仍...
  • shakingWaves
  • shakingWaves
  • 2016年11月06日 13:37
  • 1768

cabac编码过程的解读

源地址:http://blog.163.com/laorenyuhai126%40126/blog/static/193507792010813822759/ cabac编码过程的解读        ...
  • u010550883
  • u010550883
  • 2014年12月08日 15:13
  • 1131

关于CABAC的解析

这是一篇论文:Context-based adaptive binary arithmetic coding in the H.264/AVC video compression standard ...
  • novice_growth
  • novice_growth
  • 2017年05月11日 15:56
  • 343

CABAC 学习(4)概率更新模型分析

CABAC- context-based adaptive binary arithmetic coding
  • cj423889
  • cj423889
  • 2014年06月16日 12:34
  • 777

CABAC中的二值化方法

CABAC中的二值化方法1.二值化的一般性要求 在对片进行编码的过程中,相应的二值化方案要满足快速精确的条件误差估计原则 二值化的结果要方便进行条件概率的计算以及后续的算术编码 2.为什么要进行二值...
  • gaussrieman123
  • gaussrieman123
  • 2016年09月26日 17:06
  • 319

CABAC之手把手教你H.264编码

CABAC之手把手教你H.264编码   中华视频网   2006-09-25     首先要说明的是 CABAC 的生命期是 SLICE, 因此本篇所...
  • feixiaku
  • feixiaku
  • 2013年04月18日 22:39
  • 481
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:H.264 CABAC总结
举报原因:
原因补充:

(最多只允许输入30个字)