H.264笔记之二——宏块结构

H264——H264中的块(macroblock)、片(slice)、帧(frame) 这里写自定义目录标题前言块(macroblock)块种类片(slice)slice组帧(frame)序列 前言 若干个块组成块 若干个块组成条带 若干个条带组成一帧 若干帧组成一段视频 块(macroblock) H264中,以16x16的块为编码最小单元,一个块可以被分成多个4x4或8x8的块 当然,像素块越小,编码的复杂度也会随之增加,编码效率自然就会降低。但是这样是值得的,因为图像的压缩效率有了显著提高,也就是编码后得到的相同质量的图像,H.264的压缩比更大,占用的空间及带宽 阅读详情

这里主要有一下几个过程:
1. 初始化h->stat.frame,即全部清零。
2. 写条带头:x264_slice_header_write,即把刚才x264_slice_header_init设置的一些参数写入。
3. 如果是CABAC编码,则初始化CABAC。有关CABAC在后续相关章节讨论。
4. 遍历一帧中的所有宏块,这是编码的主要部分:
for( mb_xy = h->sh.i_first_mb, i_skip = 0; mb_xy < h->sh.i_last_mb; )
其中sh.i_first_mb和sh.i_last_mb在x264_slice_header_init中赋值,分别是0和宏块行列数乘积。
5. 最后输出码流尾部。
其间穿插一些必要的初始化和配置。

本章着重分析编码的主要部分,包括一下过程:
需要注意的是,这里讨论的宏块是固定尺寸的,即Y分量计为16x16。(而运动宏块的尺寸则是多变的)

1. 首先根据宏块的序号得出宏块的坐标。然后统计当前宏块的码流位置:
int mb_spos = bs_pos(&h->out.bs) + x264_cabac_pos(&h->cabac);

2. 然后出现一句:
if( i_mb_x == 0 )
    x264_fdec_filter_row( h, i_mb_y );
这是对行进行去块过程。详细情况专门论述。

3. 随后是x264_macroblock_cache_load,这里主要进行当前宏块和相关信息的提取。这个函数比较大,也在专题中论述。

4. 接下去进行解码分析操作
x264_macroblock_analyse

5. 以及解码实体

H.264 入门篇 - 03 (块类型) 块即 8x8 块,一个16x16的块分为4个子块,每个子块类型表示都是一个8x8块的分割、预测方式,因此,采用子块预测的块其语法结构中会有4个子块类型。MbPartPredMode(mb_type,0) 块分割后的第一部分的预测模式为前向预测,还是后向预测,还是双向预测,由于是 P slice,这里只能是前向预测 Pred_L0。如果当前块类型采用的预测方式为 Intra_16x16,那么该字段有效,它用0~3表示了 Intra_16x16中的 4 种模式,请参考。 阅读详情

相关推荐

十二、解析H.264码流的Slice数据和块结构

一、slice data结构的定义 1、slice data描述 h.264中slice结构的主体部分 slice data在slice中紧跟在slice header之后 主要结构由连续和间隔的多个块结构组成(因为根据编码器的配置,一部分块可能采取跳过模式,在码流中就不存在它的信息,完全可以使用其他块就表示,就不在传输这个块,达到节省码流的目的) 2、slice data在码流中的结构 slice的主体实际上是slice data即slice body,slice data的主体实际上是一个个

叮咚的博客 1751

h264结构与码流

  H264视频压缩后会成为一个序列帧,帧里包含图像,图像分为很多片,每个片可以分为块,每个块由许多子块组成

同步更新https://blog.must-xin.com/,内容转载请联系作者本人 2058

【H2645】H.264块和H.265的编码树单元总结

一、H.264块 1、什么是块? 先看下面两张图,就能大体知道块指的是哪了。 将连续几帧图像分为一组(GOP)在H264中称为一个序列(sequence); 将每帧图像(Frame)划拉几道分成片(slice); 将每片(slice)按照16x16的大小横着竖着划拉成块(Maroblock); 将块(Maroblock)再划拉成4块,每块大小8x8,称为子块。 还有一个块的概念,注意和子块做区分:图像首先划分成4x4大小的块,也就是说块包含整数个4x4的块。H.264编码时主要以4×4块为单

郭老二 2757

x264 - dct.c

