參與啟智社區(qū)開源項目心得分享——韓冰杰

1. 天璇項目簡介

2019年3月,第六十八次AVS會議完成AVS3-P2基準(zhǔn)檔次制定工作,AVS3作為新一代視頻壓縮標(biāo)準(zhǔn),相比上一代標(biāo)準(zhǔn)AVS2和HEVC,可節(jié)省近30%碼率。會議之后,北京大學(xué)深圳研究生院數(shù)字媒體研究中心王榮剛老師團(tuán)隊便開始著手AVS3解碼器開發(fā),并于2019年12月同時在鵬城實(shí)驗室啟智開源平臺和Github開源,項目代號為“天璇”,又名“uAVS3d”。開源之時,uAVS3d已成雛形,解碼性能達(dá)業(yè)界領(lǐng)先水平,并覆蓋PC、手機(jī)等常用智能設(shè)備,開源之后至今(2021年1月13日),又迭代代碼60余次,性能、平臺適配和代碼魯棒性進(jìn)一步提升。

uAVS3d支持Android/IOS/Windows/Linux/MacOS等常用系統(tǒng)平臺,并針對ARMv7/ARMv8/X86架構(gòu)處理器做了深度優(yōu)化,支持高位深(10bit)解碼,具備高效的并發(fā)性能。在PC端可以實(shí)現(xiàn)8K實(shí)時解碼,在移動端可支持4K 30fps視頻實(shí)時播放。不論是單線程的解碼速度還是解碼并行度,uavs3d均大幅領(lǐng)先AV1的開源解碼器dav1d和aomdec。

PC端uAVS3d與AV1和HEVC常用解碼器的解碼性能對比如下:

2. 開發(fā)心得

天璇項目于2019年3月啟動,5月底即輸出x86優(yōu)化版本,可實(shí)現(xiàn)8K視頻實(shí)時解碼,之后又快速推出了Android和IOS版本,快節(jié)奏加之高性能引起了業(yè)內(nèi)不少關(guān)注。華為在uAVS3d移動版本完成之后的第一時間(開源之前)便與我們接觸,針對華為手機(jī)做定制性優(yōu)化;騰訊、百度、愛奇藝、Bigo等視頻服務(wù)商也在開源前后相繼測試跟進(jìn),部分廠商已上線應(yīng)用;uAVS3d的接口文件也已集成至多媒體處理開源平臺FFmpeg的主分支,方便第三方集成驗證。

取得如今的成果,著實(shí)不易,技術(shù)層面,uAVS3d之所以能快速成型,與所在團(tuán)隊多年的積累是分不開的,數(shù)字媒體研究中心曾先后研發(fā)AVS+/AVS2編解碼器,已積累大量優(yōu)秀代碼和經(jīng)驗。本人作為項目開發(fā)者之一,主要負(fù)責(zé)解碼器的關(guān)鍵模塊優(yōu)化,具體貢獻(xiàn)為添加分像素插值、幀內(nèi)預(yù)測、IDCT中DCT2部分、ALF、Deblock、SAO以及其它部分細(xì)節(jié)模塊的SIMD指令實(shí)現(xiàn),SIMD指令覆蓋SSE/AVX2/ARMv7/ARMv8,并且bitdepth為8和10的兩個版本獨(dú)立優(yōu)化;數(shù)據(jù)結(jié)構(gòu)方面,調(diào)整UV分量存儲結(jié)構(gòu),以提升SIMD并行效率。本人是15屆北大深研院數(shù)字媒體研究中心畢業(yè)生,讀研期間曾參與AVS2解碼器的模塊優(yōu)化,對各模塊的SIMD優(yōu)化細(xì)節(jié)有一定了解,17年重新加入團(tuán)隊,之后,因項目需要,曾負(fù)責(zé)AVS2解碼器移動端優(yōu)化,對解碼器部分結(jié)構(gòu)調(diào)整(UV分量重建像素交織存儲,熵解碼實(shí)現(xiàn)調(diào)整)、完善ARMv7/ARMv8匯編,使得AVS2解碼器性能追齊業(yè)內(nèi)領(lǐng)先的HEVC解碼器。有了uAVS2d的開發(fā)經(jīng)驗和代碼積累,uAVS3d的模塊優(yōu)化就順利很多,AVS3的基本框架與AVS2一脈相承,多個模塊大同小異,只是AVS3的塊尺寸類型比AVS2要多不少,給匯編優(yōu)化帶來一定挑戰(zhàn)。個人從uAVS3d項目開發(fā)中,收獲很多,加深了對編解碼框架的理解,移動端開發(fā)和匯編代碼編碼也更加得心應(yīng)手。

關(guān)于項目社區(qū)的溝通協(xié)作和運(yùn)營,本人也是受益很大。第一次負(fù)責(zé)開源項目的運(yùn)營,項目說明、開源協(xié)議選擇、版本維護(hù)都趟過一些坑,好在選擇的開源平臺(啟智社區(qū)和Github)以及版本管理工具(git)功能完善,服務(wù)穩(wěn)定易用,目前項目維護(hù)已走上正軌。

最后,給開源社區(qū)的開發(fā)同僚們分享些個人體會和建議:

  1. 認(rèn)真對待每個開發(fā)細(xì)節(jié),項目整體的效能是眾多細(xì)節(jié)實(shí)現(xiàn)的集中體現(xiàn),細(xì)節(jié)實(shí)現(xiàn)水平可能就是項目脫穎而出的關(guān)鍵。

  2. 放平心態(tài),開源意在分享,為后來者鋪路,減少重復(fù)工作,不宜太計較單個項目的得失。技術(shù)講究厚積薄發(fā),認(rèn)真寫下的每一份代碼終是個人積累的財富。

  3. 項目啟動之前做好調(diào)研分析,選擇合適的方向,了解現(xiàn)有工作,預(yù)估所能達(dá)到的效果,盡可能少做無用功。

Share this article:

Facebook
Twitter
LinkedIn
WhatsApp