【H.264/AVC视频编解码技术详解】十九:熵编码算法(5)——H.264的CABAC(上):语法元素的二值化方法...
《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看!
“纸上得来终觉浅,绝知此事要躬行”,只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会!
链接地址:H.264/AVC视频编解码技术详解
GitHub代码地址:点击这里
一、上下文自适应的二进制算术编码
在上篇博文【H.264/AVC视频编解码技术详解】十八:算术编码的基本原理与实现中研究了算术编码的基本概念,然而在实际的H.264编解码的方法中,显然是不可能采用上文中简单的算法来实现。在实际应用中,H.264采用的为称作上下文自适应的二进制算术编码(Context-based Adaptive Binary Arithmetic Coding, CABAC)。CABAC算法是H.264中新引入的一种非常复杂的熵编码算法,专门用于视频的压缩编码。事实证明,在视频压缩编码领域,CABAC保持了强大的生命力,在H.264更新的标准H.265中继续保留了CABAC算法,并且废弃了CAVLC而将CABAC作为主要的熵编码方法。
在CABAC中,主要步骤或算法可以分为3个步骤/类别:
- 语法元素的二值化;
- 上下文模型;
- 算术编码;
在本章节中主要讨论语法元素二值化过程,上下文模型和算术编码在后续章节详述。
二、二值化方法
我们知道,预测编码、变换编码等步骤输出的信息多种多样,不会仅仅出现二进制数据,例如宏块类型mb_type或预测模式pred_mode等信息具有比较广泛的取值范围。在输入算术编码器之前,需要对这些语法元素进行二值化操作。在H.264的标准文档中,二值化的方法定义在9.3.2节。
语法元素二值化的输入数据为一个语法元素的值,例如型mb_type等。而输出的信息为语法元素的二值化数据流,以及maxBinIdxCtx、ctxIdxOffset和bypassFlag等信息。在协议文档中定义的二值化方法有:
- 一元二值化(Unary Binarization);
- 截断一元二值化(Truncated Unary Binarization);
- k阶指数哥伦布编码;
- 定长编码;
- 其他方法;
2.1 一元二值化(Unary Binarization)
一元二值化方法是一种非常简单的方法。二值化之后的码流长度等于语法元素的值val,且除了最后一位为0外,前面的val-1位均为1。对应关系为:
2.2 截断一元二值化(Truncated Unary Binarization)
采用截断一元二值化方法时,输入数据除了语法元素的值之外,还需要传入一个值cMax,表示语法元素的上限值。使用截断一元二值化时,如果语法元素的值小于cMax,则采用2.1所述的一元二值化方法;如果语法元素的值等于cMax,则二值化的输出码流为cMax个bit-1。
2.3 k阶指数哥伦布编码
指数哥伦布编码在前面的博文中已有详述,详情可见:
- 【H.264/AVC视频编解码技术详解】八、 熵编码算法(2):H.264中的熵编码基本方法、指数哥伦布编码】
2.4 定长编码
定长编码的输入数据包括语法元素的值和cMax,,表示语法元素的上限值。定长编码的码字长度以cMax的长度为准,并按二进制排列每一个语法元素值作为编码的对应。
三、语法元素的二值化
3.1 语法元素相关的特定二值化方法
在标准协议文档的9.2.3.5描述了宏块类型mb_type和子宏块类型sub_mb_type的二值化。这两种类型的二值化方法不是由某个算法推导,而是由表格指定。表9-36到9-38描述了此类语法元素的值与二进制数据的关系。
3.2 Coded Block Pattern的二值化
对于CBP数据,其二值化码流由前缀和后缀组成。前缀表示亮度cbp,即CodedBlockPatternLuma,由cMax为15的定长编码实现;若ChromaArrayType不等于0或3,则后缀表示色度cbp即CodedBlockPatternChroma,由cMax为2的截断一元编码表示。
3.3 mb_qp_delta的二值化
mb_qp_delta的二值化过程需要首先解决一个其取值有正有负的过程,因此首先采用了标准文档中表9-3中的正负值映射方法将mb_qp_delta全部转换为非负值,而后采用一元编码方法进行二值化。
相关文章:

oracle anbob,Tag Archives: oracle安装 | ANBOB
2016/08/02363 viewsUsing ‘opatch lsinventory’ show patched is real? (看到的补丁信息真的靠谱么?)已关闭评论去年在排查SCN 天花板问题修改相关的几个参数时,发现了这个问题,尤其如果是从别人手中接手的数据库,通常从opatc…

