H.264笔记之三——帧内预测

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

本章讨论的代码主要位于common/predict.c中。
x264_macroblock_cache_load函数在每个宏块解码之前初始化某些状态,在x264_slice_write函数的宏块处理循环中被调用。
i_mb_xy:   当前宏块的索引
i_mb_4x4:  当前宏块中第一个4x4块的索引
i_mb_8x8:  当前宏块中第一个8x8块的索引
i_top_y:   上方宏块的y索引
i_top_xy:  上方宏块的索引
i_top_4x4: 当前宏块中第一个4x4块上方的4x4块的索引
i_top_8x8: 当前宏块中第一个8x8块上方的8x8块的索引

这里首先初始化和当前宏块毗邻的已解码块。
这里用到x264_scan8,它指示如下扫描结构:

   0 1 2 3 4 5 6 7
 0
 1   0 1   0 1 4 5
 2   2 3   2 3 6 7
 3         8 9 C D
 4   0 1   A B E F
 5   2 3

 在空缺部分恰好可以填入相应宏块的毗邻块。

以下逐个各种分析预测情况:

对于16x16的块:
predict_16x16
共7种预测模式:H, V, DC, P, LEFT, TOP, 128
predict_16x16_h
用左侧相邻16x16块的右侧像素沿水平方向覆盖
predict_16x16_v
用上方相邻16x16块的底行像素沿竖直方向覆盖
predict_16x16_p
右上左下均值预测覆盖(注意均值生成)
predict_16x16_dc
用左侧边沿和上方边沿的均值作为DC预测值进行单一覆盖
predict_16x16_dc_left
只用左侧边沿进行DC单一覆盖
predict_16x16_dc_top
只用上方边沿进行DC单一覆盖
predict_16x16_dc_128
用128进行单一覆盖

对于8x8的色差块:
predict_8x8c_dc_128
用128进行单一覆盖
predict_8x8c_dc_left
上下两个4行分别以对应左边沿4个像素均值单一覆盖
predict_8x8c_dc_top
左右两个4列分别以对应上边沿4个像素均值单一覆盖
predict_8x8c_dc
   s0 s1
s2 b0 b1
s3 b2 b3
s?是边沿4像素组
4个4x4块分别用s0,s2均值,s1均值,s3均值和s1,s3均值单一覆盖
predict_8x8c_h
用左侧相邻8x8块的右边沿像素沿水平方向覆盖
predict_16x16_v
用上方相邻16x16块的底行像素沿竖直方向覆盖
predict_8x8c_p
右上左下均值预测覆盖(注意均值生成)

对于4x4的块:(这是H264文档经常拿来作demo的)
predict_4x4_dc_128
用128进行单一覆盖
predict_4x4_dc_left
用左边沿4个像素均值单一覆盖
predict_4x4_dc_top
用上边沿4个像素均值单一覆盖
predict_4x4_dc
用左侧和上方边沿共8个像素均值单一覆盖
predict_4x4_h
用左侧相邻4x4块的右边沿像素沿水平方向覆盖
predict_4x4_v
用上方相邻4x4块的底行像素沿竖直方向覆盖
predict_4x4_ddl
右上至左下预测覆盖(注意均值生成)
predict_4x4_ddr
左上至右下预测覆盖(注意均值生成)
predict_4x4_vr
左上到右下(偏下)预测覆盖(注意均值生成)
predict_4x4_hd
左上到右下(偏右)预测覆盖(注意均值生成)
predict_4x4_vl
右上到左下(偏下)预测覆盖(注意均值生成)
predict_4x4_hu
左下到右上(偏右)预测覆盖(注意均值生成)

对于8x8亮度块:
edge中存放
predict_8x8_dc_128
用128进行单一覆盖
predict_8x8_dc_left
用左侧块边沿8个像素均值单一覆盖
predict_8x8_dc_top
用上方块边沿8个像素均值单一覆盖
predict_8x8_dc
用左侧块和上方块边沿共16个像素均值单一覆盖
predict_8x8_h
用左侧边沿预测覆盖
predict_8x8_v
用上方边沿预测覆盖
predict_8x8_ddl
右上到左下预测覆盖(注意均值生成)
predict_8x8_ddr
左上到右下预测覆盖(注意均值生成)
predict_8x8_vr
左上到右下(偏下)预测覆盖(注意均值生成)
predict_8x8_hd
左上到右下(偏右)预测覆盖(注意均值生成)
predict_8x8_vl
右上到左下(偏下)预测覆盖(注意均值生成)
predict_8x8_hu
左下到右上(偏右)预测覆盖(注意均值生成)

以上“注意均值生成”指预测值一般由起点决定,起点由反向延长线确定,起点2倍权重和两侧点构成均值。
例如45度均值为以起始点对应45度位置的点作为中心(2倍权重),其两侧点作为补充形成的均值。

