本發(fā)明通常涉及數(shù)字視頻信號處理,尤其涉及用于對視頻數(shù)據(jù)的變換單位的子集進(jìn)行編碼和解碼的方法、設(shè)備和系統(tǒng)。
背景技術(shù):
當(dāng)前存在包括用于傳輸和存儲視頻數(shù)據(jù)的應(yīng)用程序的視頻編碼所用的許多應(yīng)用程序。還開發(fā)了許多視頻編碼標(biāo)準(zhǔn)并且其它視頻編碼標(biāo)準(zhǔn)當(dāng)前正在開發(fā)中。視頻編碼標(biāo)準(zhǔn)化的最新進(jìn)展已導(dǎo)致形成被稱為“針對視頻編碼的聯(lián)合專家小組”(jct-vc)的組。該針對視頻編碼的聯(lián)合專家小組(jct-vc)包括已知為視頻編碼專家組(vceg)的國際電信聯(lián)盟(itu)的電信標(biāo)準(zhǔn)化部門(itu-t)的研究組16、問題6(sg16/q6)的成員、以及還已知為運動圖片專家組(mpeg)的國際標(biāo)準(zhǔn)化組織/國際電工委員會聯(lián)合技術(shù)委員會1/小組委員會29/工作組11(iso/iecjtc1/sc29/wg11)的成員。
針對視頻編碼的聯(lián)合專家小組(jct-vc)的目標(biāo)是產(chǎn)生新的視頻編碼標(biāo)準(zhǔn)以顯著優(yōu)于目前現(xiàn)有的已知為“h.264/mpeg-4avc”的視頻編碼標(biāo)準(zhǔn)。該h.264/mpeg-4avc標(biāo)準(zhǔn)本身是針對諸如mpeg-4和itu-th.263等的以前的視頻編碼標(biāo)準(zhǔn)的大幅改進(jìn)。已將開發(fā)中的新視頻編碼標(biāo)準(zhǔn)命名為“高效率視頻編碼(hevc)”。針對視頻編碼的聯(lián)合專家小組jct-vc還考慮由于針對高效率視頻編碼(hevc)所提出的技術(shù)而產(chǎn)生的、在對該標(biāo)準(zhǔn)的實現(xiàn)進(jìn)行縮放從而以高分辨率或高幀頻進(jìn)行工作的情況下產(chǎn)生困難的各種實現(xiàn)挑戰(zhàn)。
h.264/mpeg-4avc視頻編碼標(biāo)準(zhǔn)呈現(xiàn)在對用以表示視頻數(shù)據(jù)的殘差系數(shù)進(jìn)行編碼的情況下實現(xiàn)高壓縮效率的困難。
視頻數(shù)據(jù)由幀序列構(gòu)成,其中各幀具有樣本的二維陣列。通常,幀包括一個亮度(luma)通道和兩個色度(chroma)通道。通常使用諸如yuv等的顏色空間來表示顏色信息,其中y是亮度通道并且uv是兩個色度通道。諸如yuv等的顏色空間給出了如下優(yōu)點:大部分幀內(nèi)容包含在亮度通道中,并且uv通道中所存儲的相對較少量的內(nèi)容足以重建彩色幀。還可以將色度通道下采樣為感知質(zhì)量損失可忽略的較低的空間分辨率。
已知為4:2:0的通常使用的色度格式使得各色度通道具有垂直和水平方向的分辨率的一半。將各幀分解成最大編碼單位(lcu)的陣列。這些最大編碼單位(lcu)具有諸如64個亮度樣本等的、邊尺寸是2的冪且寬度和高度相等的固定大小。編碼樹使得能夠?qū)⒏髯畲缶幋a單位(lcu)子分割成四個編碼單位(cu),其中各編碼單位(cu)的寬度和高度是母最大編碼單位(lcu)的寬度和高度的一半??梢詫⒏骶幋a單位(cu)進(jìn)一步子分割成相等大小的四個編碼單位(cu)??梢赃f歸地應(yīng)用這種子分割處理,直到達(dá)到最小編碼單位(scu)大小為止,從而使得能夠?qū)⒕幋a單位(cu)向下定義為最小支持大小。將最大編碼單位遞歸子分割成編碼單位的層級結(jié)構(gòu)具有四叉樹結(jié)構(gòu)并且被稱為編碼樹。將該子分割處理作為被編碼為二進(jìn)制數(shù)(bin)的標(biāo)志序列而在通信位流中編碼。因此,編碼單位具有正方形形狀。
在沒有進(jìn)行進(jìn)一步子分割的編碼樹中存在一組編碼單位,從而占據(jù)編碼樹的葉節(jié)點。在這些編碼單位中存在變換樹。變換樹還可以使用如編碼樹所使用的四叉樹結(jié)構(gòu)來對編碼單位進(jìn)行分解。在變換樹的葉節(jié)點處,使用變換單位(tu)來對殘差數(shù)據(jù)進(jìn)行編碼。與編碼樹相對比,變換樹可以將編碼單位子分割成具有非正方形形狀的變換單位。此外,變換樹結(jié)構(gòu)不要求變換單位(tu)占據(jù)母編碼單位所提供的所有區(qū)域。
將編碼樹的葉節(jié)點處的各編碼單位子分割成各自已知為預(yù)測單位(pu)的預(yù)測數(shù)據(jù)樣本的一個或多個陣列。各預(yù)測單位(pu)包含通過應(yīng)用幀內(nèi)預(yù)測或幀間預(yù)測處理所推導(dǎo)出的輸入視頻幀數(shù)據(jù)的一部分的預(yù)測。
可以使用幾種方法來對編碼單位(cu)內(nèi)的預(yù)測單位(pu)進(jìn)行編碼。一個預(yù)測單位(pu)可能占據(jù)編碼單位(cu)的整個區(qū)域,或者編碼單位(cu)可能在水平方向或垂直方向上被分割成相等大小的兩個矩形預(yù)測單位(pu)。另外,可以將編碼單位(cu)分割成相等大小的四個正方形預(yù)測單位(pu)。
視頻編碼器通過將視頻數(shù)據(jù)轉(zhuǎn)換成句法元素序列來將視頻數(shù)據(jù)壓縮成位流。使用與在mpeg4-avc/h.264視頻壓縮標(biāo)準(zhǔn)中所定義的算術(shù)編碼方案相同的算術(shù)編碼方案,在開發(fā)中的高效率視頻編碼(hevc)標(biāo)準(zhǔn)內(nèi)定義上下文自適應(yīng)二進(jìn)制算術(shù)編碼(cabac)。在開發(fā)中的高效率視頻編碼(hevc)標(biāo)準(zhǔn)中,在上下文自適應(yīng)二進(jìn)制算術(shù)編碼(cabac)處于使用中的情況下,將各句法元素表示為二進(jìn)制數(shù)序列。對各二進(jìn)制數(shù)進(jìn)行旁路編碼或算術(shù)編碼。使用二進(jìn)制數(shù)同等可能為0或1的旁路編碼。在這種情況下,不存在可實現(xiàn)的進(jìn)一步壓縮。對于概率分布不相等的二進(jìn)制數(shù)使用算術(shù)編碼。各算術(shù)編碼二進(jìn)制數(shù)與已知為“上下文(context)”的信息相關(guān)聯(lián)。上下文包含可能的二進(jìn)制數(shù)值(‘valmps’)和概率狀態(tài)(映射到可能的二進(jìn)制數(shù)值的估計概率的整數(shù))。根據(jù)句法元素創(chuàng)建包括旁路編碼二進(jìn)制數(shù)和算術(shù)編碼二進(jìn)制數(shù)的組合的這種二進(jìn)制數(shù)序列已知為“二進(jìn)制數(shù)產(chǎn)生(binarising)”句法元素。
在視頻編碼器或視頻解碼器中,由于各二進(jìn)制數(shù)可使用單獨的上下文信息,因此二進(jìn)制數(shù)的上下文選擇提供了用以改進(jìn)編碼效率的方式。特別地,可以通過選擇特定二進(jìn)制數(shù)來改進(jìn)編碼效率,以使得來自使用關(guān)聯(lián)的上下文信息的二進(jìn)制數(shù)的先前示例的統(tǒng)計特性與二進(jìn)制數(shù)的當(dāng)前示例的統(tǒng)計特性相關(guān)。這種上下文選擇頻繁地利用空間本地信息以確定最佳上下文。
在開發(fā)中的高效率視頻編碼(hevc)標(biāo)準(zhǔn)和h.264/mpeg-4avc中,基于來自其它幀或者來自先前解碼后的當(dāng)前塊內(nèi)的鄰接區(qū)域的參考樣本數(shù)據(jù)來推導(dǎo)針對當(dāng)前塊的預(yù)測。該預(yù)測和期望樣本數(shù)據(jù)之間的差已知為殘差。該殘差的頻域表示是殘差系數(shù)的二維陣列。按照慣例,二維陣列的左上角包含表示低頻信息的殘差系數(shù)。
在典型的視頻數(shù)據(jù)中,樣本值的大部分變化是逐漸的,這導(dǎo)致低頻信息在殘差內(nèi)占主導(dǎo)。這表明位于二維陣列的左上角的殘差系數(shù)的量值較大。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是大致克服或至少改進(jìn)現(xiàn)有配置的一個或多個缺點。
根據(jù)本發(fā)明的一個方面,提供一種用于使用golomb-rice解碼對編碼視頻數(shù)據(jù)的變換單位進(jìn)行解碼的方法,所述方法包括以下步驟:
確定所述變換單位的子集的有效殘差系數(shù);
選擇所述變換單位的子集的golomb-rice解碼的預(yù)定rice參數(shù),其中在所確定的有效殘差系數(shù)的數(shù)量高于預(yù)定閾值的情況下,所述預(yù)定rice參數(shù)相對于零設(shè)置存在偏移;以及
使用所述預(yù)定rice參數(shù)作為所述golomb-rice解碼的初始參數(shù)來對所述變換單位的子集進(jìn)行解碼。
根據(jù)本發(fā)明的另一方面,提供一種用于使用golomb-rice解碼對編碼視頻數(shù)據(jù)的變換單位進(jìn)行解碼的設(shè)備,所述設(shè)備包括:
用于確定所述變換單位的子集的有效殘差系數(shù)的部件;
用于選擇所述變換單位的子集的golomb-rice解碼的預(yù)定rice參數(shù)的部件,其中在所確定的有效殘差系數(shù)的數(shù)量高于預(yù)定閾值的情況下,所述預(yù)定rice參數(shù)相對于零設(shè)置存在偏移;以及
用于使用所述預(yù)定rice參數(shù)作為所述golomb-rice解碼的初始參數(shù)來對所述變換單位的子集進(jìn)行解碼的部件。
根據(jù)本發(fā)明的另一方面,提供一種用于使用golomb-rice解碼對編碼視頻數(shù)據(jù)的變換單位進(jìn)行解碼的系統(tǒng),所述系統(tǒng)包括:
存儲器,用于存儲數(shù)據(jù)和計算機(jī)程序;
處理器,其連接至所述存儲器,并且用于執(zhí)行所述計算機(jī)程序,所述計算機(jī)程序包括用于進(jìn)行以下操作的指令:
確定所述變換單位的子集的有效殘差系數(shù);
選擇所述變換單位的子集的golomb-rice解碼的預(yù)定rice參數(shù),其中在所確定的有效殘差系數(shù)的數(shù)量高于預(yù)定閾值的情況下,所述預(yù)定rice參數(shù)相對于零設(shè)置存在偏移;以及
使用所述預(yù)定rice參數(shù)作為所述golomb-rice解碼的初始參數(shù)來對所述變換單位的子集進(jìn)行解碼。
根據(jù)本發(fā)明的另一方面,提供一種記錄有計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序用于使用golomb-rice解碼對編碼視頻數(shù)據(jù)的變換單位進(jìn)行解碼,所述計算機(jī)程序包括以下代碼:
用于確定所述變換單位的子集的有效殘差系數(shù)的代碼;
用于選擇所述變換單位的子集的golomb-rice解碼的預(yù)定rice參數(shù)的代碼,其中在所確定的有效殘差系數(shù)的數(shù)量高于預(yù)定閾值的情況下,所述預(yù)定rice參數(shù)相對于零設(shè)置存在偏移;以及
用于使用所述預(yù)定rice參數(shù)作為所述golomb-rice解碼的初始參數(shù)來對所述變換單位的子集進(jìn)行解碼的代碼。
根據(jù)本發(fā)明的另一方面,提供一種用于對視頻數(shù)據(jù)流進(jìn)行解碼以確定解碼視頻數(shù)據(jù)流中的當(dāng)前殘差系數(shù)的值的方法,所述方法包括以下步驟:
從所述視頻數(shù)據(jù)流接收殘差系數(shù)的變換單位;
確定所述變換單位的當(dāng)前殘差系數(shù)的位置;
在所述當(dāng)前殘差系數(shù)在所述變換單位中的位置大于預(yù)定閾值的情況下,使用無依賴性的golomb-rice解碼對所述當(dāng)前殘差系數(shù)進(jìn)行解碼,其中所述無依賴性的golomb-rice使用預(yù)定golomb-rice值;
在所述當(dāng)前殘差系數(shù)在所述變換單位中的位置小于所述預(yù)定閾值的情況下,使用針對當(dāng)前系數(shù)的基于依賴性的golomb-rice解碼對所述當(dāng)前殘差系數(shù)進(jìn)行解碼,其中所述基于依賴性的golomb-rice解碼使用先前解碼殘差系數(shù)值以選擇golomb-rice值;以及
使用所選擇的golomb-rice解碼值來確定所述當(dāng)前殘差系數(shù)的值。
根據(jù)本發(fā)明的另一方面,提供一種用于使用golomb-rice解碼對編碼視頻數(shù)據(jù)的變換單位進(jìn)行解碼的方法,所述方法包括以下步驟:
確定所述變換單位的量化參數(shù);
確定所述變換單位的子集的有效殘差系數(shù);
選擇所述變換單位的子集的golomb-rice解碼的預(yù)定rice參數(shù),其中在所確定的量化參數(shù)低于預(yù)定閾值的情況下,所述預(yù)定rice參數(shù)相對于零設(shè)置存在偏移;以及
使用所述預(yù)定rice參數(shù)作為所述golomb-rice解碼的初始參數(shù)來對所述變換單位的子集進(jìn)行解碼。
根據(jù)本發(fā)明的另一方面,提供一種用于使用golomb-rice解碼對編碼視頻數(shù)據(jù)的變換單位進(jìn)行解碼的設(shè)備,所述設(shè)備包括:
用于確定所述變換單位的子集的有效殘差系數(shù)的部件;
用于確定所述變換單位的量化參數(shù)的部件;
用于選擇所述變換單位的子集的golomb-rice解碼的預(yù)定rice參數(shù)的部件,其中在所確定的量化參數(shù)低于預(yù)定閾值的情況下,所述預(yù)定rice參數(shù)相對于零設(shè)置存在偏移;以及
用于使用所述預(yù)定rice參數(shù)作為所述golomb-rice解碼的初始參數(shù)來對所述變換單位的子集進(jìn)行解碼的部件。
根據(jù)本發(fā)明的另一方面,提供一種用于使用golomb-rice解碼對編碼視頻數(shù)據(jù)的變換單位進(jìn)行解碼的系統(tǒng),所述系統(tǒng)包括:
存儲器,用于存儲數(shù)據(jù)和計算機(jī)程序;
處理器,其連接至所述存儲器,并且用于執(zhí)行所述計算機(jī)程序,所述計算機(jī)程序包括用于進(jìn)行以下操作的指令:
確定所述變換單位的子集的有效殘差系數(shù);
確定所述變換單位的量化參數(shù);
選擇所述變換單位的子集的golomb-rice解碼的預(yù)定rice參數(shù),其中在所確定的量化參數(shù)低于預(yù)定閾值的情況下,所述預(yù)定rice參數(shù)相對于零設(shè)置存在偏移;以及
使用所述預(yù)定rice參數(shù)作為所述golomb-rice解碼的初始參數(shù)來對所述變換單位的子集進(jìn)行解碼。
根據(jù)本發(fā)明的另一方面,提供一種記錄有計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序用于使用golomb-rice解碼對編碼視頻數(shù)據(jù)的變換單位進(jìn)行解碼,所述計算機(jī)程序包括以下代碼:
用于確定所述變換單位的子集的有效殘差系數(shù)的代碼;
用于確定所述變換單位的量化參數(shù)的代碼;
用于選擇所述變換單位的子集的golomb-rice解碼的預(yù)定rice參數(shù)的代碼,其中在所確定的量化參數(shù)低于預(yù)定閾值的情況下,所述預(yù)定rice參數(shù)相對于零設(shè)置存在偏移;以及
用于使用所述預(yù)定rice參數(shù)作為所述golomb-rice解碼的初始參數(shù)來對所述變換單位的子集進(jìn)行解碼的代碼。
根據(jù)本發(fā)明的另一方面,提供一種用于使用golomb-rice解碼對編碼視頻數(shù)據(jù)的變換單位進(jìn)行解碼的方法,所述方法包括以下步驟:
確定所述變換單位的量化參數(shù);
確定所述變換單位的寬度和高度;
確定所述變換單位的子集的有效殘差系數(shù);
選擇所述變換單位的子集的golomb-rice解碼的預(yù)定rice參數(shù),其中在所確定的量化參數(shù)低于或等于預(yù)定閾值、所述寬度大于預(yù)定閾值且所述高度高于預(yù)定閾值的情況下,所述預(yù)定rice參數(shù)相對于零設(shè)置存在偏移;以及
使用所述預(yù)定rice參數(shù)作為所述golomb-rice解碼的初始參數(shù)來對所述變換單位的子集進(jìn)行解碼。
根據(jù)本發(fā)明的另一方面,提供一種用于使用golomb-rice解碼對編碼視頻數(shù)據(jù)的變換單位進(jìn)行解碼的設(shè)備,所述設(shè)備包括:
用于確定所述變換單位的子集的有效殘差系數(shù)的部件;
用于確定所述變換單位的量化參數(shù)的部件;
用于確定所述變換單位的寬度和高度的部件;
用于選擇所述變換單位的子集的golomb-rice解碼的預(yù)定rice參數(shù)的部件,其中在所確定的量化參數(shù)低于或等于預(yù)定閾值、所述寬度大于預(yù)定閾值且所述高度高于預(yù)定閾值的情況下,所述預(yù)定rice參數(shù)相對于零設(shè)置存在偏移;以及
用于使用所述預(yù)定rice參數(shù)作為所述golomb-rice解碼的初始參數(shù)來對所述變換單位的子集進(jìn)行解碼的部件。
根據(jù)本發(fā)明的另一方面,提供一種用于使用golomb-rice解碼對編碼視頻數(shù)據(jù)的變換單位進(jìn)行解碼的系統(tǒng),所述系統(tǒng)包括:
存儲器,用于存儲數(shù)據(jù)和計算機(jī)程序;
處理器,其連接至所述存儲器,并且用于執(zhí)行所述計算機(jī)程序,所述計算機(jī)程序包括用于進(jìn)行以下操作的指令:
確定所述變換單位的子集的有效殘差系數(shù);
確定所述變換單位的量化參數(shù);
確定所述變換單位的寬度和高度;
選擇所述變換單位的子集的golomb-rice解碼的預(yù)定rice參數(shù),其中在所確定的量化參數(shù)低于或等于預(yù)定閾值、所述寬度大于預(yù)定閾值且所述高度高于預(yù)定閾值的情況下,所述預(yù)定rice參數(shù)相對于零設(shè)置存在偏移;以及
使用所述預(yù)定rice參數(shù)作為所述golomb-rice解碼的初始參數(shù)來對所述變換單位的子集進(jìn)行解碼。
根據(jù)本發(fā)明的另一方面,提供一種記錄有計算機(jī)程序的計算機(jī)可讀介質(zhì),所述計算機(jī)程序用于使用golomb-rice解碼對編碼視頻數(shù)據(jù)的變換單位進(jìn)行解碼,所述計算機(jī)程序包括以下代碼:
用于確定所述變換單位的子集的有效殘差系數(shù)的代碼;
用于確定所述變換單位的量化參數(shù)的代碼;
用于確定所述變換單位的寬度和高度的代碼;
用于選擇所述變換單位的子集的golomb-rice解碼的預(yù)定rice參數(shù)的代碼,其中在所確定的量化參數(shù)低于或等于預(yù)定閾值、所述寬度大于預(yù)定閾值且所述高度高于預(yù)定閾值的情況下,所述預(yù)定rice參數(shù)相對于零設(shè)置存在偏移;以及
用于使用所述預(yù)定rice參數(shù)作為所述golomb-rice解碼的初始參數(shù)來對所述變換單位的子集進(jìn)行解碼的代碼。
還公開了其它方面。
附圖說明
現(xiàn)在將參考以下附圖來說明本發(fā)明的至少一個實施例,其中:
圖1是示出視頻編碼器的功能模塊的示意框圖;
圖2是示出視頻解碼器的功能模塊的示意框圖;
圖3a和3b形成可以分別實踐圖1的編碼器和圖2的解碼器的通用計算機(jī)系統(tǒng)的示意框圖;
圖4a和4b示出示例變換單位的空間結(jié)構(gòu);
圖5是示出示例變換單位的句法元素結(jié)構(gòu)的示意框圖;
圖6a是示出對變換單位(tu)進(jìn)行編碼的方法的示意框圖;
圖6b是示出對變換單位(tu)進(jìn)行解碼的方法的示意流程圖;
圖7是示出圖5的示例變換單位的子集的句法元素結(jié)構(gòu)的示意框圖;
圖8a是示出對變換單位的子集進(jìn)行編碼的方法的示意流程圖;
圖8b是示出對變換單位的子集進(jìn)行解碼的方法的示意流程圖;
圖9是示出利用golomb-rice(哥倫布-萊斯)碼字的殘差系數(shù)的二進(jìn)制表示的表;
圖10是示出利用階次為零的指數(shù)golomb碼字的殘差系數(shù)的二進(jìn)制表示的表;
圖11是示出用于基于golomb-rice參數(shù)的當(dāng)前值和先前殘差系數(shù)的值來確定golomb-rice參數(shù)的值的查找表的表;
圖12a是示出對殘差系數(shù)進(jìn)行編碼的方法的示意流程圖;
圖12b是示出對殘差系數(shù)進(jìn)行解碼的方法的示意流程圖;
圖13是示出用于確定如用于使用golomb-rice解碼對殘差系數(shù)進(jìn)行解碼的方法所使用的參數(shù)k的值的方法的示意流程圖;
圖14a示出用于針對變換單位(tu)的子集對其余的殘差系數(shù)量值進(jìn)行解碼的二值化器;
圖14b示出用于針對變換單位(tu)的子集對其余的殘差系數(shù)量值進(jìn)行解碼的另一二值化器;以及
圖15示出另一示例變換單位。
具體實施方式
在任一個或多個附圖中參考具有相同附圖標(biāo)記的步驟和/或特征的情況下,除非出現(xiàn)相反意圖,否則這些步驟和/或特征是為了本說明書的目的而具有相同的功能或操作。
可以通過二值化方案來使用在殘差系數(shù)的二維陣列的左上角占主導(dǎo)的低頻信息的特性,以使殘差系數(shù)在位流中的大小最小。
二值化的一個方面是選擇上下文以用于對與各個標(biāo)志相對應(yīng)的句法元素進(jìn)行編碼。一個標(biāo)志可以使用一個以上的上下文。確定哪個上下文應(yīng)當(dāng)用于標(biāo)志的特定示例依賴于其它已可用的信息并且已知為“上下文建?!薄I舷挛慕J沁x擇最準(zhǔn)確地表示標(biāo)志的當(dāng)前示例的統(tǒng)計特性的上下文的處理。例如,頻繁地,標(biāo)志的值受到同一標(biāo)志的鄰接示例的值所影響,其中在這種情況下,可以基于標(biāo)志的鄰接示例的值來選擇上下文。由于大部分幀信息包含在亮度通道中,因此相對于色度通道,上下文建模經(jīng)常針對亮度通道使用單獨的上下文。然而,由于兩個色度通道的統(tǒng)計特性相對相似,因此通常在色度通道之間共用上下文。
高效率視頻編碼(hevc)測試模型的版本6(“hm-6.0”)將變換單位(tu)分割成多個子集并且對各子集中的殘差系數(shù)進(jìn)行兩遍掃描。第一遍對將殘差系數(shù)的狀態(tài)表示為非零值(有效)或零值(無效)的標(biāo)志進(jìn)行編碼。該數(shù)據(jù)已知為有效性映射。第二遍對已知為系數(shù)等級的有效殘差系數(shù)的量值和符號進(jìn)行編碼。
所提供的掃描模式使得能夠?qū)埐钕禂?shù)的二維陣列掃描成一維陣列。在hm-6.0中,使用所提供的掃描模式來對有效性映射和系數(shù)等級這兩者進(jìn)行處理。通過使用所提供的掃描模式掃描有效性映射,可以確定最末有效系數(shù)在二維有效性映射中的位置。掃描模式可以是水平的、垂直的或?qū)堑摹?/p>
hm-6.0提供針對(還已知為具有正方形形狀和非正方形形狀這兩者的變換單位(tu)的)殘差塊的支持。各變換單位(tu)包含一組殘差系數(shù)。具有相等大小的邊尺寸的殘差塊已知為正方形變換單位(tu),并且具有不等大小的邊尺寸的殘差塊已知為非正方形變換單位(tu)。
hm-6.0中所支持的變換單位(tu)的大小是4×4、8×8、16×16、32×32、4×16、16×4、8×32和32×8。通常針對亮度樣本說明變換單位(tu)的大小。然而,在使用4:2:0的色度格式的情況下,各色度樣本占據(jù)2×2個亮度樣本的區(qū)域。因此,掃描變換單位(tu)以對色度殘差數(shù)據(jù)進(jìn)行編碼使用了水平尺寸和垂直尺寸的一半的掃描模式,諸如針對4×4亮度殘差塊的2×2等。為了對殘差系數(shù)進(jìn)行掃描和編碼的目的,將16×16、32×32、4×16、16×4、8×32和32×8的變換單位(tu)分割成多個子塊、即大小為4×4的變換單位(tu)掃描的下層,其中在hm-6.0內(nèi)存在相應(yīng)的映射。
在hm-6.0中,上述變換單位(tu)大小的子塊與變換單位(tu)中的子集位于同一位置處。在另一實現(xiàn)中,子集可能與大小不同于上述子塊的大小的子塊不位于同一位置處。將位于一個子塊內(nèi)并排配置的有效性映射的一部分內(nèi)的所設(shè)置的有效系數(shù)標(biāo)志稱為有效系數(shù)組。
對于16×16、32×32、4×16、16×4、8×32和32×8的變換單位(tu),有效性映射編碼利用兩級掃描。上級掃描進(jìn)行諸如后向?qū)亲笙聮呙璧鹊膾呙?,以編碼或推斷表示各子塊的有效系數(shù)組的標(biāo)志。在這些子塊內(nèi),進(jìn)行諸如后向?qū)亲笙聮呙璧鹊膾呙?,以針對具?值的有效系數(shù)組標(biāo)志的子塊來編碼有效系數(shù)標(biāo)志。對于16×16變換單位(tu),使用4×4上級掃描。對于32×32變換單位(tu),使用8×8上級掃描。對于16×4、4×16、32×8和8×32的變換單位(tu)大小,分別使用4×1、1×4、8×2和2×8的上級掃描。
在各變換單位(tu)中,可以將殘差系數(shù)數(shù)據(jù)編碼在位流中。各“殘差系數(shù)”是表示頻域(dct)的變換單位內(nèi)的圖像特征并且在該變換單位內(nèi)占據(jù)獨特位置的數(shù)字。變換單位是可以在空間域和頻域之間進(jìn)行變換的殘差數(shù)據(jù)樣本的塊。在頻域中,變換單位(tu)將殘差數(shù)據(jù)樣本編碼為殘差系數(shù)數(shù)據(jù)。按二(2)的冪來確定變換單位的邊尺寸的大小(針對“亮度”通道為4個樣本~32個樣本、并且針對“色度”通道為2個樣本~16個樣本)。變換單位(tu)樹的葉節(jié)點可以包含變換單位(tu)、或者在不需要殘差系數(shù)數(shù)據(jù)的情況下可以什么也不包含。
由于變換單位的空間表示是殘差數(shù)據(jù)樣本的二維陣列,因此如以下詳細(xì)所述,根據(jù)諸如改進(jìn)的離散余弦變換(dct)等的變換所得的頻域表示還是殘差系數(shù)的二維陣列。變換單位(tu)內(nèi)的典型樣本數(shù)據(jù)的頻譜特性使得頻域表示與空間表示相比更加緊湊。此外,變換單位(tu)中典型的較低頻率的頻譜信息的占主導(dǎo)導(dǎo)致了較大值的殘差系數(shù)向著變換單位(tu)的表示低頻殘差系數(shù)的左上方聚集。
可以使用改進(jìn)的離散余弦變換(dct)或改進(jìn)的離散正弦變換(dst)來實現(xiàn)殘差變換。殘差變換的實現(xiàn)被配置為支持所需的各變換單位(tu)大小。在視頻編碼器中,對來自殘差變換的殘差系數(shù)進(jìn)行縮放和量化。該縮放和量化使殘差系數(shù)的量值縮小,由此導(dǎo)致以降低圖像質(zhì)量為代價來縮小編碼在位流中的數(shù)據(jù)的大小。
在進(jìn)行殘差變換之后,進(jìn)行量化處理。量化處理的目的是通過降低殘差系數(shù)的量值的精度來實現(xiàn)較高的壓縮率。量值精度的該降低是有損處理,因而會對視覺質(zhì)量產(chǎn)生影響。利用量化參數(shù)(qp)來控制精度降低的等級。該參數(shù)的值越高,視覺質(zhì)量所受到的影響越大。可以通過使用如以下所述的delta-qp句法元素,針對變換單位(tu)等級來修改量化參數(shù)。
開發(fā)中的高效率視頻編碼(hevc)標(biāo)準(zhǔn)正尋求視頻數(shù)據(jù)的高效率壓縮??梢允褂霉烙嫼徒y(tǒng)計數(shù)據(jù)分析來實現(xiàn)視頻數(shù)據(jù)的高效率壓縮。開發(fā)中的高效率視頻編碼(hevc)標(biāo)準(zhǔn)正尋求以高的位率對視頻數(shù)據(jù)進(jìn)行編碼或解碼。開發(fā)中的高效率視頻編碼(hevc)標(biāo)準(zhǔn)中所采用的上下文自適應(yīng)二進(jìn)制算術(shù)編碼(cabac)方案支持被稱為“旁路編碼”的“等概率”運算模式。在該模式中,二進(jìn)制數(shù)不與來自上下文模型的上下文相關(guān)聯(lián),因而不存在上下文模型更新步驟。在這種模式中,假定對各二進(jìn)制數(shù)進(jìn)行旁路編碼從而提高吞吐量,則可以并行地從位流讀取多個相鄰二進(jìn)制數(shù)。例如,硬件實現(xiàn)可以并行地進(jìn)行相鄰旁路編碼數(shù)據(jù)的組的寫入/讀取,以提高對位流進(jìn)行編碼/解碼的吞吐量。
圖1是示出視頻編碼器100的功能模塊的示意框圖。圖2是示出相應(yīng)的視頻解碼器200的功能模塊的示意框圖。如圖3a和3b所示,可以使用通用計算機(jī)系統(tǒng)300來實現(xiàn)視頻編碼器100和視頻解碼器200,其中可以利用計算機(jī)系統(tǒng)300內(nèi)的專用硬件、利用計算機(jī)系統(tǒng)300內(nèi)可執(zhí)行的軟件、或者可選地利用專用硬件和計算機(jī)系統(tǒng)300內(nèi)可執(zhí)行的軟件的組合來實現(xiàn)各種功能模塊。
如圖3a所示,計算機(jī)系統(tǒng)300包括:計算機(jī)模塊301;諸如鍵盤302、鼠標(biāo)指示器裝置303、掃描器326、照相機(jī)327和麥克風(fēng)380等的輸入裝置;以及包括打印機(jī)315、顯示裝置314和揚聲器317的輸出裝置。計算機(jī)模塊301可以使用外部調(diào)制器-解調(diào)器(調(diào)制解調(diào)器)收發(fā)器裝置316來經(jīng)由接線321與通信網(wǎng)絡(luò)320進(jìn)行通信。通信網(wǎng)絡(luò)320可以是廣域網(wǎng)(wan),諸如因特網(wǎng)、蜂窩電信網(wǎng)絡(luò)或私有wan等。在接線321是電話線的情況下,調(diào)制解調(diào)器316可以是傳統(tǒng)的“撥號上網(wǎng)”調(diào)制解調(diào)器??蛇x地,在接線321是高容量(例如,線纜)接線的情況下,調(diào)制解調(diào)器316可以是寬帶調(diào)制解調(diào)器。還可以使用無線調(diào)制解調(diào)器來進(jìn)行向著通信網(wǎng)絡(luò)320的無線連接。
計算機(jī)模塊301通常包括至少一個處理器單元305和存儲器單元306。例如,存儲器單元306可以具有半導(dǎo)體隨機(jī)存取存儲器(ram)和半導(dǎo)體只讀存儲器(rom)。計算機(jī)模塊301還包括多個輸入/輸出(i/o)接口,其中這多個輸入/輸出(i/o)接口包括:音頻-視頻接口307,其連接至視頻顯示器314、揚聲器317和麥克風(fēng)380;i/o接口313,其連接至鍵盤302、鼠標(biāo)303、掃描器326、照相機(jī)327以及可選的操縱桿或其它人機(jī)接口裝置(未示出);以及外部調(diào)制解調(diào)器316和打印機(jī)315所用的接口308。在一些實現(xiàn)中,調(diào)制解調(diào)器316可以內(nèi)置于計算機(jī)模塊301內(nèi)、例如內(nèi)置于接口308內(nèi)。計算機(jī)模塊301還具有本地網(wǎng)絡(luò)接口311,其中該本地網(wǎng)絡(luò)接口311允許計算機(jī)系統(tǒng)300經(jīng)由接線323連接至已知為局域網(wǎng)(lan)的局域通信網(wǎng)絡(luò)322。如圖3a所示,局域通信網(wǎng)絡(luò)322還可以經(jīng)由接線324連接至廣域網(wǎng)320,其中該局域通信網(wǎng)絡(luò)322通常包括所謂的“防火墻”裝置或具有相似功能的裝置。本地網(wǎng)絡(luò)接口311可以包括以太網(wǎng)(ethernettm)電路卡、藍(lán)牙(bluetoothtm)無線配置或ieee802.11無線配置;然而,對于接口311,可以實踐多種其它類型的接口。
i/o接口308和313可以提供串行連接和并行連接中的任一個或這兩者,其中前者通常根據(jù)通用串行總線(usb)標(biāo)準(zhǔn)來實現(xiàn)并且具有相應(yīng)的usb連接器(未示出)。設(shè)置有存儲裝置309,并且存儲裝置309通常包括硬盤驅(qū)動器(hdd)310。還可以使用諸如軟盤驅(qū)動器和磁帶驅(qū)動器(未示出)等的其它存儲裝置。通常設(shè)置有光盤驅(qū)動器312以用作數(shù)據(jù)的非易失性源。作為向著系統(tǒng)300的數(shù)據(jù)的適當(dāng)源,可以使用例如光盤(例如,cd-rom、dvd、藍(lán)光盤(blu-raydisctm))、usb-ram、便攜型外部硬盤驅(qū)動器和軟盤等的便攜型存儲器裝置。通常,hdd310、光盤驅(qū)動器312、網(wǎng)絡(luò)320和322或者照相機(jī)327中的任意均可用于針對要編碼的視頻數(shù)據(jù)的源,或者連同顯示器314一起用于要存儲或再現(xiàn)的解碼視頻數(shù)據(jù)的目的地。
計算機(jī)模塊301的組件305~313通常經(jīng)由互連總線304并且以得到相關(guān)領(lǐng)域技術(shù)人員已知的計算機(jī)系統(tǒng)300的傳統(tǒng)操作模式的方式進(jìn)行通信。例如,處理器305使用接線318連接至系統(tǒng)總線304。同樣,存儲器306和光盤驅(qū)動器312通過接線319連接至系統(tǒng)總線304??梢詫嵺`所述配置的計算機(jī)的示例包括ibm-pc和兼容機(jī)、sunsparcstation、applemactm或相似的計算機(jī)系統(tǒng)。
在適當(dāng)或期望的情況下,可以使用計算機(jī)系統(tǒng)300來實現(xiàn)編碼器100和解碼器200以及以下所述的方法,其中可以將編碼器100和解碼器200以及要說明的處理作為計算機(jī)系統(tǒng)300內(nèi)可執(zhí)行的一個或多個軟件應(yīng)用程序333來實現(xiàn)。特別地,利用在計算機(jī)系統(tǒng)300內(nèi)執(zhí)行的軟件333中的指令331(參見圖3b)來實現(xiàn)編碼器100、解碼器200和所述方法的各步驟。可以將軟件指令331形成為各自用于進(jìn)行一個或多個特定任務(wù)的一個或多個代碼模塊。還可以將軟件分割成兩個單獨部分,其中第一部分和相應(yīng)的代碼模塊進(jìn)行所述方法,并且第二部分和相應(yīng)的代碼模塊管理第一部分和用戶之間的用戶界面。
例如,可以將軟件存儲在包括以下所述的存儲裝置的計算機(jī)可讀介質(zhì)中。將軟件從計算機(jī)可讀介質(zhì)載入計算機(jī)系統(tǒng)300,然后由計算機(jī)系統(tǒng)300來執(zhí)行。記錄有這種軟件或計算機(jī)程序的計算機(jī)可讀介質(zhì)是計算機(jī)程序產(chǎn)品。優(yōu)選地,在計算機(jī)系統(tǒng)300中使用該計算機(jī)程序產(chǎn)品實現(xiàn)了用于實現(xiàn)編碼器100、解碼器200和所述方法的有利設(shè)備。
通常將軟件333存儲在hdd310或存儲器306中。將該軟件從計算機(jī)可讀介質(zhì)載入計算機(jī)系統(tǒng)300,并且由計算機(jī)系統(tǒng)300來執(zhí)行。因而,例如,可以將軟件333存儲在光盤驅(qū)動器312所讀取的光學(xué)可讀盤存儲介質(zhì)(例如,cd-rom)325上。
在一些示例中,將應(yīng)用程序333以編碼在一個或多個cd-rom325上并且經(jīng)由相應(yīng)的驅(qū)動器312進(jìn)行讀取的方式供給至用戶,或者可選地,可以由用戶從網(wǎng)絡(luò)320或322讀取應(yīng)用程序333。此外,還可以將軟件從其它計算機(jī)可讀介質(zhì)載入計算機(jī)系統(tǒng)300。計算機(jī)可讀存儲介質(zhì)是指將所記錄的指令和/或數(shù)據(jù)提供至計算機(jī)系統(tǒng)300以供執(zhí)行和/或處理的任何非瞬態(tài)有形存儲介質(zhì)。這種存儲介質(zhì)的示例包括軟盤、磁帶、cd-rom、dvd、藍(lán)光盤、硬盤驅(qū)動器、rom或集成電路、usb存儲器、磁光盤、或者諸如pcmcia卡等的計算機(jī)可讀卡等,而與這些裝置在計算機(jī)模塊301的內(nèi)部還是外部無關(guān)。還可以參與將軟件、應(yīng)用程序、指令和/或視頻數(shù)據(jù)或編碼視頻數(shù)據(jù)提供至計算機(jī)模塊301的瞬態(tài)或非有形計算機(jī)可讀傳輸介質(zhì)的示例包括:無線電或紅外線傳輸通道及向著其它計算機(jī)或聯(lián)網(wǎng)裝置的網(wǎng)絡(luò)接線、以及包括電子郵件發(fā)送和網(wǎng)站上所記錄的信息等的因特網(wǎng)或內(nèi)聯(lián)網(wǎng)等。
可以執(zhí)行上述的應(yīng)用程序333的第二部分和相應(yīng)的代碼模塊來實現(xiàn)要渲染或呈現(xiàn)在顯示器314上的一個或多個圖形用戶界面(gui)。通過典型地對鍵盤302和鼠標(biāo)303進(jìn)行操作,計算機(jī)系統(tǒng)300的用戶和應(yīng)用程序可以以在功能上可適應(yīng)的方式對界面進(jìn)行操作,以將控制命令和/或輸入提供至與這些gui相關(guān)聯(lián)的應(yīng)用程序。還可以實現(xiàn)在功能上可適應(yīng)的其它形式的用戶界面,諸如利用經(jīng)由揚聲器317所輸出的語音提示和經(jīng)由麥克風(fēng)380所輸入的用戶聲音命令的音頻界面等。
圖3b是處理器305和“存儲器”334的詳細(xì)示意框圖。存儲器334表示圖3a中的計算機(jī)模塊301可以訪問的(包括hdd309和半導(dǎo)體存儲器306的)所有存儲器模塊的邏輯聚合。
在初始對計算機(jī)模塊301通電的情況下,上電自檢(power-onself-test,post)程序350執(zhí)行。通常將post程序350存儲在圖3a的半導(dǎo)體存儲器306的rom349中。有時將諸如存儲有軟件的rom349等的硬件裝置稱為固件。post程序350檢查計算機(jī)模塊301內(nèi)的硬件以確保適當(dāng)工作,并且通常檢查處理器305、存儲器334(309,306)和通常還存儲在rom349中的基本輸入-輸出系統(tǒng)軟件(bios)模塊351,以進(jìn)行正確操作。一旦post程序350成功運行,bios351啟動圖3a的硬盤驅(qū)動器310。啟動硬盤驅(qū)動器310使得經(jīng)由處理器305執(zhí)行駐留在硬盤驅(qū)動器310上的引導(dǎo)裝入程序352。這樣將操作系統(tǒng)353載入ram存儲器306,其中在該ram存儲器306上,操作系統(tǒng)353開始工作。操作系統(tǒng)353是處理器305可執(zhí)行的系統(tǒng)級應(yīng)用程序,以實現(xiàn)包括處理器管理、存儲器管理、裝置管理、存儲管理、軟件應(yīng)用程序接口和通用用戶界面等的各種高級功能。
操作系統(tǒng)353管理存儲器334(309,306),以確保計算機(jī)模塊301上運行的各處理或應(yīng)用程序具有在不會與分配至其它處理的內(nèi)存沖突的情況下執(zhí)行的充足內(nèi)存。此外,必須適當(dāng)使用圖3a的系統(tǒng)300中可用的不同類型的存儲器,以使得各處理可以高效地運行。因此,聚合存儲器334并不意圖例示如何分配存儲器的特定區(qū)段(除非另外說明),而是提供計算機(jī)系統(tǒng)300可訪問的存儲器的概述圖以及如何使用該存儲器。
如圖3b所示,處理器305包括多個功能模塊,其中這多個功能模塊包括控制單元339、運算邏輯單元(alu)340和有時稱為高速緩沖存儲器的本地或內(nèi)部存儲器348。高速緩沖存儲器348在寄存器區(qū)段中通常包括多個存儲寄存器344~346。一個或多個內(nèi)部總線341從功能上使這些功能模塊相互連接。處理器305通常還具有用于使用接線318來經(jīng)由系統(tǒng)總線304與外部裝置進(jìn)行通信的一個或多個接口342。存儲器334使用接線319連接至總線304。
應(yīng)用程序333包括可以包含條件分支指令和循環(huán)指令的指令序列331。程序333還可以包括執(zhí)行程序333時所使用的數(shù)據(jù)332。將指令331和數(shù)據(jù)332分別存儲在存儲器位置328、329、330和335、336、337中。根據(jù)指令331和存儲器位置328~330的相對大小,如存儲器位置330中示出的指令所描述的,可以將特定指令存儲在單個存儲器位置中。可選地,如存儲器位置328和329中示出的指令段所描述的,可以將指令分割成各自被存儲在單獨的存儲器位置中的多個部分。
通常,向處理器305賦予一組指令,其中在該處理器305內(nèi)執(zhí)行該組指令。處理器305等待下一輸入,其中處理器305通過執(zhí)行另一組指令來對該下一輸入作出反應(yīng)??梢詮囊粋€或多個源提供各輸入,其中該輸入包括一個或多個輸入裝置302、303所生成的數(shù)據(jù)、從外部源經(jīng)由網(wǎng)絡(luò)320、302其中之一所接收到的數(shù)據(jù)、從存儲裝置306、309其中之一所檢索到的數(shù)據(jù)或者從插入相應(yīng)的讀取器312內(nèi)的存儲介質(zhì)325所檢索到的數(shù)據(jù)(所有這些組件均在圖3a中示出)。執(zhí)行一組指令在一些情況下可能會導(dǎo)致輸出數(shù)據(jù)。執(zhí)行還可能涉及將數(shù)據(jù)或變量存儲至存儲器334。
編碼器100、解碼器200和所述方法使用存儲在存儲器334內(nèi)的相應(yīng)存儲器位置355、356、357中的輸入變量354。編碼器100、解碼器200和所述方法產(chǎn)生存儲在存儲器334內(nèi)的相應(yīng)存儲器位置362、363、364中的輸出變量361。可以將中間變量358存儲在存儲器位置359、360、366和367中。
參考圖3b的處理器305,寄存器344、345、346、運算邏輯單元(alu)340和控制單元339一起工作以進(jìn)行微操作序列,其中這些微操作序列是針對構(gòu)成程序333的指令集中的每個指令進(jìn)行“提取、解碼和執(zhí)行”周期所需的。各提取、解碼和執(zhí)行周期包括以下操作:
(a)提取操作,用于從存儲器位置328、329、330提取或讀取指令331;
(b)解碼操作,其中在該解碼操作中,控制單元339判斷提取了哪個指令;以及
(c)執(zhí)行操作,其中在該執(zhí)行操作中,控制單元339和/或alu340執(zhí)行該指令。
之后,可以執(zhí)行針對下一指令的進(jìn)一步提取、解碼和執(zhí)行周期。同樣,可以進(jìn)行存儲周期,其中在該存儲周期中,控制單元339將值存儲至或?qū)懭氪鎯ζ魑恢?32。
要說明的處理中的各步驟或子處理與程序333的一個或多個區(qū)段相關(guān)聯(lián),并且通過處理器305中的寄存器部344、345、347、alu340和控制單元339一起工作以針對程序333的所述區(qū)段的指令集中的每個指令進(jìn)行提取、解碼和執(zhí)行周期,來進(jìn)行各步驟或子處理。
可選地,可以在諸如進(jìn)行所述方法的功能或子功能的一個或多個集成電路等的專用硬件中實現(xiàn)編碼器100、解碼器200和所述方法。這種專用硬件可以包括圖形處理器、數(shù)字信號處理器、專用集成電路(asic)、現(xiàn)場可編程門陣列(fpga)或者一個或多個微處理器和關(guān)聯(lián)存儲器。
如上所述,可以將視頻編碼器100作為駐留在硬盤驅(qū)動器310上并且由處理器305控制其執(zhí)行的軟件應(yīng)用程序333的一個或多個軟件代碼模塊來實現(xiàn)。特別地,視頻編碼器100包括各自可以作為軟件應(yīng)用程序333的一個或多個軟件代碼模塊來實現(xiàn)的模塊102~112、114和115。
盡管圖1的視頻編碼器100是高效率視頻編碼(hevc)視頻解碼流水線的示例,但模塊102~112、114和115所進(jìn)行的處理階段對于諸如vc-1或h.264/mpeg-4avc等的其它視頻編解碼器是共通的。視頻編碼器100接收未編碼的幀數(shù)據(jù)101作為包括亮度樣本和色度樣本的一系列幀。視頻編碼器100將幀數(shù)據(jù)101的各幀分割成例如可表示為編碼單位(cu)樹的編碼單位(cu)的層級集合。
視頻編碼器100通過從多路復(fù)用器模塊110輸出已知為預(yù)測單位(pu)120的預(yù)測數(shù)據(jù)樣本的陣列來進(jìn)行工作。差模塊115輸出預(yù)測單位(pu)120和從幀數(shù)據(jù)101所接收到的數(shù)據(jù)樣本的相應(yīng)陣列之間的差,其中該差已知為殘差數(shù)據(jù)樣本122。
來自差模塊115的殘差數(shù)據(jù)樣本122被變換模塊102接收到,其中該變換模塊102將該差從空間表示轉(zhuǎn)換為頻域表示,以針對變換樹中的各變換單位(tu)創(chuàng)建變換系數(shù)124。針對開發(fā)中的高效率視頻編碼(hevc)標(biāo)準(zhǔn),使用改進(jìn)的離散余弦變換(dct)來實現(xiàn)向著頻域表示的轉(zhuǎn)換,其中在該改進(jìn)的離散余弦變換中,對傳統(tǒng)的dct進(jìn)行修改以使用移位和加法來實現(xiàn)。然后將變換系數(shù)124輸入至縮放和量化模塊103,并且進(jìn)行縮放和量化以產(chǎn)生殘差系數(shù)126。該縮放和量化處理導(dǎo)致精度損失。
將殘差系數(shù)126視為向著逆縮放模塊105的輸入,其中該逆縮放模塊105反轉(zhuǎn)縮放和量化模塊103所進(jìn)行的縮放以產(chǎn)生作為殘差系數(shù)126的重新縮放版本的重新縮放變換系數(shù)128。還將殘差系數(shù)126視為向著熵編碼器模塊104的輸入,其中該熵編碼器模塊104將殘差系數(shù)編碼在編碼位流113中。由于縮放和量化模塊103所引起的精度損失,因此重新縮放變換系數(shù)128與原始變換系數(shù)124不一致。然后,將來自逆縮放模塊105的重新縮放變換系數(shù)128輸出至逆變換模塊106。逆變換模塊106進(jìn)行從頻域向著空間域的逆變換,以產(chǎn)生與在解碼器處所產(chǎn)生的空間域表示相同的重新縮放變換系數(shù)128的空間域表示130。
運動估計模塊107通過將幀數(shù)據(jù)101與配置在存儲器306內(nèi)的幀緩沖器模塊112中所存儲的先前幀數(shù)據(jù)進(jìn)行比較來產(chǎn)生運動矢量132。然后將這些運動矢量132輸入至運動補(bǔ)償模塊108,其中該運動補(bǔ)償模塊108考慮到源自于運動矢量132的空間偏移,通過對幀緩沖器模塊112中所存儲的樣本進(jìn)行濾波來產(chǎn)生幀間預(yù)測的參考樣本134。盡管圖1沒有示出,但還將運動矢量132作為句法元素傳遞至熵編碼器模塊104以編碼在編碼位流113中。幀內(nèi)預(yù)測模塊109使用從求和模塊114獲得的樣本138來產(chǎn)生幀內(nèi)預(yù)測的參考樣本136,其中該求和模塊114對多路復(fù)用器模塊110的輸出120和來自逆變換模塊106的輸出130進(jìn)行求和。
可以使用幀內(nèi)預(yù)測或幀間預(yù)測方法來對預(yù)測單位(pu)進(jìn)行編碼。根據(jù)由此得到的編碼位流113的期望位率和由于幀內(nèi)預(yù)測或幀間預(yù)測方法而引入的圖像質(zhì)量失真量之間的率失真權(quán)衡來判斷是使用幀內(nèi)預(yù)測還是幀間預(yù)測。如果使用幀內(nèi)預(yù)測,則還根據(jù)率失真權(quán)衡,從一組可能模式中選擇一個幀內(nèi)預(yù)測模式。針對各預(yù)測單位選擇一個幀內(nèi)預(yù)測模式。
多路復(fù)用器模塊110根據(jù)利用盡管未示出但本領(lǐng)域內(nèi)眾所周知的控制邏輯所確定的當(dāng)前預(yù)測模式142,來選擇來自幀內(nèi)預(yù)測模塊109的幀內(nèi)預(yù)測的參考樣本136或來自運動補(bǔ)償塊108的幀間預(yù)測的參考樣本134。還將預(yù)測模式142提供至熵編碼器104,并且如此使用該預(yù)測模式142來確定或建立如將說明的變換單位的掃描順序。幀間預(yù)測僅使用對角掃描順序,而幀內(nèi)預(yù)測可以使用對角掃描、水平掃描或垂直掃描順序。
求和模塊114產(chǎn)生總和138,其中將該總和138輸入至去塊濾波器模塊111。去塊濾波器模塊111沿著塊邊界進(jìn)行濾波,從而產(chǎn)生寫入存儲器306內(nèi)所配置的幀緩沖器模塊112的去塊樣本140。幀緩沖器模塊112是具有用以保持來自多個過去幀的數(shù)據(jù)以供將來參考的充足容量的緩沖器。
在視頻編碼器100中,通過求出輸入幀數(shù)據(jù)101的數(shù)據(jù)樣本和輸入幀數(shù)據(jù)101的數(shù)據(jù)樣本的預(yù)測120之間的差來確定一個變換單位(tu)內(nèi)的殘差數(shù)據(jù)樣本122。該差提供變換單位(tu)的殘差系數(shù)的空間表示。將變換單位(tu)的殘差系數(shù)轉(zhuǎn)換成二維有效性映射。
然后,按已知為掃描順序的特定順序來掃描變換單位(tu)中的殘差系數(shù)的有效性映射,以形成被稱為有效系數(shù)標(biāo)志的列表的標(biāo)志值的一維列表??梢悦枋鲈搾呙桧樞颍蛘呖梢酝ㄟ^諸如利用預(yù)測模式142從幀內(nèi)預(yù)測模塊109所接收到的掃描模式等的掃描模式來指定該掃描順序。掃描模式可以是水平、垂直、對角或折線的。
高效率視頻編碼(hevc)測試模型的版本6(即,“he_6.0”)進(jìn)行后向方向上的掃描。然而,還可以進(jìn)行前向方向上的掃描。在hevc參考模型版本6.0(即,“he_6.0”)中,掃描操作開始最末有效系數(shù)之后(其中,“之后”是在殘差系數(shù)的后向掃描的方向上)的一個殘差系數(shù),并且繼續(xù)直到到達(dá)有效性映射的左上位置為止。具有該特性并且符合hevc參考模型版本6.0的掃描操作已知為“后向掃描”。在hevc參考軟件版本6.0(即,“he_6.0”)中,通過對變換單位(tu)中的系數(shù)的坐標(biāo)進(jìn)行編碼來用信號通知最末有效系數(shù)的位置。該上下文中的形容詞“最末”的使用依賴于掃描的特定順序。根據(jù)一個掃描模式可以作為“最末的”非零殘差系數(shù)或相應(yīng)的1值有效系數(shù)標(biāo)志的內(nèi)容根據(jù)其它掃描模式可能不是“最末的”。
將表示最末有效系數(shù)之前的各殘差系數(shù)的有效性的有效系數(shù)標(biāo)志的列表編碼在位流中。由于針對最末有效系數(shù)標(biāo)志的位置的先前編碼隱含表示該殘差系數(shù)是有效的,因此不要求將最末有效系數(shù)標(biāo)志值明確編碼在位流中。
較大值的殘差系數(shù)向著變換單位(tu)的左上方的聚集導(dǎo)致列表中較早的大部分有效性標(biāo)志是有效的,而稍后在列表中發(fā)現(xiàn)較少的有效性標(biāo)志。
如上所述,視頻編碼器100還包括實現(xiàn)熵編碼方法的熵編碼器模塊104。熵編碼器模塊104根據(jù)從縮放和量化模塊103接收到的傳入殘差系數(shù)數(shù)據(jù)(或殘差系數(shù))126產(chǎn)生句法元素。熵編碼器模塊104輸出編碼位流113,并且以下將更詳細(xì)地進(jìn)行說明。對于開發(fā)中的高效率視頻編碼(hevc)標(biāo)準(zhǔn),將編碼位流113描繪成網(wǎng)絡(luò)抽象層(nal)單位。幀的各片包含在一個nal單位中。
針對熵編碼器模塊104中所實現(xiàn)的熵編碼方法,存在幾個替代方案。開發(fā)中的高效率視頻編碼(hevc)標(biāo)準(zhǔn)支持上下文自適應(yīng)二進(jìn)制算術(shù)編碼(cabac),其中在h.264/mpeg-4avc中發(fā)現(xiàn)上下文自適應(yīng)二進(jìn)制算術(shù)編碼(cabac)的變形。替代的熵編碼方案已知為概率區(qū)間劃分熵(pipe)編碼器。
對于支持多個視頻編碼方法的視頻編碼器100,根據(jù)編碼器100的結(jié)構(gòu)來選擇所支持的熵編碼方法其中之一。此外,在對來自各幀的編碼單位進(jìn)行編碼時,熵編碼器模塊104編寫編碼位流113,以使得各幀具有一個或多個片,其中各片包含該幀的一部分的圖像數(shù)據(jù)。針對每幀產(chǎn)生一個片,這樣減少了與描述各片邊界相關(guān)聯(lián)的開支。然而,還可以將幀分割成多個片。
可以將圖2的視頻解碼器200作為駐留在硬盤驅(qū)動器310上并且由處理器305來控制其執(zhí)行的軟件應(yīng)用程序333的一個或多個軟件代碼模塊來實現(xiàn)。特別地,視頻解碼器200包括各自可以作為軟件應(yīng)用程序333的一個或多個軟件代碼模塊來實現(xiàn)的模塊202~208和210。盡管參考高效率視頻編碼(hevc)視頻解碼流水線來描述視頻解碼器200,但模塊202~208和209所進(jìn)行的處理階段對于采用諸如h.264/mpeg-4avc、mpeg-2和vc-1等的熵編碼的其它視頻編解碼器而言是共通的。
諸如編碼位流113等的編碼位流被視頻解碼器200接收到??梢詮拇鎯ζ?06、硬盤驅(qū)動器310、cd-rom、藍(lán)光(blu-raytm)盤或其它計算機(jī)可讀存儲介質(zhì)讀取編碼位流113??蛇x地,可以從諸如連接至通信網(wǎng)絡(luò)320的服務(wù)器或射頻接收器等的外部源來接收編碼位流113。編碼位流113包含表示要解碼的幀數(shù)據(jù)的編碼句法元素。
將編碼位流113輸入至熵解碼器模塊202,其中該熵解碼器模塊202從編碼位流113中提取句法元素,并且將這些句法元素的值傳遞至視頻解碼器200中的其它塊。可以存在諸如參考熵編碼器模塊104所述等的在熵解碼器模塊202中所實現(xiàn)的多個熵解碼方法。將表示殘差系數(shù)數(shù)據(jù)的句法元素數(shù)據(jù)220傳遞至逆縮放和變換模塊203,并且將表示運動矢量信息的句法元素數(shù)據(jù)222傳遞至運動補(bǔ)償模塊204。逆縮放和變換模塊203對殘差系數(shù)數(shù)據(jù)進(jìn)行逆縮放以創(chuàng)建重建變換系數(shù)。然后,諸如參考逆變換模塊106所述的逆變換等,模塊203進(jìn)行逆變換以將重建變換系數(shù)從頻域表示轉(zhuǎn)換成空間域表示,從而產(chǎn)生殘差樣本224。
運動補(bǔ)償模塊204將來自熵解碼器模塊202的運動矢量數(shù)據(jù)222與來自存儲器306內(nèi)所配置的幀緩沖器塊208的先前幀數(shù)據(jù)226相組合使用,以產(chǎn)生作為輸出解碼幀數(shù)據(jù)的預(yù)測的針對預(yù)測單位(pu)的幀間預(yù)測參考樣本228。在句法元素表示使用幀內(nèi)預(yù)測對當(dāng)前編碼單位進(jìn)行編碼的情況下,幀內(nèi)預(yù)測模塊205使用在空間上鄰接預(yù)測單位(pu)的樣本來產(chǎn)生針對預(yù)測單位(pu)的幀內(nèi)預(yù)測的參考樣本230。根據(jù)從求和模塊210輸出的總和232來獲得在空間上鄰接的樣本。多路復(fù)用器模塊206根據(jù)利用編碼位流113中的句法元素所表示的當(dāng)前預(yù)測模式來選擇針對預(yù)測單位(pu)的幀內(nèi)預(yù)測參考樣本或幀間預(yù)測參考樣本。利用求和模塊210將從多路復(fù)用器模塊206輸出的樣本陣列234與來自逆縮放和變換模塊203的殘差樣本224相加,以產(chǎn)生總和232,然后將該總和232分別輸入至去塊濾波器模塊207和幀內(nèi)預(yù)測模塊205。與編碼器100相對比,幀內(nèi)預(yù)測模塊205從熵解碼器202接收預(yù)測模式236。多路復(fù)用器206從熵解碼器202接收幀內(nèi)預(yù)測/幀間預(yù)測選擇信號。去塊濾波器模塊207沿著數(shù)據(jù)塊邊界進(jìn)行濾波以使沿著數(shù)據(jù)塊邊界可見的偽影平滑化。將去塊濾波器模塊207的輸出寫入存儲器306內(nèi)所配置的幀緩沖器模塊208。幀緩沖器模塊208提供用以保持多個解碼幀以供將來參考的充足存儲量。還從幀緩沖器模塊208輸出解碼幀209。
將參考圖4a和圖4b來說明示例的變換單位(tu)400的空間結(jié)構(gòu)。
圖4a示出示例的變換單位(tu)400。變換單位400具有矩形空間結(jié)構(gòu)并且大小可以為4×4~32×32。變換單位(tu)400的寬度和高度取作為二(2)的整數(shù)冪的值。
如上所述,變換單位(tu)保持殘差系數(shù)。可以定義將變換單位(tu)400分割成一個或多個子集401的集合的兩級掃描。根據(jù)最末有效系數(shù)的位置,除可能包含少于十六(16)個殘差系數(shù)的按掃描順序的第一個子集以外,各子集包括按掃描順序403的十六(16)個連續(xù)殘差系數(shù)。如從圖4b看出,示例的變換單位400相對于掃描順序403具有最末有效系數(shù)位置451。
如從圖4a看出,在變換單位400的上級處,通過使用諸如后向?qū)亲笙聮呙璧鹊膾呙鑱頀呙韪飨录墸M(jìn)行掃描。在還已知為“子集級”的變換單位400的下級處,可以使用諸如后向?qū)亲笙聮呙璧鹊膾呙鑱磉M(jìn)行掃描。在變換單位400的上掃描級處,如果下一子集不包含任何有效殘差系數(shù),則可以確定不進(jìn)行下一子集的下級掃描。
變換單位400包含不具有有效殘差系數(shù)的子集452。在該示例中,可以針對子集452跳過下級掃描步驟,并且高級掃描按掃描順序403進(jìn)入下一子集。變換單位400的左上子集405具有子集索引零。其它子集按與掃描順序相反的順序具有遞增索引。
將參考圖5和圖7來說明諸如變換單位(tu)400等的變換單位(tu)的句法元素結(jié)構(gòu)。位流113的位流部501包含變換單位(tu)400的句法元素并且包括以下句法元素。
(i)delta_qp502:delta_qp句法元素502包含與用于對變換單位(tu)400進(jìn)行量化的量化參數(shù)值和預(yù)定量化參數(shù)值之間的差有關(guān)的信息。
(ii)last_significant_xy503:last_significant_xy句法元素503包含與變換單位(tu)400中的最末有效殘差系數(shù)的位置有關(guān)的信息。
(iii)子集殘差系數(shù)數(shù)據(jù)504:子集殘差系數(shù)數(shù)據(jù)包括零個或多個塊701,并且包含與變換單位(tu)400的殘差系數(shù)的值有關(guān)的信息。
如圖7所示,塊701包含與變換單位(tu)的一個子集的殘差系數(shù)的值有關(guān)的信息,并且包括以下句法元素。
(i)significant_coeff_group_flag702:針對各子集對significant_coeff_group_flag句法元素702進(jìn)行一次編碼,并且在“假”的情況下,推斷出子集中的所有殘差系數(shù)為零,并且在塊701中不存在殘差系數(shù)數(shù)據(jù)703、704、705、706和707。否則(在significant_coeff_group_flag句法元素702為“真”的情況下),子集中的至少一個殘差系數(shù)具有非零值,并且在塊701中存在殘差系數(shù)數(shù)據(jù)703、704、705、706和707的一些組合。
(ii)零個或多個significant_coeff_flag值的塊703:如果significant_coeff_group_flag702表示塊703的存在,則存在塊703。除最末有效殘差系數(shù)以外,針對子集的每個殘差系數(shù)在塊703中均存在significant_coeff_flag702的值,以表示給定殘差系數(shù)的量值是否大于零。
(iii)零個或多個coeff_abs_level_greater1_flag值的塊704:如果significant_coeff_group_flag702表示塊704的存在,則存在塊704。針對子集的量值被表示為大于零的每個殘差系數(shù),在塊703中存在coeff_abs_level_greater1_flag值,以表示給定殘差系數(shù)的量值是否大于1。
(iv)零個或多個coeff_abs_level_greater2_flag值的塊705:如果significant_coeff_group_flag702表示塊705的存在,則存在塊705。針對子集的量值被表示為大于1的每個殘差系數(shù),在塊705中存在coeff_abs_level_greater2_flag值,以表示給定殘差系數(shù)的量值是否大于2。
(v)零個或多個coeff_sign_flag值的塊706:如果significant_coeff_group_flag702表示塊706的存在,則存在塊706。針對量值被表示為大于零的每個殘差系數(shù),在塊706中存在coeff_sign_flag值,以表示給定殘差系數(shù)的算術(shù)符號。
(vi)零個或多個coeff_abs_level_remaining值的塊707:針對殘差系數(shù)量值-3的給定值(即,剩余殘差系數(shù)量值),塊707的各coeff_abs_level_remaining值是golomb-rice碼字。如果significant_coeff_group_flag702表示塊707的存在,則存在塊707。針對量值被表示為大于2的各殘差系數(shù),在塊707中存在coeff_abs_level_remaining值。coeff_abs_level_remaining值針對給定殘差系數(shù)的剩余殘差系數(shù)量值,指定golomb-rice碼字的值。
現(xiàn)在將參考圖6a來說明對變換單位(tu)進(jìn)行編碼的方法650。可以將方法650作為編碼器100的熵編碼器模塊104的一部分來實現(xiàn)。如上所述,構(gòu)成編碼器100的軟件代碼模塊102~112、114和115駐留在硬盤驅(qū)動器310上,并且由處理器305控制這些模塊的執(zhí)行。
將參考圖5的位流部501來以示例方式說明方法650。方法650將delta_qp502、last_significant_xy503和數(shù)據(jù)504編碼在位流部501中。
方法650從對delta-qp值進(jìn)行編碼的步驟651開始,其中在該步驟651中,在處理器305的執(zhí)行下,利用編碼器模塊104對delta-qp值進(jìn)行編碼,并且存儲在存儲器306中。
然后,在對最末有效位置進(jìn)行編碼的步驟652中,在處理器305的執(zhí)行下,利用編碼器模塊104將最末有效殘差系數(shù)的位置編碼在位流部501中??梢詫⑽涣鞑?01存儲在存儲器306中。使用最末有效殘差系數(shù)的位置、變換單位的寬度和高度和與掃描順序403有關(guān)的信息來確定要編碼在變換單位(tu)中的子集的數(shù)量。
方法650在對子集進(jìn)行編碼的步驟653中繼續(xù),其中在該步驟653中,利用編碼器模塊104對子集數(shù)據(jù)504進(jìn)行編碼并且存儲在存儲器306內(nèi)。
然后,在確定步驟654中,編碼器模塊104基于與變換單位(tu)中的最末有效殘差系數(shù)的位置和所使用的掃描順序403有關(guān)的信息,判斷是否應(yīng)將更多子集504編碼在位流部501中。如果編碼器模塊104判斷為存在要編碼的更多子集504,則方法650返回至對子集進(jìn)行編碼的步驟653。如此,方法650迭代地進(jìn)行步驟653和654,直到處理了從包含最末有效系數(shù)的子集到第一個子集的所有子集為止。否則,方法650結(jié)束。
將參考圖6b來說明對變換單位(tu)進(jìn)行解碼的方法600。可以將方法600作為解碼器200的熵解碼器模塊202的一部分來實現(xiàn)。如上所述,構(gòu)成解碼器200的軟件代碼模塊202~208和210駐留在硬盤驅(qū)動器310上,并且由處理器305控制執(zhí)行這些模塊的執(zhí)行。
再次,將參考根據(jù)方法650進(jìn)行編碼后的圖5的位流部501來以示例方式說明方法600。方法600從位流部501解碼數(shù)據(jù)塊502、503、504。
該方法從對delta-qp值進(jìn)行解碼的步驟601開始,其中在該步驟601中,在處理器305的執(zhí)行下,利用解碼器模塊202確定delta-qp標(biāo)志的值。可以將delta-qp標(biāo)志值存儲在存儲器306中。
然后,在對最末有效位置進(jìn)行解碼的步驟602中,利用解碼器模塊202確定變換單位(tu)中的最末有效殘差系數(shù)的位置。使用最末有效殘差系數(shù)的位置、變換單位的寬度和高度以及與掃描順序403有關(guān)的信息來確定在變換單位(tu)中要解碼的子集的數(shù)量。
方法600在對子集進(jìn)行解碼的步驟603中繼續(xù),其中在該步驟603中,在處理器305的執(zhí)行下,利用解碼器模塊202對子集數(shù)據(jù)504進(jìn)行解碼??梢詫⒔獯a后的子集數(shù)據(jù)存儲在存儲器306內(nèi)。
然后,在確定步驟604中,解碼器模塊202基于與變換單位(tu)中的最末有效殘差系數(shù)的位置和所使用的掃描順序403有關(guān)的信息,來判斷是否應(yīng)從位流部501解碼更多子集504。
如果解碼器模塊202判斷為存在要解碼的更多子集504,則方法600返回至子集步驟603。否則,方法600結(jié)束。
現(xiàn)在將參考圖8a來說明對變換單位(tu)的子集進(jìn)行編碼的方法850??梢詫⒎椒?50作為編碼器100的熵編碼器模塊104的一部分來實現(xiàn)。如上所述,構(gòu)成編碼器100的軟件代碼模塊102~112、114和115駐留在硬盤驅(qū)動器310上,并且由處理器305控制這些模塊的執(zhí)行。
將參考圖7的塊701以示例方式說明方法850。方法850將塊702、703、704、705、706、707編碼在位流部501中。
方法850從對有效組標(biāo)志進(jìn)行編碼的步驟851開始,其中在該步驟851中,編碼器模塊104在處理器305的執(zhí)行下,對significant_coeff_group_flag702的值進(jìn)行編碼并將編碼值存儲在存儲器306中。
然后,在步驟852中,如果significant_coeff_group_flag702的值表示子集包含針對塊703、704、705、706、707要編碼的數(shù)據(jù),則方法850進(jìn)入步驟853。否則,方法850結(jié)束。
在編碼步驟853中,編碼器模塊104在處理器305的執(zhí)行下,對significant_coeff_flag值的塊703進(jìn)行編碼。編碼器模塊104針對子集的除變換單位(tu)的最末有效殘差系數(shù)以外的各殘差系數(shù),確定一個significant_coeff_flag值??梢詫ignificant_coeff_flag值存儲在存儲器306中。
然后,在編碼步驟854中,編碼器模塊104對coeff_abs_level_greater1_flag值的塊704進(jìn)行編碼。編碼器模塊104針對子集的量值大于零的各殘差系數(shù),確定一個coeff_abs_level_greater1_flag值??梢詫⒕幋a后的coeff_abs_level_greater1_flag值存儲在存儲器306中。
在編碼步驟855中,編碼器模塊104對coeff_abs_level_greater2_flag值的塊705進(jìn)行編碼。編碼器模塊104針對子集的量值大于1的各殘差系數(shù),確定一個coeff_abs_level_greater2_flag值??梢詫⒕幋a后的coeff_abs_level_greater2_flag值存儲在存儲器306中。
然后,在編碼步驟856中,編碼器模塊104在處理器305的執(zhí)行下,對coeff_sign_flag值的塊706進(jìn)行編碼。編碼器模塊104針對子集的量值大于零的各殘差系數(shù),確定一個coeff_sign_flag值??梢詫⒕幋a后的coeff_sign_flag值存儲在存儲器306中。
在編碼步驟857中,編碼器模塊104對coeff_abs_level_remaining值的塊707進(jìn)行編碼。編碼器模塊104針對子集的量值大于2的各殘差系數(shù),確定一個coeff_abs_level_remaining值。可以將編碼后的coeff_abs_level_remaining值存儲在存儲器306中。在步驟857之后,方法850結(jié)束。
將參考圖8b來說明對變換單位(tu)的子集進(jìn)行解碼的方法800。可以將方法800作為解碼器200的熵解碼器模塊202的一部分來實現(xiàn)。如上所述,構(gòu)成解碼器200的軟件代碼模塊202~208和210駐留在硬盤驅(qū)動器310上,并且由處理器305控制這些模塊的執(zhí)行。
將參考圖7的塊701來以示例方式說明方法800。方法800從位流部501解碼塊702、703、704、705、706、707。
方法800從對有效組標(biāo)志進(jìn)行解碼的步驟801開始,其中在該步驟801中,解碼器模塊202對significant_coeff_group_flag702的值進(jìn)行解碼。可以將解碼后的significant_coeff_group_flag702值存儲在存儲器306中。
然后,在步驟802中,如果解碼器模塊202判斷為significant_coeff_group_flag702的值表示子集包含殘差系數(shù)數(shù)據(jù)塊703、704、705、706、707,則方法800進(jìn)入步驟803。否則,方法800結(jié)束。
在解碼步驟803中,解碼器模塊202在處理器305的執(zhí)行下,對significant_coeff_flag值的塊703進(jìn)行解碼。解碼器模塊202針對子集的除變換單位(tu)的最末有效殘差系數(shù)以外的各殘差系數(shù),確定一個significant_coeff_flag值??梢詫⒔獯a后的significant_coeff_flag值存儲在存儲器306中。
然后,在解碼步驟804中,解碼器模塊202對coeff_abs_level_greater1_flag值的塊704進(jìn)行解碼。解碼器模塊202針對子集的在步驟803中量值被確定為大于零的各殘差系數(shù),確定一個coeff_abs_level_greater1_flag值??梢詫⒔獯a后的coeff_abs_level_greater1_flag值存儲在存儲器306中。
在解碼步驟805中,解碼器模塊202在處理器305的執(zhí)行下,對coeff_abs_level_greater2_flag值的塊705進(jìn)行解碼。解碼器模塊202針對子集的在步驟804中量值被確定為大于1的各殘差系數(shù),確定一個coeff_abs_level_greater2_flag值??梢詫⒔獯a后的coeff_abs_level_greater2_flag值存儲在存儲器306中。
然后,在解碼步驟806中,解碼器模塊202對coeff_sign_flag值的塊706進(jìn)行解碼。解碼器模塊202針對子集的在步驟803中量值被確定為大于零的各殘差系數(shù),確定一個coeff_sign_flag值??梢詫oeff_sign_flag值存儲在存儲器306中。
方法800在步驟807中結(jié)束,其中在步驟807中,解碼器模塊202對coeff_abs_level_remaining值的塊707進(jìn)行解碼。解碼器模塊202針對子集的在步驟805中量值被確定為大于2的各殘差系數(shù),確定一個coeff_abs_level_remaining值。同樣在步驟807中,解碼器模塊202針對給定殘差系數(shù)的剩余殘差系數(shù)量值,確定golomb-rice碼字的值。
在步驟807之后,方法800結(jié)束。
現(xiàn)在將參考圖9、圖10、圖14a和圖14b來說明參數(shù)化golomb-rice碼和這些碼在hevc參考模型版本6.0中的使用以及這里所述的方法。
參數(shù)化golomb-rice碼是用于表示變換單位(tu)的殘差系數(shù)的剩余殘差系數(shù)量值的一類通用前綴二進(jìn)制碼。前綴二進(jìn)制碼是每個二進(jìn)制碼字具有唯一前綴的二進(jìn)制值表示。這種唯一前綴使得能夠?qū)⑻囟ùa字與其它碼字區(qū)分開,這是唯一地識別這些碼字所表示的值所需的。
參數(shù)化golomb-rice碼的各碼字可以包括參數(shù)化截斷rice前綴部分和可能的空階次0指數(shù)golomb后綴部分這兩部分。截斷rice前綴部分依賴于可能取值0、1、2、3、4的參數(shù)k。對于參數(shù)k的每個值,定義閾值。如果殘差系數(shù)剩余量值的編碼值小于閾值,則利用無指數(shù)golomb后綴的截斷rice碼來對該值進(jìn)行編碼。
如果殘差系數(shù)剩余量值的編碼值等于或大于閾值,則對預(yù)定截斷rice碼字進(jìn)行編碼,以表示編碼值等于或大于閾值。此外,使用階次0指數(shù)golomb碼對與(原始編碼值-閾值的值)相等的值進(jìn)行編碼。
如從圖9看出,表900包含針對值為0~15且參數(shù)k值為0和1的示例截斷rice碼字。
如從圖10看出,表1000包含示例的階次0指數(shù)golomb碼字。例如,使用具有參數(shù)k=0的golomb-rice碼,將利用構(gòu)成golomb-rice碼字“11111111110”的截斷rice前綴“11111111”和階次0指數(shù)golomb后綴“110”來表示值十(10)。在已知參數(shù)k的值的情況下,可以根據(jù)給定二進(jìn)制序列來唯一地識別golomb-rice碼字。
參數(shù)化golomb-rice碼的每個碼字具有依賴于參數(shù)k和編碼值的固定長度。有限數(shù)量的碼字可以具有給定長度。如此,對于編碼值的集合,利用較短的碼字來表示一些編碼值,而利用較長的碼字來表示其它編碼值。對于視頻數(shù)據(jù)編碼,可以將碼字分配至編碼值,從而使編碼在位流113中的所有碼字的總長度最小。不同的剩余殘差系數(shù)量值在變換單位(tu)數(shù)據(jù)中的出現(xiàn)頻率不同。可以通過將碼字分配至編碼值、以使得碼字的長度與編碼值的出現(xiàn)頻率相對應(yīng)來實現(xiàn)總碼字長度的縮減。例如,可以向殘差系數(shù)剩余量值的更頻繁值分配較短的碼字,并且可以向頻率相同的殘差系數(shù)剩余量值的值分配長度相同的碼字。
參數(shù)化golomb-rice碼的參數(shù)k使得能夠在要控制的碼字中分配碼字長度。值較小的參數(shù)k將更佳的碼字分配至量值較小的值,而值較大的參數(shù)k將更佳的碼字分配至量值較大的值。因此,為了大體分配最佳碼字,所述方法基于殘差系數(shù)剩余量值的給定值的出現(xiàn)頻率來確定參數(shù)k的值。
在開發(fā)中的hevc標(biāo)準(zhǔn)中,預(yù)先并不知曉諸如剩余殘差系數(shù)量值的值等的殘差系數(shù)剩余量值的真實頻率,因而在子集內(nèi)進(jìn)行參數(shù)k值的估計。為了確保參數(shù)化golomb-rice碼字的正確解碼,編碼器100和解碼器200可被配置為使用參數(shù)k的相同值來對特定碼字進(jìn)行解碼。如此,頻率值的估計局限于解碼器200處可利用的信息。
頻率值的估計可以包括初始估計和自適應(yīng)這兩個階段。
初始估計階段針對參數(shù)k提供初始估計值。由于正對剩余殘差系數(shù)量值的值進(jìn)行解碼并且更多信息變得可用于進(jìn)行分析,因而自適應(yīng)階段提供針對參數(shù)k的值的進(jìn)一步校正。
初始估計確保了更佳的碼字分配。另一方面,初始估計通常難以以如可利用不對與剩余殘差系數(shù)量值的值有關(guān)的信息進(jìn)行解碼之前那樣的高效方式實現(xiàn)。最初確定參數(shù)k的估計的高效方法可以提供編碼效率方面的大幅改進(jìn)。
在參數(shù)k的初始估計期間,可以檢測進(jìn)一步自適應(yīng)將不會對參數(shù)k的值產(chǎn)生明顯影響、因此可以跳過該自適應(yīng)的情況。自適應(yīng)階段大體改進(jìn)編碼效率。然而,對于實際情況的廣泛類別,由于初始估計提供參數(shù)k的最佳值并且無需進(jìn)一步的自適應(yīng),因此自適應(yīng)是冗余的。自適應(yīng)階段的一個缺點是無法對coeff_abs_level_remaining值的連續(xù)值進(jìn)行并行解碼,這是因為在不知曉在先前coeff_abs_level_remaining值的解碼之后自適應(yīng)地估計出的參數(shù)k的值的情況下,無法對各值進(jìn)行解碼。
現(xiàn)在將參考圖11和圖12a來說明對變換單位(tu)的子集的coeff_abs_level_remaining值的塊進(jìn)行編碼的方法1250。
可以將方法1250作為編碼器100的熵編碼器模塊104的一部分來實現(xiàn)。如上所述,構(gòu)成編碼器100的軟件代碼模塊102~112、114和115駐留在硬盤驅(qū)動器310上,并且由處理器305控制這些模塊的執(zhí)行。
將參考圖7的coeff_abs_level_remaining值的塊707通過示例來說明方法1250。方法1250將零個或多個coeff_abs_level_remaining值編碼在位流部501的塊701中。
方法1250從初始化步驟1251開始,其中在該初始化步驟1251中,在處理器305的執(zhí)行下,利用編碼器模塊104來初始估計golomb-rice參數(shù)k??梢詫的初始值存儲在存儲器306中。此外,在步驟1251中,編碼器模塊104判斷編碼期間的參數(shù)k自適應(yīng)的必要性。
然后,在確定步驟1257中,如果編碼器模塊104判斷為需要進(jìn)行自適應(yīng),則方法1250進(jìn)入步驟1252。以下將更詳細(xì)地說明自適應(yīng)確定步驟1257。否則,方法1250進(jìn)入步驟1255。
在確定步驟1252中,如果編碼器模塊104判斷為存在更多要編碼的coeff_abs_level_remaining值,則方法1250進(jìn)入步驟1253。否則,方法1250結(jié)束。
在編碼步驟1253中,編碼器模塊104如以上參考表900和1000所述,根據(jù)golomb-rice參數(shù)k的初始值來將golomb-rice碼字編碼在塊707中。
然后,在更新步驟1254中,編碼器模塊104進(jìn)行要用于對下一coeff_abs_level_remaining值進(jìn)行編碼的參數(shù)k的值的自適應(yīng)。在步驟1254中,基于參數(shù)的當(dāng)前值kn和最后解碼的coeff_abs_level_remaining值這兩個參數(shù)來確定參數(shù)k的下一值kn+1??梢允褂萌鐖D11所示的查找表1100來確定步驟1254??梢詫⒉檎冶?100存儲在存儲器306和/或硬盤驅(qū)動器310中。查找表1100使用值kn作為列并使用殘差系數(shù)量值作為行來提供kn+1的值。例如,如果參數(shù)k的當(dāng)前值是一(1)并且最后解碼的coeff_abs_level_remaining值是十二(12),則參數(shù)k的下一值是三(3)。
在確定步驟1255中,如果編碼器模塊104判斷為存在更多要編碼的coeff_abs_level_remaining值,則方法1250進(jìn)入步驟1256。否則,方法1250結(jié)束。
在編碼步驟1256中,編碼器模塊104將golomb-rice碼字編碼在塊707中并將編碼后的golomb-rice碼字存儲在存儲器306中。
現(xiàn)在將參考圖11和圖12b來說明對變換單位(tu)的子集的coeff_abs_level_remaining值的塊進(jìn)行解碼的方法1200。根據(jù)使用golomb-rice解碼的方法1200來進(jìn)行解碼??梢詫⒎椒?200作為解碼器200的熵解碼器模塊202~208的一部分來實現(xiàn)。如上所述,構(gòu)成解碼器200的軟件代碼模塊202~208和210駐留在硬盤驅(qū)動器310上,并且由處理器305控制這些模塊的執(zhí)行。
將參考圖7的coeff_abs_level_remaining值的塊707通過示例來說明方法1200。方法1200從位流部501的塊707解碼零個或多個coeff_abs_level_remaining值(即,殘差系數(shù)剩余量值的值)。
方法1200從初始化步驟1201開始,其中在初始化步驟1201中,在處理器305的執(zhí)行下,利用解碼器模塊202初始確定golomb-rice參數(shù)k。此外,在步驟1201中,解碼器模塊202確定解碼期間的參數(shù)k自適應(yīng)的必要性。步驟1201與步驟1251相同。
然后,在確定步驟1207中,如果解碼器模塊202判斷為需要進(jìn)行自適應(yīng),則如以下將說明的,方法1200進(jìn)入步驟1202。否則,方法1200進(jìn)入步驟1205。
然后,在確定步驟1202中,如果解碼器模塊202判斷為存在更多要解碼的coeff_abs_level_remaining值,則方法1200進(jìn)入步驟1203。否則,方法1200結(jié)束。
在解碼步驟1203中,解碼器模塊202從存儲器306中所存儲的塊707解碼golomb-rice碼字。
然后,在更新步驟1204中,解碼器模塊202進(jìn)行要用于對子集的下一coeff_abs_level_remaining值進(jìn)行g(shù)olomb-rice解碼的參數(shù)k的值的自適應(yīng)。步驟1204中所進(jìn)行的自適應(yīng)的過程與以上所述的步驟1254中所使用的自適應(yīng)的過程相同。
在確定步驟1205中,如果解碼器模塊202判斷為存在更多要解碼的coeff_abs_level_remaining值,則方法1200進(jìn)入步驟1206。否則,方法1200結(jié)束。
在解碼步驟1206中,解碼器模塊202使用golomb-rice解碼來從塊707解碼golomb-rice碼字??梢詫⒔獯a后的golomb-rice碼字存儲在存儲器306中。
現(xiàn)在將參考圖14a和圖14b來說明剩余殘差系數(shù)量值的自適應(yīng)和非自適應(yīng)解碼。
圖14a示出coeff_abs_level_remaining二值化器1400??梢允褂糜嬎銠C(jī)系統(tǒng)300來實現(xiàn)二值化器模塊1400,其中在該計算機(jī)系統(tǒng)300中,可以利用在計算機(jī)系統(tǒng)300內(nèi)可執(zhí)行的軟件來實現(xiàn)各種功能模塊1414、1413、1406、1407和1410。可選地,可以利用計算機(jī)系統(tǒng)300內(nèi)的專用硬件來實現(xiàn)二值化器1400。在又一替代中,可以利用專用硬件和在計算機(jī)系統(tǒng)300內(nèi)可執(zhí)行的軟件的組合來實現(xiàn)二值化器1400。
可以將二值化器1400作為解碼器200的解碼器模塊202的一部分來實現(xiàn)??蛇x地,還可以將二值化器1400作為編碼器100的編碼器模塊104的一部分來實現(xiàn)。
二值化器1400針對變換單位(tu)的子集,對剩余殘差系數(shù)量值進(jìn)行解碼。
二值化器1400使用參數(shù)k的自適應(yīng)估計。二值化器1400包括k0的初始估計模塊1414,其中該模塊1414如上所述進(jìn)行參數(shù)k的初始估計。
模塊1413對剩余殘差系數(shù)量值v0進(jìn)行解碼。模塊1413接受所輸入的golomb-rice碼字1402和參數(shù)k的初始估計值1401。一旦模塊1413完成了解碼,則如從圖14a看出,輸出解碼剩余殘差系數(shù)量值1412。
模塊1406基于參數(shù)k的初始估計值1401和如上所述利用模塊1413進(jìn)行解碼后的值1404來進(jìn)行參數(shù)k值的自適應(yīng)。
模塊1407對剩余殘差系數(shù)量值v1進(jìn)行解碼。模塊1407接受golomb-rice碼字1403和參數(shù)k的估計值1405作為輸入。一旦模塊1407完成了解碼,則輸出解碼剩余殘差系數(shù)量值1411。
模塊1410基于參數(shù)k的先前值1405和利用模塊1407進(jìn)行解碼后的值1408來進(jìn)行參數(shù)k值的自適應(yīng)。
可以利用下一golomb-rice解碼和自適應(yīng)模塊1415來使用參數(shù)k的估計值1409。模塊1410依賴于模塊1407所提供的數(shù)據(jù),而模塊1407依賴于模塊1406所提供的數(shù)據(jù),而模塊1406依賴于模塊1413所提供的數(shù)據(jù)。如此,難以并行執(zhí)行解碼模塊1413和1410。此外,解碼和自適應(yīng)模塊1415也依賴于輸入數(shù)據(jù)1416和參數(shù)k的先前估計值這兩者。然而,在參數(shù)k的值已是最佳的情況下,諸如步驟1406和1410等的自適應(yīng)步驟不會影響參數(shù)k的實際值。避免冗余的自適應(yīng)步驟可以在不會對編碼效率產(chǎn)生大幅影響的情況下提高解碼吞吐量。
圖14b示出另一coeff_abs_level_remaining二值化器1450。再次,可以使用計算機(jī)系統(tǒng)300來實現(xiàn)二值化器模塊1450,其中在該計算機(jī)系統(tǒng)300中,可以利用在計算機(jī)系統(tǒng)300內(nèi)可執(zhí)行的軟件來實現(xiàn)各種功能模塊1414、1413、1406、1407和1410??蛇x地,可以利用計算機(jī)系統(tǒng)300內(nèi)的專用硬件來實現(xiàn)二值化器1450。在又一替代中,可以利用專用硬件和在計算機(jī)系統(tǒng)300內(nèi)可執(zhí)行的軟件的組合來實現(xiàn)二值化器1450。
再次,可以將二值化器1450作為解碼器200的解碼器模塊202的一部分來實現(xiàn)??蛇x地,還可以將二值化器1450作為編碼器100的編碼器模塊104的一部分來實現(xiàn)。
二值化器1450不使用參數(shù)k的自適應(yīng)估計。二值化器1450通過針對每個時鐘周期對多個殘差系數(shù)進(jìn)行解碼來實現(xiàn)平行性。
模塊1458如上所述進(jìn)行參數(shù)k的初始估計。
模塊1454如上所述對剩余殘差系數(shù)量值v0進(jìn)行解碼。
然后,模塊1454接受所輸入的golomb-rice碼字1452和參數(shù)k的初始估計值1451。模塊1456對剩余殘差系數(shù)量值v1進(jìn)行解碼。模塊1456接受golomb-rice碼字1453和參數(shù)k的初始估計值1451作為輸入。
此外,解碼模塊1460還將接受它們相應(yīng)的輸入golomb-rice碼字1459和參數(shù)k的初始估計值1451。
模塊1454、1456和所有其它解碼器模塊1460不具有任何數(shù)據(jù)依賴性并且可以并行執(zhí)行。
現(xiàn)在將參考圖13來說明確定用于對變換單位(tu)的子集的coeff_abs_level_remaining值的塊進(jìn)行解碼的參數(shù)k的值的方法1300。
方法1300由編碼器100和解碼器200這兩者所使用以確保數(shù)據(jù)的正確解碼。如此,可以將方法1300作為編碼器100的熵編碼器模塊104的一部分來實現(xiàn)。此外,可以將方法1300作為解碼器200的熵解碼器模塊202的一部分來實現(xiàn)。
將參考解碼器200通過示例來說明方法1300。
方法1300從步驟1301開始,其中在該步驟1301中,解碼器模塊202在處理器305的執(zhí)行下,分析針對變換單位(tu)的當(dāng)前子集和先前解碼子集的先前解碼信息??梢詮拇鎯ζ?06訪問針對當(dāng)前子集的先前解碼信息。以下將更詳細(xì)地說明步驟1301。
然后,在步驟1302中,解碼器模塊202判斷解碼是否將使用自適應(yīng)并且確定參數(shù)k的值。以下將更詳細(xì)地說明步驟1302。
在步驟1303中,利用解碼器模塊202將步驟1302中所估計出的參數(shù)k的值分配至保持參數(shù)k的存儲器306內(nèi)所配置的變量。在步驟1303之后,方法1300結(jié)束。
在一個實現(xiàn)中,步驟1301可以分析當(dāng)前子集中的非零殘差系數(shù)的數(shù)量是否大于預(yù)定閾值t。如果非零(有效)殘差系數(shù)的數(shù)量大于預(yù)定閾值,則向參數(shù)k分配偏移值koffset。該偏移值將導(dǎo)致具有非零值的參數(shù)k相對于零偏移了值koffset。值koffset可以作為預(yù)定值并且設(shè)置為一(1)。否則,向參數(shù)k分配零設(shè)置值kzero。
對于hevc測試模型6.0(“hm-6.0”),用于作出該決定的閾值t將是十四(14)。參數(shù)k的偏移值koffset將是一(1),并且零設(shè)置值kzero將是零(0)。
在另一實現(xiàn)中,在步驟1301中可以分析量化參數(shù)q的值和當(dāng)前子集的索引i。在這種實現(xiàn)中,如果量化參數(shù)q的值小于預(yù)定閾值tq并且子集索引i的值小于預(yù)定閾值isubset,則向參數(shù)k分配偏移值koffset。否則,向參數(shù)k分配零設(shè)置值kzero。
對于hevc測試模型6.0(“hm-6.0”),用于作出該決定的量化參數(shù)tq的閾值將是十(10),并且用于作出該決定的子集索引isubset的值將是一(1)。參數(shù)k的偏移值koffset將是一(1)并且零設(shè)置值kzero將是零(0)。
在步驟1301中可以附加地分析變換單位的寬度和高度的值。在這種實現(xiàn)中,如果變換單位的寬度和高度的值大于預(yù)定閾值twidth和theight,則向參數(shù)k分配偏移值koffset。否則,向參數(shù)k分配零設(shè)置值kzero。
對于hevc測試模型6.0(“hm-6.0”),用于作出該決定的變換單位的寬度和高度的閾值twidth和theight將是八(8)和八(8)。參數(shù)k的偏移值koffset將是一(1)并且零設(shè)置值kzero將是零(0)。
在步驟1302中,可以基于子集的索引來進(jìn)行與子集的編碼或解碼期間使用自適應(yīng)有關(guān)的決定。如果索引等于或大于預(yù)定值imax,則在編碼器方法1250的步驟1257和解碼器方法1200的步驟1207中,方法進(jìn)入解碼器的步驟1205和編碼器的步驟1255,并且不使用參數(shù)k的自適應(yīng)。具有固定的rice參數(shù)k可被視為無依賴性的golomb-rice編碼或解碼。否則,方法進(jìn)入方法1200的步驟1202和方法1250的步驟1252,并且使用參數(shù)k的自適應(yīng)。具有自適應(yīng)rice參數(shù)k可被視為基于依賴性的golomb-rice編碼或解碼。
對于hevc測試模型6.0(“hm-6.0”),索引imax的閾值將是六(6)。圖15示出示例變換單位1500,其中在該變換單位1500中,在步驟1302中使用索引imax的閾值六(6)以進(jìn)行與子集的編碼或解碼期間使用自適應(yīng)有關(guān)的決定。在圖15的示例中假定后向?qū)菕呙枘J?。將變換單位1500分割成諸如子集1510等的16個子集。利用字母“a”或字母“f”來標(biāo)記圖15的每個子集,其中利用字母“a”所標(biāo)記的子集表示使用自適應(yīng)rice參數(shù)k進(jìn)行編碼和解碼后的子集;而利用“f”所標(biāo)記的子集表示在步驟1302中對索引imax使用六(6)的閾值的情況下、使用固定rice參數(shù)k的子集。針對索引imax的六的值得到使用子集內(nèi)的自適應(yīng)rice參數(shù)k的“a”子集。利用字母“f”所標(biāo)記的子集表示tu1500內(nèi)的如下位置中的子集:針對索引imax的閾值六(6)得到使用固定rice參數(shù)的子集。索引imax的閾值對于tu1500中的所有子集相同,并且將tu1500中的子集的位置與閾值進(jìn)行比較以判斷自適應(yīng)rice參數(shù)是否要用于進(jìn)行編碼和解碼。使用閾值索引imax的值來選擇圖15中的自適應(yīng)子集和固定子集之間的邊界。子集順序從左上方子集1520的零(0)開始,并且按逆向掃描順序繼續(xù)作為一(1)的子集1530和作為子集二(2)的子集1540。
在另一實現(xiàn)中,在步驟1302中,可以基于先前編碼或解碼子集中的大于1的殘差系數(shù)的數(shù)量g1和大于2的殘差系數(shù)的數(shù)量g2來進(jìn)行與子集的編碼或解碼期間使用自適應(yīng)有關(guān)的決定。然而,這種方法不適用于不存在先前編碼或解碼子集的情況。在存在先前編碼或解碼子集的情況下,如果值(g2–g1)大于預(yù)定閾值t21,則在編碼器方法1250的步驟1257中(或者在解碼器方法1200的步驟1207中),方法1250進(jìn)入編碼器方法1250的步驟1255(或解碼器方法1200的步驟1205)并且不使用參數(shù)k的自適應(yīng)。否則,方法1250進(jìn)入編碼器方法1250的步驟1252(或者方法1200進(jìn)入解碼器方法1200的步驟1200)并且使用參數(shù)k的自適應(yīng)。
對于hevc測試模型6.0,索引的閾值t21將為四(4)。
應(yīng)用于視頻編碼器100的情況下的方法1250和1300以及應(yīng)用于解碼器200的方法1200和1300使得能夠進(jìn)行用以實現(xiàn)諸如幀數(shù)據(jù)101等的幀數(shù)據(jù)的更高效壓縮的實現(xiàn)。所述方法還使得能夠進(jìn)行用以實現(xiàn)對諸如編碼位流113等的編碼位流進(jìn)行解析的吞吐量的提高的實現(xiàn)。通過使用golomb-rice參數(shù)k的更好估計而發(fā)生幀數(shù)據(jù)的更高效壓縮,從而使得能夠?qū)⑤^短的碼字分配至編碼符號??梢酝ㄟ^允許用以使用所述的對golomb-rice碼字進(jìn)行解碼的方法的實現(xiàn)來實現(xiàn)較高的吞吐量,其中該方法可以通過消除碼字之間的數(shù)據(jù)依賴性來一次對一個以上的碼字進(jìn)行解碼。
產(chǎn)業(yè)上的可利用性
所述的配置適用于計算機(jī)和數(shù)據(jù)處理行業(yè),特別適用于對諸如視頻信號等的信號進(jìn)行編碼或解碼的數(shù)字信號處理。
前述僅說明本發(fā)明的一些實施例,并且可以在沒有背離本發(fā)明的范圍和精神的情況下對本發(fā)明進(jìn)行修改和/或改變,其中這些實施例僅是示例性而非限制性的。
在本說明書的上下文中,詞語“包括”意味著“主要但未必僅包括”或“具有”或“包含”,而不是“僅由…組成”。詞語“包括(comprising)”的諸如“comprise”和“comprises”等的詞尾變化具有相應(yīng)的變化含義。