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(毕厚杰)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring Cloud】Gateway组件的三种使用方式

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Spring Cloud》。🎯🎯 &am…

小梅哥Xilinx FPGA学习笔记22——ip核之FIFO

目录 一:章节说明 1.1 FIFO IP简介 1.2 FIFO Generato IP 核信号框图 1.3 实验任务 二:FIFO 写模块设计 2.1 简介 2.2 模块框图 2.3 模块端口与功能描述 2.4 写模块代码 三 FIFO 读模块设计 3.1 简介 3.2 模块框图 3.3 模块端口与功…

【OpenCV学习笔记04】- 绘图功能

内容 用 OpenCV 画不同的几何图形学习这些函数:cv.line(), cv.circle() , cv.rectangle(), cv.ellipse(), cv.putText() 等。 函数常用传参 在上述所有功能中,您将看到一些常见的参数,如下所示: img:您要绘制形状的…

“程序员面试之道:成为求职战场上的不可忽视的力量“

文章目录 每日一句正能量前言面试经历面试技巧后记 每日一句正能量 看淡拥有,不刻意追求某些东西,落叶归根,那些属于你的,总会回来。 前言 在现代科技发展日新月异的时代,程序员无疑扮演着重要的角色。他们是代码的创…

非常漂亮的外贸网站完整代码,适合机械加工和金属零件等领域。

非常漂亮的外贸网站完整代码,适合机械加工和金属零件等领域。整站代码,上传到服务器虚拟主机即可使用。 独家原创资源。源码是asp开发的,数据库是access,主流的虚拟主机空间都支持asp,直接上传就可以使用。 站长保证…

Transformers 2023年度回顾 :从BERT到GPT4

人工智能已成为近年来最受关注的话题之一,由于神经网络的发展,曾经被认为纯粹是科幻小说中的服务现在正在成为现实。从对话代理到媒体内容生成,人工智能正在改变我们与技术互动的方式。特别是机器学习 (ML) 模型在自然语言处理 (NLP) 领域取得…

【低照度图像增强系列(3)】EnlightenGAN算法详解与代码实现

前言 ☀️ 在低照度场景下进行目标检测任务,常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题,给检测带来一定的难度。 🌻使用图像增强模块对原始图像进行画质提升,恢复各类图像信息,再使用目标检…

想学习云计算么?教你如何免费白嫖微软和AWS的云资源一年

在这个数字化飞速发展的时代,云计算已成为IT行业的未来趋势。作为一名渴望进步的IT专业人员,掌握云计算不仅意味着技能的提升,更是升职加薪、拓宽职业道路的重要跳板。这里教你如何免费利用微软Azure和亚马逊AWS的云资源,为期一年…

mysql之导入导出远程备份

文章目录 一、navicat导入导出二、mysqldump命令导入导出2.1导出2.1.1 导出表数据和表结构2.1.2 只导出表结构() 2.2 导入(使用mysqldump导入 包含t _log表的整个数据库 共耗时 20s;)方法一:方法二: 三、LOAD DATA INFILE命令导入导出(只针对单表)设置导…

unity编辑器Scene界面输出位置及路径

工程Asset下新建Editor文件夹; Editor文件夹下新建脚本LogPosition using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; public class LogPosition : EditorWindow {//最终输出的数据.static string logtext;//增…

SpringBoot学习(五)-Spring Security配置与应用

注:此为笔者学习狂神说SpringBoot的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:狂神说!!! Spring Security Spring Security是一个基于Java的开源框架,用于在Java应用程…

36-javascript输出方式,弹框:普通,confirm弹框,prompt弹框,控制台输出:普通,warm,error

1.页面打印 <body><p>你真是一个小机灵鬼</p><script>// 页面打印document.write("打印内容");</script> </body> 2.覆盖文档 <body><p>你真是一个小机灵鬼</p><script>// 覆盖文档window.onload f…