![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
AV1
文章平均质量分 79
涵小呆
这个作者很懒,什么都没留下…
展开
-
AV1技术学习:Quantization
量化是对变换系数进行,并将量化索引熵编码。AV1的量化参数 QP 的取值范围是0 ~ 255。原创 2024-07-23 21:26:18 · 175 阅读 · 0 评论 -
AV1技术学习:Transform Coding
对预测残差进行变换编码,去除潜在的空间相关性。VP9 采用统一的变换块大小设计,编码块中的所有的块共享相同的变换大小。VP9 支持 4 × 4、8 × 8、16 × 16、32 × 32 四种正方形变换大小。根据预测模式选择由一维离散余弦变换 (DCT) 和非对称离散正弦变换 (ADST) 核组合构成的一组可分离的二维变换类型。AV1继承了VP9中的变换编码方案,并在变换块大小和变换核方面扩展了其灵活性。原创 2024-07-22 22:13:05 · 382 阅读 · 0 评论 -
AV1技术学习:Coding Structure
SuperBlock 是AV1编解码器可以处理的最大编码块。SuperBlock 大小可以是128 × 128 或64 × 64,由 sequence header 控制。SuperBlock 可以进一步划分为更小的编码块,每个编码块都有自己的预测和变换模式。SuperBlock 编码只依赖于它的上侧和左侧的 SuperBlock。原创 2024-07-22 21:45:38 · 805 阅读 · 0 评论 -
AV1技术学习:Reference Frame System
AV1 Codec 允许在其解码的帧缓冲区中最多允许保存 8 帧。对于一个编码帧,可以从解码的帧缓冲区中选择任意 7 个帧作为它的参考帧。编码端可以通过比特流显式地传输参考帧索引,范围从 1到 7。原则上,参考帧索引 1-4 为当前帧显示顺序之前的帧,而索引 5-7 则为当前帧显式顺序之后的帧。对于双向融合(bidirectional compound)预测,可以将两个参考帧组合起来生成预测值。如果两个参考帧在当前帧之前或之后,这被认为是单向融合预测。原创 2024-07-21 22:33:57 · 423 阅读 · 0 评论 -
AV1技术学习:Intra Prediction
对于帧内预测模式编码块,亮度分量的预测模式和色度分量的预测模式在比特流中分别发出信号。亮度预测模式是基于相邻左侧和上侧两个编码块预测上下文的概率模型进行熵编码的。色度预测模式的熵编码取决于色度预测模式的状态。帧内预测以变换块为单位,并使用先前解码的边界像素作为参考像素。原创 2024-07-19 19:23:08 · 622 阅读 · 0 评论 -
AV1技术学习: Compound Prediction
AV1支持两个参考帧的预测通过多种复合模式线性组合。复合预测公式为其中,权重m(x, y) is scaled by 64 以进行整数计算,R1(x, y)和R2(x, y)表示两个参考块中位于(x, y)的像素。P(x, y)将按比例缩小 1/64 以形成最终的预测。原创 2024-07-17 22:26:25 · 767 阅读 · 0 评论 -
AV1技术学习:Affine Motion Compensation
除了传统的平移运动补偿,AV1 还支持仿射变换模型,将当前像素点 (x, y) 通过以下方式投影到参考帧中的预测像素点 (x', y').参数 (h13, h23) 对应于平移模型中使用的常规运动向量。参数 h11 和 h22 控制垂直和水平轴上的比例因子,并与 h12 和 h21 一起决定旋转角度。每个参考帧关联一个全局仿射模型,其中四个非平移参数的精度均为12位,平移运动矢量的编码精度为15位。一个编码块可以直接根据参考帧索引使用其仿射模型。原创 2024-07-16 22:43:42 · 612 阅读 · 0 评论 -
AV1技术学习:Translational Motion Compensation
常用的基于块的编码器运动估计是通过绝对差和(SAD)或平方误差和(SSE)的测量来进行的,这往往有利于与直流和低频分量相似的参考块,而对高频分量的预测不太可靠。亚像素是通过可分插值滤波器产生的,如下图所所示,首先通过所有的行计算水平插值,然后在水平插值所得亚像素(橙色)的基础上,进行垂直插值,产生最终的亚像素(绿色)。在 VP9 中采用自适应插值滤波方案,即 VP9 中的编码块可以从三个 8 抽头的插值滤波器中选择,这些插值滤波器使用不同的频域的截止频率,所选的插值滤波器同时应用于垂直和水平方向。原创 2024-07-15 22:32:27 · 412 阅读 · 0 评论 -
AV1代码学习:av1_foreach_transformed_block_in_plane函数
在AV1中,进行预测变换都是基于Transform Block(变换块)进行的,变换块一共19种尺寸,并且其尺寸通常是小于或者等于编码块尺寸的,如下代码所示。enum { TX_4X4, // 4x4 transform TX_8X8, // 8x8 transform TX_16X16, // 16x16 transform TX_32X32, // 32x32 transform TX_64原创 2021-07-01 22:12:03 · 1003 阅读 · 0 评论 -
AV1技术学习之Chroma from Luma(CfL)
一、Chroma from LumaChroma from Luma(CfL)是一种色度帧内预测技术,是通过建立重建亮度像素和色度像素的线性模型来预测色度像素的,其线性模型如下所示:其中,是去平均后的重建亮度像素(对于4:2:2和4:2:0格式的YUV需要对其重建亮度块进行下采样),即如下图所示的“AC” Contribution;DC指的是当前色度块的DC模式的预测值(即相邻参考像素的均值)。为了降低复杂度,伸缩因子α是在编码端通过率失真优化准则选出的,如下公式所示;之后再将选出的结果原创 2021-01-28 09:45:41 · 3875 阅读 · 3 评论 -
AV1参考软件aom工程的编译与调试(VS2017)
aom软件下载平台:https://aomedia.googlesource.com/aom可以在该网站直接下载,也可以通过git命令进行clone(注意需要科学上网)git clone https://aomedia.googlesource.com/aom一、AOM工程的编译根据https://aomedia.googlesource.com/aom下载网页中列出的编译的先决条件(doxygen和EMSDK现不需要)CMake:从cmake官网可以下载Win版本可执行文件或者安装包原创 2021-01-09 20:25:33 · 8291 阅读 · 0 评论 -
AV1代码学习:解码端aomdec.c的main函数
aom2.0的工程中,aomdec.c是解码端工程,主要完成码流的解析,并输出解码后的YUV,其入口是amdec.c中的main函数在main函数里面做的工作很简单,首先解析了命令行参数loops,获取其解码文件的次数,然后开始进入解码循环main_loop函数中其代码如下:int main(int argc, const char **argv_) { unsigned int loops = 1, i; char **argv, **argi, **argj; struct a原创 2020-11-27 22:56:23 · 1568 阅读 · 0 评论 -
AV1代码学习:av1_first_pass函数
在AV1中,默认是分为两次编码过程,第一次编码过程主要是用来统计信息从而加速第二次编码。第一次编码的入口函数就是av1_first_pass函数,第一次编码的过程大致如下所示:第一次编码仅会对亮度分量进行编码。 在第一次编码中,对每一帧按照按光栅扫描顺序进行编码,并且每一个块的尺寸为16x16。在firstpass_intra_prediction函数中进行第一次过程中的帧内预测,其所使用的的帧内预测模式为DC模式,并返回帧内预测误差(帧内预测残差的平方和)。在firstpass_int原创 2020-11-05 09:18:31 · 2610 阅读 · 0 评论 -
AV1代码学习:av1_encode_strategy、denoise_and_encode、av1_encode函数
1.av1_encode_strategy函数av1_encode_strategy函数将实现high-level 编码策略,选择帧类型、帧位置等。它用这些决定的结果填充EncodeFrameParams结构,然后调用av1_encode函数(或者是denoise_and_encode函数)。该函数基本流程是:初始化 获取下一个要编码的源缓冲区(在第一次编码过程中,没有真正进行编码,所有source为NULL) 根据第一次编码过程的数据,获取当前帧的编码参数(av1_get_second_p原创 2020-11-04 22:09:56 · 3245 阅读 · 0 评论 -
AV1代码学习:encoder_encode函数
从aom_codec_encode函数进入encoder_encode函数。该函数的主要流程如下:检查当前帧,计算编码数据尺寸ctx->cx_data_sz(编码数据保存在ctx->cx_data) 根据之前解析的配置设置编码信息(av1_change_config函数),在编码时,可以通过访问ctx->cpi的AV1_COMP结构体,访问到许多具体编码信息。 应用编码标志(av1_apply_encoding_flags)(这部分没有明白什么含义) 对一系列结构体和buff原创 2020-11-04 20:01:11 · 2248 阅读 · 0 评论 -
AV1代码学习:函数encode_frame和aom_codec_encode
1.encode_frame函数在编码端aomenc.c的main函数中,在进入编码过程循环后,循环读取视频的每一帧数据,然后通过encode_frame函数对每一帧进行编码。encode_frame函数主要是进行一些当前帧进行放缩的工作,并启动计时器,然后调用aom_codec_encode函数进行编码。static void encode_frame(struct stream_state *stream, struct AvxEncode原创 2020-11-03 21:54:37 · 1197 阅读 · 1 评论 -
AV1 编码器研究之aomenc.exe命令行参数简析
用编码器打印help信息命令行参数归类命令行详细内容通用命令全局编码选项码率控制选项Twopass码率控制选项关键帧设置选项AV1 特定选项用编码器打印help信息运行如下命令可以将aomenc.exe内置的一些帮助信息输出到help.txt中。下文主要以help.txt中的内容进行分析。目前还是基于其他编码标准的经验分析AV1的一些命令参数,可能会有一些理解错误,对于不确定的地方后续进行实验测试,如果有哪位大拿发现有错漏也请不吝指出。ao...转载 2020-11-02 08:56:25 · 2820 阅读 · 4 评论 -
AV1代码学习:编码端aomenc.c的main函数
aom2.0的工程中,aomenc是编码端工程,主要完成视频序列的编码,其入口是amenc.c中的main函数main函数的主要流程如下:初始化 解析命令行参数 parse_global_config 解析全局编码配置文件参数 parse_stream_params 解析视频流参数 进入编码过程循环 pass 打开输入文件open_input_file 设置视频流和编解码器配置 set_stream_dimensions 设置视频流的维度 validate_stream原创 2020-10-29 22:56:17 · 1444 阅读 · 0 评论 -
AV1编码标准-算法描述
AV1编码标准本文档介绍了相关编解码器中包含的编码工具的技术方面。本文档不是相关编解码器的规范。相反,它总结了针对新开发人员的编码工具的突出功能。缩略语CfL: Chroma from LumaIntraBC: Intra block copyLCU: Largest coding unitOBMC: Overlapped Block Motion CompensationCDEF: Constrained Directional Enhancement Filter块划分原创 2020-10-15 22:35:22 · 16075 阅读 · 9 评论 -
AV1视频编解码器核心编码工具概述
一、介绍在过去的十年里,基于网络的视频应用变得非常普遍,现代设备和网络基础设施推动了高分辨率、高质量内容消费的快速增长。因此,占主导地位的带宽消费者,如视频点播(VoD)、实时流媒体和会话视频,以及新兴的新应用,包括虚拟现实和云游戏,这些都非常依赖于高分辨率和低延迟,对传输基础设施提出了严峻的挑战,因此对高效视频压缩技术的需求更加强烈。二、AV1编码工具1.编码块划分VP9使用从64×64级别到4×4级别的四种划分方式,对于8×8以下的块有额外的限制,在8x8块中,所有子块都应保存相同的参考翻译 2020-10-14 21:56:15 · 30988 阅读 · 1 评论