基于NiosII的 低碼率實(shí)時(shí)H.264視頻編碼器
2.2 H.264編碼器核心模塊
綜合現(xiàn)有的硬件資源、實(shí)時(shí)性與實(shí)現(xiàn)難度等因素,設(shè)計(jì)中僅采用了幀內(nèi)預(yù)測方式,編碼器包括幀內(nèi)預(yù)測模塊、變換量化模塊和CAVLC熵編碼模塊。處理時(shí)以宏塊(16×16)為單位,亮度和色度塊分別進(jìn)行幀內(nèi)預(yù)測、變換量化和反變換反量化,然后進(jìn)行CAVLC熵編碼,圖像的亮色比為Y:U:V=4:2:O。
H.264編碼器設(shè)計(jì)前期先用VC++在PC機(jī)上實(shí)現(xiàn),后期移植到FPGA上用自定義硬件模塊實(shí)現(xiàn),二者所需時(shí)間如表1所列??梢钥闯?,用硬件實(shí)現(xiàn)H.264壓縮編碼一幀圖像只需約16 ms,較PC機(jī)實(shí)現(xiàn)有很大提高,而且硬件模塊占用的資源不到50%,性價(jià)比較高。
由于自定義幀內(nèi)預(yù)測硬件模塊較軟件實(shí)現(xiàn)對系統(tǒng)性能提高較大,這里重點(diǎn)分析幀內(nèi)預(yù)測模塊硬件結(jié)構(gòu)設(shè)計(jì)。
根據(jù)H.264幀內(nèi)預(yù)測算法,幀內(nèi)預(yù)測模塊是在非率失真優(yōu)化模式下設(shè)計(jì)的。它通過接口模塊從SDRAM中讀入一個(gè)MB(16×16)的亮度和色度圖像數(shù)據(jù),在亮度和色度預(yù)測模塊中對當(dāng)前MB進(jìn)行預(yù)測和預(yù)測模式選擇,輸出預(yù)測殘差及最佳預(yù)測模式;同時(shí)將預(yù)測結(jié)果與經(jīng)過反DCT變換和反量化之后的殘差值相加,經(jīng)重構(gòu)模塊補(bǔ)償重構(gòu)后寫回SDRAM。主要結(jié)構(gòu)如圖7所示,整個(gè)模塊分為4個(gè)子模塊:接口模塊、亮度預(yù)測、色度預(yù)測和圖像重構(gòu)模塊。
接口模塊中設(shè)計(jì)了4個(gè)RAM,用于存放讀入的原始圖像和用于預(yù)測的參考圖像數(shù)據(jù):RAM0存放亮度預(yù)測像素,深度32,地址0~15存放上側(cè)預(yù)測參考像素,地址16~31存放左側(cè)預(yù)測參考像素;RAMl存放當(dāng)前宏塊亮度原始值,深度為256;RAM2存放色度預(yù)測參考像素,深度32,地址0~7存放上側(cè)Cb預(yù)測參考像素,地址8~15存放左側(cè)Cb預(yù)測參考像素,地址16~23存放上側(cè)cr預(yù)測參考像素,地址24~31存放左側(cè)Cr預(yù)測參考像素;RAM3存放當(dāng)前宏塊色度原始值,深度為128。
亮度預(yù)測模塊的內(nèi)部結(jié)構(gòu)如圖8所示。
①模式選擇模塊根據(jù)當(dāng)前宏塊的預(yù)測參考像素可用信息(avail)指定當(dāng)前宏塊按一定順序做預(yù)測,如avail=“11”表示上側(cè)和左側(cè)預(yù)測參考像素均可用,則對當(dāng)前宏塊順序做DC、HOR、VERT、PLANE四種方式預(yù)測。在殘差處理模塊中,采用了2個(gè)RAM順序保存各種預(yù)測模式的預(yù)測殘差,所以在模式選擇模塊里會比較當(dāng)前預(yù)測模式的代價(jià)函數(shù)和前一種預(yù)測模式代價(jià)函數(shù)的大小。如果當(dāng)前預(yù)測模式的代價(jià)函數(shù)較小,則說明當(dāng)前預(yù)測模式較優(yōu),在做下一種模式預(yù)測時(shí)將預(yù)測殘差指定保存在上次較差預(yù)測模式的殘差RAM中。當(dāng)前宏塊的可用預(yù)測模式都預(yù)測結(jié)束后,模式選擇模塊根據(jù)每一種模式預(yù)測代價(jià)函數(shù)決定出最優(yōu)預(yù)測模式,并指出該預(yù)測模式對應(yīng)殘差處理模塊中存放的RAM,將相應(yīng)的殘差輸入到整數(shù)變換模塊。
②預(yù)測模塊包含了DC、HOR、VERT、PLANE四種預(yù)測模式的實(shí)現(xiàn)實(shí)體,根據(jù)模式選擇模塊決定的預(yù)測模式從接口模塊讀取預(yù)測參考像素和原始像素值,預(yù)測后殘差輸出到殘差處理模塊,預(yù)測值輸出到補(bǔ)償重構(gòu)模塊保存。
③殘差處理模塊采用2個(gè)存放殘差的RAM,每個(gè)宏塊可先并行做2種預(yù)測,殘差分別保存到2個(gè)RAM中,選擇其中較佳預(yù)測模式,再做下一種預(yù)測模式與前面所選較佳預(yù)測模式比較,直到完成所有預(yù)測模式選擇出最佳預(yù)測模式。
④預(yù)測代價(jià)模塊是計(jì)算每一種預(yù)測模式的預(yù)測代價(jià),以4×4塊為單位作hadamard變換,將變換后每個(gè)4×4塊DC系數(shù)再做一次hadamard變換,將所有變換結(jié)果進(jìn)行絕對值累加就是對應(yīng)的預(yù)測代價(jià)。
色度預(yù)測模塊結(jié)構(gòu)基本和亮度預(yù)測相同,只是由于色度有Cb、Cr兩個(gè)分量,殘差在RAM中的存放方式略有差別;同一個(gè)宏塊的色度預(yù)測和亮度預(yù)測是并行執(zhí)行的,由于要處理的色度數(shù)據(jù)比亮度少一半,筆者在后面的整數(shù)變換中采用先處理色度,再處理亮度的方法,使得流水更加緊湊,減少等待時(shí)間,提高整個(gè)模塊的運(yùn)行速度。
3 結(jié) 論
筆者設(shè)計(jì)的基于NiosII的低碼率實(shí)時(shí)H.264視頻編碼系統(tǒng),在系統(tǒng)時(shí)鐘頻率100 MHz時(shí),壓縮一幀320×240的彩色圖像需16.283 ms,在量化參數(shù)選擇30時(shí),圖像壓縮比達(dá)到2%,實(shí)時(shí)監(jiān)控圖像幀率25幀/s。系統(tǒng)具有資源占用較少,低成本,低碼率,高清視頻質(zhì)量的特點(diǎn),具有較好的發(fā)展前景。
圖9為集成開發(fā)環(huán)境下綜合仿真后系統(tǒng)的資源占用情況。
評論