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