H264的句法和语义(二)

2024-09-05 05:58
文章标签 h264 句法 语义

本文主要是介绍H264的句法和语义(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.2 句法元素的分层结构

1.2.1 句法元素与变量
编码器将数据编码为句法元素然后依次发送。在解码器端,通常要将句法元素作求值计算,得出一些中间数据,这些中间数据就是H.264定义的变量。

图1 从句法元素解出变量
pic_width_in_mbs_minus1 是解码器直接从码流中提取的句法元素,这个句法元素表征图像的宽度以宏块为单位。我们看到,为了提高编码效率,H.264将图像实际的宽度减去1后在传送。
PicWidthInMbs = pic_width_in_mbs_minus1 + 1
PicWidthInSamplesL = PicWidthInMbs * 16
PicWidthInSamplesC = PicWidthInMbs * 8
以上变量PicWidthInMbs 表示图像以宏块为单位的宽,变量PicWidthInSamplesL 、PicWidthInSamplesC 分别表示图像的亮度、色度分量以像素为单位的宽。H264定义这些变量是因为在后续句法元素的提取算法或图像的重建需要用到他们的值。在H264中,句法元素的名称有小写字母和一系列的下划线组成,而变量名称有大小写字母组成,中间没有下划线。
1.2.2 语法
句法是句法元素的组织结构,二对于一个结构的描述必然少不了对应的语法,语法提供判断、循环等必要的描述方法。 H.264采用一种类C语法。
(1) 判断:
if(条件)
{
     ....
}
else
{
    ...
}

(2) 循环:
a)
do
{
    ...
}while(条件)
b)
while(条件)
{
    
}
c)
for(初始;条件;求值)
{
    ...
}
1.2.2 描述子
描述子从比特流提取句法元素的方法,即句法元素的解码算法,每个句法元素都有相对应的描述子。由于H.264编码的最后一步是熵编码,所有这里的描述子大多是熵编码的解码算法。H264定义了如下几种描述子:
ae(v)基于上下文自适应的二进制算术熵编码;
b(8)读进连续的8个比特;
ce(v)基于上下文自适应的可变长熵编码;
f(n)读进连续的n个比特;
i(n)/i(v)读进连续的若干比特,并把他们解释为有符号整数;
me(v)映射指数Golomb熵编码;
se(v)有符号指数Golomb熵编码;
te(v)截断指数Golomb熵编码;
u(n)/u(v)读进连续的若干比特,并将它们解释为无符号整数;
ue(v)无符号指数Golomb熵编码。
我们看到,描述子都在括号中带有一个参数,这个参数表示需要提取的比特数。
当参数是n时,表明调用这个描述子的时候回指明n的值,也即该句法元素是定长编码。
当参数是v时,对应的句法元素是变成编码,这时有两种情况:
i(v)和u(v)两个描述子的v由以前的句法元素指定,也就是说在前面会有句法元素指定当前句法元素的比特长度;陈列这两个描述子外,其他描述子都是熵编码,他们的解码算术本身能够确定当前句法元素的比特长度。

这篇关于H264的句法和语义(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138140

相关文章

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成,然后我们通过向不同的方向进行行走,那么就会得到这个属性上的图像。那么你利用多个方向进行生成,便得到了各种方向的图像,每个方向对应了很多

C++11 ---- 右值引用和移动语义

文章目录 1 左值引用和右值引用2. 左值引用与右值引用总结3. 右值引用使用场景和意义4. 再谈移动构造函数和移动赋值运算符重载5. 关键字default 和 delete6. move函数7. 完美转发 1 左值引用和右值引用 之前的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,所以在C++11之前的引用都叫做左值引用。无论左值引用还是右值引用,都是给对

【音视频】播放音视频时发生了什么? 视频的编解码 H264是什么? MP4是什么?

目录 ✨播放一个视频的流程✨为什么要编码(压缩)视频数据?✨如何编码(压缩)数据🎄简单的例子🎄音视频编码方式🎄视频编码格式H264编码是什么?发展历程?H.264基本单元H.264的I帧,P帧,B帧 🎄音频编码格式 ✨视频文件封装格式✨解封装格式✨视频解码✨H264分层结构🎄网络上传输H264视频数据的流程VCL的结构关系 🎄NAL单元 ✨ 参考文章 ✨播放一个视频的流

【Android 多媒体应用】使用MediaCodec将摄像头采集的视频编码为h264

转载自:http://www.cnblogs.com/CoderTian/p/6224605.html MainActivity.java import android.app.Activity;import android.graphics.ImageFormat;import android.hardware.Camera;import android.hardware.Camera

H264视频压缩编码标准(四)

4.变换与量化 4.1树状结构运动补偿  –每个宏块(16×16像素)可以4种方式分割:一个16×16,两个16×8,两个8×16,四个8×8。其运动补偿也相应有四种。而8×8分割还可以有四种方式的分割:一个8×8,两个4×8或两个8×4及4个4×4。这种分割下的运动补偿则称为树状结构运动补偿。

ffmpeg h264解码, 屏蔽因为网络丢包等各种原因导致的花屏帧

ffmpeg h264解码, 屏蔽因为网络丢包等各种原因导致的花屏帧  ---->看来问题只能这样解决了,现在还要多测测,防止产生新的问题。目前来看,对现有代码没有影响,花屏的帧直接屏蔽掉了。 思路: 问了下机顶盒方面h264解码的,他们用的是硬件解码,他们做到不花屏的方法就是简单的设置了一个硬件解码提供的接口:设置了错误处理模式。 我想这个错误处理模式肯定对那些错误的帧直接屏

在安卓和Windows下使用Vizario H264 RTSP

Unity2021.3.35f1,运行模式为ENGINE_SERVER 1.环境设置  Windows设置  安卓设置 2.代码修改 ConnectionProperties中的server必须与真实IP一样,所以需要新增一个获取IP的函数 public string GetLocalIPAddress(){IPHostEntry host;string localIP = "

移动语义和智能指针

第十章 移动语义与智能指针 移动语义 为什么要用移动语义? 我们回顾一下之前模拟的String.cc class String{public:String(): _str(new char[1]()) {}String(const char* pstr):_str(new char[strlen(pstr) + 1]()) {strcpy(_str, pstr);}String(con

# 使用 OpenAI 的 Embeddings 接口实现文本和代码的语义搜索

本文主要介绍 OpenAI 的 Embeddings (嵌入) 接口,该接口可以轻松执行自然语言和代码任务,如语义搜索、聚类、主题建模和分类。 Embeddings 是转换为数字序列的概念的数字表示,使计算机可以轻松理解这些概念之间的关系。Embeddings 在 3 个标准基准测试中优于顶级模型,其中代码搜索的改进相对提升了 20%。 Embeddings 对于处理自然语言和代码非常有用,因

cefsharp128_cef128_chromium6613_x64_h264版本抢险体验

一、本博测试版本cef128及兼容性测试 1.1 版本 128.0.6613.x (全网保持最新更新测试体验) 感谢您:关注我,关注栏目,总有您想要的资源,推荐好友有优惠 1.2 兼容性测试,支持h264 1.3 视频播放测试 版本兼容 cef128.xx.xx <