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()函數;

5 熵編碼

1、enc.c文件下的enc_pic()函數;
2、enc_bsw.c文件下的com_bsw_init()函數;
3、enc_eco.c文件下的enc_eco_pic_header()函數;
4、enc_eco.c文件下的enc_eco_patch_header()函數;
5、enc_eco.c文件下的enc_eco_tree()函數;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章