Python之装饰器
Python之装饰器 在不修改函数调用方式的前提下,也不能修改函数内部源代码!!!! 例如: 在每个季度公司发绩效,统计每个人的代码执行效率。咱们总不能是每个函数里加time模块吧。 import timedef t…

Datawhale组队学习周报(第041周)
本周报总结了从 11月22日至11月28日,Datawhale组队学习的运行情况,我们一直秉承“与学习者一起成长的理念”,希望这个活动能够让更多的学习者受益。 第 31 期组队学习已经与大家见面了,这次组队学习一共 11 门开源课程࿰…

Redis介绍
redis是一个key-value存储系统。和Memcached类似,但是解决了断电后数据完全丢失的情况,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型)。这…

oracle精度制的数据类型,ORACLE 中NUMBER 类型 低精度转换成高精度
Node.js的函数返回值先看一段代码: function select(sqlscript){ var result ""; sql.connect(config, function( ...LeetCode Range Sum Query 2D - Mutable原题链接在这里:https://leetcode.com/problems/range-sum-query-2d-mutable/ 题目: G…

cacti监控linux和windows磁盘IO
cacti监控linux和windows磁盘IO 标签:cacti linux磁盘IO windows磁盘IO原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://charlie928.blog.51cto.com/3741218/1331780一&#x…

2021 线性代数 第三章 习题课
第3章 向量空间 3.1 基本概念(基础部分)3.1 基本概念(提高部分) -> 插入视频 3.2 线性相关、线性无关(基础部分)3.2 线性相关、线性无关(提高部分)3.3 向量空间的基与维数、坐…

MYSQL修改配置,允许远程访问
1、 mysql -h localhost -u root //这样应该可以进入MySQL服务器 2、 GRANT ALL PRIVILEGES ON *.* TO root% WITH GRANT OPTION //赋予任何主机访问数据的权限 如果需要密码: GRANT ALL PRIVILEGES ON *.* TO roo…

ckeditor finder php,CKEDITOR CKFINDER的图片上传配置(C#/asp.net/php)
CKEDITORCKFINDER的图片上传配置(C#/asp教程.net/php教程)phpkeditor的代码全部重写,但里面没有了上传功能,只是一个纯粹的文件在线编辑器,如果需要上传图片,还需要下载ckfinder。首先去官方上下载源代码,然后分别解压…

Linux 常用命令——df, du, ln
1. df 列出文件系统的整体磁盘使用量 2. du 评估文件系统的磁盘使用量(常用在推估目录所占容量),也可以计算文件或文件夹大小 3. ln 创建实体连接(hard link) 或 符号连接(Symbolic Link) 转载于:https://www.cnblogs.com/bigben0123/p/3238199.html

nio selector
为什么使用Selector? 仅用单个线程来处理多个Channels的好处是,只需要更少的线程来处理通道。事实上,可以只用一个线程处理所有的通道。对于操作系统来说,线程之间上下文切换的开销很大,而且每个线程都要占用系统的一些资源&…

青少年编程竞赛交流群周报(第039周)
2021年11月28日(周日)晚20:00我们在青少年编程竞赛交流群开展了第三十九期直播活动。 一、直播内容 我们直播活动的主要内容如下: 讲解了上次测试中小朋友们做错的题目 Scratch青少年编程能力等级测试模拟题(四级)。…

linux查找以h结尾的文件,【linux_笔记】Linux_文件查找(find)详解特殊权限
学习记录过程中难免出现错误,如有发现,还望大神们指出。示例操作部分有的与历史操作有关,如果先前的示例操作没有执行过的话,可能会有部分示例的操作无法执行。示例仅供参考(练习题在附录)。文件查找:locate(不常用):非…

AngulerJS学习(五)按需动态载入文件
在此之前我么年首先要先了解几个东西: $q 简单介绍: $q:主要解决的是异步编程的问题,是指描写叙述通过一个承诺行为与对象代表的异步运行的行动结果的交互。可能会也可能不会再不论什么时候完毕。 我们通过一个小故事理解 $q 服务…

【青少年编程竞赛交流】11月份微信图文索引
11月份微信图文索引 由于“组队学习”这个公众号的功能主要是组织Datawhale社群中的学习者们每个月的组队学习,所以,我另外新建了这个微信公众号“青少年编程竞赛交流”,在这个公众号上分享有关青少年编程方面的知识,以及通过编程…

linux内核创建节点,Linux内核驱动自动创建设备节点文件
Linux下生成驱动设备节点文件的方法有3个:1、手动mknod;2、利用devfs;3、利用udev在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可…

javascript publish/subscribe or observer pattern
定义 定义一对多的对象封装,目标对象状态发生变化,它所有的接受者都会收到通知并做相应的更新。 使用频率:5/5 最高 概要 观察者模式,也就是发布者/订阅者模式,当发布者发布一个通知的时候,订阅者就会收到通…

图的遍历——DFS(邻接矩阵)
递归 标记 一个连通图只要DFS一次,即可打印所有的点。 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <malloc.h>using namespace std;const int VERTEX_NUM 20; const int INFINITY 0x…

徐韬:CCF - 个贷违约预测Baseline
徐韬是华北电力大学数理系大四的学生,Datawhale成员/Dreamtech成员,参加了多期Datawhale的组队学习,也在天池/CCF/讯飞等比赛中取得了不错的成绩,现保送大连理工大学软件学院深造。 这篇图文是他在线下组队学习时,为大…

linux 创建crontab文件位置,[基础教程]linux系统的crontab计划任务添加和删除
在linux系统中,有时候为了节省人力,所以将一些脚本进行定时执行,通过crontab计划任务进行启动和停止,这样能方便大部分时间来做其他事情,下面主要介绍一下如何启动和删除crontab计划任务添加计划任务1.首先要准备好要添…

C#利用lambda在函数中创建内部函数
有使用过JS的朋友,相信都知道function。JS中的function是可以在里面在定义一个作为内部使用的。有时为了控制作用域,或者这种小函数只在这个函数体内会使用,所以就不希望在外部在作额外的定义。那C#中有没有这样类似的方式呢?答案…
IntellJ_打开选中的文件所在的文件夹
方法(一)最简单 idea 打开 setting 找到keymap 搜索 show in explorer 右键设置一个快捷键 我一般设置 alt v 然后点击项目其中一个文件位置 比如我点击一个 hellowworld.class 然后我按 alt v 就会自己打开他在本地的位置 方法(二&#x…
姜子上:利用BiLSTM-CRF进行命名实体识别
姜子上是华北电力大学数理系大二的学生,LSGO软件技术团队(Dreamtech算法组)成员,参加了多期Datawhale的组队学习。 这篇图文是他在线下组队学习时,为大家分享自己学习“知识图谱”过程中的笔记。 希望参与我们线下组…

linux命令行3d,Linux命令行快捷键
总结一下:1.移动光标:1.1 行首 ctrla1.2 行末 ctrle1.3 前移一字符 ctrlb(注:因为左边的内容先于右边输入 ,故向左为向前,向右为向后)1.4 后移一字符 ctrlf1.5 前移一词 altb1.6 后移一词 altf2.删除2.1 删除至行首 ct…

Linux系统配置VI或VIM的技巧
Linux系统配置VI或VIM的技巧作者:IT专家网论坛出处:IT专家网论坛2008-10-28 11:08配置VI和VIM的颜色显示,使它能够高亮度显示一些特别的单词,这对编写程序很有用⋯⋯ 1、VI或VIM的配置文件的路径 发现/usr/share/vim/vimrc和…

【组队学习】十一月微信图文索引
十一月微信图文索引 一、组队学习相关 周报: Datawhale组队学习周报(第037周)Datawhale组队学习周报(第038周)Datawhale组队学习周报(第039周)Datawhale组队学习周报(第040周&…

僵尸(bot)程序缓解
2019独角兽企业重金招聘Python工程师标准>>> 与浮在表面而广受关注的间谍软件、广告软件、垃圾邮件不同,僵尸程序往往不受注意。它们是散发间谍软件、广告软件、垃圾邮件的罪魁祸首,已经被列为对个人用户及企业 威胁不断增加的一种安全危害。…

Linux火狐解压完运行不了,在Ubuntu系统下firefox账号无法登录的解决
在Ubuntu 16.04系统下默认自带有firefox浏览器,但是使用这个firefox浏览器会发现账号无法登录,原来是在windows系统下的数据没有办法同步,书签也同步不了。经过查询资料后得知,Ubuntu系统下自带的firefox浏览器是国际版本…

[亿能测试_www.gdtesting.com]测试技术资料网盘共享
[亿能测试_www.gdtesting.com]测试技术资料网盘共享: http://pan.baidu.com/share/home?uk974090852 转载于:https://www.cnblogs.com/preftest/p/3249341.html
【NCEPU】吴丹飞:新闻文章点击预测
吴丹飞是华北电力大学数理系大三的学生,LSGO软件技术团队(Dreamtech算法组)成员,参加了多期Datawhale的组队学习,荣获多期优秀队长的称号。 这篇图文是她在线下组队学习时,为大家分享自己参与天池“新闻文…