H.263視頻編碼的碼率控制算法及硬件實現(xiàn)
發(fā)布時間:2008/6/5 0:00:00 訪問次數(shù):865
摘 要:提出了一種h.263低碼率視頻壓縮編碼的自適應(yīng)碼率控制方法,這種方法可以用fpga來實現(xiàn),為了達到實時性的要求,對硬件實現(xiàn)的具體方法進行了優(yōu)化。所提出的碼率控制優(yōu)化方法已在h.263標準的硬件系統(tǒng)中實現(xiàn)。
關(guān)鍵詞:fpga;h.263標準;碼率控制;視頻壓縮;幀層
1 引言
輸出比特速率的控制是影響h.263低速率視頻編碼的一個重要問題,控制的好壞直接關(guān)系到解碼圖像的質(zhì)量與編碼器輸出比特速率的穩(wěn)定性。itu-th.263[1]建議本身對這部分算法是開放的。到目前為止,已提出了若干種比特速率的控制算法[2~4]。這些算法可以分為兩類,一類為前饋比特速率控制,另一類為反饋比特速率控制。前饋控制算法通過對各編碼單位編碼輸出比特數(shù)的預(yù)測,或用試驗迭代的方法,來確定相應(yīng)的量化步長,其主要弱點是常常需要很大的計算量,使得其應(yīng)用受到明顯的限制,因而很少被采用。相對來說,反饋控制算法的計算量是可以接受的,并已被廣泛應(yīng)用。itu-t相繼推出的tmn5模型和tmn8[2]模型就是一種反饋比特速率算法。tmn8是在tmn5的基礎(chǔ)上提出的,具有優(yōu)異的控制效果,很多試驗表明,以tmn8實現(xiàn)的系統(tǒng)可以穩(wěn)定地鎖定在既定碼率上,碼率的上下波動小于10%,并且tmn8模型的算法實現(xiàn)起來也不復(fù)雜。
本文針對h.263視頻編碼器的結(jié)構(gòu),根據(jù)itu-t視頻編碼模型tmn-8中標準的碼率控制算法,提出了一種采用fpga實現(xiàn)碼率控制的硬件方法,碼率控制分別在宏塊層和圖像層進行。首先闡述了h.263的碼率控制算法,然后介紹了硬件實現(xiàn)及優(yōu)化方法,最后給出了仿真的結(jié)果。
2 碼率控制算法
h.263系統(tǒng)的碼率控制分2個層次實現(xiàn),一是改變量化步長,二是跳幀。碼率控制的過程可以用圖1來形象地說明。當控制器檢測到發(fā)送緩沖器中存放的碼流高于或者低于一定的門限時,控制器根據(jù)相應(yīng)的算法改變量化步長,使發(fā)送緩沖器中的碼流穩(wěn)定在一定的數(shù)量。當編碼器產(chǎn)生碼流的碼率很大,超出了量化器的控制范圍,將采用跳幀的方法來解決。
改變量化步長,是微觀的宏塊級控制,控制量是量化步長因子q。h.263標準規(guī)定:q分為32級,其值分別為0~31。q越小,量化越精細,圖像質(zhì)量就越高,而產(chǎn)生的碼流也越長。一個宏塊內(nèi)具有相同的q,所以對于q來說最小的變化單位是宏塊。當一個宏塊編碼結(jié)束時,如果截至到目前編碼器所產(chǎn)生的碼流小于一個門限,那么碼率控制模塊就根據(jù)一定的算法減少q;而對于量化器來說,q變小則量化后的系數(shù)中非零系數(shù)增多,編碼器輸出的碼流就增加。如果截至到目前編碼器所產(chǎn)生的碼流大于一個門限,那么碼率控制模塊就增加q,q變大則量化后的系數(shù)中非零系數(shù)減少,編碼器輸出的碼流就減少。按照這種方法,在一定程度上使發(fā)送給發(fā)送緩沖器的碼流維持恒定,也就達到了控制碼率的目的。改變量化步長實現(xiàn)起來比較復(fù)雜。根據(jù)統(tǒng)計的碼流比特數(shù),通過復(fù)雜的計算,在每個宏塊結(jié)束時,計算下一個宏塊的量化步長因子q(qp)。用ptype表示幀類型,幀類型為幀內(nèi)幀時用i幀表示,否則用p幀表示。
其中,mean_qp為上一幀每個宏塊平均的量化步長;bits_prev_pic為上一幀產(chǎn)生的比特數(shù);target_bpf為上一幀結(jié)束時計算出來的本幀應(yīng)該產(chǎn)生的比特數(shù);target_bpf_prev為上一個target_bpf;bits_prev_macro為本幀截至當前宏塊所產(chǎn)生的比特數(shù);mbnum為已編碼宏塊在本幀所有宏塊中所占的比例,用小數(shù)表示;target_bps是設(shè)定的發(fā)送碼率。
對于跳幀算法,是實現(xiàn)宏觀的幀級控制,控制量是tr。tr以跳幀或不跳幀來達到減少或增加碼流的目的。一幀編碼結(jié)束時,根據(jù)當前發(fā)送緩沖器內(nèi)的比特數(shù)與跳幀的門限進行比較,判斷是否需要跳幀。如果發(fā)送緩沖器內(nèi)的比特數(shù)大于跳幀的門限時,說明發(fā)送緩沖器已經(jīng)不能接受更多的碼流了,所以接下來的幀不用編碼,發(fā)送緩沖器用空出的時間來發(fā)送碼流,減少庫存,這樣就發(fā)生了跳幀;反之,則不需要跳幀。值得注意的是在整個過程中,從發(fā)送緩沖器發(fā)出的碼流一直是按照一定的速率發(fā)出的,也就是說碼率是恒定的,改變的是發(fā)送緩沖器的庫存。
跳幀的控制量是h.263標準碼流中幀頭的tr。tr是一個8位的指示位,表明了本幀的序號,范圍是0~255,當超過255時,從0重新開始。在一般沒有跳幀的情況下,tr是連續(xù)地從0~255變化。但當發(fā)生跳幀時,tr將發(fā)生不連續(xù)地跳變。如:當前幀的tr是112,在當前幀結(jié)束時計算得出下一幀要跳幀,那么等待跳幀結(jié)束后的下一幀的tr是115。這樣譯碼器可以知道δtr是3(δtr代表譯碼器對當前幀的顯示次數(shù)),那么譯碼器就將本幀圖像顯示3次,即跳了2幀。
跳幀是在每一幀編碼結(jié)束時發(fā)生的。這時,統(tǒng)計完這一幀共產(chǎn)生的比特數(shù)(用bits_prev_pic表示)、上一幀結(jié)束時發(fā)送緩沖器的比特數(shù)(用bits_in_buffer表示)。跳幀門限用threshold表示,threshold等于設(shè)定的發(fā)送碼率(target_bps)除以設(shè)定的幀頻(target_fps)的商,threshold必須是個整數(shù)。
摘 要:提出了一種h.263低碼率視頻壓縮編碼的自適應(yīng)碼率控制方法,這種方法可以用fpga來實現(xiàn),為了達到實時性的要求,對硬件實現(xiàn)的具體方法進行了優(yōu)化。所提出的碼率控制優(yōu)化方法已在h.263標準的硬件系統(tǒng)中實現(xiàn)。
關(guān)鍵詞:fpga;h.263標準;碼率控制;視頻壓縮;幀層
1 引言
輸出比特速率的控制是影響h.263低速率視頻編碼的一個重要問題,控制的好壞直接關(guān)系到解碼圖像的質(zhì)量與編碼器輸出比特速率的穩(wěn)定性。itu-th.263[1]建議本身對這部分算法是開放的。到目前為止,已提出了若干種比特速率的控制算法[2~4]。這些算法可以分為兩類,一類為前饋比特速率控制,另一類為反饋比特速率控制。前饋控制算法通過對各編碼單位編碼輸出比特數(shù)的預(yù)測,或用試驗迭代的方法,來確定相應(yīng)的量化步長,其主要弱點是常常需要很大的計算量,使得其應(yīng)用受到明顯的限制,因而很少被采用。相對來說,反饋控制算法的計算量是可以接受的,并已被廣泛應(yīng)用。itu-t相繼推出的tmn5模型和tmn8[2]模型就是一種反饋比特速率算法。tmn8是在tmn5的基礎(chǔ)上提出的,具有優(yōu)異的控制效果,很多試驗表明,以tmn8實現(xiàn)的系統(tǒng)可以穩(wěn)定地鎖定在既定碼率上,碼率的上下波動小于10%,并且tmn8模型的算法實現(xiàn)起來也不復(fù)雜。
本文針對h.263視頻編碼器的結(jié)構(gòu),根據(jù)itu-t視頻編碼模型tmn-8中標準的碼率控制算法,提出了一種采用fpga實現(xiàn)碼率控制的硬件方法,碼率控制分別在宏塊層和圖像層進行。首先闡述了h.263的碼率控制算法,然后介紹了硬件實現(xiàn)及優(yōu)化方法,最后給出了仿真的結(jié)果。
2 碼率控制算法
h.263系統(tǒng)的碼率控制分2個層次實現(xiàn),一是改變量化步長,二是跳幀。碼率控制的過程可以用圖1來形象地說明。當控制器檢測到發(fā)送緩沖器中存放的碼流高于或者低于一定的門限時,控制器根據(jù)相應(yīng)的算法改變量化步長,使發(fā)送緩沖器中的碼流穩(wěn)定在一定的數(shù)量。當編碼器產(chǎn)生碼流的碼率很大,超出了量化器的控制范圍,將采用跳幀的方法來解決。
改變量化步長,是微觀的宏塊級控制,控制量是量化步長因子q。h.263標準規(guī)定:q分為32級,其值分別為0~31。q越小,量化越精細,圖像質(zhì)量就越高,而產(chǎn)生的碼流也越長。一個宏塊內(nèi)具有相同的q,所以對于q來說最小的變化單位是宏塊。當一個宏塊編碼結(jié)束時,如果截至到目前編碼器所產(chǎn)生的碼流小于一個門限,那么碼率控制模塊就根據(jù)一定的算法減少q;而對于量化器來說,q變小則量化后的系數(shù)中非零系數(shù)增多,編碼器輸出的碼流就增加。如果截至到目前編碼器所產(chǎn)生的碼流大于一個門限,那么碼率控制模塊就增加q,q變大則量化后的系數(shù)中非零系數(shù)減少,編碼器輸出的碼流就減少。按照這種方法,在一定程度上使發(fā)送給發(fā)送緩沖器的碼流維持恒定,也就達到了控制碼率的目的。改變量化步長實現(xiàn)起來比較復(fù)雜。根據(jù)統(tǒng)計的碼流比特數(shù),通過復(fù)雜的計算,在每個宏塊結(jié)束時,計算下一個宏塊的量化步長因子q(qp)。用ptype表示幀類型,幀類型為幀內(nèi)幀時用i幀表示,否則用p幀表示。
其中,mean_qp為上一幀每個宏塊平均的量化步長;bits_prev_pic為上一幀產(chǎn)生的比特數(shù);target_bpf為上一幀結(jié)束時計算出來的本幀應(yīng)該產(chǎn)生的比特數(shù);target_bpf_prev為上一個target_bpf;bits_prev_macro為本幀截至當前宏塊所產(chǎn)生的比特數(shù);mbnum為已編碼宏塊在本幀所有宏塊中所占的比例,用小數(shù)表示;target_bps是設(shè)定的發(fā)送碼率。
對于跳幀算法,是實現(xiàn)宏觀的幀級控制,控制量是tr。tr以跳幀或不跳幀來達到減少或增加碼流的目的。一幀編碼結(jié)束時,根據(jù)當前發(fā)送緩沖器內(nèi)的比特數(shù)與跳幀的門限進行比較,判斷是否需要跳幀。如果發(fā)送緩沖器內(nèi)的比特數(shù)大于跳幀的門限時,說明發(fā)送緩沖器已經(jīng)不能接受更多的碼流了,所以接下來的幀不用編碼,發(fā)送緩沖器用空出的時間來發(fā)送碼流,減少庫存,這樣就發(fā)生了跳幀;反之,則不需要跳幀。值得注意的是在整個過程中,從發(fā)送緩沖器發(fā)出的碼流一直是按照一定的速率發(fā)出的,也就是說碼率是恒定的,改變的是發(fā)送緩沖器的庫存。
跳幀的控制量是h.263標準碼流中幀頭的tr。tr是一個8位的指示位,表明了本幀的序號,范圍是0~255,當超過255時,從0重新開始。在一般沒有跳幀的情況下,tr是連續(xù)地從0~255變化。但當發(fā)生跳幀時,tr將發(fā)生不連續(xù)地跳變。如:當前幀的tr是112,在當前幀結(jié)束時計算得出下一幀要跳幀,那么等待跳幀結(jié)束后的下一幀的tr是115。這樣譯碼器可以知道δtr是3(δtr代表譯碼器對當前幀的顯示次數(shù)),那么譯碼器就將本幀圖像顯示3次,即跳了2幀。
跳幀是在每一幀編碼結(jié)束時發(fā)生的。這時,統(tǒng)計完這一幀共產(chǎn)生的比特數(shù)(用bits_prev_pic表示)、上一幀結(jié)束時發(fā)送緩沖器的比特數(shù)(用bits_in_buffer表示)。跳幀門限用threshold表示,threshold等于設(shè)定的發(fā)送碼率(target_bps)除以設(shè)定的幀頻(target_fps)的商,threshold必須是個整數(shù)。
熱門點擊
- S7-200 PC Access V1.0(
- AMD發(fā)表ATI Mobility Rade
- 應(yīng)用傳統(tǒng)紫外光刻機進行紫外壓印
- Maxim推出高效率D類音頻子系統(tǒng)MAX97
- FKI Logistex推出高速S-3000
- 威盛發(fā)布基于Pico-ITX板型的ARTiG
- Broadcom推出高清晰度視頻/音頻編碼/
- H.263視頻編碼的碼率控制算法及硬件實現(xiàn)
- TI新款多速率高速均衡器支持10G/8G接口
- 數(shù)碼復(fù)印機掃描成像單元的研究
推薦技術(shù)資料
- 100A全集成電源模塊R
- Teseo-VIC6A GNSS車用精準定位
- 高效先進封裝工藝
- 模數(shù)轉(zhuǎn)換器 (Analog-to-Digit
- 集成模數(shù)轉(zhuǎn)換器(ADC)
- 128 通道20 位電流數(shù)字轉(zhuǎn)換器̴
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究