專利名稱:用于計算逆dct的方法和設備的制作方法
技術領域:
本發明涉及視頻編碼/解碼并且尤其涉及逆變換的計算,諸如考慮失配控制來快速實現用于MPEG視頻解碼的離散余弦逆變換。
在諸如MPEG 1和MPEG 2視頻編碼之類的MPEG(活動圖像專家組Moving Picture Expert Group)標準的核心部分中使用二維的8×8離散余弦變換(discrete cosine transform DCT)。已經公布了用于快速計算(在編碼期間所使用的)DCT和(在解碼期間所使用的)逆DCT的許多方法。然而,這些只描述了用于快速計算結果的數學方法。
MPEG解碼包括諸如可變長度解碼、IQ/DCT級和運動重構階段之類的幾個部分。依照兩種方式來使用IQ和DCT級,一種方式處于所謂的‘內部’宏模塊,其中輸出圖像值直接由DCT的輸出來描述,另一種方式處于宏模塊“外部”或“之間”,其中通過把輸出加到運動重構之上來把DCT輸出用作校正項。
逆量化(inverse quantisation IQ)級把在位流中所編碼的值變成準備用于輸入到逆DCT變換的值。
用于以軟件來實現2-D 8×8 IDCT的標準方式為通過使用長度為8的多個1-D IDCT。這首先在一維上進行(例如從上到下作用于每行),然后在另一維上進行(例如從左到右作用于每列)。在此說明書中,我們假定IDCT首先作用于列數據,然后作用于行數據。然而,所述方法也適用于相反工作的實現方式以及使用直接2-D IDCT的實現方式。
IDCT的特性在于零值的輸入數據會產生零值的輸出數據。此外,系數越接近于第一(即左上方或DC)系數,所述系數越可能是非零的。實際上,正是遠離左上角的量化系數可能是零或接近于零的事實才是為什么IDCT在視頻編碼中是有用的原因。
IDCT實現方式的最簡單情況可能是對所有的輸入值集進行完全的8×8變換。然而,某些軟件實現配置為忽略對已知零輸入數據區域的IDCT變換。通常這意味著IQ循環中的某些邏輯能夠計算用于確定使用哪個方法的值。
下面將描述兩個這種方法。一種方法是循環法,在這種情況下如果列中的系數之一是非零的,那么只計算列IDCT。在這種情況下,存在用于運行來處理一個列的代碼部分,并且此代碼只為那些具有非零輸入系數的列運行。
另一種方法是在運行IDCT之前,判定使用IDCT例程多個高度優化版本中的哪一個。這些例程的不同在于對它們假定為零的系數行/列的配置不同。在這種情況下,給定哪些列具有非零系數的資料,存在將從預定義的例程集中選擇可以正確地變換8×8塊的最快速例程的過程。
假設存在許多都為零系數的列或行的情況下,這兩種示例性方法減少了每個IDCT必須進行的操作的數目(諸如乘法和加法)。
在標準使用中,人們預期運行這些DCT類型中每一種的概率可能相當得高。然而,在MPEG 2視頻編碼中,被稱為失配控制的特定方法改變了在輸入數據集的高部中最后系數的最低有效位,即便列占用率非常低的話也是如此。失配控制的影響在于如果在IDCT輸入的系數和是偶數,那么編碼器將翻轉最后系數的最低有效位。
否則在該列中的此系數不大可能包含非零的系數。依照上述第一種方法(在列上的循環),這意味著即便失配位都是被設置的,那么也將完全地處理最終列。
如果使用第二方法,那么解碼器常常不能使用優化的例程,所述例程只在最終列都是零的時候才是有用的。由于此列(遠離失配控制)最不可能包含非零值,所以根據典型的MPEG流送統計所設計的許多優化例程將只在此列為零的情況下才是有用的。失配位的存在將強迫使用更昂貴的例程。
要求失配控制的實現方式遵循MPEG 2規范。其目的在于防止IDCT舍入誤差在一組圖像上累積,每個圖像根據在運動預測之前的一個圖像導出。例如在US6456663和US5604502中包括了失配控制的論述及其實現方式。然而,它們都沒有解決上述特定問題。
本發明的目的在于通過考慮失配狀態來簡化并增加諸如IDCT計算之類的逆變換的速度。
本發明依照第一方面提供了一種用于計算變換編碼數據的逆變換的方法,所述編碼數據被布置在系數組中,其中有選擇地修改至少一個系數以便控制失配,其中有選擇地執行所述逆變換以便對完全由零值系數所組成的組應用簡化的處理,并且其中為了選擇是否應用簡化處理,如果數據組中所包含的唯一的非零系數是為失配控制所修改的系數,那么所述數據組被認為是零值組。
所述變換編碼數據可以是離散余弦變換編碼數據,例如作為MPEG-2編碼視頻數據的一部分。
所述數據可以被布置在二維(例如8×8)陣列中。可以應用多個1-D逆變換的雙道方法,并且取決于是首先執行垂直逆變換還是水平逆變換,每個數據組可以是所述陣列的列或行。
可以根據非零值組的組合來進行第二道逆變換例程。這可以通過預存第二道過程可執行代碼的多個變化來實現,每個變化對應于在第一道中所存在的非零組的組合,所述代碼確定對哪些系數執行計算。此外,第二道代碼可以適于忽略來自未處理的輸入組的數據。否則,當一列被假定為零時,可能有必要在第二道之前清除存儲器的各列。
作為雙道方法的替代,可以使用直接的2-D實現方式,并且被認為是零的組可以是2-D系數塊。為了確定是否應用簡化處理,可以忽視任何僅用于失配控制的系數集。
優選地是,為失配控制所修改的系數是最后系數,即在陣列右下角的系數。
在優選實施例中,預先計算包含為失配控制所修改的系數的數據組的逆變換并且將其用在計算所述逆變換中。預先計算的逆變換可以根據情況是1-D或2-D的。
在第一實施例中,只對在為失配控制修改之前包括非零系數的數據組,計算所述每個數據組的逆變換,并且其中如果表明了失配,那么所預先計算的輸出值被用于具有修改系數的數據組。
以逐組為基礎來判定簡化計算并不是必需的。判定隨后進行哪個過程的成本本身帶來了額外開銷,因此優選定義確定的預定義例程,隨后在條件范圍內應用所述例程。
因此在候選實施例中,在對任何數據組執行逆變換之前,確定非零數據組的數目以及所述每個數據組的位置,并且取決于非零組的配置及其位置來從多個可能的例程中選擇例程。
在一個這種實施例中-在所述組的子集外面存在至少一個非零組的情況下,所述子集可能包括前三組,對于所有組計算逆變換;并且-在所述子集外沒有非零組的情況下,那么對于所述子集而不對于其余組計算逆變換,并且如果所修改的系數是非零的,那么使用預先計算的值來再現所修改的系數在所述逆變換中的影響。
這些例程可以被進一步優化使得-在唯一的非零數據組是第一列的情況下,在二維空間中只對該非零數據組計算逆變換,并且如果所修改的系數是非零的,那么添加所修改的系數對每個輸出值的影響的預先計算值;和/或-如果只有DC(左上方)系數是非零的,那么所有輸出值被設置為DC系數的值,并且如果所修改的系數是非零的,那么添加所修改的系數對每個輸出值的影響的預先計算值。
依照本發明的另一方面提供了解碼設備,所述解碼設備包括用于計算變換編碼數據的逆變換的裝置,所述編碼數據被布置在系數組中,其中有選擇地修改至少一個系數以便控制失配,所述解碼設備還包括用于有選擇地執行所述逆變換以便對完全由零值系數所組成的組應用簡化處理的裝置,并且其中為了選擇是否應用簡化處理,如果數據組中所包含的唯一的非零系數是為失配控制所修改的系數,那么所述數據組被認為是零值組。
在附加權利要求中描述了與此設備有關的進一步的可選特征。
依照本發明的又一方面,提供了一種記錄載體,其中記錄有用于使可編程處理器執行上述的方法步驟或實現上述設備的程序指令。
現在將僅以舉例形式,參考附圖來描述本發明的實施例,其中
圖1示出了MPEG解碼器的框圖;圖2示出了在使用本發明的第一方法所執行的IDCT之前的8×8離散余弦變換;圖3是本發明第一方法的流程圖表示;圖4a到4d示出了在使用本發明第二方法所執行的IDCT之前的四個8×8離散余弦變換;和圖5是本發明第二方法的流程圖表示。
圖1示出了用于本發明實施例的MPEG解碼器。所述解碼器由以下功能組成可變長度解碼器(variable length decoder VLD)110、逆量化器112、離散余弦逆變換(IDCT)過程114、運動緩沖器116、求和過程118和圖片排序過程120。
通常,MPEG編碼的視頻被饋送到VLD 110(常常經由緩沖器(未示出))并且被解碼為量化的DCT系數,所述DCT系數隨后被逆量化器112進行逆量化。然后把DCT系數饋送到IDCT過程114,所述IDCT過程114對系數執行逆數字余弦變換因而輸出空間像素數據。如果所述空間像素數據是內部幀的話,其被直接發送到圖片排序過程120。如果不是內部幀,那么存在由運動緩沖器116和求和過程118所提供的運動補償。本說明書只涉及IDCT過程114,并且將不再進一步地論述解碼器的其它功能。
貫穿本說明書,描述了IDCT的一個實現方式(使用多個1-D IDCT的兩級方法)。本專利申請的某些思想適用于其它實現方式(諸如直接2-D IDCT)。
相對圖2示出了用于計算IDCT的第一方法的例子。圖2示出了在列202、204、206中所布置的8×8變換200((在這種情況下)首先執行垂直變換),每個列由8個系數組成。白色列202是包含至少一個非零系數的列(非零列)。陰影線列204是系數都為零的列(零列)。第八(填充)列206包含第八行中的失配系數(失配由系數[7,7]的最低有效位表明)。
由于DCT的特性,在變換的左上角[1,1]最可能是非零系數,此概率隨著接近右下角而降低。從而,許多變換在變換的偏右方,具有整個為零的列。由于零的IDCT還是零,所以零列并不要求完全的IDCT。因此可以通過不對零列執行IDCT來節省計算時間。
在圖2中存在四個非零列202和三個零列204(列八將在后面考慮)。當對此變換執行IDCT時,在確定列的輸出之前檢查該列是否存在任何非零系數。如果遇到非零列202,那么對該列執行IDCT,之后檢查下一列。然而如果遇到零列204,那么跳過此列并且不執行IDCT。作為替代,對于此列只把輸出設置為零。
現在轉向列八206,其包含了失配系數(即由失配控制所設置的系數[7,7])。如果對于此列沒有系數數據并且如果存在失配,那么失配系數是第八列中唯一的非零系數。由于對于此位置沒有系數數據,所以此值是零或一。對于任何一種情況,都可以預先計算整個列的輸出值(并且對于零情況來說所述輸出值一般是零)。這意味著即便設置了失配也不必對此列計算IDCT,通常就是如此。這表示由于在沒有失配控制時的大多數情況下此列可能趨于零,所以這帶來了顯著的節省。
圖3是以上方法的流程圖表示。在步驟400,確定所考慮的列(這里為第一列)是否是零值列。如果不是,那么在402對此列執行IDCT。如果是,那么在404把列輸出設置為零。在406,所考慮的列加1。在408,確定所考慮的列是否是最后一列。如果不是,那么對于此下一列重復步驟400-406。然而如果此列是最后一列,那么在步驟410確定此列的狀態。如果它具有除失配系數之外的任何非零系數,那么在414,對此列執行IDCT。如果所述列是零,那么在412,把輸出設置為零。如果只對此列設置失配系數,那么在416把輸出設置為預先計算的值。
可以通過基于實際上存在的列組合(非零的)運行第二道例程來獲得進一步的節約。這與完成第一道的上述方法類似,由此第二道是一循環。如果只有列0、3和4是第一道中所處理的列,那么由于我們知道了許多輸入值(列1、2、5、6和7的輸入值)是零,所以在第二道處理中大部分運算是不必要的。因此對于為第一道實際上存在的不同列組合所存儲的循環碼,最好具有多種變化。對所有256種情況都存儲變化可能是不切實際的,因為如果給出大量的代碼那么這可能會導致I高速緩存器問題。由于這么多情況中有很多是非常不可能的,而其它情況可能是常見的,所以可以通過只存儲相對少量的變化來獲得顯著的增益。
此外,如果始終進行完全的行處理,那么可能有必要在第一道期間清除存儲器中認為是零的列。如果相反,選擇第二道代碼以便忽略來自未處理的輸入列的數據,那么由于該值決不會再被使用所以不需要清除操作,從而獲得進一步的節約。
相對于圖4a到4d示出了用于計算IDCT的第二方法。在此方法中確定列占用率作為第一步驟。取決于非零列的數目和位置,使用特定的例程來計算IDCT。這種例程例如可以只處理前三個列。此外,由于只有當失配被設置并且列占用率很低時失配系數一直是1,所以對于多種不同情況可以預先計算這對IDCT的影響,并且當計算IDCT時使用這些預先計算。應當注意,上述的第二道例程也適用于此方法。
在此方法中,確定在前三列外面是否存在任何非零列。如果是的話,那么依照常規方式來計算完全的IDCT。在圖4a中描述了這種情況。該圖示出了在列三之后存在多個非零列202的情況。從而,即便在列三之后只存在單個非零列,諸如當只有列一和五是非零的時,也計算完全的IDCT。
圖4b示出了存在一個以上的非零列202情況下的變換,不過在前三列外面沒有非零列,其中列八206可能具有失配設置(在此例子中為[7,7])。這里,通常只計算前三列的IDCT。如果失配被設置的話,那么列4到7只是被簡單地設置為零,而列八的系數被設置為預先計算的值。
圖4c示出了只有第一列202是非零的情況下的變換。在這種情況下,只有第一(非零)列具有計算的IDCT。然后計算水平IDCT,由于其等于每行中的第一值所以該計算很快且直接。然后如果失配被設置,那么添加失配對每個輸出位置的影響的預先計算值;圖4d示出了只具有一個非零系數420(在
的DC系數)的變換。在這種情況下,所有像素的IDCT一般等于成比例的輸入值。如果這里設置了失配,那么每個輸出被設置為此值與所述失配對此值的影響的每個位置的預先計算值的和。
圖5是此第二方法的流程圖表示。在500,確定在前三列外面是否存在任何非零列(如果一列只包含失配系數=1,那么將該列計為零)。如果是的話,那么在504計算完全的IDCT。如果不是的話,那么在502確定非零列的數目(忽視失配系數)是否大于一。如果大于一的話,那么在506對前三列執行部分IDCT,接下來的四列具有被設置為零的輸出。在508,確定是否設置了失配系數。如果沒有設置,那么在512把列八的輸出設置為零。如果設置了的話,那么在510,此輸出被設置為預先計算的值。
然而如果在502非零列的數目為一,那么在步驟514確定在此列中是否只存在單個的非零系數。如果不是的話,那么在步驟516,對此列執行IDCT,隨后在518進行水平IDCT。然后在522確定失配系數是否被設置。如果是的話,那么在522如前所述把預先計算的值添加到輸出。
然而,如果在514只存在單個的非零系數,那么在524把輸出設置為成比例的輸入,在526確定是否失配,并且如果發現失配,那么在528把輸出設置為此值與先前所述的預先計算的每個位置值的和。
應當注意,以上描述僅僅作為舉例,并且在不脫離本發明的精神和范圍的情況下可以設想其它例子和實施例。特別地是,計算的次序是任意的,并且可以在列之前先計算行。所示出的第二方法的例程也只是特定的例子,并且可以設想其它例程,或者這些例程只在微小細節方面(諸如為運行特定例程所需要的非零列的數目)不同。
可以使用直接2-D IDCT實現方式來代替上述的多個1-D IDCT的二級方法。這在部分輸入系數空間可以被假定為零的情況下產生。這使得大量運算是冗余的(乘以零是很沒用的)。從而,如在1-D實現方式,對于各個輸出區域可以被假定為零時出現這種情況。然而,在這種情況下它們不必只是省略的行/列,而是作為替代可以是2-D塊,諸如(例如)存在于左上方4×4區域的系數。可以依照與相對于1-D實現方式所描述情況類似的方式來選擇這些塊。從而,就像這些例子可以在位置[7,7]的系數中提供失配設置位。
權利要求
1.一種用于計算變換編碼數據(200)的逆變換的方法,所述編碼數據被布置在系數組(202,204,206)中,其中有選擇地修改至少一個系數以便控制失配,其中有選擇地執行所述逆變換以便對完全由零值系數所組成的組(204)應用簡化處理,并且其中為了選擇是否應用簡化處理,如果數據組(206)中所包含的唯一的非零系數是為失配控制所修改的系數,那么所述數據組(206)被認為是零值組。
2.如權利要求1所述的方法,其中所述變換編碼數據是離散余弦變換編碼數據。
3.如權利要求2所述的方法,其中所述離散余弦變換編碼數據形成MPEG-1或MPEG-2編碼視頻數據的一部分。
4.如先前權利要求中任何一個所述的方法,其中所述數據被布置在二維陣列中。
5.如權利要求4所述的方法,其中所述二維陣列是8×8陣列。
6.如先前權利要求中任何一個所述的方法,其中應用多個1-D逆變換的雙道方法。
7.如權利要求6所述的方法,其中取決于是首先執行垂直逆變換還是水平逆變換,每個數據組(202,204,206)是所述陣列的列或行。
8.如權利要求6或7所述的方法,其中根據非零值組(202)的組合來進行第二道逆變換例程。
9.如權利要求8所述的方法,其中預存第二道過程可執行代碼的多種變化,每個變化對應于在第一道中所存在的非零組(202)的組合,所述代碼確定對哪些系數執行計算。
10.如權利要求9所述的方法,其中第二道代碼適于忽略來自未處理的輸入組的數據。
11.如權利要求1到5中的任何一個所述的方法,其中使用直接2-D實現方式。
12.如權利要求11所述的方法,其中被認為是零的組是2-D系數塊。
13.如權利要求4到12中的任何一個所述的方法,其中為失配控制所修改的系數是最后一個系數,即在陣列右下角的系數。
14.如先前權利要求中任何一個所述的方法,其中包含為失配控制所修改的系數的數據組的逆變換被預先計算并且用在計算所述逆變換中。
15.如先前權利要求中任何一個所述的方法,其中,只對存在非零系數并且忽視任何失配修改的每個數據組(202)計算逆變換,并且其中如果表明了失配,那么對于具有所修改的系數的數據組(206)使用預先計算的輸出值。
16.如權利要求1到14中的任何一個所述的方法,其中在對任何數據組執行逆變換之前,確定非零數據組(202)的數目以及所述每個數據組的位置,并且取決于非零組(202)的配置及其位置來從多個可能的例程中選擇一個例程。
17.如權利要求16所述的方法,其中-在所述組的子集外面存在至少一個非零組(202)的情況下,對所有組(202,204,206)計算逆變換;并且-在所述子集外面沒有非零組(202)的情況下,那么對于所述子集而不對于其余組計算逆變換,并且如果所修改的系數是非零的,那么使用預先計算的值來再現所修改的系數([7,7])在所述逆變換中的影響。
18.如權利要求17所述的方法,其中所述子集包括前三個組。
19.如權利要求17或18所述的方法,其中所述例程被進一步優化使得-在唯一的非零數據組(202)是第一組的情況下,在二維空間中只對該非零數據組計算逆變換,并且如果所修改的系數是非零的,那么添加所修改的系數對每個輸出值影響的預先計算值;和/或-如果只有DC系數(420)是非零的,那么所有輸出值被設置為DC系數的值,并且如果所修改的系數是非零的,那么添加所修改的系數對每個輸出值影響的預先計算值。
20.一種解碼設備,所述解碼設備包括用于計算變換編碼數據的逆變換(114)的裝置,所述編碼數據被布置在系數組(202,204,206)中,其中有選擇地修改至少一個系數以便控制失配,其中還包括用于有選擇地執行所述逆變換以便對完全由零值系數所組成的組(204)應用簡化處理的裝置,并且其中為了選擇是否應用簡化處理,如果數據組(206)中所包含的唯一的非零系數是為失配控制所修改的系數,那么所述數據組(206)被認為是零值組。
21.如權利要求20所述的設備,其中所述變換編碼數據是離散余弦變換編碼數據。
22.如權利要求21所述的設備,其中所述離散余弦變換編碼數據形成MPEG-2編碼視頻數據的一部分。
23.如權利要求20到22中任何一個所述的設備,其中所述數據被布置在二維陣列(200)中。
24.如權利要求23所述的設備,其中所述二維陣列是8×8陣列(200)。
25.如權利要求20到24中任何一個所述的設備,其中所述設備應用多個1-D逆變換的雙道方法。
26.如權利要求25所述的設備,其中取決于是首先執行垂直逆變換還是水平逆變換,每個數據組是所述陣列的列或行。
27.如權利要求25或26所述的設備,其中所述設備被配置為根據非零值組(202)的組合來進行第二道逆變換例程。
28.如權利要求27所述的設備,其中還包括用于預存第二道過程可執行代碼的多個變化的裝置,每個變化對應于在第一道中所存在的非零組(202)的組合,所述代碼確定對哪些系數執行計算。
29.如權利要求28所述的設備,其中第二道代碼適于忽略來自未處理的輸入組的數據。
30.如權利要求20到24中任何一個所述的設備,其中所述設備被配置成使用直接2-D實現方式。
31.如權利要求30所述的設備,其中被認為是零的組是2-D系數塊。
32.如權利要求23到31中任何一個所述的設備,其中為失配控制所修改的系數是最后一個系數,即在陣列右下角的系數。
33.如權利要求20到32中任何一個所述的設備,其中還包括用于對包含為失配控制所修改的系數的數據組(206)預先計算逆變換的裝置,在計算所述逆變換中使用所述預先計算。
34.如權利要求20到33中任何一個所述的設備,其中還提供了用于只有當由于失配控制而忽視任何修改的任何系數是非零時才對數據組(202)計算逆變換的裝置,并且其中如果表明了失配,那么將預先計算的輸出值用于具有所修改的系數的數據組(206)。
35.如權利要求20到33中任何一個所述的設備,其中還包括用于在對任何數據組執行逆變換之前,確定非零數據組(202)的數目以及所述每個數據組的位置的裝置,以及用于取決于非零組(202)的數目及其位置來從多個可能的例程中選擇一個例程的裝置。
36.如權利要求35所述的設備,其中所述設備被配置為使得在所述組的子集外面存在至少一個非零組(202)的情況下,對所有組(202,204,206)計算逆變換;并且在所述子集外面沒有非零組(202)的情況下,那么對于所述子集而不是對于其余組計算逆變換,并且如果所修改的系數是非零的,那么使用預先計算的值來再現所修改的系數([7,7])在所述逆變換中的影響。
37.如權利要求26所述的設備,其中所述子集包括前三個組。
38.如權利要求36或37所述的設備,其中所述設備被配置為使得-在非零數據組(202)的數目是一的情況下,在二維空間中只對該非零數據組計算逆變換,并且如果所修改的系數是非零的,那么添加所修改的系數對每個輸出值的影響的預先計算值;和/或-如果只有DC系數(420)是非零的,那么所有輸出值被設置為DC系數的值,并且如果所修改的系數是非零的,那么添加所修改的系數對每個輸出值的影響的預先計算值。
39.一種其中記錄有程序指令的記錄載體,所述程序指令用于使可編程處理器執行如權利要求1到19中任何一個所述的方法的步驟,或實現如權利要求20到38中任何一個所述的設備。
全文摘要
描述了一種用于計算變換編碼數據的逆變換的方法及相關聯的設備。在主要實施例中,8×8離散余弦變換(DCT)(200)被布置在系數列(202,204,206)中,依照已知的方法有選擇地修改最后系數以便控制失配。有選擇地執行逆DCT以便對完全由零值系數組成的組(204)應用簡化處理。為了選擇是否應用簡化處理,如果數據組中包含的唯一非零系數是為失配控制所修改的系數,那么所述數據組(206)被認為是零值組。此外可以預先計算所修改的系數對輸出的影響,使用所述預先計算值來補償對非零系數的忽略。
文檔編號H04N7/26GK1867910SQ200480030421
公開日2006年11月22日 申請日期2004年10月15日 優先權日2003年10月18日
發明者R·M·米勒-史密斯, D·E·彭納 申請人:皇家飛利浦電子股份有限公司