交叉引用本發(fā)明請求美國臨時案申請?zhí)?2/221,958的優(yōu)先權(quán),且這些申請案的所有內(nèi)容以引用方式納入。本發(fā)明的實施例與視頻編碼有關,更具體來說,與一種視頻編碼方法和混合視頻編碼器。
背景技術:
::數(shù)位視頻壓縮技術已經(jīng)廣泛地使用在各式不同的裝置上,包括現(xiàn)今各式消費類電子產(chǎn)品、手提式個人通訊裝置、無線的或有線的網(wǎng)絡通信產(chǎn)品、寬帶網(wǎng)絡、以及多媒體應用。若干個不同的數(shù)位視頻壓縮技術已經(jīng)形成,例如mpeg-4、h.264/avc、hevc、vp8、vp9、以及avs2。盡管全硬件的視頻編碼器滿足性能要求,但是全硬件的解決方案成本高昂??删幊舔?qū)動器(即一種執(zhí)行代碼命令的功能的軟件驅(qū)動器)的計算能力越來越強,但依然無法滿足視頻編碼的高端特性,例如720p@30fps或1080p@30fps的視頻編碼。此外,可編程驅(qū)動器的能源消耗也比全硬件的解決方案更高。更進一步,當使用可編程驅(qū)動器時,存儲器頻寬也將成為一個問題。此外,當不同的應用程序(包括操作系統(tǒng)os)也在相同的可編程驅(qū)動器上運行時,在視頻編碼過程中可編程驅(qū)動器的資源將會實時變化。因此,需要一種新型的視頻編碼設計,其能夠綜合基于硬件實現(xiàn)以及基于軟件實現(xiàn)的優(yōu)勢來完成視頻編碼操作。技術實現(xiàn)要素:為了解決上述問題,本發(fā)明的實施例中提供了一種軟件驅(qū)動器與硬件驅(qū)動器彼此結(jié)合來實現(xiàn)勛和視頻編碼的方法及裝置。依據(jù)本發(fā)明的第一實施例,提供一種視頻編碼方法。方法包含接收與當前幀的編碼單元相關的視頻數(shù)據(jù);由軟件驅(qū)動器執(zhí)行多個指令來實行視頻編碼操作的第一部分;以及由硬件驅(qū)動器依據(jù)控制信息來實行視頻編碼操作的第二部分。其中視頻編碼操作的第一部分包含,產(chǎn)生對應于編碼單元的幀間預測子以及控制信息,其中幀間預測子包含具有亮度元素的圖像區(qū)塊和具有彩度元素的圖像區(qū)塊;以及儲存幀間預測子以及控制信息于存儲器。其中視頻編碼操作的第二部分包含,從存儲器接收幀間預測子以及控制信息;將編碼單元相關的視頻數(shù)據(jù)與幀間預測子相減以產(chǎn)生預測殘差信號;轉(zhuǎn)換及量化預測殘差信號并且產(chǎn)生轉(zhuǎn)換及量化后的預測殘差信號;以及編碼轉(zhuǎn)換及量化后的預測殘差信號以形成壓縮的視頻比特流。依據(jù)本發(fā)明的第二實施例,提供一種混合視頻編碼器,包含軟件驅(qū)動器執(zhí)行多個指令來對從存儲器接收的與當前幀的編碼單元相關的視頻數(shù)據(jù)實行視頻編碼操作的第一部分,其中視頻編碼操作的第一部分包含;產(chǎn)生對應于編碼單元的幀間預測子以及控制信息,其中幀間預測子包含具有亮度元素的圖像區(qū)塊和具有彩度元素的圖像區(qū)塊;以及儲存幀間預測子以及控制信息于該存儲器;以及硬件驅(qū)動器,耦合于軟件驅(qū)動器,依據(jù)控制信息來實行視頻編碼操作的第二部分,其中視頻編碼操作的第二部分包含;加法器,將編碼單元相關的視頻數(shù)據(jù)與幀間預測子相減以產(chǎn)生預測殘差信號;轉(zhuǎn)換電路,轉(zhuǎn)換預測殘差信號并且產(chǎn)生轉(zhuǎn)換后的預測殘差信號;量化電路,量化轉(zhuǎn)換后的預測殘差信號并且產(chǎn)生轉(zhuǎn)換及量化后的預測殘差信號;以及熵編碼器對轉(zhuǎn)換及量化后的預測殘差信號進行編碼以形成壓縮的視頻比特流。所提出的解決方案采用混合機制,其中至少由軟件實現(xiàn)運動估計,以合理利用可編程處理器(即軟件驅(qū)動器)中可用的新指令以及該可編程處理器的較大的高速緩存。此外,視頻編碼操作的其他部分的至少一部分,例如運動補償、幀間預測、變換/量化、反變換、反量化、后端處理(例如去區(qū)塊過濾、采樣適應性便宜過濾、適應性環(huán)路濾波等等)、熵編碼等等,是由硬件驅(qū)動器(即純硬件)實現(xiàn)。在所提出的混合解決方案中,可編程處理器的高速緩存中存儲的至少部分數(shù)據(jù)能夠被硬件驅(qū)動器與軟件驅(qū)動器兩者存取。舉例來說,至少一部分源視頻幀存儲在高速緩存中,并且被硬件驅(qū)動器與軟件驅(qū)動器兩者存取。另舉一例來說,至少一部分參考幀存儲在高速緩存中,并且被硬件驅(qū)動器與軟件驅(qū)動器兩者存取。在另舉一例,由軟件功能或者硬件功能產(chǎn)生的至少一部分中間數(shù)據(jù)存儲在高速緩存中,并且被硬件驅(qū)動器與軟件驅(qū)動器兩者存取。在閱讀后續(xù)對各種數(shù)據(jù)和附圖所示的較佳實施方式的詳細敘述后,本領域技術人員將毫無疑義地了解本發(fā)明的上述和其他目的。附圖說明被包括的附圖用以提供對本發(fā)明的進一步理解,以及,被并入且構(gòu)成本說明書的一部分。附圖與描述一起用于說明本發(fā)明的實施例,有助于解釋本發(fā)明的原理。在附圖中:圖1是依據(jù)本發(fā)明的一實施例中的混合視頻編碼器的區(qū)塊圖;圖2繪示了由圖1所示的混合視頻編碼器所執(zhí)行的視頻編碼操作的前端組建區(qū)塊。圖3是軟件驅(qū)動器與硬件驅(qū)動器執(zhí)行任務并且在幀編碼時間的時間間隔交換信息的舉例說明。圖4繪示了依據(jù)本發(fā)明第二實施例的混合視頻編碼器。圖5繪示了依據(jù)hevc編碼標準具有自適應幀內(nèi)編碼及運動補償?shù)囊曨l編碼器的區(qū)塊圖。圖6繪示了依據(jù)本發(fā)明第三實施例的混合視頻編碼器區(qū)塊圖。圖7繪示了符合itu-th.264編碼標準的混合視頻編碼器的區(qū)塊圖。圖8是軟件驅(qū)動器與硬件驅(qū)動器執(zhí)行任務并且在幀編碼時間的時間間隔交換信息的舉例說明。圖9是軟件驅(qū)動器與硬件驅(qū)動器執(zhí)行任務并且在較小的時間間隔交換信息的舉例說明。具體實施方式在說明書及權(quán)利要求書當中使用了某些詞匯來指稱特定的組件。所屬領域中技術人員應可理解,硬件制造商可能會用不同的名詞來稱呼同一個組件。本說明書及權(quán)利要求書并不以名稱的差異來作為區(qū)分組件的方式,而是以組件在功能上的差異來作為區(qū)分的準則。在通篇說明書及權(quán)利要求書中所提及的“包含”是一個開放式的用語,故應解釋成“包含但不限定于”。此外,“耦接”一詞在此是包含任何直接及間接的電氣連接手段,因此,若文中描述第一裝置耦接于第二裝置,則代表該第一裝置可直接電氣連接于該第二裝置,或者透過其他裝置或連接手段間接地電氣連接至該第二裝置。由于可編程驅(qū)動器的計算能力持續(xù)地提高,當前的cpu、dsp、或者gpu通常具有特定的指令(例如simd(singleinstructionmultipledata)指令集)或者加速單元來增進通常計算的能力。通過一些傳統(tǒng)的快速運動估計(me)算法,軟件運動估計在可編程處理器中可實現(xiàn)。本發(fā)明的全文中使用可編程驅(qū)動器、軟件驅(qū)動器、可編程處理器、軟件處理器等多種名稱來指示具有相同特性的通過執(zhí)行軟件代碼來完成任務的處理器。相似地,本發(fā)明的全文中使用硬件驅(qū)動器、硬件處理器等多種名稱來指示具有相同特性的通過純硬件來完成任務的處理器。本發(fā)明的實施例中所提出的方法使得在一個可編程處理器中可以使用新的指令。并在可編程處理器中大容量高速緩存的使用中取得優(yōu)勢。此外,由于提前的運動估計算法,軟件運動估計可實現(xiàn)。上述軟件執(zhí)行運動估計的功能可以在一個單一可編程驅(qū)動器或者多可編程驅(qū)動器(例如多核)中實現(xiàn)。請參考圖1,圖1是依據(jù)本發(fā)明的一實施例中的混合視頻編碼器100的區(qū)塊圖。圖1中繪示了系統(tǒng)10中的視頻編碼器100。即混合視頻編碼器100可以是電子裝置的一部分,更具體來說,可以是電子裝置中的集成電路(ic)中的主處理電路的一部分。電子裝置的例子包括,但不限于,移動電話(例如智能電話或者功能電話),移動電腦(例如電腦本),個人數(shù)字輔助,個人計算機(例如膝上電腦)?;旌弦曨l編碼器100包含至少一個軟件驅(qū)動器(即軟件編碼器部分),其通過執(zhí)行指令(即編碼代碼)來實現(xiàn)預計的功能,更進一步包含至少一個硬件驅(qū)動器(即硬件編碼器部分),其通過使用純硬件來實現(xiàn)預計的功能。換句話說,混合視頻編碼器100是通過聯(lián)合的軟件與硬件來實現(xiàn)視頻編碼的操作。在本實施例中,系統(tǒng)10是一個片上系統(tǒng)(soc),具有多個可編程驅(qū)動器包含其中,其中一或多個可編程驅(qū)動器被用作混合視頻編碼器100所需的軟件驅(qū)動器。舉例來說,但并不局限于此,可編程驅(qū)動器是dsp子系統(tǒng)102,gpu子系統(tǒng)104以及cpu子系統(tǒng)106。需注意的是,系統(tǒng)10進一步包含其他的可編程硬件,其能夠執(zhí)行嵌入的指令或者被一個序列器(sequencer)控制。dsp子系統(tǒng)102包含dsp(例如cevaxc321處理器)112以及高速緩存113。gpu子系統(tǒng)104包含gpu(例如nvidiateslak處理器)114以及高速緩存115。cpu子系統(tǒng)106包含cpu(例如intelxeon處理器)116以及高速緩存117。每一高速緩存113、115、117可以由一個或者多個存儲器組成。舉例來說,cpu116可包含第一級高速緩存(l1)以及第二級高速緩存(l2)。另舉一例,cpu116具有多核結(jié)構(gòu),并且每一核具有各自的第一級高速緩存(l1),同時多個核心共享一個第二級高速緩存(l2)。另舉一例,cpu116具有多簇結(jié)構(gòu),并且每一簇具有一個核心或者多個核心。多個簇共享第三級高速緩存。不同類型的可編程驅(qū)動器進一步共享下一級高速緩存的緩存分層結(jié)構(gòu)。舉例來說,cpu116以及gpu114共享同一個緩存。軟件驅(qū)動器(即,混合視頻編碼器100的一或多個dsp子系統(tǒng)102、gpu子系統(tǒng)104以及cpu子系統(tǒng)106)被配置為通過執(zhí)行多個指令執(zhí)行視頻編碼操作第一部分。舉例來說,視頻編碼操作的第一部分包含至少一運動估計功能。圖1中的視頻編碼(venc)子系統(tǒng)108是混合視頻編碼器100的硬件驅(qū)動器,并且配置為通過使用純硬件來執(zhí)行視頻編碼操作第二部分。venc子系統(tǒng)108包含視頻編碼器(venc)118以及存儲器管理單元(vmmu)119。具體的,venc118執(zhí)行除了可編程驅(qū)動器完成的步驟(例如運動估計)之外的其他編碼步驟。因此,視頻編碼操作第二部分包含運動補償功能,幀間預測功能,轉(zhuǎn)換功能(例如,離散系數(shù)變換(dct)),量化功能,反變換功能(例如,反dct),反量化功能,后端處理功能(例如去塊過濾(deblockingfilter)以及樣本自適應過濾器(sampleadaptiveoffsetfilter),以及熵編碼功能(entropyencoding)中至少一個。此外,使用主視頻存儲器(mainvideobuffer)來存儲源視頻幀、重建幀、去區(qū)塊幀或者視頻編碼中使用的雜項信息。該主視頻存儲器通常配置在芯片外存儲器12(例如動態(tài)隨機存取存儲器(dram)、靜態(tài)隨機存取存儲器(sram)、或者閃存)中。然而,該主視頻存儲器也可以配置在芯片內(nèi)存儲器(例如嵌入式dram)中??删幊舔?qū)動器,包含dsp子系統(tǒng)102、gpu子系統(tǒng)104以及cpu子系統(tǒng)106,硬件驅(qū)動器(venc子系統(tǒng)108),以及存儲控制器110連接至總線101。因此可編程驅(qū)動器與硬件驅(qū)動器中的每一個能夠通過存儲控制器110存取芯片外存儲器12。請參考圖2,其繪示了由圖1所示的混合視頻編碼器100所執(zhí)行的視頻編碼操作的前端組建區(qū)塊。其中me代表運動估計,mc代表運動補償,t代表轉(zhuǎn)換,it代表反轉(zhuǎn)換,q代表量化,iq代表反量化,rec代表重建,ip代表幀間預測,ec代表熵編碼,df代表去塊過濾,并且sao代表樣本自適應過濾器。依據(jù)實際的設計考量,視頻編碼可以是有損的或者無損的。一個或者多個組建區(qū)塊是由軟件來實現(xiàn)的(即,圖1中所示的至少一可編程驅(qū)動器),并且其他的是由硬件來實現(xiàn)的(即,圖1中所示的硬件驅(qū)動器)。需注意的是,軟件部分至少實現(xiàn)了me功能。一些視頻可能包含或者不包含環(huán)路濾波(in-loopfilter),例如df或者sao。源視頻幀攜帶了原始視頻幀數(shù)據(jù),并且混合視頻編碼器100的前端任務是以有損方式或者無損方式壓縮源視頻幀數(shù)據(jù)。參考幀是用來定義未來幀的。在較老的視頻編碼標準中,例如mpeg-2,對于p幀僅僅使用一個參考幀(即先前幀)。對于b幀使用兩個參考幀(即一個過去的幀以及一個未來的幀)。在較先進的視頻編碼標準中,使用更多的參考幀來完成視頻編碼。重建幀是經(jīng)由反編碼步驟由視頻編碼器/解碼器產(chǎn)生的像素數(shù)據(jù)。視頻解碼器通常從壓縮的比特流執(zhí)行反編碼步驟,并且視頻編碼器通常在其獲得量化參數(shù)數(shù)據(jù)之后執(zhí)行反編碼步驟。重建像素數(shù)據(jù)成為使用的視頻編碼標準(h.261,mpeg-2,h.264等等)先前定義的參考幀。在視頻標準不支持環(huán)路濾波的第一個例子中,圖2中所示的df與sao被省略。因此,重建幀被存儲至參考幀存儲器來作為一個參考幀使用。在視頻標準僅支持一個環(huán)路濾波(即,df)的第二個例子中,圖2中所示的sao被省略,因此后端處理幀是去區(qū)塊幀(deblockedframe),并且存儲至參考幀存儲器來作為參考幀使用。在視頻標準支持一個以上的環(huán)路濾波(即df與sao)的第三個例子中,后端處理幀是已完成sao的幀,并且存儲至參考幀存儲器來作為參考幀使用。簡單來說,存儲至參考幀存儲器的參考幀可以是一個重建幀或者是一個后端處理幀,這依據(jù)混合視頻編碼器100實際應用的視頻編碼標準而決定。在后續(xù)說明中,使用重建幀作為參考幀來舉例說明,但本領域技術人員可以了解當使用的視頻編碼標準支持環(huán)路濾波器時,可以使用一個后端處理幀來代替重建幀作為參考幀。圖2中所示的環(huán)路濾波器僅僅用來舉例說明。在其他的替代設計中,可以使用不同的環(huán)路濾波器,例如適應性環(huán)路濾波器(adaptiveloopfilter,alf)。進一步來說,中間數(shù)據(jù)(intermediatedata)是視頻編碼過程中產(chǎn)生的數(shù)據(jù),例如運動向量信息,量化參數(shù)殘余,決定的編碼模式(幀內(nèi)/幀間/方向等等)等可以編碼或者不編碼至輸出的比特流。此外,在圖2所示的舉例說明中,最大編碼單元信息(lcu信息)與樣本自適應過濾信息(sao信息)經(jīng)由熵編碼至輸出比特流。由于硬件/軟件參與至少一依據(jù)軟件的編碼步驟(例如,運動估計)以及其他依據(jù)硬件的編碼步驟(例如,運動補償、重建等),因此重建幀(或者后端處理幀)對于運動估計可能是可用的。舉例來說,通常me需要源視頻幀m以及重建幀m-1來進行運動向量搜尋。然而,在以幀為基礎的影響下,混合視頻編碼器100的硬件驅(qū)動器(venc子系統(tǒng)108)依然可以處理幀m-1。在這種情況下,原來的視頻幀(例如,源視頻幀m-1)可用作運動估計的參考幀,即重建幀(或后端處理幀)不用做運動估計的參考幀。需注意的是,運動補償是基于重建幀(或后端處理幀)m-1來進行的,依據(jù)從源視頻幀m以及m-1或者獲得的運動估計結(jié)果。簡單來說,混合視頻編碼器100執(zhí)行的視頻編碼操作包含運動估計功能以及運動補償;當執(zhí)行運動估計時,源視頻幀被用作運動估計所需的參考幀;當執(zhí)行后續(xù)的運動補償時,重建幀(或者后端處理幀)被用作運動補償所需的參考幀。圖3是軟件驅(qū)動器與硬件驅(qū)動器執(zhí)行任務并且在幀編碼時間的時間間隔交換信息的舉例說明。軟件驅(qū)動器(例如,cpu子系統(tǒng)106)執(zhí)行運動估計,并且發(fā)送運動信息(例如,運動向量)至硬件驅(qū)動器(例如,venc子系統(tǒng)108)。硬件驅(qū)動器完成視頻編碼程序中除了運動估計之外的其他任務,例如運動補償、變換、量化、反變換、反量化、熵編碼等等。在圖3的舉例說明中以重建環(huán)&ec表示。換言之,在軟件驅(qū)動器與硬件驅(qū)動器之間存在數(shù)據(jù)的傳輸/轉(zhuǎn)換,其原因為完整的視頻編碼操作是由軟件驅(qū)動器與硬件驅(qū)動器共同完成的。優(yōu)選地,軟件驅(qū)動器與硬件驅(qū)動器之間的數(shù)據(jù)的傳輸/轉(zhuǎn)換是通過高速緩存來實現(xiàn)的。高速緩存機制的細節(jié)將如下詳述。此處的互動間隔(interactioninterval)指的是軟件驅(qū)動器與硬件驅(qū)動器彼此溝通的時間或者空間間隔。舉例來說,上述的溝通方法包含從硬件驅(qū)動器至軟件驅(qū)動器發(fā)送一中斷信號int。如圖3所示,軟件驅(qū)動器在時間tm-2產(chǎn)生一個指示ind來通知硬件驅(qū)動器,并且當幀m-2的運動估計已完成并開始下一幀m-1的運動估計時,轉(zhuǎn)移與幀m-2有關的信息至硬件部分。當接到軟件驅(qū)動器的通知之后,硬件驅(qū)動器參考軟件驅(qū)動器所提供的信息來開始與幀m-2有關的編碼步驟,從而獲得相對應的重建幀m-2以及幀m-2的壓縮比特流。硬件驅(qū)動器當完成與幀m-2的編碼步驟時在時間tm-2’通知軟件驅(qū)動器。如圖3所示,軟件驅(qū)動器對于幀m-1的處理速度比硬件驅(qū)動器對于幀m-2的處理速度要快。因此軟件驅(qū)動器等待硬件驅(qū)動器完成與幀m-2相關的編碼步驟。在接到了硬件驅(qū)動器的通知之后,軟件部分傳輸與幀m-1有關的相關信息至硬件驅(qū)動器,并且開始在時間tm-1執(zhí)行下一幀m的運動估計。軟件驅(qū)動器可以從硬件驅(qū)動器獲得幀m-2的相關信息。舉例來說,軟件驅(qū)動器可以從硬件驅(qū)動器獲得壓縮的幀m-2的比特流大小,編碼模式信息,量化信息,處理時間信息,以及/或者存儲器頻寬信息等相關信息。當接收到軟件驅(qū)動器的通知之后,硬件驅(qū)動器參考從軟件驅(qū)動器獲得的信息來開始與幀m-1相關的編碼步驟來獲得對應的重建幀m-1。當在時間tm-1’完成與幀m-1相關的編碼步驟時,硬件驅(qū)動器通知軟件驅(qū)動器。如圖3所示,由于幀m軟件部分的處理速度慢于硬件驅(qū)動器處理幀m-1的處理速度,因此硬件驅(qū)動器等待軟件驅(qū)動器完成與幀m相關的編碼步驟。在完成幀m的運動估計之后,軟件驅(qū)動器傳輸與幀m相關的信息至硬件部分,并在tm開始幀m+1的運動估計。當接收到軟件驅(qū)動器的通知之后,硬件驅(qū)動器參考從軟件驅(qū)動器獲得的信息來開始與幀m相關的編碼步驟,以獲得相對應的重建幀m。硬件驅(qū)動器在時間tm’當完成了與幀m有關的編碼步驟時通知軟件驅(qū)動器。如圖3所示,軟件驅(qū)動器處理幀m+1的時間與硬件驅(qū)動器處理幀m的時間相等。因此硬件驅(qū)動器與軟件驅(qū)動器不需要彼此等待。需注意的是,軟件部分與硬件部分的互動間隔并不局限于編碼一個完整幀的時間區(qū)間。該間隔可是一個宏塊(宏塊,mb)、一個最大的編碼單元(lcu)或者一個切片(slice)、或一個瓦片(tile)。該間隔也可是多個宏塊、多個最大的編碼單元(lcu)、多個切片、或多個瓦片。該間隔也可是一個或者多個宏塊(或最大編碼單元)行。當互動間隔的間隔尺寸小時,重建幀(或后端處理幀)的數(shù)據(jù)對于運動估計是可用的。舉例來說,在一個以切片為基礎的互動(即視頻編碼是依據(jù)切片而并非幀來進行的)的情況下,混合視頻編碼器100的硬件驅(qū)動器以及軟件驅(qū)動器可處理相同源視頻幀m的不同切片,并且重建幀m-1(其是從源視頻幀m-1獲得,源視頻幀m-1在源視頻幀m之前)在此時也可用。在這種情況下,混合視頻編碼器100的軟件驅(qū)動器處理源視頻幀m的一個切片,重建幀m-1可被用作一個參考幀,從而提供軟件驅(qū)動器執(zhí)行的運動估計所參考的參考像素數(shù)據(jù)。在圖3所示的舉例說明中,如果需要的話,軟件驅(qū)動器可以在一個幀間隔內(nèi)等待硬件驅(qū)動器。然而,這并非本發(fā)明的一個限制。舉例來說,混合視頻編碼器100的軟件驅(qū)動器可配置為依據(jù)一序列的源視頻幀連續(xù)地執(zhí)行運動估計,而并不等待混合視頻編碼器100的硬件驅(qū)動器。依據(jù)本發(fā)明的精神,可提供其他多個實施例,這些實施例具有相同的特性,即運動估計是由在可編程驅(qū)動器上運行的軟件來完成的。一個實施例是軟件驅(qū)動器處理me,并且硬件驅(qū)動器處理mc、t、q、iq、it、ec。對于不同的視頻編碼標準,硬件驅(qū)動器可進一步處理后端流程,例如db以及sao。另一個實施例是軟件驅(qū)動器處理me以及mc,并且硬件驅(qū)動器處理t、q、iq、it、ec。硬件驅(qū)動器可進一步處理后端流程,例如db以及sao。這些替代設計都通過軟件來實現(xiàn)me(即執(zhí)行指令),因此都在本發(fā)明的范圍之內(nèi)。在另一實施例中,混合視頻編碼器100的軟件編碼部分在一或多個可編程驅(qū)動器上執(zhí)行運動估計。軟件編碼部分所執(zhí)行的運動估計結(jié)果接著被混合視頻編碼器100的硬件編碼部分使用。運動估計的結(jié)果包含,但不限于,運動向量、編碼單元的編碼模式、參考幀索引、單一參考幀或者多個參考幀、以及/或者用來執(zhí)行幀內(nèi)或幀間編碼所需的其他信息。軟件編碼部分進一步?jīng)Q定每一編碼區(qū)域(例如宏塊、lcu、切片或幀)的比特預算(bitbudget)以及量化設置。軟件編碼部分也決定當前要編碼的幀的幀類型,并且上述決定可依據(jù)運動估計結(jié)果的至少部分信息來決定。舉例來說,軟件編碼部分決定當前幀為i幀、p幀、b幀或其他幀類型。軟件編碼部分可進一步?jīng)Q定要編碼的當前幀的片數(shù)量以及片類型,并且上述決定可依據(jù)運動估計結(jié)果的至少部分信息來決定。舉例來說,軟件編碼部分可決定要編碼的當前幀包含兩個片。軟件編碼部分可決定當前幀具有編碼為i片的第一片,并且其他的片為p片。軟件編碼部分進一步?jīng)Q定上述i片與p片的區(qū)域??梢罁?jù)在運動估計中收集的統(tǒng)計信息來決定第一片編碼為i片。舉例來說,統(tǒng)計信息包含視頻內(nèi)容復雜度或者整體幀的一部分的活動性信息、運動信息、運動估計成本功能信息或者其他第一片的運動估計所產(chǎn)生的信息。軟件編碼部分依據(jù)縮小比例的源視頻幀(其通過原始源視頻幀獲得)以及縮小比例的參考幀(其通過原始參考幀獲得)進行粗略的運動估計。粗略運動估計的結(jié)果輸送給硬件編碼部分。硬件編碼部分執(zhí)行最終的或者好的運動估計以及相對應的運動補償。在另一方面,硬件編碼部分直接進行運動補償,而不進行最終的運動估計。軟件編碼部分進一步從硬件編碼部分獲得精確的編碼結(jié)果,來決定后續(xù)一個幀或者多個編碼幀的搜索范圍。舉例來說,垂直搜索范圍+/-48被應用至編碼第一幀。該幀的編碼結(jié)果指示編碼的運動向量主要是在垂直搜索范圍+/-16的范圍之內(nèi)。軟件編碼部分接著決定縮減該垂直搜索范圍至+/-32并應用該范圍來編碼第二幀。通過這個舉例說明,但并非本發(fā)明的限制,第二幀可是第一幀之后的任意一幀。決定的搜索范圍可以進一步送至硬件編碼部分來進行運動估計或者其他處理。上述搜索范圍的確定可以被當做軟件視頻編碼器所執(zhí)行的運動估計的一部分。軟件編碼部分進一步從其他外部裝置獲得運動信息來決定搜索范圍。該外部裝置可以是一個圖像信號處理器(imagesignalprocessor,isp)、電子/光學圖像穩(wěn)定單元(electronic/opticalimagestabilizationunit)、圖型處理單元(graphicprocessingunit,gpu)、顯示處理器、運動過濾器或位置傳感器。如果編碼的第一幀被決定為一個靜態(tài)場景,軟件編碼部分可進一步縮減垂直搜索區(qū)域至+/-32,并應用該區(qū)域來編碼第一幀。在一個例子中,當視頻編碼標準是高效率視頻編碼(highefficiencyvideocoding,hevc)/h.265時,軟件編碼部分也決定要編碼的當前幀的瓦片數(shù)量與瓦片參數(shù),并且該決定是至少依據(jù)運動估計的結(jié)果的信息來決定。舉例來說,軟件編碼部分決定在要進行1080p編碼的當前幀內(nèi)有兩個瓦片,每一個瓦片是960x1080。軟件編碼部分決定在要進行1080p編碼的當前幀內(nèi)有兩個瓦片,每一個瓦片是1920x540。上述決定被硬件編碼部分所使用來完成編碼的其他處理。軟件編碼部分利用可編程驅(qū)動器的高速緩存來存儲至少一部分當前源視頻幀的數(shù)據(jù)與至少一部分參考幀的數(shù)據(jù),以此獲得優(yōu)勢,并由于較低的數(shù)據(jù)存儲延時而增進編碼性能。參考幀可以是重建幀或后端處理幀?;旌弦曨l編碼器100所使用的高速緩存113/115/117可以是一級高速緩存、二級高速緩存、三級高速緩存或者更高級高速緩存。為了簡潔與方便,假設混合視頻編碼器100的軟件驅(qū)動器使用cpu子系統(tǒng)106。因此當執(zhí)行運動估計時,軟件驅(qū)動器(即cpu子系統(tǒng)106)從較大尺寸的緩存(例如芯片外存儲器12)獲取源視頻幀以及參考幀。當高速緩存117的上述數(shù)據(jù)是可用時,硬件驅(qū)動器(即venc子系統(tǒng)108)將從軟件驅(qū)動器的高速緩存117獲得源視頻幀數(shù)據(jù)或者參考幀數(shù)據(jù)。否則,源視頻幀數(shù)據(jù)或者參考幀數(shù)據(jù)也將從較大尺寸的幀緩沖器存取。在這個實施例中,使用高速緩存一致性機制(coherencemechanism)來檢查是否高速緩存117中是否存在上述數(shù)據(jù)。該高速緩存一致性機制當數(shù)據(jù)存在于高速緩存117時,從高速緩存117中獲取數(shù)據(jù),或者將數(shù)據(jù)存取需求(即讀取需求)傳遞至存儲控制器110來從幀存儲器中獲得所需的數(shù)據(jù)。換言之,cpu子系統(tǒng)106的高速緩存控制器通過使用高速緩存117來服務硬件驅(qū)動器發(fā)出的數(shù)據(jù)存取需求。當高速緩存命中發(fā)生時,高速緩存控制器返回緩存的數(shù)據(jù)。當高速緩存缺失發(fā)生時,存儲控制器110將收到硬件驅(qū)動器所需數(shù)據(jù)的數(shù)據(jù)存取需求,并且執(zhí)行數(shù)據(jù)存取轉(zhuǎn)換。兩種類型的高速緩存一致性機制可以在該實施例中使用。第一種是保守高速緩存一致性機制(conservativecachecoherencemechanism),另外一種是攻擊高速緩存一致性機制(aggressivecachecoherencemechanism)。為了從硬件驅(qū)動器發(fā)出的數(shù)據(jù)存取需求的干擾,對于軟件驅(qū)動器與硬件驅(qū)動器使用保守高速緩存一致性機制。保守高速緩存一致性機制僅僅處理讀取交易(readtransaction),此外當數(shù)據(jù)沒有在高速緩存117中時,沒有高速緩存確實發(fā)生并且沒有數(shù)據(jù)替換執(zhí)行。舉例來說,軟件驅(qū)動器中的高速緩存控制器(未顯示)或者系統(tǒng)10內(nèi)的總線控制器(未顯示)監(jiān)控/探聽總線101上的讀取交易地址,其中總線101連接至軟件驅(qū)動器(cpu子系統(tǒng)106)以及硬件驅(qū)動器(venc子系統(tǒng)108)。當硬件驅(qū)動器發(fā)出的讀取需求的交易地址與高速緩存117內(nèi)部高速緩存的數(shù)據(jù)的地址匹配時,高速緩存命中發(fā)生,并且高速緩存控制器直接傳輸緩存的數(shù)據(jù)至硬件驅(qū)動器。需注意的是,從硬件驅(qū)動器發(fā)出的寫入交易(writetransaction)總是由分層結(jié)構(gòu)的下一級存儲器的管理器處理,分層結(jié)構(gòu)的下一級存儲器通常是芯片外存儲器12或者下一級高速緩存。因此cpu子系統(tǒng)106的高速緩存控制器將決定從venc子系統(tǒng)108發(fā)出的數(shù)據(jù)存取需求是存取高速緩存117還是存取不同于高速緩存117的其他存儲裝置(例如芯片外存儲器12)。當從venc子系統(tǒng)108發(fā)出的數(shù)據(jù)存取需求是寫入需求時,決定該寫入需求時存取該存儲裝置(例如芯片外存儲器12)。因此,venc子系統(tǒng)108與存儲裝置(例如芯片外存儲器12)之間數(shù)據(jù)交易就不通過高速緩存117而執(zhí)行。當軟件驅(qū)動器不需要從硬件驅(qū)動器寫入數(shù)據(jù)時,應用數(shù)據(jù)同步機制(datasynchronizationmechanism)來指示寫入數(shù)據(jù)對于軟件驅(qū)動器是可用的。數(shù)據(jù)同步機制的進一步詳細說明如下。在另一方面,為了讓硬件驅(qū)動器更好地使用可編程驅(qū)動器的高速緩存,可以使用攻擊高速緩存一致性機制。請參考圖4,其繪示了依據(jù)本發(fā)明第二實施例的混合視頻編碼器400。圖4所示的系統(tǒng)20與之間圖1所示的系統(tǒng)10的區(qū)別是在軟件驅(qū)動器與硬件驅(qū)動器之間具有專屬高速緩存寫入線(dedicatedcachewriteline)(即額外的寫入路徑)402,因此,允許硬件驅(qū)動器寫入數(shù)據(jù)至軟件驅(qū)動器的高速緩存。為了簡單清楚地描述,假設軟件驅(qū)動器是由cpu子系統(tǒng)106實現(xiàn),并且硬件驅(qū)動器是由venc子系統(tǒng)108實現(xiàn)。然而,這僅僅作為舉例說明使用,而并非本發(fā)明的限制。在一個舉例說明中,當cpu子系統(tǒng)106作為軟件驅(qū)動器時,運動估計是由cpu子系統(tǒng)106中的cpu116完成的,高速緩存寫入線連接在cpu子系統(tǒng)106與venc子系統(tǒng)108之間。如上所述,可編程驅(qū)動器(例如,cpu子系統(tǒng)106)內(nèi)部的高速緩存控制器監(jiān)控/探聽總線101上的讀取交易地址,其中總線101連接至軟件驅(qū)動器(cpu子系統(tǒng)106)以及硬件驅(qū)動器(venc子系統(tǒng)108)。因此cpu子系統(tǒng)106的高速緩存控制器可決定venc子系統(tǒng)108是否發(fā)出一個數(shù)據(jù)存取需求來存取高速緩存117或者一個與高速緩存117不同的存儲裝置(例如芯片外存儲器12)。當venc子系統(tǒng)108發(fā)出的數(shù)據(jù)存取需求是一個讀取存取并且所需的數(shù)據(jù)在高速緩存117內(nèi)是可用狀態(tài)的話,則發(fā)生高速緩存命中,并且使得高速緩存控制器將所需的數(shù)據(jù)從高速緩存117傳輸至venc子系統(tǒng)108。當venc子系統(tǒng)108發(fā)出的數(shù)據(jù)存取需求是一個讀取存取并且所需的數(shù)據(jù)在高速緩存117內(nèi)是不可用狀態(tài)的話,則發(fā)生高速緩存缺失,并且使得高速緩存控制器發(fā)出一個存儲器讀取需求至它的下一級記憶分層組織,通常發(fā)送至芯片外存儲器12或者下一級高速緩存。所讀取的數(shù)據(jù)從下一級記憶分層組織返回,并且替代一個高速緩存線或者高速緩存117內(nèi)的等量數(shù)據(jù)。從下一級記憶分層組織返回的數(shù)據(jù)也傳輸至venc子系統(tǒng)108。當從venc子系統(tǒng)108發(fā)出的數(shù)據(jù)存取需求是一個寫入需求,以請求寫入數(shù)據(jù)至cpu子系統(tǒng)106的高速緩存117時,可以應用回寫策略(writeback)或者直寫策略(writethrough)。對于回寫策略來說,從venc子系統(tǒng)108寫入的數(shù)據(jù)傳輸至cpu子系統(tǒng)106并且因此初始地經(jīng)由專屬高速緩存寫入線402寫入高速緩存117。當包含寫入數(shù)據(jù)的高速緩存塊/線將要被新的內(nèi)容修改/取代時,從venc子系統(tǒng)108寫入的數(shù)據(jù)通過總線101寫入下一級記憶分層組織。對于直寫策略來說,從venc子系統(tǒng)108寫入的數(shù)據(jù)同步地經(jīng)由專屬高速緩存寫入線402寫入高速緩存117以及經(jīng)由總線寫入下一級記憶分層組織。本領域技術人員能夠了解回寫策略與直寫策略的細節(jié),更詳細的描述在此省略。除了軟件編碼部分,在一些可編程驅(qū)動器可運行一個操作系統(tǒng)(operationsystem,os)。在這種情況下,除了高速緩存,可編程驅(qū)動器還具有存儲器保護單元(memoryprotectunit,mpu)或者存儲器管理單元(mmu),在其中執(zhí)行虛擬地址至物理地址的轉(zhuǎn)換。為了使得存儲在高速緩存內(nèi)的數(shù)據(jù)被硬件驅(qū)動器存取,應用地址同步機制(addresssynchronizationmechanism)使得高速緩存的相同的條目能夠被正確地取址以及由硬件驅(qū)動器與軟件驅(qū)動器存取。舉例來說,從venc子系統(tǒng)108發(fā)出的數(shù)據(jù)存取需求由通過vmmu119的另一轉(zhuǎn)換來完成虛擬地址至物理地址的轉(zhuǎn)換,并且這種轉(zhuǎn)換與在cpu子系統(tǒng)106內(nèi)的轉(zhuǎn)換同步。為了利用高速緩存,應用數(shù)據(jù)同步機制(datasynchronizationmechanism)。上述數(shù)據(jù)同步機制幫助增加要讀取的數(shù)據(jù)已經(jīng)在高速緩存內(nèi)的機會,并且因此減少需要從下一級記憶分層組織(例如芯片外存儲器12或者下一級高速緩存)獲得數(shù)據(jù)的可能性。該數(shù)據(jù)同步機制也幫助減少高速緩存缺失或者高速緩存數(shù)據(jù)替代的機會。數(shù)據(jù)同步機制包含一個指示(例如圖3所示的ind),來指示硬件驅(qū)動器(例如venc子系統(tǒng)108)其所需要的數(shù)據(jù)當前在軟件驅(qū)動器的高速緩存(例如cpu子系統(tǒng)106的高速緩存117)內(nèi)可用。舉例來說,當軟件驅(qū)動器完成了一幀的運動估計,軟件驅(qū)動器設置該指示。硬件驅(qū)動器接著在同一幀上執(zhí)行其余的編碼操作。由軟件驅(qū)動器讀取的數(shù)據(jù),例如源視頻幀數(shù)據(jù)以及參考幀數(shù)據(jù),較大可能地依然存在在高速緩存中。更具體來說,當如上所述的互動間隔的間隔尺寸設置較小時,當硬件驅(qū)動器被操作來執(zhí)行在先前軟件驅(qū)動器處理的同一幀上的其余編碼步驟時,由軟件驅(qū)動器讀取的數(shù)據(jù)較大可能性地在軟件驅(qū)動器的高速緩存中依然可用,因此,硬件驅(qū)動器能夠從高速緩存而不是下一級記憶分層組織(例如芯片外存儲器12)讀取數(shù)據(jù),例如運動向量、運動補償系數(shù)數(shù)據(jù)、量化系數(shù)、上述的中間數(shù)據(jù)等可能依然存在于軟件驅(qū)動器的高速緩存中。因此硬件驅(qū)動器也能夠從高速緩存而不是下一級記憶分層組織(例如芯片外存儲器12)讀取這些數(shù)據(jù)。上述指示可以使用任意的可行的指示方式來實現(xiàn),舉例來說,上述指示可以是硬件驅(qū)動器的一個激發(fā)(trigger)、一個旗標(flag)或者一個命令序列。此外,可以使用一個更攻擊的數(shù)據(jù)同步機制。舉例來說,當軟件驅(qū)動器(例如cpu子系統(tǒng)106)在一個編碼區(qū)域(例如在一個完整幀中的多個宏塊)完成執(zhí)行運動估計時,軟件驅(qū)動器設置該指示。即,該指示是設置來每一次軟件驅(qū)動器完成一個完整幀的一部分的運動估計時,通知硬件驅(qū)動器(例如venc子系統(tǒng)108)。硬件驅(qū)動器接著執(zhí)行在該幀的該部分執(zhí)行剩余的編碼步驟。由軟件驅(qū)動器讀取的數(shù)據(jù),例如源視頻幀數(shù)據(jù)以及參考幀數(shù)據(jù)、以及軟件驅(qū)動器產(chǎn)生的數(shù)據(jù)(例如運動向量以及運動補償系數(shù)數(shù)據(jù))也較高可能性地依然存在在軟件驅(qū)動器的高速緩存中。因此,硬件驅(qū)動器能夠從高速緩存而不是下一級記憶分層組織(例如芯片外存儲器12)來讀取這些數(shù)據(jù)。相似地,上述指示可使用任意可行的指示方式來實現(xiàn)。舉例來說,上述指示可以是硬件驅(qū)動器的一個激發(fā)(trigger)、一個旗標(flag)或者一個命令序列。另舉一例來說,上述指示可以是已經(jīng)處理的或者尚未處理的宏塊的位置信息、或者已經(jīng)處理的或尚未處理的宏塊的數(shù)量。此外,硬件驅(qū)動器能夠應用與軟件驅(qū)動器相似的數(shù)據(jù)同步方法。舉例來說,當硬件驅(qū)動器完成重建幀數(shù)據(jù)(或后端處理幀數(shù)據(jù))至軟件驅(qū)動器的高速緩存的寫入部分時,硬件驅(qū)動器也能夠設置一個指示。舉例來說,該由硬件驅(qū)動器設置的指示可以是一個中斷(interrupt)、一個旗標、已經(jīng)處理的或者尚未處理的宏塊的位置信息、或者已經(jīng)處理的或尚未處理的宏塊的數(shù)量等等。數(shù)據(jù)同步機制也可與一個停滯機制(stallmechanism)合作,例如當數(shù)據(jù)同步機制指示需要一個停滯時,軟件驅(qū)動器或者硬件驅(qū)動器處于停滯狀態(tài)。舉例來說,當硬件驅(qū)動器無空閑(busy)并且不能接受下一處理器的另一觸發(fā)時,硬件驅(qū)動器能夠產(chǎn)生一個停滯指示,來指示軟件驅(qū)動器停滯,從而軟件驅(qū)動器的高速緩存內(nèi)的數(shù)據(jù)不會被復寫(overwrite)、替代或者沖刷(flush)。該停滯指示可以使用任意的可行的指示方式來實現(xiàn)。舉例來說,該停滯指示可以是硬件驅(qū)動器的非空閑信號、或者命令序列的豐滿信號(fullnesssignal)。另舉一例來說,上述停滯指示可以是已經(jīng)處理的或者尚未處理的宏塊的位置信息、或者已經(jīng)處理的或尚未處理的宏塊的數(shù)量。綜上所述,本發(fā)明所述的視頻編碼的方法以及裝置將硬件部分與軟件部分協(xié)同起來。其利用了可編程驅(qū)動器及其相對應的高速緩存的力量并且部分應用特定的硬件來縮減芯片區(qū)域的成本。具體來說,所提出的混合視頻編碼器至少使得運動估計是由軟件來實施,同時至少一個主要的任務(mc、t、q、it、iq、ip、df及sao其中之一)是由硬件實施。圖5繪示了依據(jù)hevc編碼標準具有自適應幀內(nèi)編碼及運動補償?shù)囊曨l編碼器500的區(qū)塊圖。幀內(nèi)預測單元510根據(jù)當前要編碼的幀的重建幀產(chǎn)生幀內(nèi)預測子(intrapredictors)。運動補償預測單元(mcp)512根據(jù)參考幀的視頻數(shù)據(jù)執(zhí)行運動估計(me)功能及運動補償(mc)功能以提供幀間預測子(interpredictors)。幀間預測子(interpredictors)系由具有亮度元素(lumacomponent)例如y的圖像區(qū)塊,以及具有彩度元素(chromacomponent)例如u、v的圖像區(qū)塊所構(gòu)成,每一個圖像區(qū)塊皆對應于當前幀的一編碼單元(codingunit)或一宏塊(macroblock),且每一個圖像區(qū)塊皆包含若干個圖像像素(imagepixels)。開關514選擇幀內(nèi)預測單元510輸出的幀內(nèi)預測子或運動補償預測單元(mcp)512輸出的幀間預測子并且將所選的預測子傳送至加法器(adder)516用以形成預測誤差(predictionerrors),亦稱作預測殘差信號(predictionresidualsignal)。預測殘差信號則進一步被轉(zhuǎn)換單元(t)518及量化單元(q)520所處理。熵編碼器534則將經(jīng)過轉(zhuǎn)換及量化后的預測殘差信號進行熵編碼作業(yè),并將附加信息(sideinformation),例如運動信息,一同打包以形成壓縮的比特流。因此,附加信息(sideinformation)數(shù)據(jù)也必須提供給熵編碼器534。當運動補償模式被啟動時編碼器端也需要進行重建功能(reconstruction)以提供所需的參考幀,所以經(jīng)過轉(zhuǎn)換及量化后的預測殘差信號則需要被反量化單元(iq)522以及反轉(zhuǎn)換單元(it)524所處理,藉此還原出預測殘差信號。如同圖5所示,反轉(zhuǎn)換單元(it)524輸出的還原過的預測殘差信號則在重建單元(rec)526中與由開關514所選擇的預測子相加后產(chǎn)生重建的視頻數(shù)據(jù)。重建的視頻數(shù)據(jù)也可以被儲存于參考幀緩存器(referencepicturebuffer)532內(nèi),并且被用于作為預測其他幀的參考幀。由重建單元(rec)526所輸出的重建的視頻數(shù)據(jù)在編碼的過程中也許會遭受各種程度不一的數(shù)據(jù)損壞,因此將重建的視頻數(shù)據(jù)儲存到參考幀緩存器(referencepicturebuffer)532之前,有需要將由重建單元(rec)526所輸出的重建的視頻數(shù)據(jù)傳送至,例如去塊過濾器(df)528或者樣本自適應過濾器(sao)530,進行環(huán)路濾波(in-loopfilter)以改善畫質(zhì)(picturequality)。去塊過濾器(df)528所產(chǎn)生的去塊過濾信息(dfinformation)或者樣本自適應過濾器(sao)530所產(chǎn)生的樣本自適應過濾信息(saoinformation)需要被傳送至熵編碼器534作為附加信息(sideinformation)的一部分,與壓縮的比特流中的轉(zhuǎn)換系數(shù)一同打包,藉此在解碼器端若亦可使用相同的塊過濾信息(dfinformation)以及樣本自適應過濾信息(saoinformation)進行解碼。圖6繪示了依據(jù)本發(fā)明第三實施例的混合視頻編碼器600區(qū)塊圖?;旌弦曨l編碼器600包含至少一個軟件驅(qū)動器(即軟件編碼器部分),例如視頻編碼決策軟件驅(qū)動器610,其通過執(zhí)行指令(即編碼代碼)來實現(xiàn)預計的功能,更進一步包含至少一個硬件驅(qū)動器(即硬件編碼器部分),例如視頻編碼硬件加速器620,其通過使用純硬件來實現(xiàn)預計的功能?;旌弦曨l編碼器可以是一個片上系統(tǒng)(soc),視頻編碼決策軟件驅(qū)動器610可以是dsp子系統(tǒng)102、gpu子系統(tǒng)104、cpu子系統(tǒng)106或其他的可編程硬件,其能夠執(zhí)行嵌入的指令或者被一個序列器(sequencer)控制。請參閱圖1、圖5及圖6,視頻編碼決策軟件驅(qū)動器610(例如dsp子系統(tǒng)102、gpu子系統(tǒng)104、cpu子系統(tǒng)106)接收源視頻幀數(shù)據(jù)612及重建的視頻數(shù)據(jù)622并通過執(zhí)行多個指令實現(xiàn)視頻編碼操作第一部分。視頻編碼操作的第一部分包含至少一運動估計(me)功能以及一運動補償(mc)功能,例如于圖5所示的運動補償預測單元(mcp)512中所執(zhí)行的功能。視頻編碼決策軟件驅(qū)動器610執(zhí)行視頻編碼操作第一部分時輸出包含幀間預測子(interpredictors)614以及控制信息(controlinformation)616,并將幀間預測子(interpredictors)614以及控制信息(controlinformation)616儲存于存儲器(buffer)中。存儲器(buffer)可以是視頻編碼決策軟件驅(qū)動器610中的高速緩存(例如圖1及圖4中的高速緩存113、115、117),或亦可是芯片外存儲器(例如圖1及圖4芯片外存儲器12)。視頻編碼操作的第一部分之外的其余編碼操作都是由視頻編碼硬件加速器620所執(zhí)行。視頻編碼硬件加速器620包含開關514、加法器516、轉(zhuǎn)換單元(t)518、反轉(zhuǎn)換單元(it)524、量化單元(q)520、反量化單元(iq)522、重建單元(rec)526、幀內(nèi)預測單元510、熵編碼器534、去塊過濾器(df)528、以及樣本自適應過濾器(sao)530用以執(zhí)行視頻編碼操作的第一部分之外的其余編碼操作(稱為視頻編碼操作的第二部分)。視頻編碼硬件加速器620發(fā)出一數(shù)據(jù)存取需求(dataaccessrequest)用來存取儲存于高速緩存中的幀間預測子或一部分的控制信息。或者,視頻編碼硬件加速器620發(fā)出一數(shù)據(jù)存取需求(dataaccessrequest)通過存儲控制器110來存取儲存于芯片外存儲器12中的幀間預測子或一部分的控制信息。視頻編碼硬件加速器620根據(jù)源視頻幀數(shù)據(jù)612及幀間預測子(interpredictors)614以及控制信息(controlinformation)616通過使用純硬件來實現(xiàn)視頻編碼操作的第二部分。視頻編碼硬件加速器620執(zhí)行視頻編碼操作第二部分時輸出包含至少一壓縮的比特流618、重建的視頻數(shù)據(jù)622、以及任何與壓縮的比特流618相關的附加信息(sideinformation)或統(tǒng)計信息。在某些實施例,硬件驅(qū)動器會將從軟件驅(qū)動器所產(chǎn)生的部分控制信息與壓縮的比特流618整合在一起。從視頻編碼決策軟件驅(qū)動器610輸出的控制信息(controlinformation)616則是被視頻編碼硬件加速器620所運用來行視頻編碼操作的第二部分。該控制信息(controlinformation)616包含對應于當前幀的每一個圖像區(qū)塊,例如編碼單元(codingunit)或宏塊(macroblock),的完整描述以及可調(diào)整的頭參數(shù)(headerparameters)。例如,該控制信息(controlinformation)616包含對應于每一編碼圖像區(qū)塊的模式信息(modeinformation)、運動信息(motioninformation)、環(huán)路濾波強度、以及參考幀索引信息(referenceframeindications)。視頻編碼硬件加速器620根據(jù)所接收的控制信息(controlinformation)616來產(chǎn)生壓縮的比特流618,因此視頻編碼硬件加速器620僅能對有限的少數(shù)編碼決策進行決定。這些有限的少數(shù)編碼決策舉例來說包含,決定codedblockpatterns(cbp)以及決定是否改變編碼模式(mode)為一相當?shù)慕輳侥J?short-cutmode)。例如,于符合h.264編碼標準的混合視頻編碼器中的視頻編碼硬件加速器620可以將具有skip-mv且無texture系數(shù)的p_16x16模式改變?yōu)閜-skip模式。一些視頻編碼標準可能包含或者不包含環(huán)路濾波(in-loopfilter),例如圖5中的去塊過濾器(df)528或者樣本自適應過濾器(sao)530。但當視頻編碼標準有環(huán)路濾波(in-loopfilter)功能時,環(huán)路濾波(in-loopfilter)功能除了同前述可于硬件驅(qū)動器中執(zhí)行之外,于某些實施例中,環(huán)路濾波(in-loopfilter)功能亦可以由軟件驅(qū)動器來執(zhí)行。因此,當環(huán)路濾波(in-loopfilter)功能由硬件驅(qū)動器執(zhí)行時,提供到軟件驅(qū)動器的重建的視頻數(shù)據(jù)系經(jīng)過環(huán)路濾波(in-loopfilter)處理過的重建的視頻數(shù)據(jù)。而當環(huán)路濾波(in-loopfilter)功能由軟件驅(qū)動器執(zhí)行時,提供到軟件驅(qū)動器的重建的視頻數(shù)據(jù)則系從重建單元(rec)526輸出且未經(jīng)過環(huán)路濾波(in-loopfilter)處理的重建的視頻數(shù)據(jù)。圖5視頻編碼器500中的一個或若干個功能區(qū)塊系以軟件驅(qū)動器來實現(xiàn),例如圖6的視頻編碼決策軟件驅(qū)動器610,而其它的區(qū)塊則由硬件驅(qū)動器來實現(xiàn),例如圖6的視頻編碼硬件加速器620。值得注意的是,本實施例的軟件驅(qū)動器執(zhí)行至少一運動估計(me)功能以及一運動補償(mc)功能,例如于圖5所示的運動補償預測單元(mcp)512中所執(zhí)行的相同功能。圖7繪示了符合itu-th.264編碼標準的混合視頻編碼器的區(qū)塊圖。圖7中僅繪示了一些視頻編碼硬件加速器730中的重要功能區(qū)塊以及存儲器(buffer)710用以提供數(shù)據(jù)給視頻編碼硬件加速器730,其中混合視頻編碼器700的軟件驅(qū)動器則在圖7中未顯示?;旌弦曨l編碼器700提供了豐富的編碼工具用來對方型的圖像區(qū)塊(稱作宏塊)進行編碼作業(yè)。一個視頻序列包含了許多個視頻幀,每個視頻幀系由若干個相互獨立的區(qū)域,亦稱作條帶(slice),所構(gòu)成。并且每個條帶(slice)含有許多的宏塊,每個宏塊再進一步分為一個或若干個的子宏塊(sub-blocks),而子宏塊則由若干個像素所構(gòu)成。一個宏塊系由各別的圖像區(qū)塊所構(gòu)成,包含具有亮度元素(lumacomponent)圖像區(qū)塊,以及具有彩度元素(chromacomponent)的圖像區(qū)塊,每個符合itu-th.264編碼標準的宏塊(macroblock)一般包含有一個16x16像素的亮度(luma)圖像區(qū)塊以及二個8x8像素的彩度(chroma)圖像區(qū)塊。相似于圖6的視頻編碼硬件加速器620,圖7視頻編碼硬件加速器730的輸入數(shù)據(jù)包含源視頻幀數(shù)據(jù)702、幀間預測子(interpredictors)712、控制信息(controlinformation)714。幀間預測子(interpredictors)712及控制信息(controlinformation)714系由混合視頻編碼器700的軟件驅(qū)動器(圖未示)所計算并且于提供給視頻編碼硬件加速器730之前先暫時儲存于存儲器(buffer)710中。存儲器(buffer)710可以用一個或若干個芯片內(nèi)高速緩存、芯片外存儲器、或兩者的結(jié)合來實現(xiàn)。芯片外存儲器可以是,例如動態(tài)隨機存取存儲器(dram)、靜態(tài)隨機存取存儲器(sram)、或者閃存。于本實施例中,控制信息(controlinformation)714包含對應于每一宏塊的模式信息(modeinformation)、運動信息(motioninformation)、宏塊量化(quantization)信息、以及去塊過濾(df)參數(shù)?;旌弦曨l編碼器700的軟件驅(qū)動器(圖未示)執(zhí)行編碼模式?jīng)Q策,例如考慮到編碼率-失真優(yōu)化,選擇具有最低編碼率-失真成本的編碼模式,并且將模式信息(modeinformation)、運動信息(motioninformation)作為控制信息(controlinformation)714的一部分用來標示所選擇的編碼模式。模式信息(modeinformation)用來標示當前宏塊的編碼模式不是幀內(nèi)預測(intraprediction)就是幀間預測(interprediction),以及該當前宏塊的子宏塊的分割方法。h.264支持三種幀內(nèi)預測(intraprediction)編碼模式,分別標示為intra_16x16、intra_8x8、intra_4x4,七種幀間預測(interprediction)編碼模式,分別標示為p_16x16、p_16x8、p_8x16、p_8x8、p_8x4、p_4x8、p_4x4,以及skip模式。若當前宏塊以幀內(nèi)預測(intraprediction)編碼模式編碼時,模式信息(modeinformation)可以進一步包含子宏塊編碼模式(sub-blockmodes),例如垂直預測模式、水平預測模式、dc預測模式、斜角預測模式。若當前宏塊以幀間預測(interprediction)編碼模式編碼時,運動信息(motioninformation)則進一步包含一個或若干個運動向量(motionvector)以及所對應的參考幀索引信息(referenceframeindices)。模式信息(modeinformation)被提供至視頻編碼硬件加速器730的幀內(nèi)預測(intraprediction)單元731、多任務器(multiplexer)733、以及熵編碼器736進行相關的操作。運動信息(motioninformation)則被提供至熵編碼器736進行相關的操作。宏塊量化(quantization)信息則被提供至轉(zhuǎn)換及量化單元(t/q)735以及熵編碼器736進行相關的操作。而去塊過濾(df)參數(shù)則被提供至環(huán)路濾波單元(in-loopfilter)738進行相關的操作。圖7的多任務器(multiplexer)733根據(jù)控制信息(controlinformation)714中的模式信息(modeinformation)選擇從幀內(nèi)預測(intraprediction)單元731輸出的幀內(nèi)預測子(intrapredictors)731或選擇從存儲器(buffer)710讀取來的幀間預測子(interpredictors),并將所選的預測子(predictor)輸出至加法器734。加法器734則將源視頻幀數(shù)據(jù)702與從多任務器(multiplexer)733輸出的預測子相減以產(chǎn)生預測誤差(predictionerrors),亦稱作預測殘差信號(predictionresidualsignal)。預測殘差信號則進一步被轉(zhuǎn)換及量化單元(t/q)735所處理。熵編碼器736則將經(jīng)過轉(zhuǎn)換及量化后的預測殘差信號進行熵編碼作業(yè),并將控制信息(controlinformation)714一同打包以形成壓縮的比特流。經(jīng)過轉(zhuǎn)換及量化后的預測殘差信號則進一步由反轉(zhuǎn)換及反量化單元(it/iq)737進行反轉(zhuǎn)換及反量化操作,接著加法器739將從反轉(zhuǎn)換及反量化單元(it/iq)737輸出的數(shù)據(jù)與前述從多任務器(multiplexer)733輸出的預測子(predictor)相加后儲存于幀內(nèi)預測行緩沖器(intrapredictionlinebuffer)732以供幀內(nèi)預測(intraprediction)單元731之用。加法器739的輸出數(shù)據(jù)亦可被環(huán)路濾波單元(in-loopfilter)738進行環(huán)路濾波操作并產(chǎn)生重建的視頻數(shù)據(jù)734。視頻編碼硬件加速器730輸出的重建的視頻數(shù)據(jù)734將被傳送至混合視頻編碼器700的軟件驅(qū)動器用以進行幀間預測(interprediction)。于一符合mpeg-4編碼標準的混合視頻編碼器的實施例中,混合視頻編碼器的軟件驅(qū)動器決定當前宏塊的編碼模式,例如幀間預測(interprediction)模式或幀內(nèi)預測(intraprediction)模式。當決定當前宏塊的編碼模式為幀間預測(interprediction),混合視頻編碼器的軟件驅(qū)動器執(zhí)行運動估計(me)功能以及運動補償(mc)功能以產(chǎn)生運動向量(motionvector)以及幀間預測子(interpredictor),并將幀間預測子(interpredictor)儲存至芯片內(nèi)高速緩存或芯片外存儲器。當決定當前宏塊的編碼模式為幀內(nèi)預測(intraprediction),混合視頻編碼器的硬件驅(qū)動器則對當前宏塊執(zhí)行dc/ac預測以產(chǎn)生幀內(nèi)預測子(intrapredictor)??紤]到當前宏塊(currentmb)與鄰近宏塊(neighbormbs)的dc預測系數(shù)及ac預測系數(shù)在統(tǒng)計數(shù)字上的相關性,當前宏塊的幀內(nèi)預測(intraprediction)操作可以藉由參考一個或若干個鄰近宏塊的預測模式來執(zhí)行。于本實施例中dc/ac預測是由混合視頻編碼器的硬件驅(qū)動器來執(zhí)行。而當決定當前宏塊的編碼模式為幀間預測(interprediction)時,混合視頻編碼器的硬件驅(qū)動器則從存儲器讀取由混合視頻編碼器的軟件驅(qū)動器所產(chǎn)生的幀間預測子(interpredictor)以及控制信息(controlinformation)。本實施例中控制信息(controlinformation)包含模式信息(modeinformation)、運動信息(motioninformation)、及宏塊量化(quantization)信息。根據(jù)模式信息(modeinformation)所指定的編碼模式,將源視頻幀數(shù)據(jù)與幀間預測子(interpredictor)或由ac/dc預測單元產(chǎn)生的幀內(nèi)預測子(intrapredictor)相減以產(chǎn)生預測殘差信號(predictionresidualsignal)。接著對預測殘差信號(predictionresidualsignal)執(zhí)行離散系數(shù)變換(dct)及量化(q)操作,接著進行可變長編碼(vlc)以產(chǎn)生壓縮的比特流。其中,混合視頻編碼器的硬件驅(qū)動器包含一量化(q)單元,根據(jù)從混合視頻編碼器的軟件驅(qū)動器所產(chǎn)生的宏塊量化(quantization)信息執(zhí)行量化(q)操作?;旌弦曨l編碼器的硬件驅(qū)動器的可變長編碼(vlc)器也將運動信息(motioninformation)與壓縮的比特流整合在一起。于另一實施例,請參閱圖1,圖1中的視頻編碼(venc)子系統(tǒng)108是混合視頻編碼器100的硬件驅(qū)動器,并且配置成通過使用純硬件來執(zhí)行視頻編碼操作第二部分。venc子系統(tǒng)108包含視頻編碼器(venc)118以及存儲器管理單元(vmmu)119。具體的,venc118執(zhí)行除了可編程驅(qū)動器完成的步驟之外的其他編碼步驟,亦即視頻編碼操作第二部分,例如幀間預測功能,轉(zhuǎn)換功能(例如,離散系數(shù)變換(dct)),量化功能,反變換功能(例如,反dct),反量化功能,后端處理功能(例如去塊過濾(deblockingfilter)以及樣本自適應過濾器(sampleadaptiveoffsetfilter),以及熵編碼功能(entropyencoding)。此外,使用主視頻存儲器(mainvideobuffer)來存儲源視頻幀、重建幀、去區(qū)塊幀或者視頻編碼中使用的雜項信息。該主視頻存儲器通常配置在芯片外存儲器12(例如動態(tài)隨機存取存儲器(dram)、靜態(tài)隨機存取存儲器(sram)、或者閃存)中。然而,該主視頻存儲器也可以配置在芯片內(nèi)存儲器(例如嵌入式dram)中。于一符合hevc編碼標準的混合視頻編碼器的實施例,請參閱圖1、及圖5。本實施例中運動補償預測單元(mcp)是由一個或若干個軟件子系統(tǒng)來實現(xiàn)的,例如混合視頻編碼器100的dsp子系統(tǒng)102、gpu子系統(tǒng)104、或cpu子系統(tǒng)106。亦即運動估計(me)功能以及運動補償(mc)功能是由一個或若干個可編程驅(qū)動器例如圖1所示的dsp子系統(tǒng)102、gpu子系統(tǒng)104、或cpu子系統(tǒng)106來實現(xiàn)的。圖5參考幀緩存器(referencepicturebuffer)532可以是dsp子系統(tǒng)102、gpu子系統(tǒng)104、或cpu子系統(tǒng)106中的高速緩存113、115、117,或亦可是芯片外存儲器12。其它圖5中的重要功能區(qū)塊可以實現(xiàn)在視頻編碼硬件加速器例如圖1所示的venc子系統(tǒng)108。本實施例的運動補償預測單元(mcp)通過可編程驅(qū)動器(programmableengine)執(zhí)行指令(即編碼代碼)來執(zhí)行實現(xiàn)運動估計(me)功能以及運動補償(mc)功能,以導出幀間預測子(interpredictor)。如同前述,幀間預測子(interpredictors)系由具有亮度元素(lumacomponent)例如y的圖像區(qū)塊,以及具有彩度元素(chromacomponent)例如u、v的圖像區(qū)塊所構(gòu)成,每一個圖像區(qū)塊皆對應于當前幀的一編碼單元(codingunit),且每一個圖像區(qū)塊皆包含若干個圖像像素(imagepixels)。可編程驅(qū)動器(programmableengine)也決定圖像區(qū)塊的區(qū)分結(jié)構(gòu)、圖像區(qū)塊的編碼模式、幀內(nèi)編碼單元的預測模式、幀間編碼單元的運動信息(motioninformation)、用于執(zhí)行量化(q)操作的量化系數(shù)(quantizedcoefficients)、以及用于環(huán)路濾波(in-loopfilter),例如去塊過濾器(df)或者樣本自適應過濾器(sao)的參數(shù)。因此,可編程驅(qū)動器(programmableengine)所產(chǎn)生的控制信息(controlinformation)包含,最大編碼單元(lcu)說明例如分割結(jié)構(gòu)說明、編碼單元(cu)區(qū)分結(jié)構(gòu)說明、編碼單元(cu)的類型、幀內(nèi)預測模式、幀內(nèi)編碼單元的預測模式、幀間編碼單元的運動信息(motioninformation)、量化系數(shù)(quantizedcoefficients)、去塊過濾(df)參數(shù)、以及樣本自適應過濾(sao)參數(shù)??删幊舔?qū)動器(programmableengine)(例如dsp子系統(tǒng)102、gpu子系統(tǒng)104、或cpu子系統(tǒng)106)可以將幀間預測子(interpredictor)及控制信息(controlinformation)儲存于一個或若干個高速緩存113、115、117或儲存于芯片外存儲器12。于一實施例中幀間預測子(interpredictor)及控制信息(controlinformation)被儲存于高速緩存與芯片外存儲器中,亦即高速緩存與芯片外存儲器中皆存儲有相同的幀間預測子(interpredictor)及控制信息(controlinformation)數(shù)據(jù),藉此視頻編碼器(venc)118可以通過總線101靈活地自高速緩存或芯片外存儲器來讀取幀間預測子(interpredictor)及控制信息(controlinformation)。本實施例的環(huán)路濾波(in-loopfilter)功能包含去塊過濾(df)及樣本自適應過濾(sao)系由視頻編碼硬件加速器所執(zhí)行。于另一個實施例,視頻編碼硬件加速器輸出未經(jīng)過環(huán)路濾波處理的重建像素數(shù)據(jù)(reconstructeddata),而可編程驅(qū)動器(programmableengine)則進一步通過執(zhí)行指令(即編碼代碼)來對未經(jīng)過環(huán)路濾波處理的重建像素數(shù)據(jù)(reconstructeddata)執(zhí)行環(huán)路濾波(in-loopfilter)功能,藉此來提供用于運動補償預測操作的參考幀。相似地,于一符合vp8及vp9編碼標準包含軟件驅(qū)動器及硬件驅(qū)動器的混合視頻編碼器的實施例中,軟件驅(qū)動器通過執(zhí)行指令(即編碼代碼)來執(zhí)行幀間預測(interprediction)產(chǎn)生幀間預測子(interpredictor)。幀間預測子(interpredictor)系由具有亮度元素(lumacomponent)例如y的圖像區(qū)塊,以及具有彩度元素(chromacomponent)例如u、v的圖像區(qū)塊所構(gòu)成。幀間預測子(interpredictor)被提供到混合視頻編碼器的硬件驅(qū)動器。硬件驅(qū)動器接收控制信息(controlinformation),用以將源視頻幀數(shù)據(jù)編碼成壓縮的比特流。本實施例的控制信息(controlinformation)包含,圖像區(qū)塊說明例如分割信息、超級區(qū)塊(sb)或宏塊(mb)的區(qū)分結(jié)構(gòu)、超級區(qū)塊(sb)或宏塊(mb)的類型、幀內(nèi)編碼單元的預測模式、幀間編碼單元的運動信息(motioninformation)、量化系數(shù)(quantizedcoefficients)、以及去塊過濾(df)參數(shù)。vp8及vp9編碼標準采用了全算術編碼(fullyarithmeticcoding),為了估算上下文概率表(contextprobabilitytable)以及運用上下文概率表(contextprobabilitytable)來進行重新編碼(re-encode),vp8及vp9編碼需要視頻數(shù)據(jù)編碼統(tǒng)計資料。本實施例的軟件驅(qū)動器根據(jù)硬件驅(qū)動器的統(tǒng)計累計存儲器(statisticalaccumulator)所計算的視頻數(shù)據(jù)編碼統(tǒng)計資料來精確的估算新的上下文概率表(contextprobabilitytable)。該新的上下文概率表(contextprobabilitytable)接著被提供給混合視頻編碼器的硬件驅(qū)動器用來進行重新編碼(re-encode)。另一個符合中國第二代數(shù)字視頻編碼標準(avs2)的混合視頻編碼器的實施例中,軟件驅(qū)動器通過執(zhí)行指令(即編碼代碼)產(chǎn)生幀間預測子(interpredictor)及控制信息(controlinformation),硬件驅(qū)動器根據(jù)所接收的控制信息(controlinformation)來產(chǎn)生壓縮的比特流。實施例的控制信息(controlinformation)包含圖像區(qū)塊說明例如編碼單元(codingunit,cu)區(qū)分結(jié)構(gòu)、預測單元(predictionunit,pu)區(qū)分結(jié)構(gòu)、轉(zhuǎn)換單元(transformunit,tu)區(qū)分結(jié)構(gòu)、編碼單元(cu)類型、幀內(nèi)預測單元(pu)的預測模式、幀間預測單元(pu)的運動信息(motioninformation)、量化信息(quantizationinformation)、去塊過濾器(df)參數(shù)、樣本自適應過濾器(sao)的參數(shù)、以及自適應環(huán)路濾波(adaptiveloopfilter,alf)參數(shù)。圖8是軟件驅(qū)動器與硬件驅(qū)動器執(zhí)行任務并且在幀編碼時間的時間間隔交換信息的舉例說明。軟件驅(qū)動器執(zhí)行運動估計(me)功能以及運動補償(mc)功能,并且將所產(chǎn)生的幀間預測子(interpredictor)及控制信息(controlinformation)儲存于存儲器中。硬件驅(qū)動器則讀取存儲器用以接收該幀間預測子(interpredictor)及控制信息(controlinformation)用以執(zhí)行除了運動估計(me)功能以及運動補償(mc)功能之外的其他任務,例如變換(t)、量化(q)、反變換(it)、反量化(iq)、熵編碼、重建(rec)等等。在圖8的舉例說明中以重建&熵編碼表示。換言之,在軟件驅(qū)動器與硬件驅(qū)動器之間存在數(shù)據(jù)的傳輸/轉(zhuǎn)換,其原因為完整的視頻編碼操作是由軟件驅(qū)動器與硬件驅(qū)動器共同完成的。優(yōu)選地,軟件驅(qū)動器與硬件驅(qū)動器之間的數(shù)據(jù)的傳輸/轉(zhuǎn)換是通過存儲器(例如,高速緩存或芯片外存儲器)來實現(xiàn)的。此處的互動間隔(interactioninterval)指的是軟件驅(qū)動器與硬件驅(qū)動器彼此溝通的時間間隔。舉例來說,上述的溝通方法包含從軟件驅(qū)動器至硬件驅(qū)動器發(fā)送一指示信號ind,及從硬件驅(qū)動器至軟件驅(qū)動器發(fā)送一中斷信號int。如圖8所示,當軟件驅(qū)動器完成幀n-1的運動估計(me)以及運動補償(mc)之時,在時間tn-1’產(chǎn)生一個指示信號ind來通知硬件驅(qū)動器,并且將關于幀n-1的幀間預測子(interpredictor)及控制信息(controlinformation)儲存于存儲器中。當接到軟件驅(qū)動器的通知之后,硬件驅(qū)動器參考軟件驅(qū)動器所提供的信息來開始與幀n-1有關的編碼步驟,從而獲得相對應的重建幀n-1以及幀n-1的壓縮比特流。硬件驅(qū)動器當完成與幀n-1的編碼步驟時在時間tn通過發(fā)送一中斷信號int來通知軟件驅(qū)動器。如圖8所示,軟件驅(qū)動器等待硬件驅(qū)動器完成與前一幀(例如幀n-1)相關的編碼步驟之后才起動下一幀(例如幀n)相關的編碼步驟。圖9是軟件驅(qū)動器與硬件驅(qū)動器執(zhí)行任務并且在較小的時間間隔交換信息的舉例說明。軟件驅(qū)動器執(zhí)行運動估計(me)功能以及運動補償(mc)功能,并且將所產(chǎn)生的幀間預測子(interpredictor)及控制信息(controlinformation)儲存于存儲器中。硬件驅(qū)動器則讀取存儲器用以接收該幀間預測子(interpredictor)及控制信息(controlinformation)用以執(zhí)行除了運動估計(me)功能以及運動補償(mc)功能之外的其他任務,例如變換(t)、量化(q)、反變換(it)、反量化(iq)、熵編碼、重建(rec)等等。在圖9的舉例說明中以重建&熵編碼表示。優(yōu)選地,軟件驅(qū)動器與硬件驅(qū)動器之間的數(shù)據(jù)的傳輸/轉(zhuǎn)換是通過存儲器(例如,高速緩存或芯片外存儲器)來實現(xiàn)的。此處的互動間隔(interactioninterval)指的是軟件驅(qū)動器與硬件驅(qū)動器彼此溝通的時間間隔。相較于圖8的實施例,圖9的實施例具有較短的互動間隔(interactioninterval),每當完成一圖像區(qū)塊(圖像區(qū)塊比幀小,例如一個編碼單元(cu)、一個條帶(slice)、或一個瓦片(tile))的編碼步驟時,就執(zhí)行軟件驅(qū)動器與硬件驅(qū)動器之間的數(shù)據(jù)的傳輸/轉(zhuǎn)換。如圖9所示,當軟件驅(qū)動器完成幀n-1的一圖像區(qū)塊的運動估計(me)以及運動補償(mc)之時,在時間tn-1’產(chǎn)生一個指示ind來通知硬件驅(qū)動器,并且將關于幀n-1的該圖像區(qū)塊的幀間預測子(interpredictor)及控制信息(controlinformation)儲存于存儲器中。當接到軟件驅(qū)動器的通知之后,硬件驅(qū)動器參考軟件驅(qū)動器所提供的信息來開始與幀n-1的該圖像區(qū)塊有關的編碼步驟。如圖9所示,于軟件驅(qū)動器發(fā)送指示信號ind之后,軟件驅(qū)動器持續(xù)地對幀n-1的下一個圖像區(qū)塊(例如,下一個編碼單元(cu)、下一個條帶(slice)、或下一個瓦片(tile))執(zhí)行運動估計(me)功能以及運動補償(mc)功能,并且接續(xù)地發(fā)送指示信號ind來通知硬件驅(qū)動器,每當完成幀n-1的一圖像區(qū)塊的運動估計(me)以及運動補償(mc)之時。藉此,硬件驅(qū)動器參考軟件驅(qū)動器所提供的信息來開始與幀n-1有關的編碼步驟,從而獲得相對應的重建幀n-1以及幀n-1的壓縮比特流。硬件驅(qū)動器當完成與幀n-1的編碼步驟時在時間tn通過發(fā)送一中斷信號int來通知軟件驅(qū)動器。如圖9所示,軟件驅(qū)動器等待硬件驅(qū)動器完成與前一幀(例如幀n-1)相關的編碼步驟之后才起動下一幀(例如幀n)相關的編碼步驟?;旌弦曨l編碼器用可接受的系統(tǒng)帶寬以及軟件驅(qū)動器的計算負載來交換大幅降低硬件成本。與傳統(tǒng)的純硬件視頻編碼器相比混合視頻編碼器的硬件驅(qū)動器藉由移除部分視頻編碼邏輯電路以及靜態(tài)隨機存取存儲器(sram)因而具有比較小的尺寸。例如移除用于實現(xiàn)運動估計(me)功能、亮度圖像區(qū)塊的運動補償(mc)功能、及彩度圖像區(qū)塊的運動補償(mc)功能的邏輯電路,而改用混合視頻編碼器的軟件驅(qū)動器來執(zhí)行實現(xiàn)運動估計(me)功能以及運動補償(mc)功能。同時,原本在硬件視頻編碼器中與運動估計(me)功能搭配所配置做為搜索窗之用的靜態(tài)隨機存取存儲器(sram)以及配置做為亮度圖像區(qū)塊的運動補償(mc)功能、及彩度圖像區(qū)塊的運動補償(mc)功能的靜態(tài)隨機存取存儲器(sram)也可以一并移除。視頻編碼過程中,混合視頻編碼器的軟件驅(qū)動器產(chǎn)生并儲存幀間預測子(interpredictor)以及控制信息(controlinformation)于一存儲器。混合視頻編碼器的硬件驅(qū)動器發(fā)出數(shù)據(jù)存取需求(dataaccessrequest)用來存取儲存于存儲器中的幀間預測子或控制信息。相較于本發(fā)明的混合視頻編碼器,傳統(tǒng)的純硬件視頻編碼器并不會將幀間預測子(interpredictor)以及控制信息(controlinformation)儲存于存儲器。以圖5為例,在傳統(tǒng)的純硬件視頻編碼器中,運動補償預測單元(mcp)512所產(chǎn)生的幀間預測子(interpredictor)將被直接傳送到加法器516以及重建單元(rec)526,控制信息(controlinformation)例如圖像區(qū)塊區(qū)分結(jié)構(gòu)、模式信息(modeinformation)、運動信息(motioninformation)、環(huán)路濾波(in-loopfilter)參數(shù)等信息亦將直接被傳送至熵編碼器534用來產(chǎn)生壓縮的比特流。如圖1、圖4及圖6所示的混合視頻編碼器100、400,完整的視頻編碼操作需藉由軟件驅(qū)動器(例如dsp子系統(tǒng)102、gpu子系統(tǒng)104、cpu子系統(tǒng)106、或視頻編碼決策軟件驅(qū)動器610)及硬件驅(qū)動器(例如venc子系統(tǒng)108、或視頻編碼硬件加速器620)的合作來完成。軟件驅(qū)動器及硬件驅(qū)動器之間系藉由存儲器(例如芯片內(nèi)高速緩存、芯片外存儲器、或兩者的結(jié)合)來進行數(shù)據(jù)傳輸與存取。數(shù)據(jù)傳輸與存取機制的設計需要考慮到許多因素,包含存儲器容量、數(shù)據(jù)量大小、數(shù)據(jù)傳輸互動間隔(interactioninterval)等。于一實施例,若以軟件驅(qū)動器來執(zhí)行實現(xiàn)運動估計(me)功能及以硬件驅(qū)動器來執(zhí)行實現(xiàn)運動補償(mc)功能,于此情況下由于執(zhí)行運動估計(me)功能所產(chǎn)生的運動向量(motionvector)以及控制信息(controlinformation)的數(shù)據(jù)量也許不大,因此運動向量(motionvector)以及控制信息(controlinformation)可以儲存于芯片內(nèi)高速緩存113、115、或117來實現(xiàn)數(shù)據(jù)傳輸與存取機制。憑借此機制硬件驅(qū)動器可以得益于通過總線101快速的存取芯片內(nèi)高速緩存113、115、或117。于另一實施例,若運動估計(me)功能及運動補償(mc)功能都是以軟件驅(qū)動器來執(zhí)行實現(xiàn),相較于前例,因為軟件驅(qū)動器所產(chǎn)生的幀間預測子(interpredictor)具有較大的數(shù)據(jù)量,因此幀間預測子(interpredictor)可以儲存于芯片外存儲器來實現(xiàn)數(shù)據(jù)傳輸與存取機制。相較于芯片內(nèi)高速緩存,芯片外存儲器具有容量大且節(jié)省成本的優(yōu)勢。憑借此機制硬件驅(qū)動器需要通過存儲控制器110來存取儲存于芯片外存儲器的幀間預測子。雖然本實施例中幀間預測子需要被儲存于芯片外存儲器,但軟件驅(qū)動器產(chǎn)生的控制信息(controlinformation)仍然可以被儲存于芯片內(nèi)高速緩存113、115、或117或芯片外存儲器12。于一實施例,若運動估計(me)功能及運動補償(mc)功能都是以軟件驅(qū)動器來執(zhí)行實現(xiàn),且數(shù)據(jù)傳輸互動間隔(interactioninterval)較短的情形下,例如每完成一個編碼單元(cu)或一個宏塊(mb)的運動估計(me)功能及運動補償(mc)功能時即觸發(fā)數(shù)據(jù)傳輸與存取操作,換句話說軟件驅(qū)動器于每次產(chǎn)生并儲存對應于一個編碼單元(cu)或一個宏塊(mb)的幀間預測子時,即通知硬件驅(qū)動器可以開始數(shù)據(jù)傳輸與存取操作。于此情況下由于執(zhí)行運動估計(me)功能所產(chǎn)生的運動向量(motionvector)以及控制信息(controlinformation)的數(shù)據(jù)量也許不大,因此運動向量(motionvector)以及控制信息(controlinformation)可以儲存于芯片內(nèi)高速緩存113、115、或117來實現(xiàn)數(shù)據(jù)傳輸與存取機制。憑借此機制硬件驅(qū)動器可以得益于通過總線101快速的存取芯片內(nèi)高速緩存113、115、或117。于另一實施例,運動估計(me)功能及運動補償(mc)功能都是以軟件驅(qū)動器來執(zhí)行實現(xiàn),且數(shù)據(jù)傳輸互動間隔(interactioninterval)較長的情形下,例如每完成一個條帶(slice)、一個瓦片(tile)或一個幀(frame)的運動估計(me)功能及運動補償(mc)功能時才觸發(fā)數(shù)據(jù)傳輸與存取操作,相較于前例,因為軟件驅(qū)動器所產(chǎn)生的對應于若干個編碼單元(cu)或宏塊(mb)的幀間預測子(interpredictor)具有較大的數(shù)據(jù)量,因此該些幀間預測子(interpredictor)可以儲存于芯片外存儲器12來實現(xiàn)數(shù)據(jù)傳輸與存取機制。相較于芯片內(nèi)高速緩存,芯片外存儲器具有容量大且節(jié)省成本的優(yōu)勢。憑借此機制硬件驅(qū)動器需要通過存儲控制器110來存取儲存于芯片外存儲器的該些幀間預測子。雖然本實施例中這些幀間預測子需要被儲存于芯片外存儲器,但軟件驅(qū)動器產(chǎn)生的控制信息(controlinformation)仍然可以被儲存于芯片內(nèi)高速緩存113、115、或117或芯片外存儲器12。呈現(xiàn)上述描述是為了使所屬
技術領域:
:中普通技術人員可以結(jié)合特定應用以及需求而實現(xiàn)本發(fā)明。所描述實施例的各種變形對于所屬
技術領域:
:中普通技術人員是顯而易見的,而且所定義的一般原則可以用于其他實施例。因此,本發(fā)明不限于上述特定實施例,而是根據(jù)所揭示的原則和新穎性特征符合最寬范圍。在上述詳細描述中,各種特定細節(jié)被描述以提供對于本發(fā)明的透徹理解。雖然如此,實現(xiàn)本發(fā)明可以被所屬
技術領域:
:中普通技術人員所理解。上述本發(fā)明的實施例可以以各種硬件、軟件代碼或者上述兩者的組合而實現(xiàn)。舉例說明,本發(fā)明的一實施例可以為集成到視頻壓縮芯片的電路或者集成到視頻編碼軟件的程序代碼,以實施上述處理。本發(fā)明的另一實施例也可為程序代碼,在dsp上執(zhí)行以實施上述處理。本發(fā)明也可以包含多個功能以被計算機處理器、dsp、微處理器或者現(xiàn)場可編程門陣列(fieldprogrammablegatearray,fpga)所實施。這些處理器可以配置為通過執(zhí)行機器可讀軟件代碼或者固件代碼,根據(jù)本發(fā)明而實施特定任務,其中機器可讀軟件代碼或者固件代碼定義了本發(fā)明所體現(xiàn)的特定方法。軟件代碼或者固件代碼可以以不同程序語言、不同格式或者風格而實現(xiàn)。也可以為不同目標平臺編譯軟件代碼。然而,根據(jù)本發(fā)明執(zhí)行任務的軟件代碼與其他類型配置代碼的不同代碼樣式、類型與語言不脫離本發(fā)明的精神與范圍。本發(fā)明中描述的例子和優(yōu)選實施例,是幫助理解本發(fā)明的而并不局限于這些實施例。相反,它的目的是為了涵蓋各種修改和類似的安排。因此,權(quán)利要求書的范圍應給予最廣泛的解釋,包括所有這些修改和類似的安排。當前第1頁12當前第1頁12