H264/AVC的句法和语义

概述

码流的基本单位: 在编码器输出的码流中,数据的基本单位是句法元素,每个句法元素由若干比特组成,它表示某个特定的物理意义 ,比如宏块类型、量化参数等。

句法:句法表征句法元素的组织结构。

语义:语义阐述句法元素的具体含义。

所有的视频编码标准都是通过定义句法和语义来规范编解码器的工作流程。

句法元素的分层结构

句法元素的分层结构:
编码器输出的比特码流中,每个比特都隶属某个句法元素,也就是说,码流是由一个个句法元素依次衔接组成的,码流中除了句法元素并不存在专门用于控制或同步的内容。在 H.264 定义的码流中,句法元素被组织成有层次的结构,分别描述各个层次的信息。
句法元素的分层结构有助于更有效地节省码流。例如,在一个图像中,经常会在各个片之间有 相同的数据,如果每个片都同时携带这些数据,势必会造成码流的浪费。更为有效的做法是将该图 像的公共信息抽取出来,形成图像一级的句法元素,而在片级只携带该片自身独有的句法元素。在 H264 中,句法元素共被组织成 序列、图像、片、宏块、子宏块五个层次。
在这里插入图片描述
以往的句法元素分层结构:
以往的标准中,每一层都有头部,然后在每层的数据部分包含该层的数据。在这样的结构中,每一层的头部和它的数据部分形成管理与被管理的强依赖关系,头部的句法 元素是该层数据的核心,而一旦头部丢失,数据部分的信息几乎不可能再被正确解码出来。尤其在序列层及图像层,由于网络中 MTU(最大传输单元)大小的限制,不可能将整个层的句法元素全部 放入同一个分组中,这个时候如果头部所在的分组丢失,该层其他分组即使能被正确接收也无法解 码,造成资源浪费。
在这里插入图片描述
H264 的句法元素的分层结构:
在 H264 中,分层结构最大的不同是取消了序列层和图像层,并将原本属于序列和图像头部的大部分句法元素游离出来形成序列和图像两级参数集,其余的部分则放入片层。

参数集是一个独立 的数据单位,不依赖于参数集外的其他句法元素。参数集只是在片层句法元素需要的时候被引用,而且,一个参数集并不对应 某个特定的图像或序列,同一个序列参数集可以被多个序列中的图像参数集引用,同理,同一个图像参数集也可以被多个图像引用。只在编码器认为需要更新参数集的内容时,才会发送出新的参数集。在这种机制下,由于参数集是独立的,可以被多次重发或者采用特殊技术加以保护。

参数集和参数集外部的句法元素处理不同的信道中,这是H264的建议,可以使用更安全更昂贵的通道来传输参数集,而使用成本低但不够可靠的信道传输其他句法元素,只需要保证片层中的某个句法元素需要引用某个参数集时,那个参数集已经到达解码器。

H264的参数集和片层的结构增加了编码后数据的冗余度,降低了编码效率,但这些技术的采用使得通信的鲁棒性大大增强,出现丢包时,将错误限制在最小范围。
在这里插入图片描述
H264码流中的数据单位:
在这里插入图片描述

句法的表示方法

句法元素与变量:
编码器将数据编码为句法元素然后依次发送。在解码器端,通常要将句法元素作求值计算,得出一些中间数据,这些中间数据就是 H.264 定义的变量。下图中,pic_width_in_mbs_minus1 是解码器直接从码流中提取的句法元素,这个句法元素表征图像的宽度,以宏块为单位。为了提高编码效率,H.264 将图像实际的宽度减去 1 后再传送。
在这里插入图片描述
在这里插入图片描述
以上变量 PicWidthInMbs 表示图像以宏块为单位的宽,变量 PicWidthInSamplesLPicWidthInSamplesC 分别表示图像的亮度、色度分量以像素为单位的宽。H.264 定义这些变量是因为在后续句法元素的提取算法或图像的重建中需要用到它们的值。

在 H.264 中,句法元素的名称是由小写字母和一系列的下划线组成,而变量名称是大小写字母组成,中间没有下划线。

语法:
句法是句法元素的组织结构,而对一个结构的描述必然少不了对应的语法,语法提供判断、循环等必要的描述方法。H264 采用一种类 C 语法

描述子:
描述子是指从比特流提取句法元素的方法,即句法元素的解码算法,每个句法元素都有相对应的描述子。由于 H264 编码的最后一步是熵编码,所以这里的描述子大多是熵编码的解码算法。H.264 定义了如下几种描述子:

