專利名稱:視頻編碼和解碼技術的制作方法
技術領域:
本發明涉及數字視頻處理,具體而言,涉及視頻序列的編碼。
背景數字視頻功能可以與范圍寬廣的各種裝置相結合,這些裝置包括數字電視,數字直接廣播系統,無線通信裝置,個人數字助理(PDA),手提電腦,臺式電腦,數碼相機,數字記錄裝置,蜂窩或和衛星無線電電話等諸如此類。數字視頻裝置在制作、更正、傳送、存儲、記錄以及播放完整的運動視頻序列方面相比傳統的模擬視頻系統作了重要的改進。
目前為了對數字視頻序列編碼已經建立了許多不同的視頻編碼標準。例如,運動圖像專家組(MPEG)研發了許多標準,包括MPEG-1,MPEG-2和MPEG-4。其他的標準包括ITU H.263,加利福尼亞庫珀蒂諾的蘋果計算機公司研發的QuicktimeTM技術,華盛頓雷德蒙的微軟公司研發的WindowsTM視頻,英特爾公司研發的IndeoTM,華盛頓西雅圖的RealNetworks公司的RealvideoTM和SuperMac公司研發的CinepakTM。
許多視頻編碼標準通過以壓縮形式對數據編碼而提高了傳送速率。壓縮能夠減少為了有效傳送視頻幀而需要傳送的數據的總量。例如,MPEG標準使用圖形和視頻壓縮技術,以便在比未經壓縮的更窄的帶寬上進行視頻和圖形傳送。
例如,MPEG標準支持視頻編碼技術,該技術利用連續視頻幀之間的相似性(稱為時間或幀間相關)來完成幀間壓縮。幀間壓縮技術通過將視頻幀基于像素的顯示轉換成運動顯示來利用貫穿多個幀的數據冗余。另外,視頻編碼技術可以采用幀內的相似性(稱為空間或幀內相關)來進一步壓縮視頻幀。幀內壓縮通常基于對靜止圖像進行壓縮的紋理(texture)編碼,比如離散余弦變換(DCT)編碼。
為支持壓縮,數字視頻裝置通常包括一個壓縮數字視頻序列的編碼器和一個解壓縮數字視頻序列的解碼器。在很多情況下,編碼器和解碼器組成一個集成的編解碼器(CODEC),該編解碼器在定義視頻圖像序列的幀內對像素塊進行操作。例如,在MPEG-4標準里,編碼器將要傳送的視頻幀分割成包括16×16像素陣列的宏塊。
對于視頻幀內的每一宏塊,編碼器搜索最接近的前一視頻幀(或后一幀)的宏塊以識別最相似的宏塊,對這些宏塊之間的差值進行編碼并加以傳送,同時傳送運動矢量,該運動矢量指示前一幀中的哪個宏塊被用于編碼。解碼器接收運動矢量和經編碼的差值,并執行運動補償以創建視頻序列。
視頻編碼過程有相當的計算強度,特別是使用運動估計技術時。例如,將一個待編碼的視頻塊和先前被傳送幀的視頻塊進行比較的過程需要大量的計算。迫切需要一種改良的編碼技術,尤其是用于無線裝置或計算資源更受限制、功耗成問題的其它便攜式視頻裝置。同時,需要改良的壓縮,用于減少要求有效傳送視頻序列所需的帶寬。改進這些因素中的一個或多個可以促進或改良視頻序列的實時編碼,尤其在無線和其他有限帶寬的設置中。
發明內容
本申請描述了能夠減少對視頻序列編碼所必須的處理周期和存儲傳遞數目的視頻編碼技術。如此,所揭示的視頻編碼技術可以加快視頻編碼速度和減少功耗。另外,這項技術可使用相同的計算組來定義與待編碼的宏塊相關的差值,以及定義與形成待編碼的宏塊中的各種宏塊相關的差值。
這里描述的視頻編碼技術可以使用候選存儲器,該候選存儲器以列狀形式儲存運動估計程序的搜索空間。存儲器控制單元能對候選存儲器進行尋址以并行檢索多個像素,用于同時和待編碼的視頻塊的像素作比較,例如,采用絕對差總和(SAD)或平方差總和(SSD)技術。一個差值處理器可以執行并行計算。每組并行計算可以和形成一個宏塊的微塊中的一行相對應。另外,對于待編碼的后續視頻塊,候選存儲器能通過載入一列新的視頻塊而被逐漸更新,而不是重新載入整個搜索空間。
這里描述的這些或其他技術可以在硬件、軟件、固件或其任何組合的數字視頻裝置中實施。如在軟件中實施,則這項技術可被引用在包括程序碼的計算機可讀媒介上,在執行時,執行在此描述的一個或多個編碼技術。各種實施例的其他細節在附圖和以下描述中給出。其他特征、目的和優點將從描述,附圖和權利要求書中顯示出來。
圖1是說明示例系統的框圖,該系統中,源數字視頻裝置傳送一個被編碼的視頻數據序列到一個接收數字視頻裝置。
圖2是說明視頻編碼器的框圖,該視頻編碼器對數字視頻序列編碼。
圖3是對示例的視頻數據宏塊的概念說明。
圖4是對示例的搜索空間的概念說明。
圖5是對待編碼宏塊的概念說明,該宏塊概念上置于一個被排列成一宏塊陣列的搜索空間上。
圖6A是說明宏塊像素索引的圖。
圖6B是說明在視頻存儲器中的視頻數據排列的圖。
圖6C是說明在編碼存儲器中的視頻數據排列的圖。
圖7A是說明搜索空間像素索引的圖。
圖7B是說明在視頻存儲器中的搜索空間排列的圖。
圖7C是說明在候選存儲器中的搜索空間排列的圖。
圖8A是說明宏塊列像素索引的圖。
圖8B是說明在視頻存儲器中的宏塊列排列的圖。
圖9是說明為候選存儲器中存儲堆將像素索引轉換為基本地址轉換的框圖。
圖10是說明塊計數器的框圖,該塊計數器跟蹤通過一系列塊組成一個宏塊的搜索過程。
圖11是說明候選存儲器中的存儲堆的物理地址映射的框圖。
圖12是說明候選存儲器中的宏塊列更新的物理地址映射的框圖。
圖13是說明差值處理器的框圖。
圖14是說明視頻編碼技術的流程圖。
圖15是說明用列更新逐步載入搜索空間的視頻編碼技術的流程圖。
圖16是說明候選存儲器中的存儲堆的基本地址映射的流程圖。
圖17是說明候選存儲器中的存儲堆的物理地址映射的流程圖。
圖18是說明候選存儲器中的宏塊列更新的物理地址映射的流程圖。
圖19是說明用相同的計算為一宏塊和組成該宏塊的許多微塊產生差值的流程圖。
詳細描述通常,本發明針對可用于改進數字視頻數據的編碼的視頻編碼技術。視頻編碼技術可減少對視頻序列編碼所必需的處理周期和存儲傳遞數目,從而提高視頻編碼速度并減小功耗。例如,視頻編碼技術可以提高計算效率,尤其對于視頻編碼過程中計算強度最大的運動估計過程。另外,視頻編碼技術可以與解碼標準(如MPEG-4解碼標準)兼容。
視頻編碼技術可以在各種數字視頻裝置中實現,如數字廣播系統,個人數字助理(PDA),手提電腦,臺式電腦,數碼相機,數字記錄裝置,移動電話等。根據諸如MPEG-4之類的標準,視頻編碼技術可以提高視頻編碼的效率,并更好地促進視頻編碼在如移動電話之類的無線通信裝置中的實施,這類無線通信裝置中計算資源更為有限且功耗成問題。
視頻編碼技術可以采用候選存儲器,該候選存儲器以列狀形式在搜索空間中存儲視頻塊。存儲器控制單元對候選存儲器進行尋址以并行檢索多個像素,用于同時和待編碼的視頻塊中的像素作比較,例如,采用絕對差總和(SAD)或平方差總和(SSD)技術。一個差值處理器可以執行并行計算。在多個并行比較周期之后,差值處理器可產生差值形式(有時稱為差值度量)的搜索結果,該搜索結果與和待編碼的視頻塊比較的搜索空間的候選視頻塊相關。另外,對于待編碼的后續視頻塊,候選存儲器能通過載入一列新的視頻塊而被逐漸更新,而不是重新載入整個搜索空間。這種列更新可以減少功耗和系統總線的使用,并可以減少載入新搜索空間的時間。
圖1是說明示例系統10的框圖,其中源裝置12通過通信鏈路15將經編碼的視頻數據序列發送到接收裝置14。源裝置12和接收裝置14都是數字視頻裝置。特別的是,源裝置12使用各種視頻壓縮標準中的任何一種,如運動圖像專家組研發的MPEG-4,編碼并發送視頻數據。其他標準可以包括MPEG-1、MPEG-2或運動圖像專家組研發的其他MPEG標準,ITU H.263和類似的標準,運動JPEG 2000,加利福尼亞庫珀蒂諾的蘋果計算機公司研發的QuicktimeTM技術,華盛頓雷德蒙的微軟公司研發的WindowsTM視頻,英特爾公司研發的IndeoTM和SuperMac公司研發的CinepakTM。
通信鏈路15可以包括無線鏈路,物理傳輸,基于分組的網絡,如局域網、廣域網或全球網,如因特網、公共交換電話網(PSTN)等。因此,通信鏈路15表示任何合適的通信媒介或可能的不同網絡和鏈路的集合,用于將視頻數據從源裝置12發送到接收裝置14。
源裝置12可以是能夠編碼并發送視頻數據的任何數字視頻裝置。例如,源裝置12可以包括用于存儲數字視頻序列的視頻存儲器16、用于對序列編碼的視頻編碼器18和用于將經編碼的序列經通信鏈路15發送到接收裝置14的發射機20。例如,視頻編碼器18可以包括數字信號處理器(DSP),它執行一個或多個可編程軟件模塊以控制視頻編碼技術。提供相關的存儲器和邏輯電路用于在控制視頻編碼技術中支持DSP。如下所述,可以配置視頻編碼器18以減少處理周期、存儲傳遞和功耗。另外,可以配置視頻編碼器18以執行一組計算,以產生宏塊的差值以及構成宏塊的微塊的各種差值。
另外,源裝置12可以包括視頻捕獲裝置23(如攝像機),用于捕獲視頻序列并將捕獲的序列存儲在存儲器16中。特別的是,視頻捕獲裝置23可以包括電荷耦合裝置(CCD)、電荷注入裝置、光電二極管陣列、互補金屬氧化物半導體(CMOS)裝置或能夠捕獲視頻圖像或數字視頻序列的其他光敏裝置。
在其他實例中,視頻捕獲裝置23可以是用于將來自諸如電視、錄像機、攝像機等的模擬視頻數據轉換成數字視頻數據的視頻轉換器。在一些實施例中,可以構造源裝置12以在通信鏈路15上發送實時視頻序列。在這種情況下,接收裝置14可以接收實時視頻序列并為用戶顯示該視頻序列。或者,源裝置12可以捕獲并編碼發送到接收裝置14的視頻序列,作為視頻數據文件,即非實時地。因此,源裝置12和接收裝置可以支持例如移動無線網絡中的各種應用,如視頻片斷回放(video clip playback),視頻郵件,或視頻會議。
接收裝置14可以采用能夠接收并解碼視頻數據的任何數字視頻裝置。例如,接收裝置14可以包括接收機22,用于通過例如中間鏈路、路由器、其他網絡設備等從發射機20接收經編碼的數字視頻序列。接收裝置14還可以包括對序列解碼的視頻解碼器24和向用戶顯示序列的顯示裝置26。在一些實施例中,接收裝置14可以不包括集成的顯示裝置14。而是,接收裝置14可以用作接收機,用于對接收到的視頻數據解碼以驅動分離的顯示裝置,如電視機或監視器。
源裝置12和接收裝置14的示例裝置包括設在計算機網絡上的服務器、工作站或其他臺式計算裝置、和諸如手提電腦或個人數字助理(PDA)等的移動計算裝置。其他實例包括諸如數字電視的數字電視廣播衛星和接收裝置、數碼相機、數碼攝像機或其他數字記錄裝置、諸如帶有視頻功能的移動電話之類的數字視頻電話,或其他無線視頻裝置等。
在某些情況下,源裝置12和接收裝置14各自包括編解碼器(CODEC)(未圖示),用于編碼并解碼數字視頻數據。在這種情況下,源裝置12和接收裝置14可以包括發射機和接收機以及存儲器和顯示器。在包括編碼器的數字視頻裝置的上下文中描述以下概述的多種編碼技術。然而,可以理解編碼器能夠組成CODEC的一部分。如此,CODEC可以用DSP,微處理器,專用集成電路(ASIC),分離的硬件部件,或它們的各種組合加以實施。
源裝置12內的視頻編碼器18對一個視頻幀序列內的像素塊進行操作以便對視頻數據編碼。例如,視頻解碼器18可執行運動估計編碼技術,該技術將一個待發送的視頻幀分成像素塊(稱為視頻塊)。為了說明的目的,視頻塊可以包括微塊和宏塊。舉例講,一個微塊可以是8×8的像素陣列。一個宏塊可以是16×16的像素陣列。因此,一個宏塊可以包含四個微塊。這種格式通常用于適應MPEG-4的編碼技術。然而,還能使用其它大小的微塊和宏塊。通常,在本申請里,術語微塊和宏塊是指包括多個像素的視頻塊。一個宏塊進一步定義為多個微塊。定義宏塊的微塊數目,定義微塊的像素數目,和定義宏塊的像素數目由廣泛的各種特殊實施格式而定。
有時,計算微塊而不是宏塊的運動估計能夠獲得改進的分辨率。而且,如以下將更詳細描述的,宏塊的像素可以被存儲或尋址,以一種允許對并行的較小微塊進行差值計算(也稱差值度量)以及對宏塊進行差值計算的方法。換句話說,宏塊的差值度量計算可以被看作是組成宏塊的四個微塊的差值度量的一系列四項計算。相應地,宏塊以及形成宏塊的微塊的差值度量可從相同的計算中產生。特殊的是,可以簡化這種技術,即通過不增加SAD或SSD計算。而是,可以對尋址和計算方案進行設計,從而編碼器可以將相同的計算譯成解釋成微塊差值計算和宏塊差值計算。
微塊或宏塊中的每個像素可以由n位值表示,如8位,它定義像素的視覺特征,如顏色和強度,例如色度和亮度。然而,通常只根據亮度分量執行運動估計,因為人類視覺對亮度的變化比對顏色的變化更敏感。因此,為了進行運動估計,全部n位值可以是一個給定像素的量化亮度。然而,本發明的原理不限于像素的格式,而是可以延伸到使用更簡單的較少位的像素格式或更復雜的較多位的像素格式。
對于視頻幀中的每個視頻塊,源裝置12的視頻編碼器18搜索存儲在存儲器16中的已發送的先前視頻幀(或后續視頻幀)的視頻塊以識別類似的視頻塊,并編碼視頻塊之間的差值,以及識別來自先前幀(或后續幀)的視頻塊被用于編碼的運動矢量。如此,取代將每個幀作為獨立的圖像編碼,視頻編碼器18對相鄰幀之間的差值編碼。運動估計包括識別先前或后續幀中的微塊或宏塊,它最好與待編碼的當前幀中的微塊或宏塊匹配。
運動矢量可以定義與視頻塊的左上角相關的像素位置,雖然也可以使用其它格式的運動矢量。在任何情況下,通過對使用運動矢量的視頻塊編碼,傳輸視頻數據流所需的帶寬能被顯著地減小。在某些情況下,源裝置12可以支持可編程閾值,該可編程閾值能夠導致編碼過程期間各種比較或計算的終止,以減少計算次數并保存功率。
接收裝置14的接收機22可以以運動矢量和經編碼的差值形式接收經編碼的視頻數據。解碼器24執行運動補償技術以產生用于通過顯示裝置26為用戶顯示的視頻序列。接收裝置24的解碼器24也可以用編解碼器(CODEC)實現。在這種情況下,源裝置12和接收裝置14都可以進行編碼、發送、接收和解碼數字視頻序列。
圖2是說明根據這里描述的技術對數字視頻序列進行編碼的視頻編碼器18的框圖。圖2表示一種示例性實施,而不應該被視為對本發明的限制。如圖2所示,視頻編碼器18可以包括數字信號處理器(DSP)28和運動估計器29。DSP 28控制運動估計器29的操作,并用作視頻編碼控制器。或者,視頻編碼控制器能用處理器、硬件部件、固件、專用集成電路(ASIC)、現場可編程門陣列(FPGA)等實現。
在圖2的實例中,DSP 28執行一個或多個可編程軟件模塊以控制視頻編碼技術。運動估計器29可以包括一個DSP接口30。DSP 28、DSP接口30和視頻存儲器32通過總線33通信。視頻存儲器32可以看成是視頻編碼器18的外部組件或作為視頻編碼器18的一部分加以集成。DSP接口30和差值處理器34交互作用,該差值處理器執行和運動估計程序相關的計算。差值處理器34可執行SAD或SSD計算,例如,用于計算給定視頻幀的待編碼的塊或宏塊的運動矢量。通過將編碼算法的控制告知DSP28,并分離運動估計器29的硬件內的計算強度大的運動估計,以增強支持實時編碼的能力。
圖2中進一步顯示差值處理器存儲器35,它包括一個編碼存儲器36和一個候選存儲器38。編碼存儲器36用運動估計程序存儲待編碼的當前宏塊。當前宏塊與待編碼的視頻幀內的宏塊陣列中的一個相對應。候選存儲器38存儲來自組成搜索空間的不同幀的宏塊陣列。差值處理器34將候選存儲器38中的宏塊和編碼存儲器36中的當前宏塊進行比較以識別最佳匹配用作運動矢量。比方說,可以使用一個48×48像素的搜索空間。在此情況下,搜索空間將包含九個宏塊,即三列三個宏塊,每個宏塊包含16×16的像素陣列。在48×48像素的搜索空間中也可以定義其它宏塊,以包括來自定義搜索空間的九個宏塊中的兩個或更多個的像素。
存儲器控制單元39控制候選存儲器38和編碼存儲器36的尋址以驅動對運動估計程序的搜索過程。特別的是,存儲器控制單元39控制像素數據從視頻存儲器32通過總線33載入到候選存儲器38以形成搜索空間。為了該目的,存儲器控制單元39可被配置成提供存儲器地址轉換。直接將整個48×48像素搜索空間載入候選存儲器38,而不受DSP 28的干涉可減少DSP 28和DSP接口單元30之間的總線動作,并減少了DSP 28中用于移動視頻數據所需的指令數目。差值處理器34確定每個宏塊的SAD或SSD結果并將最佳匹配的結果返回到DSP接口30。DSP接口30反過來向DSP 28提供經編碼的宏塊和運動矢量,用于通過總線33存儲在視頻存儲器32中。
在操作中,DSP 28可以控制DSP接口單元30,以通過控制信道40驅動搜索過程。一般,控制信道40用于存儲器載入命令,它可以包括將被載入候選存儲器38的搜索空間的像素索引。每個像素索引可以指示左上角的地址或候選宏塊,雖然也可以使用其它格式。另外,DSP 28可以通過數據信道41接收差值處理器34產生的搜索結果。數據信道41還用于硬件構造和模式切換。DSP 28和視頻存儲器32之間的存儲傳遞可以通過DPS上的直接存儲交換(DME)端口和總線33實現。在這種情況下,DSP接口單元30、差值處理器34、編碼存儲器36、候選存儲器38和存儲器控制單元39可以駐留在DSP 28控制的整個運動估計器(ME)中。一般,DME用于從視頻存儲器32存取數據,以載入編碼存儲器36和候選存儲器38。
在圖2的實例中,視頻編碼器18為主機源裝置12提供壓縮的數字視頻序列,用于傳輸到接收裝置14。視頻編碼器18對視頻序列編碼并在傳輸前緩沖視頻存儲器32中的經編碼的數字視頻序列。視頻存儲器32以及差值處理器存儲器35可以采用同步動態隨機存取存儲器(SDRAM)、閃存、電可擦除可編程只讀存儲器(EEPROM)等形式。編碼存儲器36和候選存儲器通常是視頻編碼器18的本地存儲器,并可包括被分區成幾個虛擬存儲器的公共存儲器裝置。
除了圖2所示的部件,在一些實施例中,視頻編碼器18可以包括其它部件,如紋理(texture)編碼器,用于執行通常用于壓縮靜態圖像的幀內或幀間壓縮,如離散余弦變換(DCT)編碼。例如,紋理編碼可以在運動估計之外另外執行,或者在處理能力看上去對于有效的運動估計非常有限的情況下可以代替運動估計執行。DSP 28可以根據任何給定時刻的處理能力選擇性地調用運動估計器(29)和紋理編碼器(未圖示)來引導編碼程序。
圖3示出一個具有宏塊42形式的示例視頻塊,它可以用視頻幀存儲在視頻存儲器32中。MPEG標準和其它視頻編碼方案在運動估計視頻編碼期間使用具有宏塊形式的視頻塊。如上所述,在適用MPEG-4的系統中,術語“宏塊”是指形成視頻幀子集的16×16像素值的集合。每個像素值可以表示為一個字節的數據,雖然還可以采用更多或更少的位數來定義每個像素,以獲得所需的圖像質量。宏塊可以包括多個更小的8×8像素的微塊44A-44D。然而,一般如果需要,這里描述的編碼技術可以使用任何大小的塊進行操作,如16字節×16字節的宏塊,8字節×8字節的微塊,或不同大小的視頻塊。
圖4示出示例的部分搜索空間46,它可以存儲在候選存儲器38中。搜索空間46是對應于先前發送的視頻幀(或幀序列中的后續視頻幀)的像素的集合。如果需要,則搜索空間可以包括整個先前或后續的視頻幀,或視頻幀的子集,如果需要。如圖所示,搜索空間可以是矩形的,或者可以假設任何各種形狀和大小。
在視頻編碼期間,待編碼的當前宏塊與搜索空間46中的視頻塊比較,以識別適當的匹配,從而可以發送當前宏塊和搜索空間中類似宏塊之間的差值,以及識別類似視頻塊的運動矢量。如上所述,搜索空間46中定義的宏塊48可以存儲在候選存儲器38中,而待編碼的當前宏塊可以存儲在編碼存儲器36中。
在運動估計視頻編碼期間,差值處理器34可以利用比較技術,如SAD和SSD技術,將待編碼的當前宏塊與先前或后續幀的宏塊比較。如圖4中所示,搜索空間46中的宏塊48可用各個宏塊的左上角像素地址48識別。也可以使用其它比較技術。特別的是,根據本發明的原理,SAD和SSD計算可對于多個像素并行進行。另外,像素狀比較的尋址和計算次序可以采用一種方式完成,該方式導致產生每個待編碼的宏塊的差值,以及形成該宏塊的微塊的差值。
在本發明中,術語“任務(task)”是指一組通用的計算,用于將當前視頻塊與搜索空間中的不同視頻塊比較。換句話說,任務是指當前視頻塊和搜索空間中的不同視頻塊之間的單個比較。例如,任務可以涉及執行多個計算,以比較當前視頻塊多個像素和搜索空間中候選視頻塊的多個像素。如這里所述,這些任務計算的各種子集可以并行執行,以加快編碼過程。64個計算可被看作是一個微塊任務(假設微塊為8×8像素陣列),而256個計算可被看作是一個宏塊任務(假設宏塊為16×16像素陣列)。在每個任務期間,累加這些計算以定義該任務正在進行的(ongoing)差值(有時稱為差值度量)。
在本發明中,術語“迭代(iteration)”是指在視頻編碼期間執行的一組通用的任務。與一個待編碼的當前視頻塊關聯的完整的一系列任務為一個迭代。換句話說,一個迭代是一組比較,其中當前視頻塊與搜索空間中的一組先前視頻塊(或后續視頻塊)比較。每個單獨的比較是一個包含多個計算的任務。因此,搜索空間定義一組視頻塊,它們在一個迭代期間與當前視頻塊比較。一個迭代的每個比較稱為一個任務,而每個任務,即每次比較,可以包含多個計算。
在一些情況下,迭代可以包括定義對搜索空間的第一搜索,識別搜索空間中的第一匹配,根據第一匹配定義對搜索空間的子集的第二搜索,并識別子集中的第二匹配。例如,迭代中較后的搜索可以包含搜索空間中的細微移動,以更精確地對最佳匹配定點。也可以使用其它搜索技術,如菱形(diamond)搜索技術,其中不斷進行搜索,直到識別產生最小差值的宏塊的像素位置位于菱形搜索參數的中心。另外,可以使用其它技術,如圓形搜索技術,其中識別產生最小差值的宏塊的像素位置位于半徑(R)定義的搜索參數的中心。與菱形搜索參數相比,半徑(R)的圓可以定義一個更大的、范圍更廣的搜索參數。
如果在迭代期間使用菱形搜索技術或圓形搜索技術,還可以使用初始化技術以加快識別位于菱形搜索參數或圓形搜索參數的中心的產生最小差值的宏塊的過程。例如,可以使用利用空間冗余現象的初始化技術。空間冗余一般預示給定視頻塊的視頻運動可能與與之在空間上相近的另一視頻塊的視頻運動類似。初始化技術可以更容易地采用該現象來初始化搜索空間中一位置的運動估計,搜索空間很可能包含可用于有效視頻編碼的視頻塊。
具體而言,初始化技術可以使用為與待編碼視頻塊在空間上相近的視頻塊計算的運動矢量,以識別搜索空間中運動估計程序可被初始化的位置,即搜索空間中運動估計程序開始的像素位置。例如,可以根據先前為與待編碼視頻塊在空間上相近的視頻塊確定的運動矢量計算平均像素位置、中間像素位置或使用加權函數計算的像素位置。也可以使用其它線性或非線性函數。在任何情況下,通過用這種方式對運動估計程序進行初始化,在菱形搜索或圓形搜索情況中可以加快視頻編碼,這是因為減少了迭代中對搜索空間中的視頻塊定位所需的任務數目,該視頻塊是待編碼視頻塊的可接受匹配。
如果需要,用于產生差值的計算可以包括SAD技術、SSD技術或其它比較技術。SAD技術包括執行待編碼的當前宏塊的像素值與和當前宏塊比較的先前宏塊的像素值之間的絕對差計算的任務。對這些絕對差計算的結果求和,即累加,以定義表示當前宏塊與和當前宏塊比較的先前宏塊之間差別的差值。對于8×8像素圖像塊,計算64個差值并求和,對于16×16像素宏塊,計算256個差值并求和。通過對當前視頻塊尋址并按特定次序執行計算,可以計算256個差值,并按四個獨立的組求和,從而可以為每個微塊產生差值。然后,所有四組計算的總和可以定義宏塊的差值。
較小的差值通常表示與當前宏塊比較的宏塊是較佳的匹配,因此與產生較大差值(即提高了失真)的候選宏塊相比,它是用于運動估計編碼的較佳候選。在一些情況下,在累加的差值超過一個預定閾值時可以結束計算。在這種情況下,附加的計算是不必要的,因為與當前宏塊比較的宏塊對于有效地進行運動估計編碼是不可接受的。
SSD技術也可以包括執行待編碼的當前宏塊的像素值與和當前宏塊比較的先前宏塊的像素值之間的差值計算的任務。然而,在SSD技術中,絕對差計算的結果被平方,然后這些平方值被求和,即累加,以定義表示當前宏塊與和當前宏塊比較的先前宏塊之間差別的差值。或者,可以執行其它比較技術,如均方誤差(MSE),歸一化交叉相關函數(NCCF)或其它合適的比較算法。
在一些情況下,例如,一旦確定了給定的任務不會產生比之前任務更佳的匹配,或識別到給定的任務產生可接受的匹配,則提早終止各種任務或迭代。例如,可用各種技術來識別何時給定任務的額外計算是不必要的。具體而言,當第二任務計算的一個子集共同產生的差值大于與之前計算的第一任務相關的差值時,眾所周知第二任務的額外計算是不必要的,因為完成第二任務不會產生比第一任務更小的差值。在這種情況下,可以終止第二任務,而不會犧牲編碼性能,并且可以更快地開始執行第三任務。
終止技術也可以在迭代級別執行,或在任務級別和迭代級別同時執行。在一個實例中,迭代閾值定義一個可接受的值,即適于有效視頻編碼。在這種情況下,如果執行識別搜索空間中的候選視頻塊的任務,該候選視頻塊以被認為可被迭代閾值接受方式與待編碼的當前視頻塊匹配,則可以終止該迭代,并將待編碼的下一視頻塊與搜索空間比較。在這種情況下,可以避免執行多個不必要的任務。
在比較待編碼的視頻塊與先前視頻幀中的先前視頻塊的上下文中描述這里的多種技術。然而,可以理解在比較待編碼的視頻塊與后續視頻幀中的候選視頻塊時可使用同樣的技術。在一些情況下,使用雙向運動估計,其中待編碼的視頻塊與一個或多個先前視頻幀的各種視頻塊以及后續視頻幀的各種視頻塊比較。總而言之,這里描述的多種技術可以在進行待編碼的視頻塊與不同視頻塊比較的任何時候使用,不同的視頻塊如先前視頻幀的候選視頻塊或后續視頻幀的候選視頻塊。換句話說,搜索空間可以載入各種不同實施中的各種不同候選。
圖5是對待編碼的當前宏塊50的概念說明,該宏塊位于被排列成一候選宏塊陣列的示例搜索空間52中。具體而言,如圖5所示,搜索空間包括三行54A-54C和三列56A-56C候選宏塊,用于與待編碼的宏塊50比較。因此,在圖5的實例中,搜索空間52包括九個16×16像素的宏塊的陣列,以形成一個48×48像素區域。使用差值處理器34將待編碼的當前宏塊50與搜索空間52中的宏塊比較。
為了減少視頻存儲器32和候選存儲器38之間的存儲傳遞和相關的處理開銷,一旦搜索空間52被最初載入,根據需要對搜索空間的后續更新可以在一個列一個列的基礎上進行。例如,為了對給定幀的后續宏塊編碼,存儲器控制單元39可以僅替換搜索空間52的左列56A中的候選宏塊,而不是重新載入整個搜索空間52。
為了實現列狀更新并允許對多個像素同時執行并行的運動估計計算,存儲器控制單元39被構造成執行地址映射方案,用于在保存在視頻存儲器32、編碼存儲器36和候選存儲器38中的存儲器地址之間進行轉換。編碼存儲器36和候選存儲器38的數據更新通過直接訪問視頻存儲器的總線33發生在它們與視頻存儲器32之間。為了初始化并控制該經總線33的傳遞,DSP 28用作經DME端口的總線控制器。
圖6A是說明一個宏塊像素索引的圖。如圖6A所示,宏塊像素索引可以被分成四個微塊(A、B、C、D)。宏塊像素索引為16×16,其中每個微塊A、B、C、D為8×8。整個宏塊像素索引從左上角像素Y0延伸到右下角像素Y255(未圖示)。DSP 28保存像素索引以跟蹤搜索空間中的宏塊。根據應用,存儲器控制單元39用于將DSP 28提供的像素索引轉換為視頻存儲器32、編碼存儲器36或候選存儲器38中的物理存儲器地址。例如,存儲器控制單元39將經轉換的地址提供給候選存儲器38,用于搜索空間更新,或提供給編碼存儲器36用于由SAD引擎34進行SAD計算。
圖6B是說明在視頻存儲器32中的視頻數據排列的圖。具體而言,圖6B示出DSP 28保存的宏塊像素索引與宏塊像素數據在視頻存儲器32中的物理排列之間的差別。如圖6B所示,視頻存儲器32在被排列成四個像素的行的64個地址處存儲宏塊像素數據,為每個宏塊產生64行。每個像素為8位,每行包含32位數據。因此,為了訪問視頻存儲器以響應來自DSP 28的像素索引,存儲器控制單元39需要將像素索引轉換成視頻存儲器中的物理地址。
圖6C是說明在編碼存儲器34中的視頻數據排列的圖。如圖6C所示,存儲在編碼存儲器36中的宏塊像素數據被排列成32行,每行8個像素,即每行64位。根據本發明,編碼存儲器36中的存儲排列有利于差值處理器34為多個像素同時執行的并行絕對差(AD)計算。具體而言,圖6的實例是編碼存儲器36的物理排列,它允許對8個像素同時進行并行AD計算。另外,當微塊被定義為具有8像素寬度時,圖6C的物理排列可以允許對微塊以及宏塊進行差值計算,因為微塊通常具有8像素寬度。編碼存儲器36的寬度可以是64位。圖6A-6C共同示出宏塊像素索引如何被映射到視頻存儲器32,以及然后視頻存儲器如何被映射到差值處理器存儲器35中的物理編碼存儲器36。
圖7A是說明DSP 28保存的搜索空間像素索引的圖。DSP 28用搜索空間中的像素索引來指定搜索任務,如由差值處理器34產生結果(差值)的一組計算。圖7A的搜索空間像素索引對應于一個3宏塊×3宏塊搜索空間,因此包含2304個像素(3×3×16×16)。如圖7A所示,搜索空間像素索引包含48行,每行包含48個像素。
圖7B是說明在視頻存儲器32中的搜索空間排列的圖。如圖7B所示,搜索空間像素的物理排列包括每行4個像素,如圖6B的宏塊存儲器排列。另外,像素被排列成576行。每個像素為8位,每行4個像素包含32位。
圖7C是說明在候選存儲器38中的搜索空間排列的圖。特別的是,與編碼存儲器36類似,候選存儲器38被排列成每行8個像素。為了存儲整個搜索空間,候選存儲器38包括288行。換句話說,候選存儲器38被排列成8堆288×8位的存儲器。每行寬64位。雖然編碼存儲器36只存儲宏塊,而候選存儲器38存儲三個宏塊寬并總共含九個微塊的搜索空間,但每個存儲器36、38都具有8像素寬的輸出。這樣,安排編碼存儲器36和候選存儲器,以便于每個待編碼的宏塊的比較,即便于同時并行計算8個像素的絕對差值。另外,安排編碼存儲器36和候選存儲器38,以在計算宏塊差值期間計算微塊差值。
除了允許對多個像素進行并行AD計算,候選存儲器38被安排成允許對在搜索空間中的任何像素處開始的宏塊進行尋址。另外,如下所述,候選存儲器38的結構可允許逐步列更新,即一次載入一列宏塊,而非為每個待編碼的新宏塊重新載入整個搜索空間。這種載入技術可通過避免多余的存儲器載入和減少總線33的使用來減小功率。存儲器控制單元39再次被配置成將搜索空間像素索引轉換成視頻存儲器32中的物理存儲器地址,然后將來自視頻存儲器的存儲器地址轉換成候選存儲器38中對應的物理存儲器地址。
圖8A是說明宏塊列像素索引的圖。對于待編碼的兩個相鄰宏塊,可適用的搜索空間之間的差別只是一個宏塊列。結果,只有一個宏塊列需要被更新。候選存儲器被安排成采用該特征,從而減小視頻存儲器32和候選存儲器之間的傳遞所需的數據帶寬。如圖8A所示,DSP 28保存的宏塊列像素索引可以被排列成16個像素的行,并在搜索空間中單個列的長度上延伸48行。因此,圖8A所示的宏塊像素索引對應于一列三個宏塊,即圖7A的搜索空間像素索引的三分之一。
宏塊列像素索引在視頻存儲器32中的物理存儲器排列也不同于整個搜索空間像素索引的存儲器排列。圖8B是說明在視頻存儲器中的宏塊列排列的圖。對于一個宏塊列,視頻存儲器32提供192行,每行4個像素。因此視頻存儲器32排列的宏塊列為32位寬。一旦為最初宏塊將搜索空間載入候選存儲器38,對待編碼的后續、相鄰宏塊的搜索可以通過只載入一個新列來實現。
在列更新期間,存儲器控制單元39用新的宏塊列替換先前的左側宏塊列。然后,將新載入的宏塊列指定為當前右側宏塊列。另外,將先前的中間宏塊指定為新的左側宏塊列,并將先前的右側宏塊列指定為新的中間宏塊列。
因此,搜索空間可以被視為在一個較大的幀中被向右移,以消除先前的左側宏塊列,從而為新的右側宏塊列騰出空間。在該列更新操作之后,候選存儲器38中的搜索空間適用于編碼存儲器36中的下一宏塊。
通過將DSP 28提供的像素索引轉換為存儲器控制單元39中的視頻存儲器32和候選存儲器38的物理地址,從而不需要DSP跟蹤列移動操作。結果,DSP 28只需要提供新的右側宏塊列的像素索引。
圖9是說明構成部分存儲器控制單元39的示例電路的框圖,該電路用于為候選存儲器38中的存儲堆將像素索引轉換為基本地址轉換。如圖9所示,存儲器控制單元39包括合適的邏輯電路,用于實現該存儲器地址轉換。存儲器控制單元39跟蹤當前迭代,如編碼存儲器36的更新,候選存儲器38的更新或全部載入,或差值處理器34為編碼存儲器和候選存儲器的內容執行并行AD計算的搜索任務。如下所述,存儲器控制單元39還可以在搜索期間跟蹤塊邊界,管理候選存儲器28中的宏塊列移動,并執行像素到地址的轉換。
一般,對于一個搜索,存儲器控制單元39根據以下公式確定候選存儲器38中對應的開始像素堆,即含8個像素的行中的位置開始像素的堆=mod 8(像素索引)(1)另外,存儲器控制單元39根據以下公式確定開始像素的行開始像素的行=int(像素索引/8)(2)因此,根據mod函數(1),開始堆是像素索引除以8的余數。根據整數除法函數(2),開始行是用像素索引可除的最大整數。
根據以上公式(1)和(2),各個堆x的開始或“基本”地址可表示為堆x基本地址=開始像素的行,如果x>=開始像素的堆=開始像素的行+1,如果x<開始像素的堆 (3)如圖9所示,存儲器控制單元39中的比較器58將像素索引所指示的行(像素索引mod 8)與堆索引比較,并且如果像素索引小于堆索引就產生輸出1,如果像素索引大于或等于堆索引就產生輸出0。然后存儲器控制單元39中的加法器60將比較器58的輸出1或0加到像素索引所指示的堆〔int(像素索引/8)〕,以產生堆x的基本地址。
圖10是說明一個視頻塊計數器電路62的框圖,該塊計數器電路跟蹤對圖3所示的一系列微塊(A、B、C、D)組成一個宏塊的搜索過程。一旦確定了各個堆的基本地址,存儲器控制單元39根據塊邊界跟蹤地址產生計數器的逐步更新和重新載入。在圖10的實例中,塊計數器電路62可以包括5位的計數器64,它最初被載入一個值31,以提供32個計數。在初始化之后(task_start),計數器64在每個時鐘周期執行一次正計數。然而,也可以適于減法計數的計數器。當計數達到0b11000時,判斷邏輯66指示差值處理器34控制的搜索已完成了對微塊A的AD計算。類似的,計數0b10000、0b01000和0b00000指示微塊B、C和D已完成。當達到計數0b00000時,完成給定宏塊的搜索(task_done)。這樣,塊計數器電路62跟蹤差值處理器34控制的計算當前宏塊差值的過程。另外,塊計數器電路62可以確定與每個宏塊相關的差值何時被計算出。
在越過每個微塊邊界時,判斷邏輯66產生block_done信號,用于命令差值處理器34鎖存各個微塊結果。因此,視頻編碼器18產生每個微塊的差值以及宏塊的差值結果。另外,使用相同的各個計算產生這些差值結果。換句話說,計算的四個獨立的子集產生微塊的每個差值,而所有計算的總和產生宏塊的差值。
如上所述,可以加入終止技術,以終止各種任務或迭代,以避免某些情況下的計算。在一個實施中,在執行了每組并行AD計算后,可以確定是否要終止任務。換句話說,微塊行的每次鎖存可提供一個合適的時間,用于確定是否已超過任務閾值。如果超過,則可以終止該特定任務的額外計算,因為可以得知該搜索將不會產生最小差值。具體而言,如果任務閾值被超過,候選宏塊的子集的差值已經超過為搜索空間中先前的候選宏塊計算的差值。
圖11是說明候選存儲器38中存儲堆的物理地址映射電路68的框圖。產生候選存儲器38中的物理地址包括將像素索引產生的基本地址載入累加器,如圖9所示的轉換尋址。對于每個時鐘周期,地址遞增48個像素到宏塊中像素的下一行,這被轉換為6行(48像素÷8堆)。在完成了塊B后,累加器重新載入基本地址+1,用于塊C和塊D的計算。
如圖11所示,映射電路68可以包括加法器70,它在完成塊B的計算(block_b_done)時將基本地址(mb_base_addr)加1,從而產生候選存儲器38中的列基本地址(col_base_addr)。如果塊B已完成或搜索任務被啟動(task_start),或門72將邏輯高輸出傳遞到多路復用器74。
響應于來自或門72的邏輯高輸出,多路復用器74向累加器76輸出列基本地址。響應于來自或門72的邏輯低輸出,多路復用器將加法器78的輸出傳遞到累加器76。加法器78將來自累加器76的當前候選存儲器地址(logical_cram_addr)與一個值6相加。如果沒有搜索任務的開始或塊B的完成,多路復用器74和累加器78將當前候選存儲器地址推進6行,即8個堆上的48像素。這樣,在遇到完成塊B或開始新的搜索任務時,存儲器控制單元39循環通過候選存儲器38中8個堆的每行,用于向差值存儲器34一次表示一個微塊行。因此,計算以一行接一行的方式執行,直到產生微塊的每個差值,并以一個微塊接一個微塊的方式進行,直到計算出宏塊的差值。然后,對于搜索空間的下一宏塊,又以一行接一行、一個微塊接一個微塊的方式繼續該過程,依此類推。
圖12是說明候選存儲器中的宏塊列更新的物理地址映射電路80的框圖。圖11所示的地址映射電路68不處理宏塊列更新發生時的宏塊列移動。而是,映射電路68適用于完全重新載入搜索空間的宏塊列。當應用列更新特征時,圖12的地址映射電路80通過另一種范圍的地址映射。
在物理候選存儲器38中,把宏塊列的每行映射成兩行數據。例如在復位時,地址0和地址1(addr 0/1)表示左側宏塊列的第一行。特別的是,地址0表示候選存儲器38中8堆的行,它對應于左側宏塊列的像素索引行中第一組8個像素。地址1表示候選存儲器38中8堆的行,它對應于左側宏塊列的像素索引行中第二組8個像素。
然后,地址2和地址3(addr 2/3)表示中間宏塊列的第一行,地址4和地址5(addr 4/5)表示右側宏塊列的第一行。因此,如圖7C所示,候選存儲器38中8堆的行依次存儲跨越左側、中間和右側宏塊列的每個整行的像素數據(如對于第一行為Y0-Y47)。
在一個宏塊列更新之后,addr 0/1(先前表示左側宏塊列)用于表示右側宏塊列,addr 2/3(先前表示中間宏塊列)用于表示左側宏塊列,addr 4/5(先前表示右側宏塊列)用于表示中間宏塊列。
這樣,左側和右側宏塊列分別存儲與先前中間和右側宏塊列相同的數據,而不需要重新載入新的數據。然而現在把地址(addr 2/3和addr 4/5)映射到左側和中間宏塊列。然而,先前左側宏塊列地址(addr 0/1)被映射到右側宏塊列并被重新載入來自視頻存儲器32的新數據。
為了執行列更新模式的地址映射,圖12中的映射電路80確定兩個條件候選存儲器列基本地址的mod 3輸出(col_base_addr mod 3)和宏塊列移動狀態,即請求完全更新還是列更新。
如圖12所示,映射電路80包括mod 3運算器82,它產生當前基本列地址除以2(cram_addr[8:1])的mod 3輸出,并將mod 3輸出施加到臨時存儲裝置84(有時稱為觸發器)。列基本地址的mod 3輸出總是為0、1或2。例如,第一列的列基本地址(Y0)將產生0,第二列的列基本地址(Y16)將產生1,第三列的列基本地址(Y32)將產生2。
當新的搜索任務開始(task_start)或計算塊B完成(block_b_done)時,或門86啟動觸發器84從mod 3運算器輸出mod 3輸出,以施加到多路復用器88。mod 3輸出表示列基本地址當前所在的列,即第一列(0)、第二列(1)或第三列(2)。
作為響應,多路復用器88將多路復用器90、92、94的輸出中的一個傳遞到加法器96。多路復用器90、92、94的輸出由2位計數器98的輸出確定。計數器98用0值復位,以響應接收到的完全更新(full_update)信號,它指示候選存儲器38中的整個搜索空間將被重新載入。響應于啟動輸入端的列更新(col_update)信號,計數器98加1計數,或在其它實施中采用減法計數。
列更新信號指示候選存儲器38中的搜索空間將通過載入一個新列而被逐步更新。計數器98可以對于每個列更新進行遞增,或對于兩個列更新進行遞增,并在第三列更新之后返回一個值0。例如,計數器98可以從0遞增到1,到2,返回到0,到1,到2,到0,到1,到2等。計數器98還可以在計數對于0x11時進行復位,該復位可不考慮啟動狀態而發生。
在各種情況下,計數器98的計數輸出跟蹤在逐步列更新程序過程中已經執行了多少列移動。計數器98的計數輸出可以提供對多路復用器90、92、94的邏輯輸入,以便于地址映射判斷。多路復用器90、92、94分別對應于搜索空間的左側、中間和右側列。如果計數輸出是0,多路復用器90、92、94輸出值0、0和0。如果計數輸出是1,多路復用器90、92、94分別輸出值+2、+2和-4。如果計數輸出是2,多路復用器90、92、94分別輸出值0、-4和+2。另外,計數輸出提供給0b11比較器95,0b11比較器95提供一信號給或門97。因此,計數器98的復位可響應于完全更新信號或來自比較器95的信號而發生,這兩個信號都輸入到或門97。
多路復用器90、92、94的操作反映了先前中間列向左側列的移動,先前右側列向中間列的移動,即在每種情況下向左兩行(+2)。調用宏塊列中的每個行用候選存儲器38中的兩個行表示(見圖7C)。該操作還可以反映先前左側列向右側列的移動,即向左四行(-4)。在三個列更新之后,地址再次與物理存儲器匹配,因此多路復用器90、92、94的輸出值分別返回為0、0和0。
多路復用器90、92、94的輸出反映順序地下一移動。在第二移動之后,原中間列已經被移動到左側列,現在被移動到右側列,原右側列現在被移動到左側列,而原左側列現在被移動到中間列。在這種情況下,當前的左側列偏離其原位置右側列+4行,當前的中間列偏離其原位置左側列-2行,當前的右側列偏離其原位置中間列-2行。
如果觸發器84的輸出為0,第一列多路復用器90的輸出通過多路復用器88。如果觸發器84的輸出為1或2,第二或第三列多路復用器92、94的輸出分別通過多路復用器88。在每種情況下,多路復用器88的輸出被施加到加法器96,加法器96將該輸出與邏輯候選存儲器地址(logical_cram_addr)相加。
這樣,加法器96將邏輯候選存儲器地址移動一個與列更新移動狀態相當的量,以獲得適當宏塊的物理候選存儲器地址。如果邏輯地址對應于作為移動操作結果的右側列,而物理地址實際上對應于中間列,則映射電路80提供必要的地址轉換。然后,存儲器控制單元39使差值處理器34將候選存儲器38中適當尋址的數據與編碼存儲器6中對應的數據比較,如對8個輸出堆進行并行的AD計算。
圖13是更詳細地說明差值處理器34的框圖。特別的是,圖13示出了通過安排編碼存儲器36和候選存儲器38提供的并行計算功能,以產生8個同時的堆輸出。如圖13所示,差值處理器可以包括多個絕對差(AD)計算通道100A-100H,統稱為100。每個AD計算通道100為待編碼的宏塊從編碼存儲器36接收各自的堆輸出(a0-a7)。
為了比較和計算絕對差,每個AD計算通道100還從候選存儲器38接收相應的堆輸出(b0-b7)。一組8位的加法器102A-102D、一對9位的加法器104A和104B、以及一個10位的加法器106以級聯形式對AD結果求和。如果用更多位的值來表示像素,則可以實現更大的加法器。在任何情況下,加法器106的輸出施加到加法器108。加法器108通過觸發器110對其本身的輸出和加法器106的輸出求和,以產生絕對差之和(SAD)的結果。每組八個輸入(a0-a7)可對應于微塊的八個像素的行。例如,對于微塊A的每一行(圖6A),然后是微塊B的每一行,之后是微塊C和微塊D,可以將輸入提供給差值處理器。累加可以在計算了每個微塊的差值度量之后被鎖存,然后再次鎖存對應于宏塊的差值度量的總累加。
另外,在各個鎖存步驟之后,可以判斷是否終止任務。換句話說,微塊行的每次鎖存可提供一個合適的時間,用于確定是否已超過任務閾值。如果超過,則可以終止該特定任務的額外計算,因為可以得知該搜索將不會產生最小差值。
圖14是說明這里描述的視頻編碼技術的流程圖。如圖14所示,一旦開始搜索,即開始任務(112),DSP 28就為待編碼的宏塊產生像素索引(114)。存儲器控制單元39將宏塊像素索引轉換為視頻存儲器地址和編碼存儲器地址(116),并且通過總線33和存儲器控制單元將宏塊從視頻存儲器32載入編碼存儲器36(118)。DSP 28還為搜索空間產生像素索引(120)。一旦將搜索空間像素索引轉換為視頻存儲器地址和候選存儲器地址(122),存儲器控制單元39就將搜索空間宏塊載入候選存儲器28(124)。
差值處理器34在候選存儲器38和編碼存儲器36的多個堆輸出之間執行并行的AD計算(126),以比較待編碼的宏塊與搜索空間中的宏塊。根據并行的AD計算,差值處理器34產生整個搜索空間上的最佳SAD結果(128)(或者可能產生可接受的結果,而不考慮整個搜索空間)。在另一情況下,結果與待編碼的宏塊的像素索引相關。如上所述,差值處理器34可以為形成宏塊的每個微塊產生SAD結果,而不需要額外的SAD計算。在為宏塊產生SAD結果之后,DSP 28可以確定是否識別到可接受的匹配,如果識別到,則可以根據MPEG-4壓縮標準存儲運動矢量以識別待編碼的宏塊。
圖15是說明用列更新逐步載入搜索空間的視頻編碼技術的流程圖。一旦由DSP 28產生下一像素索引(130,132)以驅動另一搜索任務,存儲器控制單元39就將宏塊像素索引轉換為視頻存儲器地址和編碼存儲器地址(134)。然后,將相關的宏塊從視頻存儲器32載入編碼存儲器36(136)。然而,在這種情況下,搜索空間通過加入一個新的列被逐步更新,而不是重新載入整個搜索空間。
相應地,DSP 28為搜索空間列更新產生像素索引(138),然后存儲器控制單元39轉換列更新像素索引,以產生相關的視頻存儲器地址和候選存儲器地址(140)。一旦將新的宏塊列從視頻存儲器32載入候選存儲器28(142),差值處理器34執行候選存儲器38和編碼存儲器36的八個輸出堆的并行AD計算(144),并在多個并行AD計算后產生最佳SAD結果(或可接受的SAD結果)(146)。
圖16是說明候選存儲器中的存儲堆的基本地址映射的流程圖。圖16所示的過程對應于圖9中電路的操作,雖然也可以使用其它各種電路。為了從像素索引獲得基本地址,存儲器控制單元39計算像素索引mod 8操作的結果(150)。如果結果大于或等于當前堆索引(152),則基本地址等于像素索引除以8的整數商(154)。如果結果小于當前堆索引(152),則基本地址等于像素索引除以8的整數商加上1(156)。
圖17是說明候選存儲器中的存儲堆的物理地址映射的流程圖。圖17所示的過程對應于圖11中電路68的操作,雖然也可以使用其它各種電路。如果宏塊中塊B的AD計算已經完成(160),候選存儲器38中的列基本地址等于宏塊基本地址+1(162)。如果塊B未完成(160),候選存儲器38中的列基本地址等于宏塊基本地址(164)。然后,如果塊B已經完成或開始新的搜索任務(166),候選存儲器38中的邏輯存儲器地址等于基本地址(168)。如果塊B未完成且沒有新的搜索開始(166),將邏輯候選存儲器地址移動六行(170)。
圖18是說明候選存儲器中的宏塊列更新的物理地址映射的流程圖。圖18所示的過程對應于圖12中電路80的操作,雖然也可以使用其它各種電路。如圖18所示,確定由列基本地址所指定的列,存儲器控制單元39對列基本地址施加mod 3運算(174)。如果列更新特征未啟動(176),則邏輯候選存儲器地址不移動(178)。這對應于圖12中多路復用器90、92、94的輸出(0,0,0),并對應于計數器98的計數器輸出0,因此,多路復用器88傳遞0。
如果列更新為啟動(176),存儲器控制單元39參考計數器98的輸出確定已經發生的列更新移動的數目(180)。根據識別出的列和列更新移動的數目,存儲器控制單元39確定邏輯候選存儲器地址應該移動的量,以產生正確的物理候選存儲器地址(182)。然后存儲器控制單元39將邏輯候選存儲器地址加上地址移動轉換為物理候選存儲器地址(184)。
圖19是說明用相同的計算為一宏塊和組成該宏塊的許多微塊產生差值的流程圖。如圖所示,當運動估計器29開始宏塊搜索迭代時(191),差值處理器34-個微塊行接一個微塊行地執行并行的絕對差(AD)計算。例如,可以初始化值X(192),差值處理器34可以對被編碼的宏塊中第一微塊的第X行執行并行的AD計算(193)。只要微塊中還存在其它行(194的是分支),值X就遞增(195)并對微塊的下一行執行并行的AD計算。
視頻塊計數器電路62可確定微塊中是否存在其它行(194)。例如,視頻塊計數器電路62可以作為差值處理器34的一部分加以集成,或可以形成DSP接口單元30的一部分。一旦確定了已經對第一微塊的每一行執行了AD計算,差值處理器34就輸出第一微塊的差值(196)。為宏塊的每一微塊連續執行該步驟,直到沒有其它微塊(197)。在該過程的這一階段也可以使用任務終止技術,例如,在總累加差值超過任務閾值時終止任務,如閾值對應于已經為當前迭代計算出的最小差值。
差值處理器34可以為宏塊累加正在進行的(ongoing)差值,并可以輸出每個微塊的差值,因為執行了每個微塊的計算。第一微塊的差值可以是在這以前的差值的累加值。第二微塊的差值可以對應于在這以前的總累加值減去第一微塊的差值。第三微塊的差值可以對應于在這以前的總累加值減去第一和第二微塊的差值,等等。
視頻塊計數器電路62還可以確定何時已經完成了最后微塊的計算的累加(197的是分支)。這時,差值處理器34輸出宏塊的差值(198),它是在這以前的AD計算的總累加值。DSP 28或DSP接口單元30可以確定是否要執行微塊中有其它的行的待編碼的當前宏塊的其它任務(194)。再次說明,任務是指用于將待編碼的當前視頻塊與搜索空間中的視頻塊進行比較的一組計算,迭代是指對應于搜索空間中各種不同視頻塊與待編碼的當前視頻塊的比較的一組任務。
迭代可以簡化成將搜索空間中視頻塊的一個預定組與待編碼的視頻塊比較,或者可以更復雜以包括定位搜索空間中位置的初始化技術、嵌套搜索、和/或預定的和重定義的搜索參數,以盡快定位最佳匹配。在任何情況下,在運動估計器29執行了迭代的所有任務之后(199的否分支),視頻編碼器18對當前宏塊編碼(200)。有利的是,視頻編碼器在編碼過程中具有各種選項,這時產生搜索空間各種候選宏塊的差值,還產生形成候選的微塊的差值。
使用對應于最佳候選微塊的四個獨立的運動矢量可用于對宏塊編碼,以改進壓縮。由于其它原因,使用對應于最佳候選宏塊的單個運動矢量是較佳的,如為了保持與只能識別宏塊運動矢量的解碼器相適應。還可以加入紋理編碼,如通過對定義待編碼的當前宏塊與運動矢量定義的視頻塊之間差值的矩陣執行離散余弦變換(DCT)編碼。
在當前宏塊被編碼之后,視頻編碼器18可以確定當前視頻幀中是否還有其它待編碼的宏塊,即是否還要執行其它迭代(201)。如果沒有,給定視頻幀的編碼過程結束(201的否分支),幀的經編碼的視頻塊可以由發射機20經通信媒介15發送(圖1)。然而,如果當前視頻幀中還有其它待編碼的宏塊,搜索空間可以被重新載入(202),并開始下一迭代(191)。另外,重新載入搜索空間的過程(202)可以使用上述列更新技術,其中存儲器控制單元重新載入候選存儲器38的諸列的一個子集,并通過如上所述的尋址方案跟蹤候選存儲器。這里描述的這些和其它技術,不管是否采用單機技術來改進各種傳統的編碼過程,或者何時組合使用,都可以提高按照諸如MPEG-4標準的視頻編碼的效率,而且更加便于在計算資源更受限制、功耗成問題的無線通信裝置,如移動電話,中實現視頻編碼。
已經描述了多個不同的實施例。這些技術能夠通過減少存儲傳遞、計算周期和功耗來改進視頻編碼,從而加快編碼過程并可能延長電池供電的視頻裝置的壽命。另外,這些技術通過產生宏塊和微塊的差值,而不需要額外的AD計算,可以在編碼過程提供選項。在這些或可能的其它方法中,這些技術可以改進按照諸如MPEG-4標準或其它視頻編碼標準的視頻編碼。
這些技術可以在硬件、軟件、固件或任何組合中實現。如果在軟件中實現,這些技術可涉及包括程序代碼的計算機可讀媒體,當程序代碼在一個按照MPEG-4標準對視頻序列編碼的裝置中執行時,它執行一個或多個上述方法。在這種情況下,計算機可讀媒體可以包括隨機存取存儲器(RAM),如同步動態隨機存取存儲器(SDRAM),只讀存儲器(ROM),非易失性隨機存取存儲器(NVRAM),電可擦除可編程只讀存儲器(EEPROM),閃存等。
程序代碼可以以計算機可讀指令的形式存儲在存儲器中。在這種情況下,處理器,如DSP,可以執行存儲在存儲器中的指令,以實現這里所述的一個或多個技術。在一些情況下,DSP執行這些技術,DSP調用各種硬件部件,如運動估計器以加快編碼過程。在其它實施例中,視頻編碼器可以用微處理器、一個或多個專用集成電路(ASIC)、一個或多個現場可編程門陣列(FPGA)或一些其它硬件-軟件組合來實現。這些或其它實施例在以下權利要求的范圍內。
權利要求
1.一種方法,其特征在于,包括以下步驟將一組像素值載入存儲器以定義第一搜索空間,第一搜索空間定義第一多列候選視頻塊,第一多列候選視頻塊在運動估計程序的第一迭代期間與待編碼的第一視頻塊比較;執行第一迭代,將第一視頻塊與第一搜索空間中的候選視頻塊比較;和重新載入多列的一個子集以定義第二搜索空間,第二搜索空間定義第二多列候選視頻塊,第二多列候選視頻塊在運動估計程序的第二迭代期間與待編碼的第二視頻塊比較。
2.如權利要求1所述的方法,其特征在于,還包括執行第二迭代,將第二視頻塊與第二搜索空間中的候選視頻塊比較。
3.如權利要求2所述的方法,其特征在于,還包括重新載入多列的另一個子集以定義第三搜索空間,第三搜索空間定義第三多列候選視頻塊,第三多列候選視頻塊在運動估計程序的第三迭代期間與待編碼的第三視頻塊比較;和執行第三迭代,將第三視頻塊與第三搜索空間中的候選視頻塊比較。
4.如權利要求3所述的方法,其特征在于,還包括重新載入多列的另一個子集以定義第四搜索空間,第四搜索空間定義第四多列候選視頻塊,第四多列候選視頻塊在運動估計程序的第四迭代期間與待編碼的第四視頻塊比較;和執行第四迭代,將第四視頻塊與第四搜索空間中的候選視頻塊比較。
5.如權利要求1所述的方法,其特征在于,執行第一迭代的步驟包括在待編碼的第一視頻塊的像素值和第一搜索空間中候選視頻塊之一的像素值之間并行地執行多個差值計算。
6.一種方法,其特征在于,包括以下步驟在待編碼的宏塊的像素和搜索空間中候選宏塊的像素之間執行差值計算;根據所述計算,產生一組微塊差值,微塊差值分別表示形成待編碼宏塊的多個微塊中的每個與形成候選宏塊的微塊之間的差別;和根據所述計算產生宏塊差值,宏塊差值表示待編碼的宏塊與候選宏塊之間的差別。
7.如權利要求6所述的方法,其特征在于,執行差值計算的步驟包括并行地執行多個差值計算。
8.如權利要求7所述的方法,其特征在于,并行地執行的多個差值計算對應于微塊中之一的一行。
9.一種裝置,其特征在于,包括根據運動估計程序對視頻幀編碼的編碼器,編碼器被構造成將一組像素值載入存儲器以定義第一搜索空間,第一搜索空間定義第一多列候選視頻塊,第一多列候選視頻塊在運動估計程序的第一迭代期間與待編碼的第一視頻塊比較,執行第一迭代將第一視頻塊與第一搜索空間中的候選視頻塊比較,和重新載入多列的一個子集以定義第二搜索空間,第二搜索空間定義第二多列候選視頻塊,第二多列候選視頻塊在運動估計程序的第二迭代期間與待編碼的第二視頻塊比較;和發射機,用于發送經編碼的視頻幀。
10.如權利要求9所述的裝置,其特征在于,所述編碼器還被構造成執行第二迭代,將第二視頻塊與第二搜索空間中的候選視頻塊比較。
11.如權利要求10所述的裝置,其特征在于,所述編碼器還被構造成重新載入多列的另一個子集以定義第三搜索空間,第三搜索空間定義第三多列候選視頻塊,第三多列候選視頻塊在運動估計程序的第三迭代期間與待編碼的第三視頻塊比較,并執行第三迭代,將第三視頻塊與第三搜索空間中的候選視頻塊比較。
12.如權利要求11所述的裝置,其特征在于,所述編碼器還被構造成重新載入多列的另一個子集以定義第四搜索空間,第四搜索空間定義第四多列候選視頻塊,第四多列候選視頻塊在運動估計程序的第四迭代期間與待編碼的第四視頻塊比較,并執行第四迭代,將第四視頻塊與第四搜索空間中的候選視頻塊比較。
13.如權利要求9所述的裝置,其特征在于,所述編碼器被構造成在待編碼的第一視頻塊的像素值和第一搜索空間中候選視頻塊之一的像素值之間并行地執行多個差值計算。
14.如權利要求9所述的裝置,其特征在于,所述裝置選自以下裝置數字電視,無線通信裝置,個人數字助理,手提電腦,臺式電腦,數碼相機,數字記錄裝置,具有視頻功能的蜂窩無線電電話,和具有視頻功能的衛星無線電電話。
15.如權利要求9所述的裝置,其特征在于,還包括視頻捕獲裝置,用于實時地捕獲視頻幀,所述編碼器被構造成實時地對視頻幀編碼,發射機被構造成實時地發送經編碼的視頻幀。
16.一種裝置,其特征在于,包括對視頻幀編碼的編碼器,編碼器被構造成在待編碼的宏塊的像素和搜索空間中候選宏塊的像素之間執行差值計算,根據所述差值計算產生一組微塊差值,微塊差值分別表示形成待編碼宏塊的多個微塊中的每個與形成候選宏塊的微塊之間的差別,并根據所述計算產生宏塊差值,宏塊差值表示待編碼的宏塊與候選宏塊之間的差別;和發射機,用于發送經編碼的視頻幀。
17.如權利要求16所述的裝置,其特征在于,所述編碼器被構造成并行地執行多個差值計算。
18.如權利要求16所述的裝置,其特征在于,并行執行的多個差值計算對應于微塊中之一的一行。
19.如權利要求16所述的裝置,其特征在于,還包括視頻捕獲裝置,用于實時地捕獲視頻幀,所述編碼器被構造成實時地對視頻幀編碼,發射機被構造成實時地發送經編碼的視頻幀,其中根據運動圖像專家組4(MPEG-4)標準對視頻幀編碼。
20.如權利要求16所述的裝置,其特征在于,所述裝置是電池供電的無線裝置。
21.一種裝置,其特征在于,包括存儲器;存儲器控制單元,它將一組像素值載入存儲器以定義第一搜索空間,第一搜索空間定義第一多列候選視頻塊,第一多列候選視頻塊在運動估計程序的第一迭代期間與待編碼的第一視頻塊比較,并重新載入多列的一個子集以定義第二搜索空間,第二搜索空間定義第二多列候選視頻塊,第二多列候選視頻塊在運動估計程序的第二迭代期間與待編碼的第二視頻塊比較;和處理器,它執行第一迭代將第一視頻塊與第一搜索空間中的候選視頻塊比較并執行第二迭代將第二視頻塊與第二搜索空間中的候選視頻塊比較。
22.如權利要求21所述的裝置,其特征在于,所述存儲器控制單元重新載入多列的另一個子集以定義第三搜索空間,第三搜索空間定義第三多列候選視頻塊,第三多列候選視頻塊在運動估計程序的第三迭代期間與待編碼的第三視頻塊比較;所述處理器執行第三迭代,將第三視頻塊與第三搜索空間中的候選視頻塊比較。
23.如權利要求22所述的裝置,其特征在于,所述存儲器控制單元重新載入多列的另一個子集以定義第四搜索空間,第四搜索空間定義第四多列候選視頻塊,第四多列候選視頻塊在運動估計程序的第四迭代期間與待編碼的第四視頻塊比較;所述處理器執行第四迭代,將第四視頻塊與第四搜索空間中的候選視頻塊比較。
24.如權利要求21所述的裝置,其特征在于,所述處理器被構造成在待編碼的視頻塊之一和一個搜索空間中的候選視頻塊之一之間并行地執行多個差值計算。
25.一種裝置,其特征在于,包括存儲器,它存儲計算機可讀指令;和處理器,用于執行所述指令以實現在待編碼的宏塊的像素和搜索空間中候選宏塊的像素之間執行差值計算;根據所述計算產生一組微塊差值,微塊差值分別表示形成待編碼宏塊的多個微塊中的每個與形成候選宏塊的微塊之間的差別;和根據所述計算產生宏塊差值,宏塊差值表示待編碼的宏塊與候選宏塊之間的差別。
26.如權利要求25所述的裝置,其特征在于,所述處理器被構造成并行地執行多個差值計算。
27.如權利要求26所述的裝置,其特征在于,并行執行的多個差值計算對應于微塊中之一的一行。
28.一種根據運動圖像專家組(MPEG)標準對視頻塊進行編碼的裝置,其特征在于,所述裝置被構造成將一組像素值載入存儲器以定義第一搜索空間,第一搜索空間定義第一多列候選視頻塊,第一多列候選視頻塊在運動估計程序的第一迭代期間與待編碼的第一視頻塊比較;執行第一迭代將第一視頻塊與第一搜索空間中的候選視頻塊比較;和重新載入多列的一個子集以定義第二搜索空間,第二搜索空間定義第二多列候選視頻塊,第二多列候選視頻塊在運動估計程序的第二迭代期間與待編碼的第二視頻塊比較。
29.如權利要求28所述的裝置,其特征在于,所述裝置被構造成執行第二迭代將第二視頻塊與第二搜索空間中的候選視頻塊比較。
30.如權利要求29所述的裝置,其特征在于,所述裝置還被構造成重新載入多列的另一個子集以定義第三搜索空間,第三搜索空間定義第三多列候選視頻塊,第三多列候選視頻塊在運動估計程序的第三迭代期間與待編碼的第三視頻塊比較;并執行第三迭代,將第三視頻塊與第三搜索空間中的候選視頻塊比較。
31.如權利要求30所述的裝置,其特征在于,所述裝置還被構造成重新載入多列的另一個子集以定義第四搜索空間,第四搜索空間定義第四多列候選視頻塊,第四多列候選視頻塊在運動估計程序的第四迭代期間與待編碼的第四視頻塊比較;并執行第四迭代,將第四視頻塊與第四搜索空間中的候選視頻塊比較。
32.如權利要求28所述的裝置,其特征在于,所述裝置被構造成在待編碼的第一視頻塊的像素值和第一搜索空間中候選視頻塊之一的像素值之間并行地執行多個差值計算。
33.一種根據運動圖像專家組(MPEG)標準對視頻塊進行編碼的裝置,其特征在于,所述裝置被構造成在待編碼的宏塊的像素和搜索空間中候選宏塊的像素之間執行差值計算;根據所述計算,產生一組微塊差值,微塊差值分別表示形成待編碼宏塊的多個微塊中的每個與形成候選宏塊的微塊之間的差別;和根據所述計算產生宏塊差值,宏塊差值表示待編碼的宏塊與候選宏塊之間的差別。
34.如權利要求33所述的裝置,其特征在于,所述裝置被構造成并行地執行多個差值計算。
35.如權利要求34所述的裝置,其特征在于,并行執行的多個差值計算對應于微塊中之一的一行。
全文摘要
本發明描述了能夠減少編碼視頻序列所必須的處理周期和存儲傳遞數目的視頻編碼技術。在該方式中,所揭示的視頻編碼技術可以提高視頻編碼速度并減小功耗。通常,視頻編碼技術使用候選存儲器,用于存儲對應于運動估計程序的搜索空間的列狀視頻塊。存儲器控制單元對候選存儲器尋址,以并行地檢索多個像素,用于同時與待編碼的視頻塊中的像素比較,如采用絕對差總和(SAD)或平方差總和(SSD)技術。一個差值處理器可以執行并行計算。另外,對于待編碼的后續視頻塊,候選存儲器能通過載入一列新的視頻塊而被逐漸更新,而不是重新載入整個搜索空間。
文檔編號H04N7/50GK1663278SQ03814055
公開日2005年8月31日 申請日期2003年6月18日 優先權日2002年6月18日
發明者K·-C·賴, G·C·瑟爾, 張承純, A·P·馬洛二世 申請人:高通股份有限公司