專利名稱:視頻編碼和解碼技術的制作方法
技術領域:
本揭示涉及數字視頻處理,尤其涉及視頻序列的編碼。
背景數字視頻能力被包括在大量設備中,包括數字電視、數字直接廣播系統、無線通信設備、個人數字助手(PDA)、手提電腦、臺式電腦、數字攝像機、數字記錄設備、蜂窩或衛星無線電話等。數字視頻設備相比常規模擬視頻系統可以提供很大改善,包括建立、修改、發送、存儲、記錄和播放全活動視頻序列。
已經為數字視頻序列編碼建立了多個不同的視頻編碼標準。活動圖片專家組(MPEG)例如已經研發了多個標準,包括MPEG-1、MPEG-2和MPEG-4。其他標準包括ITU H.263、加利福尼亞州Cupertino的蘋果計算機公司研發的QuickTimeTM技術、華盛頓Redmond的微軟公司研發的WindowsTM的視頻、英特爾公司研發的IndeoTM、華盛頓州西雅圖RealNetworks公司的RealVideoTM以及SuperMac公司研發的CinepakTM。
許多視頻編碼標準是通過以壓縮的方式對數據編碼而增加傳輸速率。壓縮可以減少視頻幀有效傳輸發送需要的總數據量。例如,MPEG標準利用了圖形和視頻壓縮技術以方便在比沒有壓縮時更窄的帶寬上傳輸視頻和圖像。
例如,MPEG標準支持利用連續視頻幀間類似性的視頻編碼技術,該類似性被稱為時間或幀間相關,用于提供幀間壓縮。幀間壓縮技術通過將基于象素的視頻幀表示轉換成運動表示而利用幀的數據冗余性。另外,視頻編碼技術可以利用幀內的類似性,這被稱為空間或幀內相關,用于進一步壓縮視頻幀。幀內壓縮一般是基于用于壓縮靜止圖像的紋理編碼,諸如離散余弦變換(DCT)編碼。
為了支持壓縮,數字視頻設備一般包括用于對數字視頻序列壓縮的編碼器以及用于對數字視頻序列解壓縮的解碼器。在許多情況下,編碼器和解碼器形成集成的編碼器/解碼器(CODEC),它對定義視頻圖像序列的幀內的象素模塊操作。在MPEG-4標準內,例如編碼器一般將要發送的視頻幀分割成包括16×16象素陣列的宏塊。
對于視頻幀內的每個宏塊,編碼器搜索在緊鄰的前一視頻幀(或相繼幀)的宏塊以標識最類似的宏塊,并將宏塊間的差異編碼以用于傳輸,同時還傳輸指示先前幀的哪個宏塊用于編碼的運動向量。解碼器接收運動向量以及編碼后的差異,并實現運動壓縮以生成視頻序列。
視頻編碼過程是計算強度很高的,特別是當使用運動估計技術時。例如,將要編碼的視頻塊與先前發送的幀的視頻塊相比較的過程需要大量計算。非常期望改善的編碼技術,特別是用于無線設備或其他便攜式視頻設備,這些設備的計算資源更有限且功耗也是一重要考慮。同時,期望改善的壓縮能減少視頻序列的有效傳輸需要的帶寬。改善這些因子的一個或多個會方便視頻序列的實時編碼,特別是在無線和其他帶寬受限的設置中。
概述該揭示描述了一些視頻編碼技術,所述技術減少了對視頻序列編碼需要的處理周期和存儲器轉移的數目。這樣,揭示的視頻編碼技術可以增加視頻編碼速度并減少功耗。另外,該技術可以使用相同的計算集合以定義與要編碼的宏塊相關聯的差異值,并定義與形成要編碼的宏塊的各個微塊相關聯的差異值。
在此描述的視頻編碼技術可以使用候選存儲器,所述存儲器按列存儲運動估計例程的搜索空間。存儲器控制單元可以定址候選存儲器以并行方式檢索多個象素,用于與要編碼的視頻塊象素的同時比較,例如使用絕對差值求和(SAD)或平方差值求和(SSD)技術。差值處理器可以并行地實現計算。每個并行計算集合可以對應形成宏塊的一個微塊的一行。另外,對于要編碼的相繼視頻塊,候選存儲器可以通過加載一新的視頻塊列而遞增地經更新,而不是重新加載整個搜索空間。
在此描述的這些和其他技術可以實現在數字視頻設備內的硬件、軟件、固件或其任意組合內。如果實現在軟件內,該技術可以是針對計算機可讀媒質,包括當被執行時實現在此描述的一個或多個編碼技術的程序代碼。各個實施例的附加細節在所附附圖和以下的描述中提出。通過附圖和描述以及權利要求書,本發明的特征、性質和優點將變得更加明顯。
附圖的簡要描述
圖1是說明一示例系統的框圖,其中源數字視頻設備將編碼后的視頻數據序列發送到接收數字視頻設備。
圖2是說明對數字視頻序列編碼的視頻編碼器框圖。
圖3是說明視頻數據的示例宏塊概念說明。
圖4是示例搜索空間的概念說明。
圖5是要編碼的宏塊的概念說明,所述宏塊概念性地(conceptually)位于被安排為宏塊陣列的搜索空間上。
圖6A是說明宏塊象素索引圖。
圖6B是說明視頻存儲器內視頻數據安排圖。
圖6C是說明編碼存儲器內視頻數據安排圖。
圖7A是說明搜索空間象素索引圖。
圖7B是說明視頻存儲器內搜索空間安排圖。
圖7C是說明候選存儲器內搜索空間安排圖。
圖8A是說明宏塊列象素索引圖。
圖8B是說明視頻存儲器內宏塊列安排圖。
圖9是說明為候選存儲器內存儲器組(bank)象素索引到基地址轉換的轉換框圖。
圖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和類似標準、Motion JPEG2000,加利福尼亞州Gupertino的蘋果計算機公司研發的QuickTimeTM技術、華盛頓州Redmond的微軟公司研發的WindowsTM的視頻、英特爾公司研發的IndeoTM以及SuperMac公司研發的CinepakTM。
通信鏈路15可以包括無線鏈路、物理傳輸線、諸如本地局域網的基于分組的網絡、廣域網或諸如因特網的全球網絡、公共交換電話網絡(PSTN)類似網絡。因此,通信鏈路15表示任何合適的通信介質或可能的不同網絡和鏈路集合,用于將視頻數據從源設備12發送到接收設備14。
源設備12可以是任何能對視頻數據編碼并發送的數字視頻設備。例如,源設備12可以包括視頻存儲器16以存儲數字視頻序列、視頻編碼器18以對序列編碼以及發射機20以在通信鏈路15上將編碼后序列發送到源設備14。視頻編碼器18可以包括例如數字信號處理器(DSP),它執行一個或多個可編程軟件模塊以控制視頻編碼技術。可以提供相關存儲器和邏輯電路以支持DSP控制視頻編碼技術。如描述,視頻編碼器18可以被配置用于減少處理周期、存儲器轉移和功耗。另外,視頻編碼器18可以用于執行一組計算以為宏塊生成差值以及為形成宏塊的各個微塊生成各個差值。
另外,源設備12可以包括視頻捕獲設備23,諸如視頻攝像機,用以捕獲視頻序列和在存儲器16內存儲捕獲的序列。特別是,視頻捕獲設備23可以包括電荷耦合設備(CCD)、電荷注入設備、光電二極管陣列、互補金屬氧化物半導體(CMOS)設備或能捕獲視頻圖像或數字視頻序列的其他光感設備。
作為另一示例,視頻捕獲設備23可以是視頻轉換器,它從例如電視、視頻磁帶記錄、可攜式攝像機等將模擬視頻數據轉換成數字視頻數據。在一些實施例中,源設備12可以用于在通信鏈路15上發送實時視頻序列。在該情況下,接收設備14可以接收實時視頻序列并向用戶顯示視頻序列。或者,源設備12可以捕獲并對視頻序列編碼,所述序列作為視頻數據文件發送到接收設備14,即不是以實時方式。因此,源設備12和接收設備14可以在例如移動無線網絡中支持諸如視頻片斷回播、視頻郵件或視頻會議等應用程序。
接收設備14可以采取能接收并對視頻數據解碼的任何數字視頻設備形式。例如,接收設備14可以包括接收機22用以從發射機20接收編碼后數字視頻序列,例如通過中間鏈路、路由器、其他網絡設備等。接收設備14還可以包括視頻解碼器24用于對序列解碼,還包括顯示設備26以向用戶顯示序列。在一些實施例中,接收設備14可能不包括集成顯示設備14。而且,接收設備14可以作為接收機,它將接收到的視頻數據解碼以驅動分離的顯示設備。例如電視或監視器。
源設備12和接收設備14的示例設備包括位于計算機網絡、工作站或其他臺式機計算設備上的服務器,還包括諸如手提電腦或個人數字助手(PDA)的移動計算設備。其他示例包括數字電視廣播衛星和接收設備,諸如數字電視、數字攝像機、數字視頻攝像機或其他數字記錄設備、數字視頻電話,諸如帶有視頻功能的移動電話、其他無線視頻設備等。
在一些情況下,源設備12和接收設備14每個包括編碼器/解碼器(CODEC)(未示出),用于對數字視頻數據編碼和解碼。在該情況下,源設備12和接收設備14可以包括發射機和接收機以及存儲器和顯示。以下示出的許多編碼技術在包括編碼器的數字視頻設備環境中描述。然而可以理解編碼器可以形成COCEC的一部分。在該情況下,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向用戶顯示。接收設備14的解碼器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計算,以為給定視頻幀計算要編碼的塊或宏塊的運動向量。通過將編碼算法的控制分配給DSP 28并在運動估計器29的硬件內分離計算強度高的運動估計計算,可以增強支持實時編碼的能力。
差值處理器35如圖2內進一步示出,包括編碼存儲器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間的存儲器轉移可以通過在DSP和總線33上的直接存儲器交換(DME)端口完成。在該情況下,DSP接口單元30、差值處理器34、編碼存儲器36、候選存儲器38和存儲器控制單元39可以駐留在DSP 28控制的總運動估計器(ME)內。一般,DME用于將數據從視頻存儲器32中取出用于載入編碼存儲器36和候選存儲器38。
在圖2的示例中,DSP接口單元30作為從視頻存儲器32通過總線33和存儲器控制單元39到編碼存儲器36以及候選存儲器38的存儲器轉移的隨從單元。開始時,DSP接口單元30可以將整個搜索空問載入候選存儲器38。此后,DSP接口單元30可以遞增地更新候選存儲器38,例如因為給定幀內的下一塊是要被編碼的,因此向搜索空間加入一新列。DSP接口單元30可以具有數據和配置信道,用于轉移視頻數據和存儲器控制單元39的配置。另外,DSP接口單元30可以具有配置信道,用于控制差值處理器34實現的搜索過程,且還具有結果信道,用于接收搜索結果。
在圖2的示例中,視頻編碼器18向主源設備12提供壓縮后數字視頻序列用于發送到接收設備14。視頻編碼器18對視頻序列編碼并在傳輸前在視頻存儲器32內緩沖編碼后的數字視頻序列。視頻存儲器32以及差值處理器存儲器35的形式可以是同步動態隨機訪問存儲器(SDRAM)、閃存存儲器、電可擦除可編程只讀存儲器(EEPROM)等。編碼存儲器36和候選存儲器一般是視頻編碼器18的本地存儲器,且可能包括被分開成“虛擬”存儲器的公共存儲器設備。
除了圖2內說明的組件外,在一些實施例中,視頻編碼器18可以包括其他組件,諸如紋理編碼器以實現一般用于處理靜態圖像的幀內或幀間壓縮,諸如離散余弦變換(DCT)編碼。在處理能力被認為對于有效運動估計過于受限情況下,例如除了運動估計外或取代運動估計,可以實現紋理編碼。DSP 28可以基于任何給定時間的處理能力通過選擇性地調用運動估計器(29)和紋理編碼器(未示出)而引導編碼例程。
圖3說明示例視頻塊,其形式是可以用視頻幀存儲在視頻存儲器32內的宏塊42。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計算。而且,象素方式比較的尋址和計算順序可以以以下方式完成,即使得生成要編碼每個宏塊的差值以及形成宏塊的微塊的差值。
在揭示中,“任務”一詞指用于將當前視頻塊與搜尋空間內不同視頻塊相比的公共計算集合。換而言之,一項任務指當前視頻塊和搜索空間內不同視頻塊間的單次比較。例如,任務可能涉及實現多次比較以將多個當前視頻塊象素與搜索空間內的候選視頻塊相比。如上所述,這些任務計算的各個子集可以并行地實現以加速編碼過程。64次計算可以被視作微塊任務(假設微塊被定義為8乘8象素陣列),且256次計算可以被視為宏塊任務(假設宏塊被定義為16乘16象素陣列)。在每個任務期間,計算被累加以為任務定義當前差值(有時被稱為差異度量)。
在該揭示中,“迭代”一詞指在視頻編碼期間實現的公共任務集合。與要編碼的當前視頻塊相關聯的一完整任務序列是一次迭代。換而言之,迭代是比較集合,其中當前視頻塊與搜索空間內的先前視頻塊(或相繼視頻塊)集合相比。每個單個比較是涉及多次計算的任務。因此,搜索空間定義了在迭代中與當前視頻塊比較的視頻塊集合。每次迭代的比較被稱為任務,且每個任務即每個比較可以涉及多個計算。
在一些情況下,迭代可以包括在搜索空間上定義第一搜索,在搜索空間內標識第一匹配,基于第一匹配在搜索空間子集上定義第二搜索,并在子集內標識第二匹配。例如,較后的迭代搜索可以涉及搜索空間內輕微的偏移以更充分地指出最佳匹配。還可以使用其他搜索技術,諸如菱形搜索技術,其中搜索直到進行到以下情況才停止,即當標識產生最低差值的宏塊的象素位置位于菱形搜索參數中心時。另外,也可以使用其他技術諸如圓形索技術,其中標識產生最低差值的宏塊的象素位置在半徑(R)定義的搜索參數中心處。半徑(R)的圓可以比菱形搜索參數定義更大、更多包含的搜索參數。
如果在迭代期間使用菱形搜索技術或圓形搜索技術,還可以使用初始化技術用于加速標識在菱形搜索參數或圓形定義的搜索參數中心處產生最低差值的宏塊的過程。例如,還可以使用利用空間冗余現象的初始化技術。空間冗余一般預測給定視頻塊的視頻運動可能類似于空間相鄰于給定視頻塊的另一視頻塊的視頻運動。初始化技術還可以方便地利用該現象以初始化搜索空間內一位置處的運動估計,該處有很高的概率包括可以用于有效視頻編碼的視頻塊。
尤其是,初始化技術還可以利用為在要編碼的視頻塊空間臨近處的視頻塊計算的運動向量,以標識搜索空間內的位置,其中可以初始化運動估計例程,即搜索空間內運動估計例程開始的象素位置。例如,平均象素位置、中值象素位置或使用加權函數計算的象素位置可以基于先前為在當前要編碼的視頻塊空間臨近處的視頻塊確定的運動向量而經計算。還可以使用其他線性或非線性函數。在任何情況下,通過該方式初始化運動估計例程,視頻編碼可以通過在迭代中減少在搜索空間內定義視頻塊需要的任務的次數,在菱形搜索或圓形搜索情況中被加速,該定位的視頻塊是被編碼的視頻塊的可接受匹配。
如果期望,用于生成差值的計算可以涉及SAD技術、SSD技術或其他比較。SAD技術涉及實現要編碼的當前宏塊象素值以及當前宏塊與其比較的先前宏塊象素值之間的絕對差值計算的任務。這些絕對差值計算的結果被求和即經累加以定義指示當前宏塊和先前宏塊間的差異的差值,當前宏塊與先前宏塊進行比較。對于8乘8象素圖像模塊,可以計算64個差值并求和,對于16乘16象素宏塊,可以計算256個差值并進行求和。通過定址當前視頻塊并按特定順序實現計算,可以計算256個差值,但還可以在四個分離的集合內求和,以為每個微塊生成差值。四個集合的所有計算的總和然后可定義該宏塊的差值。
較低的差值一般表明與當前宏塊比較的宏塊是更佳的匹配,且因此在運動估計編碼中是優于產生較高差值的候選宏塊的候選,較高差值意味著增加的失真。在一些情況下,當累加的差值超過定義閥值時可以中止計算。在該情況下,附加的計算可能不是必要的,因為與當前視頻塊比較的宏塊對于有效用于運動估計編碼將是不可接受的。
SSD技術還涉及實現要編碼的當前宏塊象素值以及當前宏塊與之比較的先前宏塊象素值之間的差值計算。然而,在SSD技術中,絕對差值計算的結果被平方,然后平方值被求和,即累加,以定義指示當前宏塊和與之比較的先前宏塊間差異的差值。或者還可以實現其他比較技術,諸如平均平方誤差(MSE)、歸一化互相關函數(NCCF)或其他合適的比較算法。
在一些情況下,可以在確定例如給定任務不會產生比先前任務更佳的匹配或標識給定任務產生可接受匹配之后提早中止各個任務和迭代。例如,可以使用一些技術以標識何時給定任務的附加計算不是必要的。尤其是,當第二任務計算子集一起產生大于與先前計算的第一任務相關的差值時,一般已知第二任務的附加計算不是必要的,因為第二任務的完成不會導致低于第一任務的差值。在該情況下,第二任務可以在不犧牲編碼性能情況下被中止,且可以更快地開始執行第三任務。
中止技術還可以在迭代層被執行,或在任務層和迭代層一起被執行。在一示例中,迭代閥值定義可接受值,即足以進行有效視頻編碼。在該情況下,如果實現一任務,它在搜索空間內標識匹配當前要編碼的視頻塊的候選視頻塊,后者以被認為由迭代閥值可接受的方式與前者匹配,且下一要編碼的視頻塊可以與搜索空間相比。在該情況下,可以避免多次不必要的任務執行。
在此的許多技術可以在將要編碼的視頻塊與先前視頻幀的先前視頻塊比較的環境下描述。然而可以理解可以在將要編碼的視頻塊與相繼視頻幀的候選視頻塊相比時使用相同技術。在一些情況下,可以使用雙向運動估計,其中要編碼的視頻塊與一個或多個先前視頻幀的各個候選視頻塊和相繼視頻幀的各個視頻塊相比。簡而言之,無論何時要編碼的視頻塊與不同視頻塊相比時,諸如先前視頻幀的候選視頻塊或相繼視頻幀的候選視頻塊,可以使用在此描述的許多技術。換而言之,搜索空間可以在該種不同的實現內被加載入各種不同候選。
圖5是在被安排為候選宏塊陣列的示例搜索空間52內要編碼的當前宏塊50的概念說明。特別是,如圖5內示出,搜索空間52包括候選宏塊的三行54A-54C以及三列56A-56C用于與要編碼的宏塊50比較。因此,在圖5的示例中,搜索空間52包括九個16乘16象素宏塊的陣列,形成了48乘48象素區域。要編碼的當前宏塊50使用差值處理器34與搜索空間52內的宏塊比較。
為了減少視頻存儲器32和候選存儲器38之間的存儲器轉移以及相關的處理開銷,一旦搜索空間52在開始時被加載,如需要,相繼的搜索空間更新可以在逐列基礎上進行。例如,為了對給定幀的相繼宏塊編碼,存儲器控制單元39可以簡單地替換搜索空間52的左手列56A內的候選宏塊,而不是重新載入整個搜索空間52。
為了完成按列更新,并允許并行運動估計計算在多個象素上同時實現,存儲器控制單元39用于執行地址映射方案以在維持在視頻存儲器32、編碼存儲器36和候選存儲器38內的存儲器地址間轉換。編碼存儲器36和候選存儲器38的數據更新通過總線33發生在視頻存儲器32之間,總線33直接訪問視頻存儲器。為了初始化并控制在總線33上的該轉移,DSP 28通過DME端口用作總線主控。
圖6A是說明宏塊象素索引圖。如圖6A內示出,宏塊象素索引可以被分成四個微塊(A,B,C,D)。宏塊象素索引是16乘16,其中每個微塊A,B,C,D是8乘8。整個宏塊象素索引從左上角象素YO擴展到右下角象素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的象素索引訪問視頻存儲器32,存儲控制單元39需要將象素索引轉換成視頻存儲器內的物理地址。
圖6C是說明編碼存儲器34內的視頻數據安排圖。如圖6C內示出,存儲在編碼存儲器36內的宏塊象素數據被安排在每行8個象素的32行內,即每行64比特。根據該揭示,編碼存儲器36內的存儲器安排方便了差值處理器36同時對多個象素的絕對差值(AD)計算。特別是,圖6C的示例是允許每次8個象素的并行AD計算的編碼存儲器36的物理安排。而且,當微塊被定義為有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和候選存儲器38為要編碼的每個宏塊的比較而安排,即為了方便每次8個象素的絕對差值并行計算。另外,編碼存儲器36和候選存儲器38被安排為在宏塊差值計算期間對微塊差值計算。
而且,除了允許對多個象素的并行AD計算外,候選存儲器38被安排以允許在搜索空間內任何象素處開始的對宏塊的尋址。而且,如將要描述的,候選存儲器38的結構可以允許遞增列更新,即每次加載宏塊的一列,而不是為要編碼的每個新宏塊重新加載整個搜索空間。該種加載技術可以通過避免對冗余的存儲器加負并減少總線33的使用而減少功率。同樣,存儲器控制單元39用于將搜索空間象素索引轉換成視頻存儲器32內的物理存儲器地址,然后將來自視頻存儲器的存儲器地址轉換成候選存儲器38內對應的物理存儲器地址。
圖8A是說明宏塊列象素索引圖。對于兩個相鄰要編碼的宏塊,可應用搜索空間間差異只是宏塊列中的一列。作為結果,只需要更新一個宏塊列。候選存儲器38被安排以利用該方面,從而減少視頻存儲器32和候選存儲器間的轉移需要的數據帶寬。如圖8A示出,由DSP 28維持的宏塊列象素索引可以安排在16個象素的行內,且可為搜索空間內的單列長度擴展,即48行。因此,圖8A內示出的宏塊象素索引對應三個宏塊的列,且因此是圖7A的搜索空間象素索引的三分之一。
宏塊列象素索引的視頻存儲器32內的物理存儲器安排還不同于整個搜索空間象素索引的存儲器安排。圖8B是說明視頻存儲器32內宏塊列安排圖。對于宏塊列,視頻存儲器32提供192行每行4個象素。因此,視頻存儲器32用32比特寬度安排宏塊列。一旦搜索空間為初始宏塊被載入候選存儲器38,搜索相繼、相鄰要編碼宏塊可以通過簡單地載入新列完成。
在列更新過程中,存儲器控制單元39用新宏塊列替換先前左手側的宏塊列。新載入宏塊列然后被指定為當前右手側宏塊列。另外,先前中間宏塊列被指定為新左手側宏塊列,而先前右手側宏塊列被指定為新中間宏塊列。
因此,搜索空間可以被視為在更大的視頻幀內被偏移到右邊以去除先前左手側宏塊列,從而為新右手側宏塊列留出空間。接著該列更新操作,候選存儲器38內的搜索空間就適用于在編碼存儲器36內考慮下一宏塊。
通過將DSP 28提供的象素索引轉換到視頻存儲器32以及存儲器控制單元39內的候選存儲器38內的物理地址,不需要DSP跟蹤列偏移操作。結果是,DSP 28只需要為新右手側宏塊列提供象素索引。
圖9是說明形成存儲器控制單元39部分的示例電路框圖,用于為候選存儲器38內的存儲器組將象素索引轉換成基地址。如圖9內示出,存儲器控制單元39包括用于獲得該存儲器地址轉換的合適邏輯電路。存儲器控制單元39跟蹤當前迭代,諸如編碼存儲器36的更新,候選存儲器38的更新或全加載或搜索任務,其中差值處理器34為編碼存儲器和候選存儲器的內容實現并行AD計算。如將描述的,存儲器控制單元39還可以在搜索期間跟蹤塊邊界,管理候選存儲器38內的宏塊列偏移,并實現象素到地址轉換。
一般為了搜索,存儲器控制單元39根據以下等式在候選存儲器38內確定對應的象素開始組,即八個象素行內的位置開始象素組=模8(象素索引)(1)另外,存儲器控制單元39根據以下等式確定開始象素行開始象素行=int(象素索引/8)(2)因此,根據模函數(1),開始組是象素索引除8的余數。根據整除函數(2),開始行是可除象素索引的最高整數。
給出上述等式(1)和(2),相應組x的開始即“基”地址可以表示為組x基地址=開始象素行,如果x大于等于開始象素組(3)開始象素行+1,如果x小于開始象素組如圖9示出,存儲器控制單元39內的比較器58將象素索引指示的行(象素索引模8)與組索引相比,且如果象素索引x小于組索引,則生成為1的輸出,如果象素索引大于或等于組索引,則輸出為零。存儲器控制單元39內的加法器60然后向象素索引[int(象素索引/8)]指明的組加入比較器58的輸出(1或0)以生成組x的基地址。
圖10是說明視頻塊計數器電路62框圖,用于通過形成宏塊的一系列微塊(A,B,C,D)跟蹤搜索過程,如圖3示出。一旦確定了相應組的基地址,則存儲器控制單元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之后,累加器為模塊C和模塊D的計算重新加載基地址+1。
如圖11示出,映射電路68可以包括加法器70,它在完成模塊B計算時(block_b_done)向基地址(mb_base_addr)加1,從而在候選存儲器38內生成列基地址(col_base_addr)。如果或是完成模塊B或是開始搜索任務(task_start)時,OR門72將邏輯高輸出傳遞到多路復用器74。
響應于來自OR門72的邏輯高輸出,多路復用器74將列基地址輸出到累加器76。響應于來自OR門72的邏輯低輸出,多路復用器將加法器78輸出傳遞到累加器76。加法器78將來自累加器76的當前候選存儲器地址(logical_cram_addr)加入值6。如果沒有搜索任務開始或模塊B完成,則多路復用器74和累加器78將當前候選存儲器地址超前六行,即8個組上的48個象素。這樣,存儲器控制單元39循環通過候選存儲器38內的8個組的每行用于每次向差值處理器34呈現一個微塊行,這受到模塊B完成或開始新搜索任務的限制。相應地,計算以一行一行的方式進行,直到生成每個微塊的差值,且計算以微塊接著微塊的方式進行直到計算了一宏塊的差值。過程然后在其他行和微塊中按行和按微塊的方式對搜索空間的下一宏塊進行,如此類推。
圖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(addr4/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確定兩個條件候選存儲器列基地址的模3輸出(col_bas_addr模3)以及宏塊列偏移狀態,即是否請求完全更新或列更新。
如圖12示出,映射電路80包括一模3操作器82,它生成當前基列地址除2的模3(cram_addr[8:1]),并向臨時存儲設備84(有時被稱為雙穩態觸發器)應用模3輸出。模3輸出對于列基地址總是0、1或2。例如,第一列的列基地址(Y0)會產生0,第二列的列基地址(Y16)會生成1,且第三列的列基地址會生成2。
當開始新搜索任務(task_start)或模塊B的計算完成時(block_b_done)時,OR門86使得雙穩態觸發器84輸出來自模3操作器82的模3輸出以應用到多路復用器88。模3輸出指明列基地址當前駐留的列,即第一列(0),第二列(1)或第三列(2)。
作為響應,多路復用器88將多路復用器90、92、94輸出的一個輸出傳遞到加法器96。多路復用器90、92、94的輸出由2比特計數器98的輸出確定。計數器98響應于接收到的full_update信號用值0重設,指明將重新載入候選存儲器38內的整個搜索空間。響應于在使能輸入處的col_update信號,計數器98計數遞增1(或可以對于其他實現進行向下計數)。
Col_update信號指明候選存儲器38內的搜索空間可由加載一個新列而遞增地更新。計數器98可以為每個列更新而遞增,或可以為兩個列更新遞增,并接著第三個列更新返回值0。例如,計數器98可以從0遞增到1,到2,回到0,到1,到2,到0,到1,到2等。在計數器等于0×11時,計數器98還可以被重設,該重設可以不考慮使能狀態而發生。
在任何情況下,計數器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,它將信號提供給OR門97。因此,計數器98的重設可以響應于或是full_update信號或是來自比較器95的信號而發生,兩者都是OR門97的輸入。
多路復用器90、92、94的操作反應了先前中間列到左邊列的偏移以及先前右邊列到中間列的偏移,即在每個情況下左移兩行(+2)。需要注意的是宏塊列內的每行用候選存儲器38內的兩行表示(見圖7C)。該操作還反應了先前左列偏移到右列,即左移四行(-4))。在三次列更新之后,地址再次匹配物理存儲器,因此多路復用器90、92和94的輸出值分別回到0、0和0。
多路復用器90、92和94的輸出反應了序列中的下一偏移。在第二偏移后,原始中間列已經被偏移到左邊列且現在被偏移到右邊列,原始右邊列現在被偏移到左邊列且原始左邊列現在被偏移到中間列。在該情況下,當前左邊列是從其原先右列偏移+4行,當前中間列是從其原先左列偏移-2行,且當前右列是從其原先中間列偏移-2行。
如果雙穩態觸發器84的輸出為零,第一列多路復用器90的輸出通過多路復用器88被傳遞。如果雙穩態觸發器84輸出為1或2,則第二或第三列多路復用器92、94的輸出分別地通過多路復用器88。在每種情況下,多路復用器88的輸出被施加到加法器96,它將到邏輯候選存儲器地址(logical_cram_addr)的輸出相加。
這樣,加法器96將邏輯候選存儲器地址偏移相當于列更新偏移狀態的量以為宏塊獲得物理候選存儲器地址。如果邏輯地址對應于偏移操作后的右列,但物理地址實際對應于中間列,則映射電路80提供必要的地址轉換。存儲器控制單元39然后使差值處理器34將候選存儲器38內合適定址的數據與編碼存儲器36內對應的數據相比較,例如對8個輸出組進行并行AD計算。
圖13是更詳細說明差值處理器34的框圖。特別是,圖13描述由編碼存儲器36和候選存儲器38安排提供的同時生成8個組輸出的并行計算能力。如圖13內示出,差值處理器可以包括多個絕對差值(AD)計算信道100A-100H(一起是100)。每個AD計算信道100從編碼存儲器36為要編碼的宏塊接收相應的組輸出(a0-a7)。
對于比較和絕對差值計算,每個AD計算信號100還從候選存儲器38接收對應的組輸出(b0-b7)。AD結果由一組8比特加法器102A-102D、一對9比特加法器104A、104B以及一10比特加法器106以級聯形式求和。如果可以使用更大的比特值用于表示象素,則可以實現更大的加法器。在任何情況下,加法器106的輸出被應用于加法器108。加法器108通過雙穩態觸發器對其本身輸出以及加法器106的輸出求和以生成絕對差值(SAD)結果之和。每八個輸入的集合(a0-a7)可以對應微塊的八象素行。例如,可以為微塊A的每行(圖6A)將輸入提供給差值處理器,然后是微塊B的每行,而后是微塊C,而后是微塊D。累加可以在為每個宏塊計算了差值度量之后被鎖存,然后為對應該宏塊的差值度量總累加再次被鎖存。
而且,在每次相應的鎖存之后,確定是否中止任務。換而言之,每次微塊行鎖存可以提供最優時間以確定是否超過任務閥值。如果是,則因為已知搜索不會產生最低差值,中止該特定任務的附加計算。
圖14是說明在此描述的視頻編碼計數流圖。如圖14中示出,在搜索開始時,即任務開始時(112),DSP 28生成要被編碼的宏塊象素索引(114)。存儲器控制單元39將宏塊象素索引轉換成視頻存儲器地址以及編碼存儲器地址(116),且宏塊從視頻存儲器32通過總線33加載到編碼存儲器36以及存儲器控制單元(118)。DSP 28還為搜索空間生成象素索引(120)。在將搜索空間象素索引轉換成視頻存儲器地址和候選存儲器地址之后(122),存儲器控制單元39用搜索空間宏塊加載候選存儲器38。
差值處理器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加載到候選存儲器38之后(142),差值處理器34實現在候選存儲器38和編碼存儲器36的8個輸出組上的并行AD計算(144),并在多次并行AD計算之后生成最佳SAD結果(或可接受SAD結果)。
圖16是說明候選存儲器內存儲組的基地址映射流圖。圖16示出的過程對應圖9內的電路操作,雖然可以使用電路的其他變體。為了從象素索引獲得基地址,存儲器控制單元39對象素索引計算模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對列基地址應用模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可以累加宏塊的當前差值,且可以輸出每個微塊的差值。第一微塊的差值可以是直到該點的差值累加。第二微塊的差值可以對應到該點的總累加減去第一微塊的差值。第三微塊的差值可以對應到該點的總累加減去第一和第二微塊的差值,如此類推。
視頻塊計數器電路62還確定何時累加了最后微塊的計算(197的是分支)。在該點,差值處理器34輸出宏塊的差值(198),這是直到該點的AD計算的總累加。DSP 28或可能的DSPO接口單元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)、FLASH存儲器等。
程序代碼可以以計算機可讀指令形式存儲在存儲器內。在該情況下,諸如DSP的處理器可以執行存儲在存儲器內的指令以執行上述的一個或多個技術。在一些情況下,這些技術可以由DSP執行,它調用各種硬件組件,諸如運動估計器以加速編碼過程。在其他情況下,視頻編碼器可以被實現為微處理器、一個或多個應用專用集成電路(ASIC)、一個或多個場可編程門陣列(FPGA)或一些其他硬件軟件組合。這些和其他實施例在以下權利要求書的范圍內。
權利要求
1.一方法,其特征在于包括并行地進行差值計算,所述差值是要編碼的視頻塊的多個象素相對于搜索空間內一個或多個候選視頻塊象素的差異;以及生成差值,所述差值至少部分基于計算的差值計算定義要編碼的視頻塊和候選視頻塊間的類似程度。
2.如權利要求1所述的方法,其特征在于還包括從候選存儲器的多個輸出組(bank)中獲取每個候選視頻塊內的多個象素。
3.如權利要求2所述的方法,其特征在于還包括接收標識一個候選視頻塊的象素索引;將象素索引轉換成候選存儲器內的物理地址;以及基于物理地址從多個輸出組中檢取候選視頻塊內的多個象素。
4.如權利要求3所述的方法,其特征在于還包括將象素索引轉換成候選存儲器內的邏輯地址,并將邏輯地址轉換成候選存儲器內的物理地址。
5.如權利要求3所述的方法,其特征在于要編碼的視頻塊和每個候選視頻塊定義符合MPEG-4標準的象素的16乘16宏塊。
6.如權利要求1所述的方法,其特征在于還包括并行地計算以下兩者間的差值,即少于要編碼的視頻塊行內所有象素以及搜索空間的候選視頻塊象素間差值。
7.如權利要求1所述的方法,其特征在于所述搜索空間定義了按列安排的多個候選視頻塊陣列。
8.如權利要求7所述的方法,其特征在于還包括用搜索空間中的候選視頻塊加載候選存儲器;并行地計算要編碼的第一視頻塊內的多個象素以及候選存儲器內的候選視頻塊間的差值計算;重新用候選視頻塊加載候選存儲器的一個子集,所述候選視頻塊對應于搜索空間內的一個新列;以及并行地計算要被編碼的第二視頻塊內多個象素以及候選存儲器內候選視頻塊間的差值。
9.如權利要求1所述的方法,其特征在于還包括根據MPEG標準對要被編碼的視頻塊進行編碼。
10.如權利要求1所述的方法,其特征在于還包括生成差值,所述差值至少部分基于計算的差值計算定義了要被編碼的視頻塊子集和候選視頻塊子集間的類似程度。
11.一種設備,其特征在于包括差值處理器,用于并行地計算差值,所述差值是要被編碼的視頻塊的多個象素相對搜索空間內的一個或多個候選視頻塊的象素間的差值;以及視頻編碼控制器,所述控制器生成差值,所述差值至少部分基于計算的差值計算定義了要被編碼的視頻塊和候選視頻塊間的類似程度,所述控制器標識產生可接受差值的特定候選,并使用特定候選的運動向量對要編碼的視頻塊編碼。
12.如權利要求11所述的設備,其特征在于還包括候選存儲器,所述存儲器存儲候選視頻塊,所述差值處理器從候選存儲器內的多個輸出組檢取每個候選視頻塊內的多個象素。
13.如權利要求12所述的設備,其特征在于所述視頻編碼控制器生成標識一個候選視頻塊的象素索引,所述設備進一步包括存儲器控制單元,以將象素索引轉換成候選存儲器內的物理地址,所述差值處理器基于物理地址從多個輸出組檢取候選視頻塊內的多個象素。
14.如權利要求13所述的設備,其特征在于所述存儲器控制單元將象素索引轉換成候選存儲器內的邏輯地址,并將邏輯地址轉換成候選存儲器內的物理地址。
15.如權利要求13所述的設備,其特征在于要編碼的視頻塊以及每個候選視頻塊定義符合MPEG-4標準的16乘16象素陣列。
16.如權利要求11所述的設備,其特征在于所述差值處理器并行計算差值,所述差值是小于要編碼的視頻塊行內所有象素和搜索空間內候選視頻塊象素間的差值。
17.如權利要求11所述的設備,其特征在于所述搜索空間定義了按列安排的多個候選視頻塊陣列。
18.如權利要求17所述的設備,其特征在于還包括存儲器控制單元,該控制單元用搜索空間內的候選視頻塊加載候選存儲器用于并行地計算差值計算。
19.如權利要求11所述的設備,其特征在于所述視頻編碼控制器根據MPEG標準的一個對要編碼的視頻塊編碼。
20.如權利要求11所述的設備,其特征在于計算差值計算包括計算絕對差值計算。
21.一設備,其特征在于并行地計算差值的裝置,所述差值是要編碼的視頻塊的多個象素相對于搜索空間內一個或多個候選視頻塊的象素的差值;生成差值的裝置,所述差值至少部分基于計算的差值計算定義了要被編碼的視頻塊和候選視頻塊間的類似程度;標識產生可接受差值的特定候選的裝置;以及使用特定候選的運動向量對要編碼的視頻塊編碼的裝置。
22.如權利要求21所述的設備,其特征在于還包括用于從候選存儲器內多個輸出組檢取每個候選視頻塊內多個象素的裝置。
23.如權利要求22所述的設備,其特征在于還包括用于接收標識一個候選視頻塊的象素索引的裝置;將象素索引轉換成候選存儲器內物理地址的裝置;以及基于物理地址從多個輸出組檢取候選視頻塊內的多個象素的裝置。
24.如權利要求23所述的設備,其特征在于還包括將象素索引轉換成候選存儲器內的邏輯地址的裝置;以及將邏輯地址轉換成候選存儲器內的物理地址的裝置。
25.如權利要求23所述的設備,其特征在于要編碼的視頻塊和每個候選視頻塊定義了符合MPEG-4標準的一個16乘16象素宏塊陣列。
26.如權利要求21所述的設備,其特征在于還包括用于并行計算少于要編碼的視頻塊行內所有象素和搜索空間內候選視頻塊間的差值。
27.如權利要求21所述的設備,其特征在于所述搜索空間定義了按列安排的多個候選視頻塊的一個陣列。
28.如權利要求27所述的設備,其特征在于還包括用于將搜索空間內的候選視頻塊加載候選存儲器的裝置;用于并行地計算要被編碼的第一視頻塊內的多個象素以及候選存儲器內的候選視頻塊間的差值計算的裝置;用所述候選視頻塊重新加載候選存儲器子集的裝置,所述候選視頻塊對應于搜索空間內的新列;以及并行地計算要被編碼的第二視頻塊內多個象素以及候選存儲器內候選視頻塊間的差值的裝置。
29.如權利要求21所述的設備,其特征在于還包括根據MPEG標準的一個對要被編碼的視頻塊進行編碼的裝置。
30.如權利要求21所述的設備,其特征在于還包括生成差值的裝置,所述差值至少部分基于計算的差值計算定義了要被編碼的視頻塊子集和候選視頻塊子集間的類似程度。
31.一無線通信設備,其特征在于包括視頻捕獲設備,以捕獲包括視頻塊的視頻幀;視頻編碼器,并行地計算差值,所述差值是要編碼的視頻塊的多個象素相對搜索空間內的一個或多個候選視頻塊的象素間的差值;并生成差值,所述差值至少部分基于計算的差值計算定義了要被編碼的視頻塊和候選視頻塊間的類似程度,標識產生可接受差值的特定候選,并使用特定候選的運動向量對要編碼的視頻塊編碼;以及無線發射機,將編碼后的視頻塊發送到另一設備。
全文摘要
該揭示描述了一些視頻編碼技術,所述技術減少了對視頻序列編碼需要的處理周期和存儲器轉移數目。這樣,揭示的視頻編碼技術可以增加視頻編碼速度并減少功耗。總體而言,視頻編碼技術可以使用候選存儲器,所述存儲器按列存儲對應于運動估計例程的搜索空間。存儲器控制單元可以定址候選存儲器以并行方式檢取多個象素,用于與要編碼的視頻塊象素的同時比較,例如使用絕對差值求和(SAD)或平方差值求和(SSD)技術。差值處理器可以并行地實現計算。另外,對于要編碼的相繼視頻塊,候選存儲器可以通過載入新的視頻塊列而遞增地經更新,而不是重新載入整個搜索空間。
文檔編號H04N7/26GK1675933SQ03819330
公開日2005年9月28日 申請日期2003年6月18日 優先權日2002年6月18日
發明者K·C·賴, G·C·西, C·常, A·P·馬羅二世 申請人:高通股份有限公司