H.264标准规定,首先由macroblock层的mb_type导出intra块的预测类型macroblock prediction mode,其中包含子块尺度信息,有4x4,8x8和16x16三种。4x4和8x8按照标准由变换尺寸区分,4x4是最常用的模式。
在确定预测类型之后,对于含16个子块的4x4模式,每个子块的预测模式(即上述讨论)由标准规定的判决算法给出:
<...>

 


HEVC(H.265) 基础知识 最近由于工作需求,需要学习HEVC。最初一头雾水,都不了解这个是视频bian'ga 简称HEVC High Efficiency Video Coding 阅读详情

相关推荐

西瓜视频登录页面

页面效果

bo1029的博客 53万+

对x264_macroblock_cache_load的理解

X264版本: 2004/06/03 函数作用: 将编码该宏块所需的信息加载到mb.pic、mb.cache两个结构体中,记录相邻宏块的存在性。 函数过程: 初始化坐标信息,这些坐标信息将在下面用作下标。 加载mb.pic:实质上是加载待编宏块的像素值、宏块在预测时所需的相邻像素值、建立参考列表中同一位置宏块的地址列表。 加载mb.cache:加载存在的...

weixin_33744141的博客 323

x264_macroblock_cache_load()

功能:完成将已编码数据参数和待编码数据装入到h->mb.cache中,下图是BUF中存储的数据在以MB为单位的时候的存储顺序x264_macroblock_cache_load( h, i_mb_x, i_mb_y );//是把当前宏块的up宏块和left宏块的intra4x4_pred_mode,non_zero_count加载进来,放到一个数组里面,这个数组用来直接得到当前宏块的左侧和上面宏块的相关值.要想得到当前块的预测值,要先知道上面,左面的预测值,它的目的是替代getneighbour函数<br

szu030606的专栏 1124

H264/AVC-预测

I宏块使用预测编码压缩数据,根据相邻宏块数据恢复当前宏块信息。值得注意的一点是,预测所参考的相邻宏块数据是deblocking之前的像素值,因为上一宏块的deblocking依赖当前宏块像素值,但当前宏块数据还未重建。 1.预测类型 预测包含4种类型: 亮度4x4块Intra_4x4预测方式 亮度8x8块Intra_8x8预测方式 亮度16x16宏块Intra_16x16预测方式 色度8x8块预测方式。 预测的输入为预测模式和相邻块像素值,输出为当前块的预测值。 2. 亮度Intr

qq_42139383的博客 3428

x264 - x264_macroblock_cache_load

在void x264_macroblock_cache_load()函数里 unsigned int i_neighbour8[4];       unsigned int i_neighbour4[16];      ...............................................................................

fanbird2008的专栏 786

H.264学习笔记2——预测

https://www.cnblogs.com/DwyaneTalk/p/4020729.html H.264学习笔记2——预测 预测:根据经过反量化和反变换(没有进行去块效应)之后的同一条带内的块进行预测。 A、4x4亮度块预测:   用到的像素和预测方向如图:        a~f是4x4块中要预测的像素值,A~Q是临块中解码后的参考值。0~8是4x4的亮度块的9个预...

u010029439的博客 953

H.264 White Paper学习笔记——预测

H.264 预测

holly的专栏 857

H.264学习笔记3——预测

https://www.cnblogs.com/DwyaneTalk/p/4021365.html H.264学习笔记3——预测 预测主要包括运动估计(运动搜索方法、运动估计准则、亚像素插值和运动矢量估计)和运动补偿。 对于H.264,是对16x16的亮度块和8x8的色度块进行预测编码。 A、树状结构分块   H.264的宏块,对于16x16的亮度宏块,可以分成16x1...

u010029439的博客 1030

H.264 White Paper学习笔记(二)预测

为什么要有预测?因为一般来说,对于一幅图像,相邻的两个像素的亮度和色度值之间经常是比较接近的,也就是颜色是逐渐变化的,不会一下子突变成完全不一样的颜色。而进行视频编码,目的就是利用这个相关性,来进行压缩。 很好理解,存储一个像素的亮度值可能需要8个bit,但是如果相邻的两个像素变化不大,我存储一个像素的原始值,以及第二个像素相对第一个像素的变化值,那么第二个值我可能用2个bit就够...

dcph88859的博客 895

H.266/VVC相关技术学习笔记25:H.264到H.265再到H.266中内角度预测模式发展历程以及各阶段技术细节详解

趁着国庆的时间,详细总结一下关于视频编码中的预测,主要总结一下从H.264到H.265再到H.266中的内角度预测模式发展历程以及各个阶段角度模式的技术细节以及预测值计算流程。因为之前看了角度模式,也忘了记笔记,现在有点淡忘其中的细节了,趁这几天复习顺带总结一下。其中AVC和HEVC中角度预测的一大部分知识点是源于书的,但是感觉杨老师那本书中知识点脉络不是很清楚,而且其中的计算细节也没有讲清...

Peter_Red_Boy的博客 3329
上一篇: 12球问题
下一篇: Problem of Object Model arising from a Ray-trace Model
quanben
博客等级 码龄22年 175粉丝 199原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值