序号描述子解释
a)ae(v)基于上下文自适应的二进制算数熵编码
b)b(8)读进连续的 8 个比特
c)ce(v)基于上下文自适应的可变长熵编码
d)f(n)读进连续的 n 个比特
e)i(n)/i(v)读进连续的若干比特,并把它们解释为有符号整数
f)me(v)映射指数Golomb熵编码
g)se(v)有符号指数 Golomb 熵编码
h)te(v)截断指数 Golomb 熵编码
i)u(n)/u(v)读进连续的若干比特,并将它们解释为无符号整数
j)ue(v)无符号指数 Golomb 熵编码

描述子都在括号中带有一个参数,这个参数表示需要提取的比特数。

当参数是 n 时, 表明调用这个描述子的时候会指明n的值,也即该句法元素是定长编码的。

当参数是v时,对应的句法元素是变长编码,这时有两种情况:i(v) u(v) 两个描述子的v由以前的句法元素指定,也就是说在前面会有句法元素指定当前句法元素的比特长度;除了这两个描述子外,其它描述子都是熵编码,它们的解码算法本身能够确定当前句法元素的比特长度。

H264的句法表

H264的语义

H264 的语义用来阐述句发表中的具体含义。主要有 NAL 层语义序列参数集SPS 语义图像参数集PPS 语义片头语义参考图像序列重排序语义加权预测语义参考图像序列标记操作语义片数据语义宏块层语义宏块预测语义子宏块预测语义用 CAVLC 方式编码的残差数据语义用 CABAC 方式编码的残差数据语义等。

参考

书籍: 新一代视频压缩编码标准H.264(毕厚杰)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/305636.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Fluids —— Volume VOP

P,当前体素位置;density,此场的值;ix, iy, iz,体素索引(0 ~ res-1);resx, resy, resz,当前volume的精度;center,当前volume的中心点;o…

MYSQL学习之buffer pool的理论学习

MYSQL学习之buffer pool的理论学习 by 小乌龟 文章目录 MYSQL学习之buffer pool的理论学习一、buffer pool是什么?二、buffer pool 的内存结构三、buffer pool 的初始化和配置初始化配置 四、buffer pool 空间管理LRU淘汰法冷热数据分离的LRU算法 一、buffer pool是…

大模型第三节课程笔记

大模型开发范式 优点:具有强大语言理解,指令跟随,和语言生成的能力,具有强大的知识储备和一定的逻辑推理能力,进而能作为基座模型,支持多元应用。 不足:大模型的知识时效性受限,大模…

OLED透明屏多少钱一平方,价格影响因素、计算方法与规格种类

OLED透明屏,以其独特的透明度和出色的画质,正逐渐成为高端显示市场的宠儿。但对于消费者来说,最关心的莫过于其价格。本文将详细解析OLED透明屏的价格,包括影响因素、计算方法以及规格种类。 一、影响因素 OLED透明屏的价格受到多…

Nessus漏洞扫描工具安装、使用技巧及注意事项

Nessus是一款功能强大的安全评估工具,它可以帮助安全团队快速发现网络中潜在的安全风险和漏洞,并对其进行评估和修复。对于渗透测试人员来说,Nessus更是必不可少的工具之一。 1. Nessus安装 获取安装包,官网地址:http…

【Java并发】聊聊concurrentHashMap的put核心流程

结构介绍 1.8中concurrentHashMap采用数组链表红黑树的方式存储,并且采用CASSYN的方式。在1.7中主要采用的是数组链表,segment分段锁reentrantlock。本篇主要在1.8基础上介绍下. 那么,我们的主要重点是分析什么呢,其实主要就是p…

业界首款PCIe 4.0/5.0多通道融合接口SSD技术解读

之前小编写过一篇文章劝大家不要碰PCIe 5.0 SSD,详细内容,可以再回顾下: 扩展阅读:当下最好不要入坑PCIe 5.0 SSD 如果想要进一步了解PCIe 6.0,欢迎点击阅读: 浅析PCIe 6.0功能更新与实现的挑战 PCIe 6.…

【强化学习的数学原理-赵世钰】课程笔记(五)蒙特卡洛方法

目录 一.内容概述 二.激励性实例(Motivating examples) 三.最简单的基于 MC 的 RL 算法:MC basic 1.将策略迭代转换为无模型迭代(Convert policy iteration to be model-free) 2.The MC Basic algorithm 3.例子 …