/*****************************************************************************  * dct.c: transform and zigzag  *****************************************************************************  * Copyr

fanbird2008的专栏 2284

H.264整数DCT公式推导及蝶形算法分析

这是网上的一篇文章, 我重新读了一下, 然后做了一些整理 1.为什么要进行变换 空间图像数据通常是很难压缩的:相邻的采样点具有很强的相关性(相互关联的),而且能量一般平均分布在一幅图像中,从而要想丢掉某些数据和降低数据精度而不明显影响图像质量,就要选择合适的变换,方法,使图像易于被压缩。适合压缩的变换方法要有这样几个性质: (1).可以聚集图像的能量(将能量集中到少数有意义的数值上...

weixin_34185364的博客 650

H.264中整数DCT变换,量化,反量化,反DCT究竟是如何实现的?(无代码,无真相)

H.264中采用的是整数DCT变换,在实现的时候,该变换和量化又杂糅在一起,那么这些错综复杂的关系究竟是怎样纠缠的呢?在参考H.264乐园论坛会员cs1860wd的帖子和H.264 and MPEG-4 VIDEO COMPRESSION(第一版)这本书后,基于帖子和书上的讲解,给出相应的实现代码,并验证代码的正确性. 还是以foreman视频第一帧第一个块第一个4*4块

认知 行动 坚持 2万+

H.264(九)Slice数据和块结构

1 Slice的组成 每一个Slice总体来看都由两部分组成,一部分作为Slice header,用于保存Slice的总体信息(如当前Slice的类型等),另一部分为Slice body,通常是一组连续的块结构(或者块跳过信息),如下图所示: 2 Slice Data结构的定义 在已经实现了一个slice的header部分之后,下面的工作将是研究如何解析一个slice的主体,即...

QtHalcon 2484

H.264 编码笔记

H.264 视频编码技术解析

m0_60856753的博客 1648

H.264/AVC 中的块、片、帧

上篇文章最后,因为编辑的原因,有一点没有补充。就是最后给出的维基百科的FMO彩图,其中的Type 0 并不是规则0中的交错片组,而是不使用FMO情况下的,标准的H.264像片,而Type 1 至Type 5依次对应规则1 至 规则5。 这篇文章中,我们继续接着H264画面划分开始,介绍它的像片类型。希望读者通过这一篇文章,能够对理解H.264的编解码原理打下基础,了解H.264的基本编码单元,以及...

houxiaoni01的博客 2214

H.264编码中的16x16块分析

H.264,也称为MPEG-4 AVC(Advanced Video Coding),是一种广泛应用于视频压缩的编码标准。它通过高效的编码技术,能够在保持高质量视频的同时,显著减少文件大小。H.264编码中,视频帧被划分为多个块(Macroblock, MB),每个块是编码和解码的基本单元。本文将详细分析H.264中16x16块的结构和作用。

dont worry about it的博客 1万+

x264中的DCT变换 dct-a.asm

1.什么是傅里叶变换 傅里叶变换能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变换。最初傅里叶分析是作为热过程的解析分析的工具被提出的。(摘抄自百度百科) 连续傅里叶变换的公式 连续傅里叶变换的逆变换的公式 通过公式可以看出一个函数,可以用复指数函数的积分来

视频编解码算法,专注HEVC/AVC算法研究、实现及其优化 3580

H.264标准----概念和定义

访问单元:一系列NAL单元,包含一个primary coded picture,也可以包含一系列redundant coded pictures和一个auxiliary coded picture。 逐行扫描:每个frame进行frame coding 隔行扫描:每个frame可以选择frame coding还是field coding inter预测的direct...

NBA_1的博客 846

x264参数介绍

【 翻译 】x264参数介绍(一、帧类型和码率控制) 2010年10月2日 评论 发表评论 翻译自:http://mewiki.project357.com/wiki/X264_Settings,水平有限,勿吝指教。第二部分:http://blog.yikuyiku.com/?p=2206 输入 用1个绝对路径定义输入文件(或者2个,rawYUV文件)。如下例:x264.exe -...

wmnmtm的专栏 1183

【from Spark!】H264——H264中的块(macroblock)、片(slice)、帧(frame)

H264中的块(macroblock)、片(slice)、帧(frame)

holly的专栏 4162

h.264块与子块类型

块类型mb_type 块类型表示的是块不同的分割和编码方式,在h.264的语法结构中,块类型在块层(macroblock_layer)中用mb_type表示(请参考h.264语法结构分析中的macroblock_layer)。而mb_type是与当前块所在的slice相关的,相同数值的mb_type在不同类型的slice中表示的类型会不一样。   I slice的块类型 I ...

weixin_34277853的博客 605

H.264块(Macroblock)概念(运动估计、变换编码、环路滤波)

在视频压缩技术中,块是最基本的处理单元。每个块通常包含16x16的像素点,这些像素点共享某些参数,例如运动矢量和编码模式等。这种方式极大地减少了必须处理的数据量,同时也提高了编码效率1。

Dontla的博客 2597
上一篇: H.264笔记之一
下一篇: 12球问题
quanben
博客等级 码龄22年 175粉丝 199原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值