專利名稱:多通道視頻譯碼的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及處理視頻流的系統(tǒng),更具體地說,涉及存儲在視頻處理中使用的數(shù)據(jù)的系統(tǒng)和方法。
背景技術(shù):
和用于能夠利用非常簡單的電路,對接收的模擬媒體數(shù)據(jù)解碼的模擬廣播系統(tǒng)的模擬調(diào)諧器不同,數(shù)字媒體數(shù)據(jù),例如運動視頻,通常需要處理器強化的操作,以便重構(gòu)數(shù)字媒體。如果媒體流具有和媒體流相關(guān)的大量數(shù)據(jù),例如支持高清晰度電視(HDTV)1920×1080i格式所需的數(shù)據(jù)傳輸速率,那么對多個同時的數(shù)字媒體流解碼的成本和工作量非常高。目前借助利用幀間內(nèi)容的連續(xù)性產(chǎn)生高度壓縮的數(shù)據(jù)的壓縮方案解決該問題。運動圖像專家組(MPEG)已提出包括將運動估計用于幀間的多塊圖像,以便實現(xiàn)壓縮在內(nèi)的各種方法。
壓縮視頻數(shù)據(jù)的步驟對處理器和存儲帶寬要求很高。運動估計(一個壓縮步驟)需要大量的計算工作,這么大量的計算工作能夠用完大量的可用帶寬。在常見的運動估計方法中,一幀圖像數(shù)據(jù)首先被分成多個片段或塊。隨后,對照另一幀或多幀中的一個或多個片段或塊組,比較當(dāng)前幀圖像的一個片段或塊組。每個交替幀中的最佳片段或塊組可能不在和當(dāng)前幀相同的位置上。在每個交替幀和當(dāng)前幀之間,該位置經(jīng)常不同。片段相對于前一幀的位置被表示成運動矢量。通常使用對處理器和存儲帶寬要求很高的復(fù)雜搜索算法構(gòu)造每個運動矢量,這種搜索算法必須考慮多種片段組合。
在極高的分辨率下,例如1920×1080i格式下,這種壓縮流的數(shù)據(jù)速率很高。高數(shù)據(jù)速率至少造成三個問題。首先,在任意時間長度內(nèi)記錄或存儲這樣的流需要大量的存儲器,成本高得驚人。其次,可用于觀看這種流的許多顯示設(shè)備不能顯示這種高分辨率的數(shù)據(jù)流。第三,在存在具有多個觀看或接收設(shè)備的數(shù)據(jù)網(wǎng)絡(luò)的情況下(這種網(wǎng)絡(luò)一般具有固定的帶寬或容量),這種網(wǎng)絡(luò)不能同時支持多個觀看設(shè)備。另外,建立幀的每個片段或宏塊通常需要多個運動矢量。這進一步增加了處理和帶寬問題。
因此,需要一種處理視頻流的改進系統(tǒng)和方法。
圖1是圖解說明根據(jù)本發(fā)明的至少一個實施例的MPEG變碼器處理器的方框圖;圖2是圖解說明根據(jù)本發(fā)明的至少一個實施例的MPEG變碼器處理器的操作的流程圖;圖3是圖解說明根據(jù)本發(fā)明的至少一個實施例的壓縮視頻譯碼系統(tǒng)的方框圖;圖4是圖解說明根據(jù)本發(fā)明的至少一個實施例的矢量處理器的方框圖;圖5是圖解說明根據(jù)本發(fā)明的至少一個實施例的壓縮視頻譯碼處理器的操作的流程圖;圖6圖解說明使用本發(fā)明的至少一個實施例公開的譯碼系統(tǒng)的方法;圖7圖解說明根據(jù)本發(fā)明一個實施例的數(shù)據(jù)指令分組;圖8更詳細地圖解說明圖3的一部分;圖9更詳細地圖解說明圖3的一部分;圖10圖解說明源宏塊和目的地宏塊與圖像幀的關(guān)系;圖11圖解說明在本發(fā)明的一個具體實施例中,存儲在線性地址空間中的數(shù)據(jù)指令分組;圖12圖解說明存儲在存儲設(shè)備中的數(shù)據(jù)分組信息及其存儲在縮放緩存器中的對應(yīng)宏塊信息;圖13圖解說明根據(jù)本發(fā)明的另一實施例,存儲在線性地址空間中的數(shù)據(jù)指令分組信息;圖14圖解說明存儲在設(shè)備存儲器中的數(shù)據(jù)指令分組信息和數(shù)據(jù)指令分組指針及其在縮放緩存器中的對應(yīng)宏塊信息;圖15-19圖解說明根據(jù)本發(fā)明的具體方法;圖20更詳細地圖解說明位操作器的具體實施例;圖21更詳細地圖解說明位操作器的線路緩存器和寄存器的具體實施例;圖22圖解說明代表通過位操作器的功能數(shù)據(jù)流的方框圖;圖23以方框圖的形式圖解說明產(chǎn)生位偏移指針的具體方法或系統(tǒng);圖24以流程圖的形式圖解說明根據(jù)本發(fā)明一個具體實施例的方法;圖25以方框圖的形式,圖解說明覆蓋在一幀源宏塊上面的一幀目的地宏塊的表現(xiàn);圖26以方框圖的形式,圖解說明在實現(xiàn)本發(fā)明的具體實施例中使用的存儲器的表現(xiàn);圖27以表格形式,圖解說明根據(jù)一個實施例,存儲在圖26的存儲器的一部分中的數(shù)據(jù)的表現(xiàn);圖28以流程圖的形式,圖解說明根據(jù)本發(fā)明一個具體實施例的方法;圖29以方框圖的形式,圖解說明根據(jù)本發(fā)明的系統(tǒng)。
具體實施例方式
根據(jù)本發(fā)明的至少一個實施例,提供用于譯碼的系統(tǒng)。該系統(tǒng)包括接收數(shù)字視頻數(shù)據(jù)并提供解析視頻數(shù)據(jù)的第一通用處理器。系統(tǒng)還包括與第一處理器耦接,以便獲得解析視頻數(shù)據(jù)的第二處理器,第二處理器包括一個視頻變碼器。根據(jù)在圖25-29中圖解說明的本發(fā)明的一個具體實施例,運動矢量和量化信息存儲在存儲器中,并利用索引表訪問,以便減少系統(tǒng)使用的存儲帶寬。本發(fā)明的優(yōu)點在于媒體通道可被有效接收和譯碼。另一優(yōu)點在于更有效地支持視頻通道的實時重放。
圖1-5圖解說明對多個媒體通道譯碼的系統(tǒng)和方法。該系統(tǒng)包括解析具有一個或多個媒體通道的媒體數(shù)據(jù)流的第一處理器,和解壓縮,縮放隨后壓縮解析的媒體通道的矢量處理器。在一個實施例中,解析的媒體通道被打包成解碼器指令分組,并通過利用排序器,被傳送給矢量處理器。矢量處理器對解碼器指令分組解壓縮,縮放從所述分組產(chǎn)生的宏塊,隨后壓縮縮放后的結(jié)果。從而,縮放并且壓縮后的輸出具有較少的和媒體通道相關(guān)的數(shù)據(jù),便于更快和/或更高效的存儲或傳輸。
現(xiàn)在參見圖1,根據(jù)本發(fā)明的至少一個實施例,圖解說明了視頻處理系統(tǒng)的高級功能方框圖。視頻處理系統(tǒng)100包括接收代表將提供給MPEG解碼器110的視頻圖像的數(shù)據(jù)的輸入緩存器105。MPEG解碼器110在存儲器(RAM1 120)中產(chǎn)生視頻圖像或者視頻圖像解壓縮幀的隨意按比例縮小的表現(xiàn)。另外,MPEG解碼器110可從解壓縮過程中,獲得運動矢量和量化信息。我們將每個宏塊的運動矢量和量化信息的集合稱為宏塊信息。宏塊信息存儲在存儲器(RAM2 140)中。注意通常不利用標準MEPG解碼器,將宏塊信息存儲在存儲器中。另外注意在其它實施例中,存儲器120和140可包括動態(tài)隨機存取存儲器,靜態(tài)動態(tài)隨機存取存儲器,硬盤驅(qū)動器存儲設(shè)備等。
在一個實施例中,MEPG編碼器150執(zhí)行正常MEPG編碼的許多步驟,但是通過檢索先前存儲在RAM2 140中的運動矢量,避免計算量大的運動估計步驟。通過檢索該組環(huán)繞(surrounding)運動矢量,并建立一組新的運動矢量,MPEG編碼器150能夠避免在常規(guī)的運動估計中需要的成本極高的搜索。輸出緩存器160包括在將數(shù)據(jù)位輸出給最終目的地,例如存儲器或者耦接的接收這種數(shù)據(jù)的設(shè)備的任意輸出端口之前,累積數(shù)據(jù)位的位存儲桶。
另外注意在每個圖像數(shù)據(jù)內(nèi),每個宏塊的量化信息可隨著每個宏塊的內(nèi)容而變化。使用更大的量化值會產(chǎn)生進一步壓縮的數(shù)據(jù),導(dǎo)致較小的數(shù)據(jù)流,但是也會引起每個宏塊中細節(jié)的丟失。在適當(dāng)編碼源MPEG2流(接收數(shù)據(jù))中,來自每個宏塊的量化信息將被優(yōu)化,并且根據(jù)本發(fā)明,我們可重復(fù)使用該量化信息,如同在與本申請同日提出的同時待審的專利申請“METHOD AND SYSTEM FOR RATECONTROL DURING VIDEO TRANSCODING”中公開的那樣(該申請作為參考包含于此)。事實上,通過重復(fù)使用該量化信息,能夠獲得更高質(zhì)量的圖像,從而允許宏塊的更大量化,所述宏塊的更大量化擔(dān)負得起與過度壓縮相關(guān)的細節(jié)的損失,同時保持應(yīng)包含更主要細節(jié)的宏塊細節(jié)。
參見圖2,根據(jù)本發(fā)明的至少一個實施例,圖解說明了譯碼方法。參考圖2中圖解說明的具體實施例,附圖標記為205-250的單元表示變碼器的解碼器部分的功能,單元255-295表示變碼器的編碼器部分的功能。注意該例子假定1/2×1/2的圖像縮小比例。在MPEG術(shù)語學(xué)中,宏塊是單個像素的16×16矩陣。在MPEG術(shù)語學(xué)中,塊是單個像素的8×8矩陣。當(dāng)以1/2×1/2按比例縮小時,假定一組2×2宏塊被轉(zhuǎn)換形成單個宏塊。一般借助在以較小的位圖呈現(xiàn)最終結(jié)果的同時,保持盡可能多的原始圖像的內(nèi)容的努力,實現(xiàn)1/2×1/2比例縮小操作。眾所周知,比例縮小意味著按照某一方式組合一組像素,產(chǎn)生由較少的像素組成的另一組。對于1/2×1/2的比例縮小來說,存在幾種選擇。例如,一種可能的實現(xiàn)是,按照預(yù)定方式混合像素。但是,本領(lǐng)域的技術(shù)人員會理解存在多個途徑混合像素,從而獲得相同的結(jié)果,或者可能在不進行混合的情況下實現(xiàn)相同的縮放。
在步驟205中,檢索正被解碼的宏塊并進行位解析。在步驟210中,利用霍夫曼解碼器進行可變長度解碼,所述可變長度解碼可以是運行等級或游程長度解碼,以便檢索和特定塊相關(guān)的信息。檢索的信息包含一系列的運行等級序列,每個運行等級序列代表一個具有由游程含蓄定義的一連串連續(xù)零值的8×8備用矩陣(稱為塊)。當(dāng)在MPEG范圍內(nèi)稱為運行等級時,游程指的不是等級值的反復(fù)行程,而是0的連續(xù)行程。就MPEG來說,按照交錯(zigzag)方式建立塊。
解碼之后,該過程在步驟215對產(chǎn)生的塊去量化(dequantize),這涉及用矩陣中的元素去乘塊中的每個元素。本領(lǐng)域中眾所周知,去量化是逆量化,可在解碼過程的開始,檢索或確定固定常數(shù)的矩陣,當(dāng)流被解碼時很少發(fā)生變化。稀疏矩陣的每個元素被乘以來自該常數(shù)矩陣中對應(yīng)項的常數(shù)值。為了理解逆量化過程的重要性,首先應(yīng)明白的是在壓縮過程中,在一個實施例中,塊經(jīng)歷離散余弦變換(DCT)步驟,將圖像塊轉(zhuǎn)換到頻域。在圖像塊的這種表現(xiàn)中,仍然能夠無任何損失地檢索初始塊(up to源于數(shù)字表現(xiàn)局限性的算術(shù)舍入)。
在頻域中,數(shù)據(jù)塊具有有趣的性質(zhì)。對人眼來說,圖像的表現(xiàn)的主要決定因素主要由位于左上角的塊(矩陣)的項(始于矩陣的索引
)決定。對人眼來說,對塊右下角的項的變化對重構(gòu)塊的視覺影響較小。編碼過程中的量化的目的是利用這種性質(zhì),試圖將接近于0,并且在位置上更接近于右下角的項作為0來處理,同時盡可能多地保持左上角中的信息。
在塊被去量化之后,在步驟220中對數(shù)據(jù)塊應(yīng)用反向離散余弦變換(IDCT)方法,以便獲得原始形式的塊。宏塊判定步驟225結(jié)束之后,循環(huán)進行步驟205-220,直到獲得完整的宏塊為止。對于MPEG來說,該宏塊通常由4(2×2)塊Y(照度或亮度)信息和1塊Cr及1塊Cb組成。當(dāng)獲得完整的宏塊時,過程轉(zhuǎn)到測試解碼器運動矢量步驟230,確定或識別宏塊的運動矢量。如果不存在特定宏塊的任何運動矢量,那么在一個實施例中,在步驟245中,依據(jù)某一比例因子,例如1、2、4或8,宏塊被比例縮小,并被寫出。
在存在一組運動矢量的情況下,在步驟235中,運動矢量將被存儲到存儲區(qū),例如存儲器140(圖1)中,所述存儲區(qū)存儲用于建立該幀的所有初始運動矢量。在步驟240中,執(zhí)行運動補償,建立新的宏塊。隨后在步驟245中被按比例縮小并輸出。
在步驟250中,如果幀已完成,那么在步驟255,過程初始化幀編碼器,這將開始在步驟260中對宏塊編碼。如果當(dāng)前宏塊沒有任何運動矢量(在步驟265確定),那么在步驟282中,從在解碼過程中產(chǎn)生的比例縮小和解壓縮幀讀取該宏塊,在步驟284中,該宏塊中的每塊經(jīng)歷離散余弦變換。如果當(dāng)前的宏塊具有運動矢量(在步驟265中確定),那么在步驟270中,從存儲器檢索四組相鄰的運動矢量,并在步驟275和280中,將其用于建立初始圖像幀。本例中,注意使用1/2×1/2的縮放比例。會需要關(guān)于其它比例因子的更多運動矢量的檢索。例如,如果依據(jù)1/3×1/3比例縮放,那么理應(yīng)使用9個運動矢量。如果依據(jù)2/5×2/5比例縮放,那么會使用4~9個運動矢量,取決于如何產(chǎn)生結(jié)果的運動矢量。
在步驟275中,可按照多種途徑建立新的運動矢量。在一種方法中,可對來自四組運動矢量中每一組的矢量的各個分量應(yīng)用1/2的簡單平均按模計算。在一個備選實施例中,利用破壞聯(lián)系的任意方法,可選擇每組k個運動矢量中最頻繁發(fā)生的運動矢量(ΔXk,ΔYk)。破壞聯(lián)系的一種可能方法是選擇最接近于左上側(cè)的運動矢量的元素。
借助在步驟275中建立的新的運動矢量,過程轉(zhuǎn)到從存儲的解壓縮圖像幀讀取宏塊,隨后建立包含應(yīng)用逆運動補償步驟的結(jié)果的delta幀,從而在步驟280中獲得該delta幀。此時,delta宏塊被發(fā)送給在步驟286中對所有塊執(zhí)行離散余弦變換(DCT)的單元(舍入每個元素被矩陣元素的整數(shù)除法)。隨后在步驟288中,所得到的每個塊的量化矩陣表現(xiàn)被變長編碼。繼續(xù)該過程,直到在步驟295中檢測到幀的編碼器末端為止,用信號通知解碼器開始處理下一幀。注意利用運動矢量的雙重緩存,并對其它命令流排隊,編碼器和解碼器步驟可并行進行。
至少一個實施例的一個特征在于,在存在運動矢量的情況下,在步驟235中,運動矢量將被存儲到存儲用于建立處理幀的所有初始運動矢量的存儲區(qū)中。另外,通過檢索存儲的運動矢量并在步驟275中,利用簡單的處理步驟建立一組新的運動矢量,避免了計算量大,并且成本高的運動估計步驟。通過避免成本高的運動估計步驟,本發(fā)明可提供成本效果更高的解決方案,該解決方案基本上實現(xiàn)和從scratch搜索運動矢量的系統(tǒng)相同的譯碼質(zhì)量。
參見圖3,根據(jù)本發(fā)明的另一實施例,圖解說明了壓縮視頻譯碼系統(tǒng)。壓縮視頻譯碼系統(tǒng)300(這里稱為譯碼系統(tǒng)300)可在各種實現(xiàn)中包括部分、全部或者不包含視頻處理系統(tǒng)(圖1)。譯碼系統(tǒng)300包括媒體源301,變碼器設(shè)備303,主中央處理器(CPU)305,總線/存儲器控制器307(即,北橋芯片),主動態(tài)隨機存取存儲器(DRAM)309,系統(tǒng)輸入/輸出(I/O)總線315,網(wǎng)絡(luò)控制器320和設(shè)備存儲器390。
在一個實施例中,變碼器設(shè)備303包括處理器330,霍夫曼解碼器333,輸入位存儲桶335,存儲器控制器340,解碼器指令分組(DIP)排序器345,視頻處理器350和系統(tǒng)直接存儲器存取(DMA)總線接口380。在至少一個實施例中,處理器330是通用處理器,例如RISC處理器,而DIP排序器345,和視頻處理器350是被優(yōu)化以便高效處理特定任務(wù)的專用數(shù)據(jù)處理器。在一個實施例中,視頻處理器350,排序器345和處理器330被集成到一個公共基體上,例如半導(dǎo)體基體或插件基體上。在不脫離本發(fā)明的精神或范圍的情況下,根據(jù)需要,譯碼系統(tǒng)300可包括另外的部件。
在至少一個實施例中,媒體數(shù)據(jù)流310代表來自一個或多個源301的數(shù)字媒體數(shù)據(jù),每個源可具有一個或多個媒體數(shù)據(jù)通道。媒體源301可包括媒體數(shù)據(jù)流的任意源,例如MPEG播放器,通過網(wǎng)絡(luò)控制器320與譯碼系統(tǒng)300連接的數(shù)據(jù)服務(wù)器等。在一個實施例中,當(dāng)在系統(tǒng)303接收時,媒體數(shù)據(jù)流采取字節(jié)、或字格式。在其它實施例中,媒體數(shù)據(jù)流310可以是由系統(tǒng)330組織成字節(jié)或適當(dāng)字大小的位流。一旦采取恰當(dāng)?shù)淖指袷?,?shù)據(jù)被傳送給存儲器控制器340。在一個實施例中,媒體數(shù)據(jù)流310被看作存儲器控制器340的客戶??赏ㄟ^一組共用或?qū)S幂斎胍€,或者通過系統(tǒng)I/O總線315,媒體數(shù)據(jù)流可被提供給存儲器控制器340。通常,存儲器控制器340將根據(jù)預(yù)定的優(yōu)先化方案,例如循環(huán)方案,或者根據(jù)將參考圖5更詳細說明的固定優(yōu)先化,對其每個客戶判優(yōu)。
來自媒體數(shù)據(jù)流310的數(shù)據(jù)存儲在設(shè)備存儲器390中。設(shè)備存儲器390可包括快速存儲器,隨機存取存儲器,高速緩存存儲器等。一旦數(shù)據(jù)流被存儲在設(shè)備390中,那么多個客戶機,包括處理器330和視頻處理器350能夠通過控制器340訪問存儲器390,并從存儲器390獲得數(shù)據(jù)流。這允許系統(tǒng)303并行處理數(shù)據(jù)。
在一個實施例中,處理器330使用輸入位存儲桶335作為集結(jié)區(qū),以支持對存儲在存儲器390中的數(shù)據(jù)的位級存取,以及緩存數(shù)據(jù),從而降低處理器330和存儲在存儲器390中的數(shù)據(jù)之間的等待時間。例如,通過使用輸入位存儲桶335,處理器330可請求可變范圍內(nèi)的任意位或位的倍數(shù)。例如,處理器可請求始于地址位置的位3的字節(jié)或者恰當(dāng)大小的字。返回的值將具有恰當(dāng)對準提供給處理器330的實際數(shù)據(jù)的邊界的位3的值。
在一個實施例中,處理器330是通用處理器,例如MIP處理器,或者專用處理器,例如ASIC。通用處理器是執(zhí)行軟件規(guī)定的一個或多個功能的數(shù)據(jù)處理器,這里要明白的是軟件理應(yīng)包括固件。在一個實施例中,處理器330存取接收的視頻數(shù)據(jù),并執(zhí)行糾錯;過濾,例如媒體數(shù)據(jù)流310的解析或解碼,產(chǎn)生通過媒體數(shù)據(jù)流310接收的所需媒體數(shù)據(jù)通道的解碼器指令分組(DIP)。DIP包括將由DIP排序器220和矢量處理器230用于產(chǎn)生新的宏塊的具體指令和/或控制信息。一旦產(chǎn)生,那么DIP可被存儲器控制器340存儲在設(shè)備存儲器390中。在另一實施例中,糾錯、過濾或解析功能中的一個或多個功能由設(shè)備303的另一組件執(zhí)行。例如,在存儲器控制器340將媒體數(shù)據(jù)流310存儲在設(shè)備存儲器390中之間,可使用位流過濾器(未示出)對媒體數(shù)據(jù)流310進行過濾操作。處理器330也可利用專用霍夫曼解碼器333執(zhí)行霍夫曼解碼過程?;舴蚵獯a器333可包括硬件或軟件中,加速解碼過程的簡單的可變位查尋表。
DIP排序器345起視頻處理器350的控制單元的作用。事實上,DIP排序器可被認為是視頻處理器350的一部分。排序器345是從其接收數(shù)據(jù)的存儲器控制器340的客戶機,并將數(shù)據(jù)連同控制信號一起提供給視頻處理器(變碼器)350。
在一個實施例中,視頻處理器350是接收來自DIP排序器345的DIP和控制信號,隨后著手按照流水線方式進行媒體解碼,以使通過量達到最大的視頻變碼器。在至少一個實施例中,視頻處理器350使用解壓縮塊355解壓縮DIP。解壓縮塊355的數(shù)據(jù)輸出被傳送給縮放部件(scalar block)360,在縮放部件360,解壓縮視頻數(shù)據(jù)依據(jù)比例因子被縮放,隨后被輸出給壓縮部件365。在一個實施例中,壓縮部件365壓縮縮放部件360的輸出,產(chǎn)生壓縮數(shù)據(jù),例如視頻幀,并將壓縮數(shù)據(jù)傳送給輸出位存儲桶370,輸出位存儲桶370存儲壓縮視頻數(shù)據(jù)的位,直到整個字準備好由存儲器控制器340存儲為止。下面參考圖4,更詳細說明視頻處理器350的一個具體實現(xiàn)。
存儲器控制器340將視頻處理器350看作客戶機,從輸出位存儲桶370檢索其數(shù)據(jù),并將其存儲在設(shè)備存儲器390中。一旦一幀壓縮媒體從視頻處理器350檢索并存儲在存儲器390中,那么系統(tǒng)DMA總線接口380可訪問該幀壓縮媒體,并利用系統(tǒng)I/O總線315將其發(fā)送給北橋307。北橋307再將數(shù)據(jù)發(fā)送給主DRAM 309。在一個實施例中,主DRAM 309用作將分配給系統(tǒng)其余部分的最終媒體數(shù)據(jù)通道的存儲器。在一個實施例中,主處理器350安排最終媒體數(shù)據(jù)通道何時將被發(fā)送給網(wǎng)絡(luò)控制器320,誰負責(zé)最終媒體數(shù)據(jù)通道的分配和廣播。在一個實施例中,網(wǎng)絡(luò)控制器與用于顯示傳送的信息的多個顯示設(shè)備連接。注意北橋307代表使主CPU 305與系統(tǒng)(主)存儲器308和IO總線315連接的集成或多芯片解決方案。
現(xiàn)在參見圖4,根據(jù)本發(fā)明的至少一個實施例,圖解說明了視頻處理器350的一種具體實現(xiàn)?;叵胍曨l處理器350利用解壓縮部件355,對從媒體數(shù)據(jù)流解析的媒體數(shù)據(jù)通道(采取DIP的形式)解壓縮,利用縮放部件360縮放輸出,隨后利用壓縮部件365壓縮縮放后的輸出。在本發(fā)明的一個實現(xiàn)中,解壓縮部件355包括去交錯(deZigZag)/去量化部件410,反向離散余弦變換(IDCT)部件420,運動補償430和宏塊緩存器440,而壓縮部件365包括緩存運動預(yù)測器部件450,離散余弦變換(DCT)部件460,量化/交錯部件470和霍夫曼編碼器480。要認識到可獨立實現(xiàn)解壓縮部件355和/或壓縮部件365的一個或多個組件。
如前所述,在一個實施例中,通過存儲器控制器240,DIP排序器345從設(shè)備存儲器390(圖3)檢索解碼器指令分組(DIP)。這種情況下,DIP排序順345隨后能夠按照將DIP提供給適當(dāng)位置的方式,將DIP轉(zhuǎn)發(fā)給變碼器350。例如,通過經(jīng)變碼器350本地總線直接尋址并提供數(shù)據(jù),能夠向各個塊提供數(shù)據(jù),或者排序器345能夠?qū)⒖刂苐and和/或數(shù)據(jù)信息寫入寄存器中樞,變碼器350部件能夠訪問所述寄存器中樞。在正常的數(shù)據(jù)流內(nèi),排序器將使去交錯/去量化部件410能夠檢索數(shù)據(jù)。
在一個實施例中,DIP排序器根據(jù)通過媒體數(shù)據(jù)流310接收的,并存儲在存儲器390中的基本流數(shù)據(jù),檢索DIP?;叵朐谥辽僖粋€實施例中,媒體數(shù)據(jù)流310(圖3)包括一個或多個MPEG視頻數(shù)據(jù)通道。這種情況下,視頻通道的壓縮的MPEG算法通常具有離散余弦變換(DCT)階段,離散余弦變換實現(xiàn)時域-頻域變換。作為這種變換的結(jié)果,和位于矩陣右下角的元素相比,頻域中和所得到的矩陣中索引為(0,0)的左上側(cè)元素最接近的元素post-DCT被更大地加權(quán)。如果頻域中的矩陣使用較低的精度表示元素矩陣右下方一半的元素,那么如果右下方一半中的較小值低于以量化因子為基礎(chǔ)的閾值,那么它們被轉(zhuǎn)換成0。將每個元素除以量化因子是用于產(chǎn)生更多0元素的一種方法。MPEG和相關(guān)算法通常應(yīng)用更大的量化值,以便降低頻域中矩陣的精度,導(dǎo)致更多的0元素,從而降低數(shù)據(jù)傳輸速率。因此,在一個實施例中,去交錯/去量化部件410對媒體數(shù)據(jù)通道上DCT操作的結(jié)果去離化。
類似地,雖然通常用(行,列)格式表示矩陣,不過作為DCT函數(shù)的結(jié)果產(chǎn)生的矩陣的獨特性質(zhì)提供一種表示post-DCT矩陣的不同方法。在一個實施例中,按照交錯方式表示post-DCT矩陣,例如(1,1),(2,1),(1,2),(1,3),(2,2),(3,1),(4,1),(3,2),(2,3)等。通過按照這種方式表示post-DCT矩陣,可能遇到post-DCT矩陣中相當(dāng)長的一串0。從而,利用(Run,Level)格式,能夠更有效地表示post-DCT,這里Run代表連續(xù)0的數(shù)目,Level代表post-DCT矩陣的下一非0元素的值。隨后可借助固定的Huffamn表對(Run,Level)對編碼,以便進一步壓縮post-DCT矩陣。
在一個實施例中,來自去交錯/去量化部件410的輸出被發(fā)送給,或者以其它方式提供給將所述輸出從頻域轉(zhuǎn)換到時域的組件。例如,如果先前根據(jù)離散余弦變換處理媒體數(shù)據(jù)流310(由DIP表示)的解析通道,那么來自去交錯/去量化部件410的輸出可被發(fā)送給反向離散余弦變換(IDCT)部件420,在反向離散余弦變換(IDCT)部件420,利用反向離散余弦變換函數(shù)將所述輸出從頻域轉(zhuǎn)換到時域,從而產(chǎn)生一塊數(shù)據(jù)。在不脫離本發(fā)明的精神或范圍的情況下,可使用頻域和時域之間的其它轉(zhuǎn)換方法。IDCT部件420產(chǎn)生的塊可被存儲在宏塊緩存器430中。當(dāng)產(chǎn)生了足以形成宏塊的足夠塊時,宏塊緩存器將將數(shù)據(jù)的宏塊連同宏塊信息(包含運動矢量和量化信息)一起發(fā)送給運動補償器440。
在一個實施例中,運動補償器440可如前參考圖2的步驟240說明的那樣工作,運動補償器440存儲宏塊信息以便以后使用。在一個備選實施例中,存儲的宏塊信息只包含量化信息。如果傳送給運動補償器440的宏塊是基準幀(I-幀)的一部分,那么運動補償器440對該宏塊解碼,并利用存儲器控制器340,將解碼結(jié)果和量化信息寫入設(shè)備存儲器390(圖3)?;鶞蕩话惚挥糜谧g解必須根據(jù)運動矢量構(gòu)成的其它非基準幀。
在一個實施例中,運動補償器440產(chǎn)生的新的宏塊被發(fā)送給縮放部件360,在縮放部件360,利用比例因子縮放該宏塊。例如,如果宏塊包括塊的4×4矩陣,并且使用為2的比例因子,那么所得到的縮放宏塊會包括塊的2×2矩陣。所得到的縮放宏塊隨后被傳送給緩存運動預(yù)測器450,以便開始壓縮過程。
在一個實施例中,當(dāng)產(chǎn)生足以形成一個新的完整宏塊的足夠的縮放宏塊時,諸如緩存運動預(yù)測器440之類運動矢量發(fā)生器處理相關(guān)的存儲運動矢量,從而產(chǎn)生一組新的運動矢量。在一個備選實施例中,可按照傳統(tǒng)方式,根據(jù)相鄰幀的宏塊,產(chǎn)生運動矢量。
每次傳送一塊數(shù)據(jù)地將基準幀傳送給DCT 460。DCT 460獲得每塊數(shù)據(jù),并通過例如如前所述,進行離散余弦變換,將該數(shù)據(jù)塊從時域變換到頻域。在一個實施例中,如果宏塊不具有與其相關(guān)的任意運動矢量,例如幀內(nèi)或I幀,那么在不受運動預(yù)測器450處理的情況下,利用內(nèi)部數(shù)據(jù)通路,直接從縮放部件360將宏塊傳送給DCT部件460。
在一個實施例中,DCT 460輸出的修改塊被發(fā)送給量化/交錯部件470,在量化/交錯部件470,該塊從(行,列)格式被量化和/或變換,或者“交錯”成對于運動等級編碼來說更佳的格式。來自量化/交錯部件470的量化和/或交錯輸出隨后可被發(fā)送給霍夫曼編碼器480,霍夫曼編碼器480壓緊或壓縮來自量化/交錯部件470的輸出,并將壓縮結(jié)果以位流的形式發(fā)送給輸出位存儲桶370。在一個實施例中,輸出位存儲桶能夠在等待時間較小的情況下,以位級方式,將數(shù)據(jù)存儲在任意位單元。例如,輸出位存儲桶能夠起累積從霍夫曼編碼器480輸出的位流的緩存器的作用,從而能夠高效地將所述位流寫入設(shè)備存儲器390。
變碼器350還包括IDCT部分475,它對來自量化器的數(shù)據(jù)進行IDCT。該數(shù)據(jù)與來自運動預(yù)測器450的數(shù)據(jù)結(jié)合,并被存儲以便校正有損壓縮的效果。在一些實施例中,使用有損壓縮的校正,因為變碼器產(chǎn)生的幀可被用作形成其它幀的基準幀。通過提供校正有損壓縮的步驟,能夠限制誤差的擴散,從而提高編碼器部分產(chǎn)生的數(shù)據(jù)的準確性。
圖5圖解說明了存儲器控制器340的一個具體實施例。具體地說,圖5圖解說明具有接收來自特定客戶機的請求的多個客戶機接口FIFO 510-514(先進先出存儲器)的存儲器控制器。客戶機接口FIFO分別接收來自特定客戶機的數(shù)據(jù)存取請求。在圖解說明的實施例中,在多路復(fù)用器520,在多條寫數(shù)據(jù)總線接收寫數(shù)據(jù)。判優(yōu)器525確定將服務(wù)于哪個待決的寫請求,并提供適當(dāng)?shù)目刂菩盘枺员憬邮諏?yīng)的輸入通道。存儲器排序器530按照有效的方式組織讀請求。例如,一旦一頁存儲器打開,那么排序器通常將嘗試服務(wù)來自同一頁的請求,以便降低等待時間開銷。除了與存儲器,例如雙倍數(shù)據(jù)速率(DDR)存儲器連接之外,排序器能夠使用與寄存器總線客戶機接口連接的寄存器文件。讀數(shù)據(jù)返回通路將獲得的數(shù)據(jù)提供給讀返回控制部分535。讀返回控制部分535與讀數(shù)據(jù)總線連接,從而將信息返回給多個客戶機之一。
參見圖6,根據(jù)本發(fā)明的至少一個實施例說明了利用譯碼系統(tǒng)300的方法。譯碼方法600開始于步驟610,在步驟610,媒體數(shù)據(jù)流310(圖3)被變碼器303接收,或者被傳送給變碼器303。如前所述,媒體數(shù)據(jù)流310可存儲在設(shè)備存儲器390中(圖3),以便以后檢索。在步驟620中,處理器330解析媒體數(shù)據(jù)流310,識別所需的數(shù)據(jù)通道,例如從MPEG播放器發(fā)送的視頻數(shù)據(jù)通道。處理器330也可在步驟620對媒體數(shù)據(jù)流310執(zhí)行其它處理,例如糾錯,過濾等。
在一個實施例中,在步驟630中,解析的數(shù)據(jù)通道以解碼器指令分組(DIP)的形式,被傳送給視頻處理器350。如前參考圖4所述,視頻處理器器350的解壓縮部件355對DIP解壓縮。在步驟640中,縮放部件360利用比例因子縮放解壓縮部件355的輸出,以便減小與媒體數(shù)據(jù)流310的所需通道的元素相關(guān)的數(shù)據(jù)量。例如,通過縮放MPEG視頻通道的宏塊,表現(xiàn)每幀需要的數(shù)據(jù)減少。在步驟650中,如前參考圖4所述,從縮放部件360輸出的縮放數(shù)據(jù)被壓縮部件365壓縮。來自壓縮部件365的壓縮輸出隨后被輸出給一個或多個接收器單元。接收器單元可包括各種媒體設(shè)備,例如視頻顯示終端,音頻設(shè)備等。
作為譯碼系統(tǒng)300執(zhí)行的處理的結(jié)果,媒體數(shù)據(jù)流310(圖1)的通道被按比例縮小或者被壓縮,導(dǎo)致與所述通道相關(guān)的較少數(shù)據(jù)。例如,視頻處理器350(圖3)能夠按比例縮小來自MPEG播放器的視頻數(shù)據(jù)流(媒體數(shù)據(jù)流310)的通道,導(dǎo)致每幀數(shù)據(jù)較少的通道。這種按比例縮小隨后允許通過網(wǎng)絡(luò)或者其它媒介,更快和/或更有效地傳送視頻數(shù)據(jù)通道。例如,在一個實施例中,媒體數(shù)據(jù)流310包括將被用于實時重放的多個視頻數(shù)據(jù)通道。這種情況下,通過單獨按比例縮小一個或多個視頻數(shù)據(jù)通道,能夠更快和/或更高效地傳送它們,從而支持視頻通道的實時重放。
這里公開的特殊實施例容許各種修改和備選形式。于是附圖和詳細說明中舉例表示了具體實施例。但是應(yīng)明白,附圖和詳細說明并不意圖將本發(fā)明限制于公開的特定形式,相反,在法律允許的最大范圍內(nèi),本發(fā)明將覆蓋落入由權(quán)利要求及其等同物限定的本發(fā)明的精神和范圍內(nèi)的所有修改,等同物和替換物。例如,在圖1中圖解說明的系統(tǒng)中,解碼器110和存儲器120及140之間的連接可代表獨立總線或共用總線。同樣地,編碼器150和輸出緩存器之間的連接,以及解碼器和輸入緩存器之間的連接可代表相同或不同的連接,就與存儲器120和140的連接來說,甚至可以共用。另外,在本發(fā)明的另一實施例中,選擇編碼器確定運動矢量的標準操作模式和如同這里說明的運動矢量復(fù)用模式之一。一種模式的選擇通常以先前存儲的宏塊信息的可用性為基礎(chǔ)。注意在另一實施例中,在標準操作模式內(nèi),解碼器不存儲運動矢量。
本發(fā)明的一種實現(xiàn)是駐留在如附圖中描述那樣配置的一個或多個處理系統(tǒng)的隨機存取存儲器中的多組計算機可讀指令。在被處理系統(tǒng)要求之前,該組指令可存儲在另一計算機可讀存儲器中,例如存儲在硬盤驅(qū)動器或者存儲在可拆卸的存儲器,例如最終用在CD驅(qū)動器或DVD驅(qū)動器中的光盤,或者最終用在軟盤驅(qū)動器中的軟盤中。此外,該組指令可存儲在另一圖像處理系統(tǒng)的存儲器中,并通過局域網(wǎng)或廣域網(wǎng),例如因特網(wǎng)傳送,這里傳送的信號可以是通過諸如ISDN線路之類媒介傳播的信號,或者信號可通過空中傳播,并被本地衛(wèi)星接收,從而被傳送給處理系統(tǒng)。這種信號可以是包含載波信號的復(fù)合信號,包含在載波信號內(nèi)的是包含實現(xiàn)本發(fā)明的至少一個計算機程序指令的所需信息,并且當(dāng)用戶需要時,可照這樣被下載。本領(lǐng)域的技術(shù)人員會認識到各組指令的物理存儲和/或傳送物理改變以電、磁或化學(xué)方式存儲所述各組指令的媒介,以致所述媒介攜帶計算機可讀信息。
數(shù)據(jù)指令分組(DIP或“DIP分組”)是能夠同時包含指令信息和數(shù)據(jù)的數(shù)據(jù)分組。圖7圖解說明了DIP分組的一個例子。
圖7中圖解說明的DIP具有首標部分,配置部分和數(shù)據(jù)部分。DIP的首標包括一個操作碼和一個尺寸指示符。DIP的操作碼部分指示一個指令,或者將與具體的DIP分組相關(guān)的其它控制信息。在一個實施例中,首標的尺寸部分指示是否存在與DIP相關(guān)的尺寸有效負載。例如,尺寸部分可具有指示不存在與DIP相關(guān)的任何配置或數(shù)據(jù),只指示首標大小的值。另一實施例允許尺寸部分值指示DIP由DIP(EOD)指示符的末端端接。另一實施例允許尺寸部分值指示用后續(xù)的字節(jié)數(shù)規(guī)定DIP的大小。例如,尺寸部分值可指示接下來的兩個或四個字節(jié)包含規(guī)定DIP大小的無符號整數(shù)。
DIP的配置部分可包含與其具體操作碼相關(guān)的配置信息。例如,DIP可具有指示包括圖像控制信息的操作碼,從而能夠預(yù)先確定配置部分,以致DIP解碼器會從位于預(yù)定位置的配置部分獲得控制信息注意DIP的配置部分是可選的,取決于實際的DIP。另外,配置部分可包含上面所述的尺寸有效負載數(shù)據(jù)。
指令分組的數(shù)據(jù)部分可包含與DIP分組相關(guān)的數(shù)據(jù)。例如,壓縮或非壓縮視頻數(shù)據(jù)可包含為具體DIP的一部分。注意,數(shù)據(jù)部分的存在以操作碼為基礎(chǔ)。在不存在配置或數(shù)據(jù)部分的模式下,首標部分可規(guī)定與配置和操作數(shù)據(jù)無關(guān)的要執(zhí)行的具體操作。
根據(jù)公開內(nèi)容的具體模式,DIP分組被用于按照視頻數(shù)據(jù)與從中接收視頻數(shù)據(jù)的數(shù)據(jù)類型無關(guān)的方式,分包數(shù)字視頻數(shù)據(jù),例如基本流數(shù)據(jù)。于是,如果特定的視頻標準,例如MPEG標準在未來發(fā)生變化,或者如果需要支持一種不同的數(shù)字視頻標準,用于產(chǎn)生DIPS的程序可發(fā)生變化,以適應(yīng)接收的視頻數(shù)據(jù),同時保持DIP格式不變。由于能夠獨立于具體的視頻標準設(shè)計硬件,因此效率較高。
具體DIP操作碼的例子包括指示DIP包含視頻時間戳記信息的DIP操作碼,指示圖像配置信息包含在DIP內(nèi)的DIP操作碼,指示片斷或宏塊信息包含在DIP內(nèi)的DIP操作碼,指示縮放宏塊信息包含在DIP內(nèi)的DIP操作碼,指示量化矩陣數(shù)據(jù)包含在DIP內(nèi)的DIP操作碼,指示最后的圖像DIP應(yīng)被重復(fù)的DIP操作碼,和/或指示具體圖像位置,例如片段、幀或宏塊的末端的DIP操作碼。要明白可包括另外的操作碼,以支持其它功能,并且包含操作碼的實際DIP通常被存儲并且隨后被解碼。
圖8以方框圖的形式圖解說明了用于產(chǎn)生DIP分組的系統(tǒng)300(圖3)的一部分。圖8包括DIP發(fā)生器部分710,在一個實施例中,DIP發(fā)生器部分對應(yīng)于圖3的處理器的一部分;設(shè)備存儲器390;和數(shù)據(jù)輸入控制器715,在一個實施例中,數(shù)據(jù)輸入控制器對應(yīng)于DIP排序器345的一部分。要認識到在備選實施例中,可利用不同于圖解說明的其它硬件或軟件解決方案,實現(xiàn)圖解說明的各個組件。
DIP發(fā)生器710包括基本流讀出器712,數(shù)據(jù)指令分組發(fā)生器711和指針控制部分713。在一個實施例中,可用軟件在具有輸入端口和輸出端口的組合物的通用處理器上實現(xiàn)每個部件711-713,所述輸入和輸出端口用于向單個軟件模塊提供數(shù)據(jù),以及接收來自單個軟件模塊的數(shù)據(jù)。在另一實施例中,可用具有使組件相互耦接的輸入和輸出端口的硬件實現(xiàn)部件711-713。
存儲器390包括存儲基本流數(shù)據(jù)391、DIP數(shù)據(jù)392和DIP指針數(shù)據(jù)393的各個部分。
操作上,基本流讀出器712接收來自存儲器部分391的基本流數(shù)據(jù)或者其它視頻數(shù)據(jù)。在一個實施例中,基本流數(shù)據(jù)391首先接收自媒體源301,如圖3中所示,并被存儲在部分391中。一般來說,該數(shù)據(jù)將被存儲為代表視頻圖像的基本流數(shù)據(jù)。如同參考圖3所述那樣,可作為對存儲器控制器的客戶請求的結(jié)果,接收該數(shù)據(jù)。基本流讀出器接收視頻數(shù)據(jù),從而它可由數(shù)據(jù)指令分組發(fā)生器711分組。數(shù)據(jù)指令分組發(fā)生器產(chǎn)生實際的DIP,所述實際DIP包括圖3的視頻處理器部分350的后續(xù)控制和操作所必需的指令和數(shù)據(jù)。
除了分包視頻數(shù)據(jù)供視頻處理器350使用之外,數(shù)據(jù)指令分組發(fā)生器能夠產(chǎn)生DIPS,從而配置視頻處理器350。在一個實施例中,數(shù)據(jù)的每個宏塊被存儲為單個DIP。在其它實施例中,多個宏塊可與單個DIP相關(guān)。例如,整段數(shù)據(jù)可作為單個DIP的一部分被傳送。同樣地,要認識到可實現(xiàn)任意數(shù)目的DIP變化,以傳送視頻信息。
當(dāng)具體的DIP由數(shù)據(jù)指令分組發(fā)生器711產(chǎn)生時,它被寫回到DIP存儲部分392,DIP存儲部分392是存儲器390的一部分。要認識到DIP存儲部分392可以是易失性存儲器,或非易失性存儲器,例如硬盤。在一個實施例中,DIP存儲部分392可以是與視頻處理器訪問的幀緩存器相關(guān)的環(huán)形緩存器。通常,相對于正在產(chǎn)生的圖像的查看,實時地發(fā)生基本流讀出器712對基本流數(shù)據(jù)的存取和DIP的產(chǎn)生。一旦DIP數(shù)據(jù)被存儲在存儲單元392中,那么數(shù)據(jù)輸入控制器715能夠接收DIP數(shù)據(jù),從而將其提供給DIP解碼器,如后所述。
根據(jù)本發(fā)明的具體實施例,指針控制部分713跟蹤何時產(chǎn)生新的DIP,并將DIP的指針存儲在存儲單元393中。這里將更詳細地說明DIP指針數(shù)據(jù)的使用。
圖9更詳細地圖解說明設(shè)備303(圖3)的一部分和設(shè)備存儲器390。具體地說,圖9圖解說明存儲器控制器340,DIP排序器345,視頻處理器350和高速緩存存儲器341。圖9中圖解說明的DIP排序器還包括可對應(yīng)于圖8的數(shù)據(jù)輸入控制器715的DIP輸入控制模塊346,DIP解碼器模塊747,和DIP輸出控制模塊348。DIP排序器與視頻處理器350耦接。
視頻處理器350包括和其縮放部件360相關(guān)的其它細節(jié)。具體地說,縮放部件360還包括縮放緩存器351和縮放引擎352。DIP排序器345與存儲器控制器340耦接,存儲器控制器340再與一個或多個存儲設(shè)備,例如設(shè)備存儲器390耦接。注意圖解說明了能夠包括存儲在存儲器390中的數(shù)據(jù)的高速緩存存儲器341。
操作上,DIP排序器345的輸入控制模塊346將通過存儲器控制器340接收具體的DIP信息。在一個實施例中,DIP輸入控制模塊將客戶讀取請求提交給存儲器控制器340。存儲器控制器340將通過高速緩存存儲器341或者設(shè)備存儲器390接收DIP。當(dāng)收到請求的DIP時,解碼器347將根據(jù)DIP分組的操作碼部分執(zhí)行操作。在一個實施例中,DIP解碼器模塊347將包括與每個DIP操作碼相關(guān)的微代碼。根據(jù)具體的操作碼,DIP排序器345將通過DIP輸出控制模塊348,與視頻處理器部分350連接。
例如,如果具體DIP中的操作碼指示包含圖像配置數(shù)據(jù),那么DIP解碼器模塊347將用硬件或軟件執(zhí)行寫入視頻處理器350的恰當(dāng)寄存器,從而用具體信息配置視頻處理器350的功能。例如,具體的縮放信息,例如作為DIP分組的一部分包括的,涉及源圖像大小和目標圖像大小的信息可被存儲到控制縮放引擎352的功能的一個或多個寄存器中。
圖10-14與一個具體實施例中,使用視頻處理器350的縮放過程內(nèi)DIP的使用相關(guān)。
在本發(fā)明的一個實施例中,DIP排序器訪問存儲在設(shè)備存儲器390中的DIP,并將代表宏塊的信息提供給視頻處理器350。一般來說,提供給變碼器350的DIP數(shù)據(jù)是代表視頻宏塊的壓縮數(shù)據(jù)。通過將該數(shù)據(jù)連同恰當(dāng)?shù)慕鈮嚎s信息一起提供給視頻處理器350,視頻處理器能夠解壓縮該數(shù)據(jù),得到解壓縮的宏塊數(shù)據(jù)。要明白的是,在將非壓縮宏緩存器數(shù)據(jù)存儲在縮放緩存器351中之前,可存在由視頻處理器350執(zhí)行的數(shù)個解壓縮過程。但是,為了便于說明,將認為DIP排序器345將宏塊數(shù)據(jù)提供給縮放緩存器。還應(yīng)明白的是,在本發(fā)明的另一實施例中,DIP排序器會執(zhí)行視頻處理器執(zhí)行的一些或全部解壓縮功能。
一旦宏塊數(shù)據(jù)被存儲在縮放部件360的縮放緩存器351中,那么縮放引擎352能夠訪問存儲在縮放緩存器351中的宏塊數(shù)據(jù),從而提供縮放的宏塊,縮放引擎能夠使用傳統(tǒng)的縮放方法,或者這里公開的縮放方法產(chǎn)生縮放圖像。參考圖10有益于更好地理解本發(fā)明,圖10圖解說明了宏塊與圖像幀的關(guān)系。
圖10圖解說明包含宏塊M(0,0)~M(n,m)的一幀視頻。為了便于說明,圖10的宏塊被描述成代表一幀數(shù)據(jù),但是在其它實施例中,圖10的宏塊實際上可代表數(shù)據(jù)一塊數(shù)據(jù),或者只是一幀或一塊數(shù)據(jù)的一部分。
圖10的幀與特定的分辨率相關(guān)。例如,圖10的幀可被認為是分辨率為1920像素×1080像素的源幀。由于每個宏塊代表該幀的16像素×16像素部分,因此用于代表一幀的宏塊的數(shù)目取決于幀的分辨率。應(yīng)注意的是,雖然術(shù)語宏塊具有具體的含義,為了便于說明和/或?qū)崿F(xiàn),在本發(fā)明的其它實施例中,可使用不同于傳統(tǒng)宏塊的塊大小。
操作上,在被縮放引擎352訪問之前,圖10中圖解說明的幀的宏塊被存儲在縮放緩存器351中,縮放引擎352產(chǎn)生代表縮放圖像的目的宏塊。例如,為了產(chǎn)生分辨率小于1920×1080,例如1280×720分辨率的目的圖像,縮放引擎352必須訪問多個源宏塊。如圖10中所示,為了產(chǎn)生一個新的目的宏塊DM(DMR0,DMC0),需要四個宏塊,所述目的宏塊DM(DMR0,DMC0)是與行DMR0和列DMC0相關(guān)的宏塊。換句話說,當(dāng)圖像正被按比例縮小時,根據(jù)一個以上的源宏塊產(chǎn)生單個目的宏塊。
對于縮放引擎352來說,為了有效地進行縮放,縮放引擎352應(yīng)能夠通過縮放緩存器351獲得源宏塊。根據(jù)本發(fā)明的一個具體實施例,這是通過裝入第一組宏塊,例如一段數(shù)據(jù)(即第一行的宏塊(0,0)~(n,0))或者第一批多段數(shù)據(jù)來實現(xiàn)的。新的目的片斷將產(chǎn)生包含由DRM0限制的水平數(shù)據(jù)的新的一行或者多個宏塊。于是,單片源宏塊不包含足以產(chǎn)生用于代表新片段的目的宏塊的足夠宏塊數(shù)據(jù)。根據(jù)本發(fā)明的一個具體實施例,還只裝入一行宏塊的一部分。例如,為了產(chǎn)生目的宏塊DM(DMR0,DMC0),至少需要第二行宏塊M(x,1)的源宏塊M(0,1)和M(1,1)。由于允許通過將少于整段視頻數(shù)據(jù)的視頻數(shù)據(jù)存儲到縮放緩存器中,產(chǎn)生目的宏塊,從而減小了縮放緩存器的大小,因此該具體實施例的效率高于已知的方法。
一旦目的宏塊被產(chǎn)生,那么不再需要用于產(chǎn)生后續(xù)目的宏塊的源宏塊可被重寫。注意在本實施例中,縮放緩存器的大小將由正在實現(xiàn)的實際比例因子確定,或者由能夠?qū)崿F(xiàn)的最大比例因子確定。例如,參見圖10,可看出為了產(chǎn)生所示目的塊大小的目的宏塊(參見M(DMR1,DMC1),需要多達9個源宏塊。在本實施例中,縮放緩存器需要適應(yīng)于存儲兩個片段,加上第三個片段的三個額外的宏塊。當(dāng)希望提供額外的緩存能力,以確??s放引擎352不會停止時,可包括更大部分的第三片段。
本實施例的優(yōu)點在于由于源宏塊被順序存儲,例如相對于掃描順序,因此代表宏塊的DIP分組被順序訪問。圖11圖解說明了依次存儲在地址空間中的各個宏塊的DIP分組。根據(jù)本發(fā)明的一個具體實施例,每個DIP分組可具有不同的大小。通過順序訪問DIP分組,使DIP排序器能夠確定一個分組始于何處,另一分組止于何處。于是,與具體的一段宏塊相關(guān)的所有DIP分組可被順序存儲在存儲器390中,從而允許順序從存儲器391獲得相鄰的宏塊。
圖12圖解說明存儲在一部分存儲設(shè)備390中的DIP數(shù)據(jù)391,存儲設(shè)備390可以是幀存儲器或者高速緩存存儲器。如存儲器表現(xiàn)391所示,DIP數(shù)據(jù)391從DIP(0,0)~DIP(n,m)被順序存儲在存儲器中。在一個實施例中,只有在讀取當(dāng)前DIP之后,每個后續(xù)DIP的位置才是可識別的。通常,這是通過相對于線性存儲空間,將DIP存儲在彼此緊鄰的存儲單元中來實現(xiàn)的。圖解說明存儲在縮放緩存器352中的數(shù)據(jù)的存儲器表現(xiàn)352代表由DIP數(shù)據(jù)391產(chǎn)生的宏塊數(shù)據(jù)。注意在圖12中,圖解說明與第一片段相關(guān)的宏塊,以及宏塊(0,1)~宏塊(3,1)被存儲。雖然這大于產(chǎn)生目的宏塊M(DMR0,DMC0)所需的宏塊的數(shù)目,但是它允許存儲其它信息,以確??s放引擎352不會停止。要認識到根據(jù)本發(fā)明選定的等待時間,也可使用另外的縮放緩存器大小。
圖13和14圖解說明本發(fā)明的另一實施例,借助該實施例,通過只存儲產(chǎn)生緊接的目的宏塊所需的那些源宏塊,能夠利用具有較小尺寸的縮放緩存器351。要認識到圖9的系統(tǒng)必須相對于具體DIP的掃描序列,無次序地訪問具體DIP,以便譯解特定的目的宏塊。圖13圖解說明存儲在特排序列353中的DIP數(shù)據(jù),從而指示識別特定DIP的位置的指針。如圖14中進一步所示,代表一個特定宏塊的各個DIP的指針被存儲在存儲器390的DIP指針表部分中。
在一個實施例中,以每個指針之間存在已知間隔的方式,將指針值存儲在DIP指針部分中。例如,指針值可存儲在緊鄰的字中。通過將指針存儲在已知或者易于計算的位置,DIP輸入控制模塊346能夠根據(jù)產(chǎn)生的目的宏塊,訪問特定的DIP。能夠無序訪問DIP優(yōu)于現(xiàn)有技術(shù),以及前面描述的方法,因為由于只需容納縮放引擎352產(chǎn)生特定目的宏塊所需的那些源宏塊,實現(xiàn)了尺寸減小的縮放緩存器。于是,DIP輸入控制模塊346能夠只訪問產(chǎn)生所希望目的宏塊需要的那些源DIP。例如,再次參見圖14,為產(chǎn)生目的宏塊M(DMR0,DMC0),可以只訪問與宏塊M(0,0),M(1,0),M(1,0)和M(2,0)相關(guān)的DIP。
根據(jù)本發(fā)明的一個實施例,按照實際掃描順序,將源DIP存儲在存儲器390內(nèi)。在另一實施例中,按照預(yù)期的訪問順序,例如縮放順序,存儲源DIP分組。術(shù)語縮放順序用于指示為了適應(yīng)按照特定順序的目的宏塊的產(chǎn)生,需要被訪問的源宏塊的順序。例如,雖然宏塊的掃描順序是從第一行開始直到最后一行,從左到右越過每行宏塊,不過縮放順序以目的宏塊將被產(chǎn)生的順序為基礎(chǔ)。于是,在要產(chǎn)生的目的宏塊的順序是M(DMR0,DMC0),之后是M(DMR0,DMR1)的情況下,掃描序列的一個例子應(yīng)是按照下述順序訪問源宏塊M(0,0)、M(1,0),M(0,1),M(1,1),M(2,0),M(3,0),M(2,1),M(3,1)。注意由于宏塊M(0,0)和M(1,0)被用于只產(chǎn)生宏塊M(DMR0,DMC1),因此一旦不再需要它們,那么它們就可被后續(xù)宏塊重寫。
由于存儲有指示每個順序DIP被存儲于何處的指針表,因此對于了解DIP存儲于何處來說,DIP本身存儲在存儲器中的實際順序并不重要。但是,在另一實施例中,和掃描訪問順序相反,按照縮放訪問順序存儲DIPS,以便提高將緊鄰訪問的數(shù)據(jù)被存儲在相同一頁存儲器上的可能性,從而減小與從存儲器獲得DIP數(shù)據(jù)相關(guān)的等待時間。同樣地,要認識到存儲DIP指針的實際順序可以縮放序列為基礎(chǔ),或者按照除掃描順序之外的某一順序方式。例如,可按照相對于掃描訪問序列,訪問順序DIPS的方式,存儲指針本身。
圖15-18圖解說明根據(jù)本發(fā)明的具體方法。圖15圖解說明根據(jù)本發(fā)明的存儲信息的具體方法,在步驟810,第一組宏塊被存儲在縮放緩存器中。在一個實施例中,第一組宏塊將包含與特定的圖像幀相關(guān)的一個或多個片段的視頻信息。通過存儲與一個或多個整個片段相關(guān)的宏塊,能夠確定每個相鄰存儲的DIP的起點和終點。
在步驟811,第二組宏塊數(shù)據(jù)被存儲到縮放緩存器中。第二組宏塊數(shù)據(jù)代表一段幀數(shù)據(jù)的一部分。如前所述,在一個實施例中,第二組數(shù)據(jù)包括開始產(chǎn)生新的一組縮放宏塊所需的視頻片段的那些宏塊。
圖16根據(jù)本發(fā)明的一個具體實施例,圖解說明了另一方法。圖16的方法包括已參考圖15說明的步驟810和811。在步驟812,另外的宏塊被存儲到縮放緩存器中。例如,雖然步驟810和811只存儲允許開始新目的宏塊的縮放的足夠源宏塊,不過在縮放緩存器中存儲另外的源宏塊允許在不停止縮放引擎352的情況下,產(chǎn)生另外的目的宏塊。例如,如果產(chǎn)生單個新的目的宏塊所需的第二組宏塊的最大數(shù)目為3,那么步驟812可存儲足夠的其它宏塊(即6個宏塊),以確??s放緩存器總是具有能夠繼續(xù)產(chǎn)生縮放宏塊,而不會停止的足夠信息。
在步驟813,確定圖16的方法是否已將與幀緩存器相關(guān)的所有宏塊存儲在縮放緩存器中。如果所有宏塊已被存儲,那么結(jié)束該流程。如果還沒有存儲幀中的所有宏塊,那么流程進入步驟814,下一宏塊被存儲在幀緩存器中。要認識到在步驟814存儲下一宏塊能夠重寫不再需要的在先宏塊。圖16的方法圖解說明使用數(shù)據(jù)的一個或多個整個片斷,和數(shù)據(jù)的后續(xù)片段的一部分,避免只存儲視頻的整個片段的方法。另外,圖16的方法簡化了在不使用指針表的情況下,已按照掃描順序方式存儲的DIPS的使用。
圖17的方法和圖16的方法類似。步驟818和814被用于將初始宏塊裝入縮放緩存器。隨后,在步驟820,根據(jù)存儲的信息產(chǎn)生新的宏塊。一旦產(chǎn)生了新的宏塊,流程進入步驟830,確定幀緩存器是否已完成。如果否,那么流程進入步驟835,裝入下一宏塊,流程返回步驟820,產(chǎn)生一個新的宏塊。重復(fù)該循環(huán),直到已產(chǎn)生整個幀為止。
圖18根據(jù)本發(fā)明的另一實施例,圖解說明了產(chǎn)生DIP的方法。在步驟860,幀的第一宏塊被識別成當(dāng)前宏塊。一般來說,幀的第一宏塊是包含將在顯示設(shè)備上顯示或掃描的第一像素的宏塊。通常,這將是特定幀的左上側(cè)宏塊。
在一個實施例中,根據(jù)存儲在存儲器中的基本流,識別特定幀的第一宏塊。作為接收數(shù)字視頻數(shù)據(jù),例如MPEG流的結(jié)果,基本流通常存儲在存儲器中。
在步驟861,產(chǎn)生當(dāng)前宏塊的DIP。在一個實施例中,通過將DIP操作碼和從存儲器獲得的視頻數(shù)據(jù)的表現(xiàn)包含到DIP分組的有效負載部分中,產(chǎn)生DIP,這里操作碼指示DIP分組包含宏塊信息。在另一實施例中,可以首先處理從基本流數(shù)據(jù)獲得的宏塊信息,從而在宏塊數(shù)據(jù)被存儲到DIP中之前,產(chǎn)生宏塊數(shù)據(jù)的特定格式。
在步驟862,當(dāng)前DIP被存儲到存儲器中。在一個實施例中,當(dāng)前DIP可被存儲到與幀緩存器相關(guān)的環(huán)形緩存器中。在該實施例中,視頻處理設(shè)備的后續(xù)部分易于訪問DIP。在另一實施例中,DIP被存儲到諸如硬盤驅(qū)動器之類系統(tǒng)存儲資源中,以便視頻處理設(shè)備以后訪問。
在步驟863,當(dāng)前DIP的指針被存儲到DIP指針單元中。由于DIP的大小可變,因此有益的是通過得到指示當(dāng)前DIP存儲于何處的指針,跟蹤當(dāng)前DIP的位置。這允許隨后無序地訪問當(dāng)前DIP。按照易于確定的已知方式,將指針存儲在存儲器的指針單元中。例如,每個指針可具有固定大小,從而導(dǎo)致指針之間固定的距離。當(dāng)最好是只將產(chǎn)生特定宏塊所需的那些宏塊裝入縮放緩存器,從而減小縮放緩存器的所需大小時,這是有利的。
在步驟840,確定圖18的流程是否已完成。在一個實施例中,當(dāng)通過根據(jù)特定幀的基本流產(chǎn)生DIP,處理了整個一幀數(shù)據(jù)時,或者當(dāng)不存在要處理的其它數(shù)據(jù)時,圖18的流程結(jié)束。如果所述處理結(jié)束,那么流程終止,否則流程進入步驟864。
在步驟864,幀的下一宏塊被識別為當(dāng)前宏塊。在一個實施例中,下一宏塊是按照掃描順序的下一宏塊。在另一實施例中,下一宏塊是預(yù)期要訪問的下一宏塊。例如,要訪問的下一宏塊可以是按照掃描順序的下一宏塊。
圖19圖解說明根據(jù)本發(fā)明一個具體實施例的另一方法。具體地說,在步驟851,按照第一順序存儲一組可變大小的DIP。第一順序可由掃描順序代表,由縮放順序代表,或者由任意其它排序代表。
隨后,在步驟852,按照不同于第一順序的第二順序訪問存儲的DIPS。例如,如果在步驟851中按照掃描順序存儲DIPS,那么在步驟852,可按照縮放順序訪問DIPS。如前所述,通過獲得具有指示每個DIP存儲在存儲器中何處的條目的指針表,能夠按照不同的順序訪問DIPS。于是,如果按照第一順序,例如縮放順序存儲DIPS,那么將能夠無序訪問DIPS,而不必解析多個DIPS,以確定特定的DIPS始于何處。在所有只將產(chǎn)生新的特定宏塊所需的那些宏塊存儲在縮放緩存器中的那些實施例中,實現(xiàn)圖19中圖解說明的具體實施例的實施例理應(yīng)是有利的。
參見圖3,位操作器335與通用數(shù)據(jù)處理器330耦接。在一個具體實施例中,通用數(shù)據(jù)處理器330是集成到作為這里描述的專用集成電路(ASIC)一部分的半導(dǎo)體器件上的微處理器/微控制器核心。同樣地,位操作器335被集成到ASIC上,并且可由處理器330訪問,以便支持數(shù)據(jù)的位操作。
在一個操作實施例中,處理器330將讀取請求提供給微控制器340。處理器330能夠響應(yīng)各種情形,包括當(dāng)請求位于新地址的數(shù)據(jù);在位操作器中緩存的數(shù)據(jù)達到預(yù)定水印時;以及當(dāng)處理器330確定存在于位操作器335中的數(shù)據(jù)的數(shù)量小于預(yù)定字節(jié)數(shù)時,產(chǎn)生讀取請求。在一個實施例中,通過讀取與位操作器相關(guān)的寄存器,處理器330能夠確定位操作器中可用數(shù)據(jù)的數(shù)量。在另一實施例中,通過從位操作器接收指示特定數(shù)量的數(shù)據(jù)已被使用的中斷,處理器330能夠確定位操作器中可用數(shù)據(jù)的數(shù)量。
在圖解說明的實現(xiàn)中,處理器330請求的所有數(shù)據(jù)通過位操作器335被返回。注意在其它實施例中,處理器330能夠向存儲器控制器340指示,哪些數(shù)據(jù)將通過位操作器335返回,哪些數(shù)據(jù)將直接返回給處理器330。如圖所示,通過總線,例如專用總線,讀總線或讀/寫總線,數(shù)據(jù)被返回給位操作器335。
在一個備選操作實施例中,位操作器335能夠與處理器330連接,從而它自己的存儲器控制邏輯電路能夠向存儲器控制器340請求數(shù)據(jù)。
位操作器335接收的數(shù)據(jù)隨后可被處理器330順序訪問。在一個實施例中,通過讀取與位操作器335相關(guān)的寄存器,處理器330訪問所述數(shù)據(jù)。例如,位操作器335可具有一組寄存器,所述一組寄存器返回從1到N的特定位數(shù),這里N是處理器330讀取總線的總線大小。另外,位操作器可具有一個位偏移量寄存器,位偏移量寄存器指示要返回的數(shù)據(jù)的第一位的位置。在另一實施例中,通過提供指示數(shù)據(jù)大小的控制信號,并提供恰當(dāng)?shù)目刂菩畔?,可從位操作器獲取數(shù)據(jù)。
圖20圖解說明位操作器335的一個具體實現(xiàn),位操作器335包括線路緩存器910,位存取控制器905,寄存器930和中斷邏輯電路920。
在一個實施例中,線路緩存器910是充當(dāng)先進先出緩存器(FIFO)的環(huán)形緩存器,存儲通過存儲器控制器340從存儲器返回的數(shù)據(jù)。在一個實施例中,接收的數(shù)據(jù)具有根據(jù)來自存儲器的數(shù)據(jù)總線的大小測定大小的字。例如在存儲器支持32位字的情況下,線路緩存器能夠接收32位的數(shù)據(jù)字。在另一實施例中,數(shù)據(jù)總線的大小以通用處理器330的數(shù)據(jù)總線的大小為基礎(chǔ)。
位存取控制器335接收來自處理器330的關(guān)于特定數(shù)據(jù)的請求,并通過處理器的數(shù)據(jù)總線提供所請求的特定位。注意處理器335和位操作器335之間的數(shù)據(jù)總線的大小可不同于存儲器和位操作器之間的數(shù)據(jù)總線的大小。在圖解說明的例子中,處理器330的數(shù)據(jù)總線是16位總線。根據(jù)來自處理器330的請求,將返回1~16位的數(shù)據(jù)。注意當(dāng)小于最大數(shù)目的數(shù)據(jù)位被返回給處理器330時,根據(jù)預(yù)定設(shè)置(它可以是固定或可變設(shè)置),可用1或0填充未使用的位。
寄存器930可被處理器330訪問,在操作上與位存取控制器905和線路緩存器910耦接。在一個實施例中,如前更詳細所述,處理器330能夠監(jiān)視位操作器335的狀態(tài),控制位操作器335,并通過訪問寄存器930,從位操作器335獲得數(shù)據(jù)。
中斷邏輯電路920被用于跟蹤位操作器335中可用數(shù)據(jù)的數(shù)量。在一個實施例中,每次使用線路緩存器910中預(yù)定數(shù)量的數(shù)據(jù)時,向處理器330提供一個中斷。在另一實施例中,通過對寄存器組930的一個寄存器編程,以指示每次從線路緩存器910讀取特定數(shù)目的數(shù)據(jù)時,應(yīng)產(chǎn)生一個中斷,用戶可選擇預(yù)定數(shù)量的數(shù)據(jù)。例如,寄存器可被編程為監(jiān)視8位、16位、32位、64位或128位數(shù)據(jù)已被使用。在另一實施例中,存儲在線路緩存器中的數(shù)據(jù)的當(dāng)前字節(jié)的總數(shù)被存儲在寄存器組930的一個寄存器中。
通過向處理器330提供監(jiān)視線路緩存器中可用數(shù)據(jù)的數(shù)量的途徑,處理器330能夠向存儲器控制器340發(fā)出存儲器訪問請求,從而確保數(shù)據(jù)被存儲在位操作器中。另外,通過向處理器330提供監(jiān)視線路緩存器中可用數(shù)據(jù)的數(shù)量的途徑,處理器330能夠確保在數(shù)據(jù)請求被發(fā)送給位操作器335之前,數(shù)據(jù)適用于高速緩存存儲器。這允許處理器330延遲給位操作器335的數(shù)據(jù)請求,除非確保對位操作器的讀取不會停止將被高速緩存的數(shù)據(jù)存取請求。
圖21更詳細地圖解說明了圖20的各個部分,包括寄存器組930和線路緩存器910。
寄存器組包括多個寄存器,包括規(guī)定線路緩存器存儲單元存在的地址范圍的棧頂寄存器和基址寄存器。尾部寄存器指向數(shù)據(jù)將被訪問的線路緩存器的下一有效線路。注意指針可指示數(shù)據(jù)將被訪問的線路緩存器的實際線路,或者線路緩存器的某一線路,所述某一線路偏離數(shù)據(jù)將被訪問的線路緩存器的實際線路。
位偏移寄存器指示相對于要訪問的下一組位的第一位的偏移量。例如,圖21指示指向位3的位偏移指針。位偏移值指示的位將是由位操作器輸出左對齊的位。注意,在備選實施例中,返回的位可被右對齊。
水印寄存器存儲指示何時需要將另外的數(shù)據(jù)裝入線路寄存器的值。水印值可指示分別與頭部或尾部指針相比,確定數(shù)據(jù)何時被訪問的與尾部或頭部指針的偏移量。另一方面,水印值可指示與尾部指針的位置相比,確定數(shù)據(jù)何時被訪問的固定位置。不同的實施例使用水印啟動中斷處理器330的過程,或者允許處理器330讀取水印和其它寄存器,以確定另外的數(shù)據(jù)何時將被裝入位操作器中。
如前所述,線路緩存器計數(shù)寄存器能夠存儲指示與線路緩存器相關(guān)的有效數(shù)據(jù)的數(shù)量的值。例如,線路緩存器計數(shù)寄存器能夠指示存儲在還要被訪問的線路緩存器910中的字節(jié)的數(shù)目。
圖22圖解說明表示經(jīng)過位操作器335的功能數(shù)據(jù)流的方框圖。存儲單元955存儲大小至少為處理器330的數(shù)據(jù)總線大小的2倍的數(shù)據(jù)。由于將被提供給處理器330的數(shù)據(jù)字的第一位可被定位于任意位單元,因此要提供的字可被定位于下面的兩個當(dāng)前字內(nèi)。多路復(fù)用器950被用于響應(yīng)從存儲單元955的一個字轉(zhuǎn)變到下一字的位偏移值,將下一字裝到存儲單元955。注意在圖解說明的實施例中,多路復(fù)用器955的輸出是16位。要認識到可以使用另外的邏輯電路(未示出)將下一16位提供給多路復(fù)用器950。
圖23以方框圖的形式,圖解說明了更新位偏移值的一個具體實施例。該實施例圖解說明接收當(dāng)前位偏移值的數(shù)值和要讀取的位的數(shù)目大小的模加法器。加法器的輸出提供新的位偏移值。
移位器960根據(jù)位偏移量,對準存儲在單元955中的位值,從而移位器960輸出的數(shù)據(jù)的最左側(cè)位是由位偏移值指定的那些位。屏蔽器(mask)962用0或1填充未被數(shù)據(jù)請求明確請求的那些位。例如,在一個實施例中,如果數(shù)據(jù)的3位被請求,那么它們將被左對齊,而屏蔽器將用0填充右側(cè)的13位。
在本發(fā)明的一個實施例中,響應(yīng)GET_BIT(X)函數(shù)訪問位操作器335,這里X規(guī)定要返回的位數(shù)。代替使用內(nèi)部寄存器和處理器操作,處理器330訪問對應(yīng)于位操作器335的寄存器的特定地址單元。例如,可使用16個特定的地址單元(寄存器)實現(xiàn)16個命令GET_BIT(1)~GET_BIT(16),這里位操作器335返回請求數(shù)量的數(shù)據(jù),并恰當(dāng)?shù)馗录拇嫫?,包括位偏移值,所述位偏移值被遞增讀取數(shù)據(jù)的數(shù)量。在另一實施例中,可向位操作器提供其它命令,位操作器訪問特定數(shù)目的位,但是并不遞增位偏移寄存器或尾部寄存器。例如,在一個實施例中,在不遞增尾部寄存器的情況下,可訪問整個字的數(shù)據(jù)。
在前面說明的實施例中,數(shù)據(jù)指令分組被用于將宏塊數(shù)據(jù)發(fā)送給變碼器350。例如,源宏塊信息數(shù)據(jù)可作為DIP的一部分在變碼器350被接收。參見圖3,作為媒體數(shù)據(jù)流310一部分的視頻數(shù)據(jù)(即源運動矢量和量化信息)在設(shè)備303被接收,并被存儲在設(shè)備存儲器390中,以便進一步處理。隨后,系統(tǒng)303檢索存儲的數(shù)據(jù),包括源運動矢量,產(chǎn)生將由變碼器250使用的DIP。在一個實施例中,DIP在變碼器350被接收,控制解碼和編碼功能的操作。在一個實施例中,第一DIP包含解碼器用于產(chǎn)生源像素數(shù)據(jù)的源宏塊信息,第二DIP包含編碼器用于允許按照2001年3月27日提交的申請?zhí)?9/819147的同時待審專利申請“Device and Method for Compression of a VideoStream”(該專利申請作為參考包含于此)中所述那樣,執(zhí)行運動矢量預(yù)測的源信息。
當(dāng)運動矢量和量化信息作為DIP的一部分被傳送時,特定宏塊的宏塊信息數(shù)據(jù)可在存儲器控制器330和設(shè)備存儲器390之間傳送多達7次。當(dāng)最初收到宏塊信息數(shù)據(jù)時,傳送第一次,當(dāng)被檢索以便裝配解碼器DIP時,傳送第二次,當(dāng)被檢索以便裝配編碼器DIP時,傳送第三次,當(dāng)存儲解碼器DIP時,傳送第四次,當(dāng)存儲編碼器DIP時,傳送第五次,當(dāng)解碼器訪問解碼器DIP時,傳送第六次,當(dāng)編碼器訪問編碼器DIP時,傳送第七次。這里說明本發(fā)明的一個備選實施例,該備選實施例減少在存儲器控制器340和設(shè)備存儲器390之間傳送宏塊信息的次數(shù),從而減少存儲帶寬的數(shù)量。在圖24-29中描述了提高存儲帶寬利用率的這種備選實施例。
圖24圖解說明描述本發(fā)明的一個具體實施例的方法。參考圖3、25-27說明圖24的方法,圖25以方框圖的形式圖解說明的相互重疊的源宏塊和目的宏塊的視頻幀,圖26以方框圖的形式圖解說明與圖24的方法相關(guān)的數(shù)據(jù)的內(nèi)存映像。
在圖24中圖解說明的方法的步驟1010,接收源視頻信息。參考圖3,源視頻信息是媒體數(shù)據(jù)流310的一部分。在一個實施例中,源視頻信息包含宏塊信息,例如與MPEG型信息相關(guān)的宏塊信息。圖25圖解說明用輕實線繪制的源幀,所述源幀具有構(gòu)成X×Y陣列的多個宏塊,這里X是表示具體宏塊的數(shù)字,Y是代表特定一行宏塊的數(shù)字。例如,源宏塊(1,2),也稱為SMB(1,2)是存在于源幀的列1和行2的源宏塊。
在步驟1012,存儲源視頻信息。就這里的具體實施例來說,公開內(nèi)容將集中于源視頻信息的宏塊信息部分。圖26圖解說明存儲源數(shù)據(jù)陣列的內(nèi)存映像。在一個實施例中,源數(shù)據(jù)陣列中的每個節(jié)點包括對應(yīng)宏塊的特定宏塊配置數(shù)據(jù)(MBCONFIG),以及與該特定宏塊相關(guān)的宏塊信息。參考圖3,源視頻信息可存儲在存儲器390中。
存儲在MBCONFIG字段中的宏塊配置數(shù)據(jù)包括和特定宏塊相關(guān)的各種信息。例如,MBCONFIG字體能夠指示是否將利用正向預(yù)測,反向預(yù)測,或者正向預(yù)測和反向預(yù)測,處理運動補償操作。另外,MBCONFIG字體能夠存儲指示運動矢量的第一或第二最低有效位是否識別要使用的半像素信息的數(shù)據(jù),可包括間距指示符的值,以便指示如何訪問源運動矢量陣列中的下一節(jié)點,以及與對接收的源視頻解碼或編碼相關(guān)或者有用的任意其它類型的信息。
在步驟1014,接收目的圖像信息。通常,目的圖像信息包括目的圖像的分辨率信息。圖25圖解說明一個目的幀,參見重疊在源幀上的粗體虛線。目的幀具有排列成M×N陣列的多個宏塊,這里M是代表目的幀中的一列宏塊的數(shù)字,N是代表目的幀中一行宏塊的數(shù)字。例如,目的宏塊(1,2)或DMB(1,2)是存在于目的幀的列1和行2的目的宏塊。
在步驟1016,根據(jù)目的圖像信息和源圖像信息,產(chǎn)生索引表。具體地說,可確定為了產(chǎn)生每個目的宏塊,需要訪問哪些源宏塊。例如,當(dāng)將相對于源圖像按比例縮小目的圖像時,如圖25中所示,來自源幀的多個宏塊包含為了產(chǎn)生每個目的宏塊,解碼器所需的信息。例如,為了產(chǎn)生目的宏塊(0,0),宏塊(0,0)是圖26的陣列的左上側(cè)目的宏塊,解碼器/編碼器需要源宏塊SMB(0,0),SMB(0,1),SMB(1,0)和SMB(1,1)的源宏塊信息。需要這四個宏塊,因為目的宏塊包含來自這些宏塊中每個宏塊的至少一些數(shù)據(jù)。
根據(jù)宏和目的圖像分辨率信息,產(chǎn)生具有多個條目的索引表,每個條目具有先前在步驟1012存儲的宏塊的源運動矢量和量化信息的指針。相對于其它索引表條目排列索引表中的條目,以致當(dāng)按照預(yù)定方式,例如從第一條目到最后條目訪問索引表時,條目內(nèi)的指針可被用于按照解碼器和編碼器產(chǎn)生目的宏塊信息所需的順序,訪問在步驟1012存儲的源運動矢量。
在步驟1016產(chǎn)生的索引表被存儲在存儲器中。參見圖26,第一宏塊信息(包括運動矢量和量化信息)索引表包括POINTER 1~POINTER LAST,這里POINTER LAST指示為了完成視頻數(shù)據(jù)的特定幀的產(chǎn)生,需要尋址的源宏塊的最后運動矢量。參見圖25的實施例,可看出每個目的宏導(dǎo)體需要四個源宏塊的數(shù)據(jù),于是,圖26的索引表1中條目的總數(shù)為M×N×4。
除了包含特定源節(jié)點的指針之外,索引表條目還包括指示與要產(chǎn)生的特定目的宏塊相關(guān)的最后源宏塊的字段。該最后源宏塊指示符可被解碼器或編碼器用于確定何時收到足以產(chǎn)生目的宏塊的足夠源數(shù)據(jù)。
圖27以表格形式,圖解說明了具體索引表的內(nèi)容的表現(xiàn)。圖27的第一列表示具體索引表內(nèi)的條目位置,第二列表示條目指針指向哪個目的宏塊信息,第三列表示哪些條目對應(yīng)于產(chǎn)生新的目的宏塊所需的最后源宏塊信息。列3中的“1”表示該條目是產(chǎn)生特定目的宏塊所需的最終源宏塊。
在一個實施例中,條目位置1對應(yīng)于圖26中圖解說明的源數(shù)據(jù)陣列的第一項,并包含POINTER1。要注意的是特定的源宏塊通常被索引表的一個以上的條目引用。例如,在圖27中,條目2和條目5都指向源宏塊SMB(0,1)。這是因為源宏塊SMB(0,1)包含目的宏塊DMB(0,0)和DMB(0,1)需要的數(shù)據(jù)。
在步驟1018,產(chǎn)生引用索引表的一個條目的一個或多個數(shù)據(jù)指令分組。通常,該DIP將引用索引表中,解碼器和編碼器用于訪問數(shù)據(jù)并產(chǎn)生目的宏塊的第一條目。注意,如果存在多個目的地目標,那么可產(chǎn)生并存儲另外的索引表。通過每次存儲宏塊信息數(shù)據(jù),并產(chǎn)生解碼器和編碼器通過其能夠按照特定順序訪問矢量的索引表,和存儲器必須為正在產(chǎn)生的每個目的圖像存儲兩組DIP的實施例相比,減小了存儲帶寬。
圖28圖解說明根據(jù)本發(fā)明的另一方法。在步驟1050,訪問第一索引表。如前所述,該索引表被這樣存儲,以致索引表的順序指示為了產(chǎn)生目的宏塊,需要被訪問的特定宏塊信息,例如某一宏塊信息的順序。
在步驟1052,根據(jù)第一索引表條目的順序,按照第一順序訪問多個源宏塊信息。參見圖27,根據(jù)存儲在INDEX TABLE1的條目內(nèi)的指針值,訪問第一批多個源宏塊信息。在步驟1054,根據(jù)在步驟1052獲得的數(shù)據(jù),產(chǎn)生特定的圖像數(shù)據(jù)。在一個實施例中,解碼器利用獲得的宏塊信息,產(chǎn)生源像素組。在另一實施例中,變碼器的編碼器部分根據(jù)在步驟1052獲得的數(shù)據(jù),產(chǎn)生估計的運動矢量。
像素組和估計的運動矢量的產(chǎn)生通常與源像素組的產(chǎn)生同步實時進行。注意同步實時意味著通過利用獨立的處理模塊,滿足系統(tǒng)的實時要求,這兩個功能能夠在時間上同步進行(在完全相同的時間),或者通過利用一個或多個處理模塊,這兩個功能能夠順序進行,從而處理模塊足夠快地實現(xiàn)這兩個功能,以適應(yīng)取決于這兩個結(jié)果的完成的應(yīng)用的實時要求。
例如,視頻應(yīng)用的實時同步意味著足夠快地產(chǎn)生來自解碼器的源像素和來自編碼器的估計運動矢量,以便用于以所需的幀顯示速率產(chǎn)生目的宏塊。例如,特定的實時顯示速率可以是每秒20、30或60次。
對于第二目的系統(tǒng)來說,步驟1056、1058和1060類似于步驟1050、1052和1058。例如,兩個監(jiān)視器能夠接收源圖像的表現(xiàn)。要認識到根據(jù)該具體實施例,只將附加源數(shù)據(jù),即源宏塊信息的一個副本存儲在存儲器中,以便支持一個或多個目的圖像。
應(yīng)注意的是,對于指定圖像來說,索引表通常是靜態(tài)的,因為源圖像和目的圖像之間的縮放很少發(fā)生變化。通過使用固定大小的節(jié)點存儲源數(shù)據(jù),新的源幀的每個宏塊可被存儲在和前一組宏塊相同的宏塊覆蓋范圍(footprint)中,從而在不發(fā)生變化的情況下,允許使用相同的索引表訪問多幀的宏塊數(shù)據(jù)。
圖29圖解說明了根據(jù)本發(fā)明的具體系統(tǒng)。在控制器部分1120接收視頻源數(shù)據(jù),控制器部分1102負責(zé)解析來自輸入源的數(shù)據(jù),并且至少將一部分源宏塊信息存儲在存儲器中。例如,控制器1102負責(zé)存儲在圖26中圖解說明的源數(shù)據(jù)陣列信息。注意由于根據(jù)索引表條目中的指針值,單獨訪問包含宏塊信息的節(jié)點,于是所述節(jié)點不需要被存儲為陣列的形式。在一個實施例中,利用處理器330,可用軟件或固件實現(xiàn)控制器1102。
控制器1102與存儲器控制器1104連接,存儲器控制器1104與存儲器1111連接,以便存儲該數(shù)據(jù)。另外,控制器1102從視頻源獲得信息,確定接收的源視頻圖像的尺寸。源視頻圖像的尺寸指示用于表現(xiàn)每個源幀的分辨率和/或宏塊的數(shù)目。源圖像尺寸被存儲在部件915,它可以是存儲單元,例如寄存器或存儲器1111的一部分。另外,第一目的圖像尺寸被存儲在部件1116中,第二目的圖像尺寸被存儲在部件1117中。目的圖像尺寸指示編碼器1106產(chǎn)生的理想輸出圖像的分辨率。為了便于說明,將只引用存儲在部件1116中的第一目的圖像尺寸。另外,要認識到,如果理想的是產(chǎn)生兩個以上的目的圖像,那么可包括兩個以上的目的圖像尺寸部分。在一個實施例中,控制器1104對應(yīng)于如圖3中所示的存儲器控制器340。類似地,存儲器1111對應(yīng)于特定實施例中的設(shè)備存儲器390。
索引表發(fā)生器1109接收或者以其它方式獲得存儲在1115中的源圖像尺寸和存儲在1116中的目的圖像尺寸。根據(jù)源圖像尺寸和目的圖像尺寸,索引表發(fā)生器將產(chǎn)生具有如前所述格式的索引表。存儲器控制器1104協(xié)調(diào)將發(fā)生器1109產(chǎn)生的索引表存儲到存儲器1111中。在一個實施例中,通過用軟件或固件執(zhí)行代碼,可由處理器330實現(xiàn)索引表發(fā)生器1109。
編碼器1106隨后通過參考索引表內(nèi)特定條目的指針,使用存儲器控制器1104檢索存儲在存儲器1111的源宏塊信息。按照類似的方式,解碼器也可訪問存儲在存儲器11 11的源宏塊信息。注意編碼器和解碼器可被設(shè)計成允許對存儲器1111的公共讀取獲得特定的運動矢量。另外,編碼器和解碼器能夠共享公共高速緩存存儲器,以便減小存儲器總線上的活動。在一個實施例中,編碼器1106可由一部分壓縮部件365(圖3)實現(xiàn),解碼器1107可由一部分解壓縮部件355實現(xiàn)。
在前面的詳細說明中,參考了構(gòu)成本發(fā)明一部分的附圖,附圖中舉例表示了可實踐本發(fā)明的具體優(yōu)選實施例。足夠詳細地描述了這些實施例,以使本領(lǐng)域的技術(shù)人員能夠?qū)嵺`本發(fā)明,顯然可以利用其它實施例,并且在不脫離本發(fā)明的精神或范圍的情況下,能夠做出邏輯、機械、化學(xué)和電學(xué)變化。為了避免對于使本領(lǐng)域的技術(shù)人員能夠?qū)嵺`本發(fā)明來說不必要的詳細,說明省略了本領(lǐng)域技術(shù)人員熟知的一些信息。此外,本領(lǐng)域技術(shù)人員易于構(gòu)成包含本發(fā)明教導(dǎo)的許多其它變化的實施例。因此,本發(fā)明并不局限于這里陳述的具體形式,相反,本發(fā)明意圖覆蓋能夠合理地包括在本發(fā)明的精神和范圍內(nèi)的所有這種替換、修改和等同物。于是,前面的詳細說明不是對本發(fā)明的限制,本發(fā)明的范圍只由附加的權(quán)利要求限定。
權(quán)利要求
1.一種方法,包括下述步驟訪問第一索引表;在視頻解碼器,按照第一順序訪問第一批多個宏塊信息,以產(chǎn)生第一解碼后的圖像,其中所述第一順序基于所述第一索引表,所述第一批多個宏塊信息與源宏塊相關(guān);訪問所述第一批多個宏塊信息,以產(chǎn)生第一估計的目的運動矢量;和其中所述宏塊信息包含運動矢量和量化信息。
2.按照權(quán)利要求1所述的方法,還包括下述步驟根據(jù)所述第一解碼后的圖像和所述估計的目的宏塊信息,產(chǎn)生編碼后的目的視頻圖像。
3.按照權(quán)利要求1所述的方法,其中所述第一索引表包括多個條目,所述多個條目中的每個條目包含保持指示源宏塊信息的位置的值的指針部分,以及保持指示所述多個條目中的一個條目是否是與所述第一目的宏塊信息相關(guān)的最后條目的值的目的宏塊部分的尾部。
4.按照權(quán)利要求1所述的方法,其中所述多個條目中的每個條目具有預(yù)定大小。
5.按照權(quán)利要求4所述的方法,其中每個條目的預(yù)定大小相同。
6.按照權(quán)利要求1所述的方法,其中相對于所述多個條目中的每個其它條目,排列所述多個條目中的每個條目,從而指示所述第一順序。
7.按照權(quán)利要求1所述的方法,還包括下述步驟產(chǎn)生第一目的宏塊的第一估計宏塊信息,其中所述第一目的宏塊信息至少基于所述第一批多個宏塊信息的一部分,所述第一目的宏塊可相對于源宏塊而被按比例縮小。
8.按照權(quán)利要求5所述的方法,其中所述第一索引表包括多個條目,所述多個條目中的每個條目包含保持指示源宏塊信息的位置的值的指針部分,以及保持指示所述多個條目中的一個條目是否是與所述第一目的宏塊信息相關(guān)的最后條目的值的目的宏塊部分的尾部。
9.按照權(quán)利要求8所述的方法,其中相對于所述多個條目中的每個其它條目,排列所述多個條目中的每個條目,從而指示所述第一順序。
10.按照權(quán)利要求9所述的方法,其中所述多個條目中的每個條目具有預(yù)定大小。
11.按照權(quán)利要求10所述的方法,其中每個條目的預(yù)定大小相同。
12.按照權(quán)利要求7所述的方法,還包括下述步驟訪問第二索引表;在視頻解碼器,按照第二順序訪問所述第一批多個宏塊信息,以產(chǎn)生第二解碼后的圖像,其中所述第二順序基于所述第二索引表,所述第一批多個宏塊信息與源宏塊相關(guān);訪問所述第二批多個源宏塊信息,以產(chǎn)生第二估計目的宏塊信息。
13.按照權(quán)利要求10所述的方法,還包括下述步驟根據(jù)所述第一估計目的矢量產(chǎn)生第一宏塊,根據(jù)所述第二估計目的矢量產(chǎn)生第二宏塊,所述第一和第二宏塊將被實時地同步顯示。
14.一種方法,包括下述步驟存儲第一批多個源宏塊的每個源宏塊的視頻源宏塊信息;確定具有多個條目的索引表,所述索引表基于視頻源分辨率和視頻目的分辨率,其中所述索引表的對應(yīng)條目引用每個宏塊的每個源宏塊信息的位置;和存儲所述索引表。
15.按照權(quán)利要求14所述的方法,還包括下述步驟確定將由視頻變碼器的一部分處理的數(shù)據(jù)指令分組,其中所述數(shù)據(jù)指令分組用以識別所述索引表的位置。
16.按照權(quán)利要求14所述的方法,其中所述視頻變碼器的一部分是視頻解碼器部分。
17.按照權(quán)利要求14所述的方法,其中所述視頻變碼器的一部分是視頻編碼器部分。
18.按照權(quán)利要求14所述的方法,其中所述視頻變碼器的一部分是視頻編碼器部分和視頻解碼器部分。
19.按照權(quán)利要求14所述的方法,其中所述索引表的每個條目具有相同大小。
20.按照權(quán)利要求14所述的方法,其中所述索引表包含用以指示與目的宏塊相關(guān)的索引表的一部分的宏塊指示符的尾部。
21.按照權(quán)利要求20所述的方法,其中所述宏塊指示符的尾部被存儲為索引表條目的字段內(nèi)的數(shù)值。
22.一種系統(tǒng),包括接收源視頻數(shù)據(jù)的第一輸入端口;與所述第一輸入端口耦接、用以確定對應(yīng)于所接收的源視頻數(shù)據(jù)的宏塊信息數(shù)據(jù)的控制器部分,其中所述宏塊信息包含運動矢量和量化信息;與控制器部分耦接、用以存儲對應(yīng)于所述源視頻數(shù)據(jù)的多個源宏塊信息的第一存儲器控制部分;和耦接地用于接收目的圖像的尺寸指示符,并產(chǎn)生索引表的索引表發(fā)生器,其中所述索引表識別將用于產(chǎn)生第一目的源矢量的多個源宏塊信息的第一部分,所述索引表基于目的圖像的尺寸指示符。
23.按照權(quán)利要求21所述的系統(tǒng),還包括耦接地用于根據(jù)索引表條目,檢索源宏塊信息的第二存儲器控制部分;與所述第二存儲器控制部分耦接,以根據(jù)所檢索的源宏塊信息產(chǎn)生目的矢量的編碼器部分。
24.按照權(quán)利要求21所述的系統(tǒng),其中利用通用處理器核心實現(xiàn)所述索引表處理器。
全文摘要
公開一種處理通過媒體通道接收的視頻數(shù)據(jù)的系統(tǒng)和方法。所述方法包括利用索引表引用存儲的視頻數(shù)據(jù),包括運動矢量,從而變碼器的編碼器和解碼器能夠高效訪問存儲的視頻數(shù)據(jù),解碼器產(chǎn)生源像素圖像,編碼器根據(jù)存儲的運動矢量數(shù)據(jù),產(chǎn)生估計的運動矢量。
文檔編號H04N7/50GK1615653SQ02827338
公開日2005年5月11日 申請日期2002年11月7日 優(yōu)先權(quán)日2001年11月21日
發(fā)明者尹德拉·萊克索諾 申請人:Vixs系統(tǒng)公司