本發明是有關于一種解碼系統及解碼方法,且特別是有關于一種視頻流解碼系統及視頻流解碼方法。
背景技術:
隨著視頻處理技術提升,視頻流的碼流與解析度越來越大,在視頻處理技術中,解碼速度影響到使用者觀看視頻流的舒適度。
在一種極端的例子中,高碼率的視頻流中,I幀畫面對于熵解碼程序將成為很大的瓶頸。但在高復雜度的視頻流中,特別是帶寬需求接近系統能夠提供的最大帶寬時,B幀畫面的運動補償程序將成為最大的瓶頸。也就是說,熵解碼程序與運動補償程序的間的解碼速度不匹配,形成互相抑制的問題。如此一來,視頻流的解碼速度無法有效提升,成為技術發展的一項瓶頸。
技術實現要素:
本發明系有關于一種視頻流解碼系統及視頻流解碼方法,其利用兩個階段的解碼程序進行不同單位的解碼,再搭配儲存單元的緩沖,來改善解碼速度不匹配、互相抑制的問題,進而提升整體解碼速度。
根據本發明的第一方面,提出一種視頻流解碼系統。視頻流解碼系統用以解碼一視頻流。視頻流解碼系統包括至少一第一解碼單元、一儲存單元及至少一第二解碼單元。第一解碼單元用以對視頻流進行一第一解碼程序。第一解碼程序以一第一單位進行解碼,以獲得一第一解碼結果。儲存單元用以儲存第一解碼結果。第二解碼單元用以對第一解碼結果進行一第二解碼程序。第二解碼程序以一第二單位進行解碼,以獲得一第二解碼結果。第二單位與第一單位不同。
根據本發明的一第二方面,提出一種視頻流解碼方法。視頻流解碼方法用以解碼一視頻流。視頻流解碼方法包括以下步驟。對視頻流進行一第一解碼程序。第一解碼程序以一第一單位進行解碼,以獲得一第一解碼結果。儲存第一解碼結果于一儲存單 元。對第一解碼結果進行一第二解碼程序。第二解碼程序以一第二單位進行解碼,以獲得一第二解碼結果。第二單位與第一單位不同。
為了對本發明的上述及其他方面有更佳的了解,下文特舉較佳實施例,并配合所附圖式,作詳細說明如下。
附圖說明
圖1繪示視頻流解碼系統的示意圖。
圖2繪示三個畫面進行解碼的示意圖。
圖3繪示視頻流解碼系統的示意圖。
圖4A~4B繪示解碼順序的示意圖。
附圖標記說明
100、200:視頻流解碼系統
110:第一解碼單元
120:第二解碼單元
130:儲存單元
131:第一儲存子單元
132:第二儲存子單元
140:控制單元
150、160:暫存器
1100:第一多核解碼模塊
1200:第二多核解碼模塊
n0、n1、n2:畫面
R1:第一解碼結果
R2:第二解碼結果
VS:視頻流
具體實施方式
第一實施例
請參照圖1,其繪示視頻流解碼系統100的示意圖。視頻流解碼系統100包括一第一解碼單元110、一第二解碼單元120、一儲存單元130、一控制單元140及暫存器150、160。視頻流解碼系統100用以對一視頻流進行解碼,例如是一電腦、一電路板或一晶片。
第一解碼單元110及第二解碼單元120用以對視頻流進行特定的解碼程序,分別例如是一電腦、一電路板、一晶片或儲存數組程式碼的記錄媒體。
儲存單元130及暫存器150、160用以儲存各種數據,例如是一存儲器、一硬盤、或一云端儲存空間。
控制單元140用以執行各種控制、處理與分析程序,例如是一電腦、一電路板、一晶片或儲存數組程式碼的記錄媒體。
在解碼的過程中,暫存器150儲存視頻流VS。控制單元140啟動第一解碼單元110,以使第一解碼單元110自暫存器150擷取視頻流VS,并對視頻流VS進行一第一解碼程序。第一解碼程序例如是一熵解碼程序。熵解碼程序例如是一自適應二進位算術編碼(Context-adaptive binary arithmetic coding,CABAC)程序。熵解碼程序主要是把視頻流解碼得到語法元素。熵解碼程序在不同的標準中使用不同的方法。舉例來說,H.265標準只有CABAC程序,H.264標準可以采用CABAC程序或一適應性可變長度編碼(Context-adaptive variable-length coding,CAVLC)程序,而MPEG2/4采用比較簡單的可變長度編碼(variable-length decoding,VLD)程序。另外,H.265標準所采用的CABAC程序還隱含了反掃描的功能,即把殘差系數串(一維的語法元素)轉換為二維的陣列。
在此步驟中,第一解碼程序系以第一單位進行解碼,第一單位例如是一片段(slice)。經過第一解碼程序后,可以獲得一第一解碼結果R1。
儲存單元130包括一第一儲存子單元131及第二儲存子單元132。第一儲存子單元131及第二儲存子單元132例如是于儲存單元130中預先規劃的不同區塊。數個片段經過第一解碼程序后,第一解碼結果R1儲存于第一儲存子單元131,即可累積成數幀畫面(例如是畫面n0、畫面n1、畫面n2、…)。
第一解碼結果R1的一儲存位置信息、一數據長度信息及需要為第二解碼單元120額外記錄的信息則儲存于第二儲存子單元132。儲存位置信息及數據長度信息例如是每一片段的儲存位置及數據長度、或者是每一幀畫面的儲存位置及數據長度、或者每一個磚(Tile)中每一行編碼樹區塊的存儲位置及數據長度。儲存為第二解碼單元120 額外記錄的信息例如是每一個編碼樹區塊的片段標簽(Slice ID)、或每一個編碼樹區塊的解碼錯誤信息。第二儲存子單元132所儲存的信息可供第二解碼單元120使用,第二解碼單元120可以根據第二儲存子單元132所儲存的信息從第一儲存子單元取回語法元素,并進行第二解碼程序。因此,儲存于第二儲存子單元132的信息有助于控制單元140判斷何時需啟動第二解碼程序,并有助于在啟動第二解碼程序時,進行語法元素的擷取。
第一解碼單元110將解碼完成情況反饋給控制單元140。因此,控制單元140得以了解儲存于第一子儲存單元131的第一解碼結果R1的數據量是否足夠進行一第二解碼程序。第二解碼程序例如是一反量化(Inverse Quantization)程序、一反變換(Inverse Transform)程序、一幀內預測(Intra Prediction)程序、一運動補償(Motion Compensation)程序、一環路濾波(In-loop Filter)程序、一去塊效應濾波(Deblocking Filter)程序、或一采樣點自適應偏移(Sample Adaptive Offset,SAO)程序。
若第一解碼結果R1的數據量足夠進行第二解碼程序,則控制單元140根據第一解碼結果R1的儲存位置信息及數據長度信息啟動第二解碼單元120,使第二解碼單元120根據儲存位置信息及數據長度信息取出第一解碼結果R1,以進行第二解碼程序。
在此步驟中,第二解碼程序系以一第二單位進行解碼,第二單位例如是一編碼樹區塊(Coding Tree Block,CTB)、一大區塊(Macroblock)、一行編碼樹區塊(Coding Tree Block Row,CTB Row)、一行大區塊(Macroblock Row)或一畫面(frame)。
第一解碼結果R1經過第二解碼程序之后,獲得一第二解碼結果R2,并將第二解碼結果R2儲存于暫存器160中。
舉例來說,請參照圖2,其繪示畫面n0、畫面n1、畫面n2進行解碼的示意圖。第一解碼單元110對畫面n0、畫面n1、畫面n2進行第一解碼程序分別需要20毫秒(ms)、20毫秒、50毫秒,而第二解碼單元120對畫面n0、畫面n1、畫面n2進行第二解碼程序分別需要35毫秒、35毫秒、25毫秒。
第一解碼單元110對畫面n0進行第一解碼程序后,控制單元140啟動第二解碼單元120對畫面n0進行第二解碼程序,但不需要等待第二解碼單元120對畫面n0完成解碼,第一解碼單元110可以繼續解碼畫面n1。
第一解碼單元110解碼完畫面n1后,第二解碼單元120未解碼完畫面n0,但第一儲存子單元131仍有足夠空間,第一解碼單元110可以開始解碼畫面n2。
第二解碼單元120解完畫面n0后,可以繼續解碼畫面n1。
第二解碼單元120解完畫面n1后,第一解碼單元110已經解完畫面n2,第二解碼單元可以繼續解碼畫面n2。
第二解碼單元120解碼畫面n2的解碼速度不受第一解碼單元110影響,可以很快完成畫面n2的解碼。
所以,當第一儲存子單元131的容量足夠大(例如可以放下3幀畫面大小的第一解碼結果R1),通過第一儲存子單元131的緩沖可以解決第一解碼單元110與第二解碼單元120的間的解碼速度不匹配,互相抑制的問題。
并且上述第一解碼程序與第二解碼程序可以在同一時間點皆被執行,而進行平行處理。以圖2為例,時間點30毫秒時,解碼畫面n1的第一解碼程序與解碼畫面n0的第二解碼程序系同時進行,以平行處理畫面n0及畫面n1。
此外,本實施例更可以靈活組織構造出高效解碼器。第一解碼單元110與第二解碼單元120獨立分離后,他們具有了完全的靈活性。
第一解碼單元110可以按碼率來配置對應的解碼速度。舉例來說,H.265標準的Main profile Level 5規定的最大碼流是100Mbps,如果時鐘頻率為100MHz,則第一解碼單元110就可以按這個上限速度來配置,即平均每個時鐘周期解碼一個比特,而不需要考慮等待第二解碼單元120的時間。
如果第一解碼單元110只能達到每兩個時鐘解碼一個比特的速度。則可以設計兩個第一解碼單元110并行解碼兩個第一單位的數據量。
此外,第二解碼單元120可以按解析度來配置對應的解碼速度。舉例來說,H.265標準的Main profile Level 5規定的最大解析度是4096X2160@30fps,如果時鐘頻率為100MHz,則第二解碼單元120可以按這個上限來配置,即平均每個時鐘周期解碼3.8個像素,而不需要考慮高碼率下等待第一解碼單元110的時間。
再者,如果第二解碼單元120只能達到每個時鐘周期解碼1個像素的速度,則可以設計4個第二解碼單元120并行解碼4個第二單位的數據量。
請再參照圖3,其繪示視頻流解碼系統200的示意圖。視頻流解碼系統200可以多核并行擴展解碼速度。第一解碼單元110以片段(slice)進行第一解碼程序。由于片段的間不存在依賴關系,故可以N個第一解碼單元110可以組成一第一多核解碼模塊1100,來并行解碼N個片段,以提升解碼速度。
舉例來說,若單一個第一解碼單元110的解碼速度為40Mbps,則可以用3個第一解碼單元110并行達到H.265標準的Main Profile Level 5所要求的100Mbps解碼速度。
第二解碼單元120若以一行編碼樹區塊(Coding Tree Block Row,CTB Row)進行第二解碼程序。克服了內部多個第二解碼單元120的依賴關系后,M個第二解碼單元120可以組成一第二多核解碼模塊1200,來并行解碼M行編碼樹區塊(CTB Row),以提升解碼速度。并且第二解碼單元120不受片段順序的影響,具有普適性。其中,各個行編碼樹區塊的關系可以儲存于第二儲存子單元132,第二多核解碼模塊1200透過各個行編碼樹區塊的關系可以進行分配,而多個行編碼樹區塊分配至多個第二解碼單元120,以使其進行平行處理,提升解碼速度。
舉例來說,若單一個第二解碼單元120的解碼速度是4096X2160@30fps,則可以采用2個第二解碼單元120達到4096X2160@60fps的解碼速度。
請再參照第4A~4B圖,其繪示解碼順序的示意圖。第一解碼單元110以片段(slice)并行第一解碼程序,且第二解碼單元120以編碼樹區塊(CTB)行并行第二解碼程序。如圖4A所示,對于沒有使用Tile/WPP并行特性進行編碼的碼流,可以通過上述視頻流解碼系統100、200實現并行解碼。
如圖4B所示,對于使用Tile/WPP并行特性進行編碼的碼流,也可以通過上述視頻流解碼系統100、200實現并行解碼。如此一來,可以有效的以相同結構對不同的碼流實現并行解碼。
上述實施例的視頻流解碼系統及視頻流解碼方法,其利用兩個階段的解碼程序進行不同單位的解碼,再搭配儲存單元的緩沖,來改善解碼速度不匹配、互相抑制的問題,進而提升整體解碼速度。并且,可以靈活組織兩個階段的解碼程序,以構造出高效率的解碼系統。此外,采用多核并行的技術更可擴展解碼速度。
雖然本發明已以較佳實施例揭露如上,然其并非用以限定本發明。本發明所屬技術領域中具有通常知識者,在不脫離本發明的精神和范圍內,當可作各種的更動與潤飾。因此,本發明的保護范圍當視后附的申請專利范圍所界定者為準。