AVS3代码学习1:HPM6.0框架

VVC基本结束,我的工作任务瞬间从project转向了paper,这种“突然”是很不适应的。鉴于对看代码的热情与日俱增,也是为实习做一些可能的准备,特此在写&改paper之余抽出3小时,重新开一个一直没敢碰的大坑找找新鲜感,阅读一下AVS代码以作“休闲”吧。

本文主要为初次接触AVS或了解AVS框架所准备。

0 运行程序

1、创建E:\project\HPM-6.0\test目录作为工作目录
2、cfg文件中找到编码序列
3、编码端:encoder_app设为启动项,向main函数以此传参
--config E:\project\HPM-6.0\cfg\encode_AI.cfg -i E:\project\HPM-6.0\test\City_1280x720_60.yuv -w 1280 -h 720 -z 60 -f 1 -d 8 -q 45 -o City_AI.bin -r City_AI_rec.yuv > enc.txt
4、解码端:decoder_app设为启动项,向main函数以此传参
-s -i City_AI.bin -o City_AI_dec.yuv
5、运行

1 上层函数

1、app_encoder.c文件下的main()函数;
2、enc.c文件下的enc_pic()函数;
3、enc_mode.c文件下的enc_mode_analyze_lcu()函数;
4、enc_mode.c文件下的mode_coding_tree()函数;
5、enc_mode.c文件下的mode_coding_tree()函数可递归调用进行划分;
6、enc_mode.c文件下的mode_coding_unit()函数;
7、enc_pintra.c文件下的analyze_intra_cu()函数;

注:
mode_coding_tree主要完成LCU(即VVC的CTU)划分过程。
mode_coding_unit对CU的四种预测方式(intra、inter、ibc、ipcm)分别进行操作。
analyze_intra_cu完成帧内CU的亮度和色度的分别预测及变换

2 帧内预测

1、enc_pintra.c文件下的analyze_intra_cu()函数;
2、enc_pintra.c文件下的make_ipred_list_fast()函数;
3、enc_pintra.c文件下的check_one_intra_pred_mode()函数;
4、com_ipred.c文件下的com_ipred()函数;
5、com_ipred.c文件下的ipred_plane()函数;

注:
check_one_intra_pred_mode是预测的具体操作,并根据代价更新列表
com_ipred为具体每一种帧内预测模式的计算方式

3 变换量化

1、enc_pintra.c文件下的analyze_intra_cu()函数;
2、enc_pintra.c文件下的pintra_residue_rdo()函数;
3、enc_tq.c文件下的enc_tq_nnz()函数;
4、enc_tq.c文件下的enc_trans()函数;
5、enc_tq.c文件下的tx_dct2_pb8()函数;
6、com_itdq.c文件下的com_itdq()函数;
7、com_itdq.c文件下的com_itrans()函数;
8、com_itdq.c文件下的itx_dct2_pb8()函数;

注:
其中3-5是变化量化过程,6-8是反量化反变换过程。

4 环路滤波

1、enc.c文件下的enc_pic()函数;
2、enc.c文件下enc_deblock_avs2()函数;
3、enc.c文件下enc_sao_avs2()函数;
4、enc.c文件下enc_alf_avs2()函数;

扫描二维码关注公众号,回复: 11843600 查看本文章

5 熵编码

1、enc.c文件下的enc_pic()函数;
2、enc.c文件下的enc_eco_tree()函数;
3、enc_eco.c文件下的enc_eco_unit()函数;
4、enc_eco.c文件下的enc_eco_xcoef()函数;
5、enc_eco.c文件下的enc_eco_srcc函数。

猜你喜欢

转载自blog.csdn.net/weixin_42979679/article/details/105504572
今日推荐