无人驾驶卡尔曼滤波

无人驾驶卡尔曼滤波(行人检测) x k a x k − 1 w k x_k ax_{k-1} w_k xk​axk−1​wk​ w k w_k wk​:过程噪声 状态估计 估计飞行器状态(高度) x k z k − v k x_k z_k - v_k xk​zk​−vk​ 卡尔曼滤波通…

vivado 导入工程、TCL创建工程命令、

导入外部项目 您可以使用导入在Vivado IDE外部创建的现有RTL级项目文件Synopsys Synplify。Vivado IDE检测项目中的源文件并自动添加文件到新项目。设置,如顶部模块、目标设备和VHDL库 分配是从现有项目导入的。 1.按照创建项目中的步骤进行操作。 2.在“项目类…

Linux学习(13)——系统安全及应用

一、账号安全基本措施 1、系统账号清理 将非登录用户的Shell设为/sbin/nologin,及将用户设置为无法登录 锁定长期不使用的账户 删除无用的账户 锁定账户密码 本质锁定 shell——/sbin/nologin却比较特殊,所谓“无法登陆”指的仅是这个用户无法使用bash或其他sh…

忆阻器芯片STELLAR权重更新算法(清华大学吴华强课题组)

参考文献(清华大学吴华强课题组) Zhang, Wenbin, et al. “Edge learning using a fully integrated neuro-inspired memristor chip.” Science 381.6663 (2023): 1205-1211. STELLAR更新算法原理 在权值更新阶段,只需根据输入、输出和误差…

Qt/QML编程学习之心得:一个蓝牙音乐播放器的实现(30)

蓝牙bluetooth作为一种短距离的通信方式应用也是越来越广,比如很多智能家居、蓝牙遥控器、蓝牙音箱、蓝牙耳机、蓝牙手表等,手机的蓝牙功能更是可以和各种设备进行互联,甚至可以连接到车机上去配合wifi提供投屏、音乐等。那么如何在中控IVI上使用Qt来实现一个蓝牙音乐播放器…

山东名岳轩印刷包装携专业包装袋盛装亮相2024济南生物发酵展

山东名岳轩印刷包装有限公司盛装亮相2024第12届国际生物发酵展,3月5-7日山东国际会展中心与您相约! 展位号:1号馆F17 山东名岳轩印刷包装有限公司是一家拥有南北两个生产厂区,设计、制版、印刷,营销策划为一体的专业…

编译原理期末大题步骤——例题

一、预测分析方法步骤 提取左公因子,消除左递归判断文法是否为LL(1)文法若是,构造预测分析表;否则,不能进行分析。根据预测分析表对输入串进行分析 例子: 文法G[E]: …

C#:让不安全代码(unsafe)运行起来

C#:让不安全代码(unsafe)运行起来 当我们VS中编写unsafe代码时,显示不能运行 这时只需要按照这里的提示,修改我们的属性设置即可 这样就可以运行了

AQS应用之BlockingQueue详解

概要 AQS全称是 AbstractQueuedSynchronizer,中文译为抽象队列式同步器。BlockingQueue,是java.util.concurrent 包提供的用于解决并发生产者 - 消费者问题的最有用的类,它的特性是在任意时刻只有一个线程可以进行take或者put操作&#xff0…

近似点梯度法

最优化笔记——Proximal Gradient Method 最优化笔记,主要参考资料为《最优化:建模、算法与理论》 文章目录 最优化笔记——Proximal Gradient Method一、邻近算子(1)定义 二、近似点梯度法(1)迭代格式&…

4.4 媒资管理模块 - 分布式任务处理介绍、视频处理技术方案

媒资管理模块 - 视频处理 文章目录 媒资管理模块 - 视频处理一、视频转码1.1 视频转码介绍1.2 FFmpeg 基本使用1.2.1 下载安装配置1.2.2 转码测试 1.3 工具类1.3.1 VideoUtil1.3.2 Mp4VideoUtil1.3.3 测试工具类 二、分布式任务处理2.1 分布式任务调度2.2 XXL-JOB 配置执行器 中…

Java诊断利器Arthas

https://arthas.aliyun.com/doc/https://arthas.aliyun.com/doc/ 原理 利用java.lang.instrument(容器类) 做动态 Instrumentation(执行容器) 是 JDK5 的新特性。使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent)&…