本發(fā)明涉及視頻編碼技術領域,特別是涉及一種視頻圖像幀的二進制語法元素的生成方法和系統(tǒng)。
背景技術:
由于視頻中的原始圖像數(shù)據(jù)量較大,如果直接對其進行傳輸,不僅需要較大的存儲空間,而且對網(wǎng)絡傳輸帶寬的要求較高。因此,為了降低視頻數(shù)據(jù)傳輸帶寬,提高傳輸數(shù)據(jù)的碼率,對視頻圖像進行壓縮編碼具有了很重要的意義。
目前,針對不同的應用場合、不同的碼率要求,很多視頻圖像專家組進行長期的研究并確立了一些相關標準,其中包括jpeg、jpeg2000、mpeg1、mpeg2、mpeg4、h.261、h.263等等。avc(advancedvideocoding,高級視頻編碼)——也被稱為itu-th.264建議和mpeg-4的第10部分的標準,簡稱為h.264。h.264比傳統(tǒng)的mpeg-4第2部分的編碼效率平均高出50%,同時,它比mpeg-4更容易推廣。此外,h.264集中了以往標準的優(yōu)點,并吸收了以往標準制定中積累的經(jīng)驗。
在h.264/avc中,采用了兩種熵編碼方法——cavlc(contextadaptivevariablelengthcoding,基于上下文的可變長編碼)和cabac(contextadaptivebinaryarithmaticcoding,基于上下文的自適應二進制算術編碼)。其中,cabac采用高效的算術編碼思想,同時充分考慮視頻流相關統(tǒng)計特性,對不同的視頻流能夠自適應地調整,大大提高了編碼效率;與cavlc相比,采用cabac編碼可使平均比特率下降9%~14%,而且在低碼率情況下其編碼效率優(yōu)勢更為明顯。然而,cabac要用到大量的碼表、上下文模型及中間變量等,比使用cavlc要多大約10%的運算量,且需要更大的存儲空間,這就增加了實現(xiàn)的復雜度,也因此成為h.264/avc關鍵技術瓶頸之一。
總體而言,cabac編碼實現(xiàn)包含了兩個組成部分——語法元素二值化與二進制算術編碼。目前,關于cabac二進制算術編碼技術可支持每個周期處理3個bin的語法元素,間接地增強了h.264/avc實時運算能力。
另一方面,作為編碼器輸出數(shù)據(jù)的基本單元,語法元素都是由若干比特組成,它表示某個特定的物理意義。因此,要使用二進制算術編碼輸出比特碼流,就必須先把這些語法元素轉換為二進制的一個個比特,這一過程就是語法元素二值化。然而,完成這一過程需要涉及一系列狀態(tài)切換的調度以及變長二進制串的處理,目前關于這一部分技術大體有兩種:其一是按串行方式順序生成所有語法元素并轉化成二進制串;其二是合并特定語法元素。上述的這兩種技術各自都存在一些問題,前者的串行處理方式最多只支持每個周期生成1個bin的語法元素,后者的合并特定語法元素存在一定的局限性,很難保證生成穩(wěn)定的多bin語法元素。與二進制算術編碼穩(wěn)定的多bin處理能力相比,傳統(tǒng)的語法元素二值化生成技術很容易造成處理速度不匹配,導致cabac整體的編碼效率較低。
技術實現(xiàn)要素:
基于此,有必要針對傳統(tǒng)的語法元素二值化生成方式使cabac整體的編碼效率較低的問題,提供一種視頻圖像幀的二進制語法元素的生成方法和系統(tǒng)。
一種視頻圖像幀的二進制語法元素的生成方法,包括以下步驟:
獲取視頻圖像幀的待編碼的語法元素,按照語法元素類別對待編碼的語法元素進行分組,獲得各組語法元素組;
同時對各語法元素組進行二值化處理,獲得多個語法元素二值化比特流;
對各語法元素二值化比特流同時進行緩存,并按照二進制算術編碼的比特處理速度對所有緩存的語法元素二值化比特流進行調度,生成符合二進制算術編碼順序的視頻圖像幀的二進制語法元素。
一種視頻圖像幀的二進制語法元素的生成系統(tǒng),包括:
獲取分組單元,用于獲取視頻圖像幀的待編碼的語法元素,按照語法元素類別對待編碼的語法元素進行分組,獲得各組語法元素組;
二值化單元,用于同時對各語法元素組進行二值化處理,獲得多個語法元素二值化比特流;
緩存單元,用于對各語法元素二值化比特流同時進行緩存;
調度單元,用于按照二進制算術編碼的比特處理速度對所有緩存的語法元素二值化比特流進行調度,生成符合二進制算術編碼順序的視頻圖像幀的二進制語法元素。
根據(jù)上述本發(fā)明的視頻圖像幀的二進制語法元素的生成方法和系統(tǒng),其是獲取視頻圖像幀的待編碼的語法元素,對其進行分組,采用并行的方式對各組語法元素組進行二值化處理,得到多個語法元素二值化比特流,經(jīng)過緩存調度后生成符合二進制算術編碼順序的視頻圖像幀的二進制語法元素。在本發(fā)明中,充分利用了不同類型語法元素之間的獨立性,對各語法元素進行分組,實現(xiàn)并行處理,克服了傳統(tǒng)串行方式處理的效率低下問題;通過緩存可以克服語法元素二值化所產(chǎn)生不固定長比特的問題,實現(xiàn)穩(wěn)定的多比特二進制語法元素的輸出;通過調度實現(xiàn)重新排序,保證了二進制語法元素編碼順序的正確性,從而保護了各語法元素之間的相關性??傮w來說,本發(fā)明在保證語法元素編碼順序正確性的基礎上,通過并行處理及緩存操作提升了語法元素二值化的處理速度,為后續(xù)高效二進制算術編碼提供了穩(wěn)定高效的輸入,從而提高cabac整體的編碼效率。
附圖說明
圖1是其中一個實施例中視頻圖像幀的二進制語法元素的生成方法的流程示意圖;
圖2是其中一個實施例中視頻圖像幀的二進制語法元素的生成系統(tǒng)的結構示意圖;
圖3是其中一個具體實施例中視頻圖像幀的二進制語法元素的生成系統(tǒng)的結構示意圖;
圖4是其中一個具體實施例中語法元素分組結構示意圖;
圖5(a)、5(b)是y分量、u分量和v分量示意圖;
圖6(a)、6(b)、6(c)是y分量、u分量和v分量進行dc、ac部分分離的示意圖;
圖7是其中一個具體實施例中殘差塊數(shù)據(jù)語法元素組的組成示意圖;
圖8是其中一個具體實施例中殘差塊數(shù)據(jù)語法元素組的分組示意圖;
圖9是其中一個具體實施例中殘差塊數(shù)據(jù)語法元素組調度過程示意圖。
具體實施方式
為使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對本發(fā)明進行進一步的詳細說明。應當理解,此處所描述的具體實施方式僅僅用以解釋本發(fā)明,并不限定本發(fā)明的保護范圍。
參見圖1所示,為本發(fā)明一個實施例的視頻圖像幀的二進制語法元素的生成方法的流程示意圖。該實施例中的視頻圖像幀的二進制語法元素的生成方法包括以下步驟:
步驟s101:獲取視頻圖像幀的待編碼的語法元素,按照語法元素類別對待編碼的語法元素進行分組,獲得各組語法元素組;
步驟s102:同時對各語法元素組進行二值化處理,獲得多個語法元素二值化比特流;
在本步驟中,采用并行方式對各語法元素組進行二值化處理,得到多個語法元素二值化比特流,以此可以縮短二值化處理的時間;
步驟s103:對各語法元素二值化比特流同時進行緩存,并按照二進制算術編碼的比特處理速度對所有緩存的語法元素二值化比特流進行調度,生成符合二進制算術編碼順序的視頻圖像幀的二進制語法元素。
在本實施例中,獲取視頻圖像幀的待編碼的語法元素,對其進行分組,采用并行的方式對各組語法元素組進行二值化處理,得到多個語法元素二值化比特流,經(jīng)過緩存調度后生成符合二進制算術編碼順序的視頻圖像幀的二進制語法元素。在本發(fā)明中,充分利用了不同類型語法元素之間的獨立性,對各語法元素進行分組,實現(xiàn)并行處理,克服了傳統(tǒng)串行方式處理的效率低下問題;通過緩存可以克服語法元素二值化所產(chǎn)生不固定長比特的問題,實現(xiàn)穩(wěn)定的多比特二進制語法元素的輸出;通過調度實現(xiàn)重新排序,保證了二進制語法元素編碼順序的正確性,從而保護了各語法元素之間的相關性??傮w來說,本方案在保證語法元素編碼順序正確性的基礎上,通過并行處理及緩存操作提升了語法元素二值化的處理速度,為后續(xù)高效二進制算術編碼提供了穩(wěn)定高效的輸入,從而提高cabac整體的編碼效率。
在其中一個實施例中,各組語法元素組包括宏塊類型語法元素組、宏塊預測語法元素組、子宏塊殘差編碼方案語法元素組和殘差塊數(shù)據(jù)語法元素組。
在本實施例中,根據(jù)宏塊類型、宏塊預測、子宏塊殘差編碼方案、殘差塊數(shù)據(jù)這四種類別對語法元素進行分組,就可以包括視屏圖像處理的所有語法元素,既可以處理所有的語法元素,同時避免并行處理的數(shù)量過多,降低對硬件的要求。
在其中一個實施例中,殘差塊數(shù)據(jù)語法元素組包括1個亮度ydc分量、16個亮度yac分量、1個色度udc分量、1個色度vdc分量、4個色度uac分量和4個色度vac分量;
按照語法元素類別對待編碼的語法元素進行分組,獲得各組語法元素組的步驟包括以下步驟:
對殘差塊數(shù)據(jù)語法元素組進行分組,獲得五組子殘差語法元素組;其中,一組子殘差語法元素組包括1個亮度ydc分量、1個色度udc分量和1個色度vdc分量;其他四組子殘差語法元素組分別包括四個亮度yac分量、1個色度uac分量和1個色度vac分量;
同時對各語法元素組進行二值化處理的步驟包括以下步驟:
同時對宏塊類型語法元素組、宏塊預測語法元素組、子宏塊殘差編碼方案語法元素組和五組子殘差語法元素組進行二值化處理。
在本實施例中,殘差塊數(shù)據(jù)語法元素組包括1個亮度ydc分量、16個亮度yac分量、1個色度udc分量、1個色度vdc分量、4個色度uac分量和4個色度vac分量;分量的數(shù)量多達27個,將其分成五組子殘差語法元素組進行并行二值化處理,可以進一步提高在實際并行二值化處理的效率。
在其中一個實施例中,四個亮度yac分量分別為第一亮度yac分量、第二亮度yac分量、第三亮度yac分量、第四亮度yac分量;
對一組子殘差語法元素組進行二值化處理的步驟包括以下步驟:
依次對亮度ydc分量、色度udc分量和色度vdc分量進行二值化處理;在前一分量對應的語法元素二值化比特流被讀取和調度后,再進行后一分量的二值化處理;
對其他四組子殘差語法元素組進行二值化處理的步驟包括以下步驟:
針對其他四組子殘差語法元素組中的任意一組,依次對第一亮度yac分量、第二亮度yac分量、第三亮度yac分量、第四亮度yac分量、色度uac分量和色度vac分量進行二值化處理;在前一分量對應的語法元素二值化比特流被讀取和調度后,再進行后一分量的二值化處理。
在本實施例中,各組語法元素組是同時進行二值化處理,為了生成符合二進制算術編碼順序的視頻圖像幀的二進制語法元素,按照二進制算術編碼的比特處理速度對所有緩存的語法元素二值化比特流進行調度需要依次進行,每一種語法元素二值化比特流在兩次調度之間相隔不定的處理時間,在這一處理時間內,足以完成對語法元素組中下一個語法元素的二值化處理,并不會影響整體的并行處理,還可以減少并行處理的負荷,避免數(shù)據(jù)交疊。
可選的,宏塊類型語法元素組、宏塊預測語法元素組、子宏塊殘差編碼方案語法元素組中的各語法元素的二值化處理也是依次進行的。
在其中一個實施例中,按照二進制算術編碼的比特處理速度對所有緩存的語法元素二值化比特流進行調度的步驟包括以下步驟:
在緩存的語法元素二值化比特流中的二值化比特數(shù)大于2時,對緩存的語法元素二值化比特流進行調度。
在本實施例中,由于目前二進制算術編碼可支持每個周期處理3個bin的語法元素,因此可以在緩存的語法元素二值化比特流中的二值化比特數(shù)大于2時,對緩存的語法元素二值化比特流進行調度,與二進制算術編碼的處理速度相匹配,進一步提高cabac整體的編碼效率。
在其中一個實施例中,對各語法元素二值化比特流同時進行緩存的步驟包括以下步驟:
通過不同的緩存模塊對各語法元素二值化比特流同時進行緩存,其中,各緩存模塊與各語法元素組一一對應;
按照二進制算術編碼的比特處理速度對所有緩存的語法元素二值化比特流進行調度的步驟包括以下步驟:
設置分組選擇指針,在開始對所有緩存的語法元素二值化比特流進行調度時,將分組選擇指針依次指向宏塊類型語法元素組的緩存模塊、宏塊預測語法元素組的緩存模塊、子宏塊殘差編碼方案語法元素組的緩存模塊和五組子殘差語法元素組的緩存模塊,對分組選擇指針指向的緩存模塊中的語法元素二值化比特流進行讀取。
在本實施例中,針對不同的語法元素組配置不同的緩存模塊,并設置分組選擇指針指向不同的緩存模塊,可以提示當前調度讀取的是何種語法元素組的語法元素二值化比特流,確定當前二進制算術編碼的進程。
在其中一個實施例中,將分組選擇指針依次指向五組子殘差語法元素組的緩存模塊,對分組選擇指針指向的緩存模塊中的語法元素二值化比特流進行讀取的步驟包括以下步驟:
判斷宏塊類型是否為幀內16×16像素塊,若是,則將分組選擇指針指向一組子殘差語法元素組對應的緩存模塊,對一組子殘差語法元素組對應的緩存模塊中的亮度ydc分量的語法元素二值化比特流進行讀取,并判斷其他四組子殘差語法元素組中的第一亮度yac分量是否都為全零分量;
若否,則將分組選擇指針依次指向其他四組子殘差語法元素組對應的緩存模塊,對其他四組子殘差語法元素組對應的緩存模塊中的第一亮度yac分量的語法元素二值化比特流依次進行讀取,并判斷其他四組子殘差語法元素組中的第二亮度yac分量是否都為全零分量;
若否,則將分組選擇指針依次指向其他四組子殘差語法元素組對應的緩存模塊,對其他四組子殘差語法元素組對應的緩存模塊中的第二亮度yac分量的語法元素二值化比特流依次進行讀取,并判斷其他四組子殘差語法元素組中的第三亮度yac分量是否都為全零分量;
若否,則將分組選擇指針依次指向其他四組子殘差語法元素組對應的緩存模塊,對其他四組子殘差語法元素組對應的緩存模塊中的第三亮度yac分量的語法元素二值化比特流依次進行讀取,并判斷其他四組子殘差語法元素組中的第四亮度yac分量是否都為全零分量;
若否,則將分組選擇指針依次指向其他四組子殘差語法元素組對應的緩存模塊,對其他四組子殘差語法元素組對應的緩存模塊中的第四亮度yac分量的語法元素二值化比特流依次進行讀取,并判斷一組子殘差語法元素組中的色度udc分量和色度vdc分量是否都為全零分量;
若否,則將分組選擇指針指向一組子殘差語法元素組對應的緩存模塊,對一組子殘差語法元素組對應的緩存模塊中的色度udc分量和色度vdc分量的語法元素二值化比特流進行讀取,并判斷其他四組子殘差語法元素組中的色度uac分量和色度vac分量是否都為全零分量;
若否,則將分組選擇指針依次指向其他四組子殘差語法元素組對應的緩存模塊,對其他四組子殘差語法元素組對應的緩存模塊中的色度uac分量和色度vac分量的語法元素二值化比特流進行讀取。
在本實施例中,對五組子殘差語法元素組的緩存模塊的數(shù)據(jù),依照當前宏塊和語法元素組的狀態(tài)進行選擇讀取。視頻圖像的宏塊的基本處理單元大小是16×16像素塊,只有符合這一格式,才將分組選擇指針指向一組子殘差語法元素組對應的緩存模塊并對其中的亮度ydc分量的語法元素二值化比特流進行讀取,之后將分組選擇指針指向其他四組子殘差語法元素組對應的緩存模塊,對其中屬于非零分量的亮度yac分量的語法元素二值化比特流進行有序讀取,再將分組選擇指針指向一組子殘差語法元素組對應的緩存模塊,對其中屬于非零分量的色度udc分量和色度vdc分量的語法元素二值化比特流進行有序讀取,最后將分組選擇指針指向其他四組子殘差語法元素組對應的緩存模塊,對其中屬于非零分量的色度uac分量和色度vac分量的語法元素二值化比特流進行有序讀取,實現(xiàn)對五組子殘差語法元素組的緩存模塊的數(shù)據(jù)的有序調度,使之符合二進制算術編碼的要求,提高編碼效率。
在其中一個實施例中,將分組選擇指針依次指向五組子殘差語法元素組的緩存模塊,對分組選擇指針指向的緩存模塊中的語法元素二值化比特流進行讀取的步驟包括以下步驟:
若宏塊類型不是幀內16×16像素塊,則執(zhí)行判斷其他四組子殘差語法元素組中的第一亮度yac分量是否都為全零分量的步驟;
若其他四組子殘差語法元素組中的第一亮度yac分量都為全零分量,則執(zhí)行判斷其他四組子殘差語法元素組中的第二亮度yac分量是否都為全零分量的步驟;
若其他四組子殘差語法元素組中的第二亮度yac分量都為全零分量,則執(zhí)行判斷其他四組子殘差語法元素組中的第三亮度yac分量是否都為全零分量的步驟;
若其他四組子殘差語法元素組中的第三亮度yac分量都為全零分量,則執(zhí)行判斷其他四組子殘差語法元素組中的第四亮度yac分量是否都為全零分量的步驟;
若其他四組子殘差語法元素組中的第四亮度yac分量都為全零分量,則執(zhí)行判斷一組子殘差語法元素組中的色度udc分量和色度vdc分量是否都為全零分量的步驟;
若一組子殘差語法元素組中的色度udc分量和色度vdc分量都為全零分量,則執(zhí)行判斷其他四組子殘差語法元素組中的色度uac分量和色度vac分量是否都為全零分量的步驟。
在本實施例中,若宏塊類型不是幀內16×16像素塊,則不讀取亮度ydc分量的語法元素二值化比特流,直接判斷其他四組子殘差語法元素組中的第一亮度yac分量是否都為全零分量;在其他四組子殘差語法元素組中的對應分量均為全零分量時,則不讀取該分量的語法元素二值化比特流,直接判斷其他四組子殘差語法元素組中的下一分量是否都未全零分量;之后再判斷一組子殘差語法元素組中的色度udc分量和色度vdc分量是否都為全零分量,在一組子殘差語法元素組中的色度udc分量和色度vdc分量都為全零分量時,則不讀取色度udc分量和色度vdc分量的語法元素二值化比特流,直接判斷其他四組子殘差語法元素組中的色度uac分量和色度vac分量是否都為全零分量。如此可以在遇到對應分量為全零分量的情況時,無需進行讀取操作,加快生成二進制語法元素的進程。
在其中一個實施例中,宏塊類型語法元素組包括幀內16×16像素塊的亮度cbp、色度cbp和預測模式以及幀間像素塊的分割方式;
宏塊預測分組所包含的語法元素包括幀內4×4像素塊的預測方式、幀間像素塊的參考幀索引以及運動矢量差;
子宏塊殘差編碼方案分組所包含的語法元素包括幀內4×4像素塊的亮度cbp和色度cbp、幀間像素塊的亮度cbp和色度cbp以及當前宏塊量化參數(shù)殘差。
在本實施例中,將幀內16×16像素塊的亮度cbp、色度cbp和預測模式、幀間像素塊的分割方式、幀內4×4像素塊的預測方式、幀間像素塊的參考幀索引、運動矢量差、幀內4×4像素塊的亮度cbp和色度cbp、幀間像素塊的亮度cbp和色度cbp以及當前宏塊量化參數(shù)殘差按照上述類別進行在分組,既考慮了語法元素之間的相關性,也充分利用了語法元素的獨立性,可以使獲得的語法元素二值化比特流更加穩(wěn)定。
根據(jù)上述視頻圖像幀的二進制語法元素的生成方法,本發(fā)明實施例還提供一種視頻圖像幀的二進制語法元素的生成系統(tǒng),以下就本發(fā)明的視頻圖像幀的二進制語法元素的生成系統(tǒng)的實施例進行詳細說明。
參見圖2所示,為本發(fā)明一個實施例的視頻圖像幀的二進制語法元素的生成系統(tǒng)的結構示意圖。該實施例中的視頻圖像幀的二進制語法元素的生成系統(tǒng)包括:
獲取分組單元210,用于獲取視頻圖像幀的待編碼的語法元素,按照語法元素類別對待編碼的語法元素進行分組,獲得各組語法元素組;
二值化單元220,用于同時對各語法元素組進行二值化處理,獲得多個語法元素二值化比特流;
緩存單元230,用于對各語法元素二值化比特流同時進行緩存;
調度單元240,用于按照二進制算術編碼的比特處理速度對所有緩存的語法元素二值化比特流進行調度,生成符合二進制算術編碼順序的視頻圖像幀的二進制語法元素。
在其中一個實施例中,各組語法元素組包括宏塊類型語法元素組、宏塊預測語法元素組、子宏塊殘差編碼方案語法元素組和殘差塊數(shù)據(jù)語法元素組。
在其中一個實施例中,殘差塊數(shù)據(jù)語法元素組包括1個亮度ydc分量、16個亮度yac分量、1個色度udc分量、1個色度vdc分量、4個色度uac分量和4個色度vac分量;
獲取分組單元210對殘差塊數(shù)據(jù)語法元素組進行分組,獲得五組子殘差語法元素組;其中,一組子殘差語法元素組包括1個亮度ydc分量、1個色度udc分量和1個色度vdc分量;其他四組子殘差語法元素組分別包括四個亮度yac分量、1個色度uac分量和1個色度vac分量;
二值化單元220同時對宏塊類型語法元素組、宏塊預測語法元素組、子宏塊殘差編碼方案語法元素組和五組子殘差語法元素組進行二值化處理。
在其中一個實施例中,四個亮度yac分量分別為第一亮度yac分量、第二亮度yac分量、第三亮度yac分量、第四亮度yac分量;
二值化單元220依次對亮度ydc分量、色度udc分量和色度vdc分量進行二值化處理;在前一分量對應的語法元素二值化比特流被調度后,再進行后一分量的二值化處理;針對其他四組子殘差語法元素組中的任意一組,依次對第一亮度yac分量、第二亮度yac分量、第三亮度yac分量、第四亮度yac分量、色度uac分量和色度vac分量進行二值化處理;在前一分量對應的語法元素二值化比特流被調度后,再進行后一分量的二值化處理。
在其中一個實施例中,調度單元240在緩存的語法元素二值化比特流中的二值化比特數(shù)大于2時,對緩存的語法元素二值化比特流進行調度。
在其中一個實施例中,如圖3所示,緩存單元230包括多個不同的緩存模塊232,不同的緩存模,232對各語法元素二值化比特流同時進行緩存,其中,緩存模塊232與語法元素二值化比特流一一對應;
調度單元240設置分組選擇指針,在開始對所有緩存的語法元素二值化比特流進行調度時,將分組選擇指針依次指向宏塊類型語法元素組的緩存模塊、宏塊預測語法元素組的緩存模塊、子宏塊殘差編碼方案語法元素組的緩存模塊和五組子殘差語法元素組的緩存模塊,對分組選擇指針指向的緩存模塊中的語法元素二值化比特流進行讀取。
在其中一個實施例中,調度單元240判斷宏塊類型是否為幀內16×16像素塊,若是,則將分組選擇指針指向一組子殘差語法元素組對應的緩存模塊,對一組子殘差語法元素組對應的緩存模塊中的亮度ydc分量的語法元素二值化比特流進行讀取,并判斷其他四組子殘差語法元素組中的第一亮度yac分量是否都為全零分量;
若否,則將分組選擇指針依次指向其他四組子殘差語法元素組對應的緩存模塊,對其他四組子殘差語法元素組對應的緩存模塊中的第一亮度yac分量的語法元素二值化比特流依次進行讀取,并判斷其他四組子殘差語法元素組中的第二亮度yac分量是否都為全零分量;
若否,則將分組選擇指針依次指向其他四組子殘差語法元素組對應的緩存模塊,對其他四組子殘差語法元素組對應的緩存模塊中的第二亮度yac分量的語法元素二值化比特流依次進行讀取,并判斷其他四組子殘差語法元素組中的第三亮度yac分量是否都為全零分量;
若否,則將分組選擇指針依次指向其他四組子殘差語法元素組對應的緩存模塊,對其他四組子殘差語法元素組對應的緩存模塊中的第三亮度yac分量的語法元素二值化比特流依次進行讀取,并判斷其他四組子殘差語法元素組中的第四亮度yac分量是否都為全零分量;
若否,則將分組選擇指針依次指向其他四組子殘差語法元素組對應的緩存模塊,對其他四組子殘差語法元素組對應的緩存模塊中的第四亮度yac分量的語法元素二值化比特流依次進行讀取,并判斷一組子殘差語法元素組中的色度udc分量和色度vdc分量是否都為全零分量;
若否,則將分組選擇指針指向一組子殘差語法元素組對應的緩存模塊,對一組子殘差語法元素組對應的緩存模塊中的色度udc分量和色度vdc分量的語法元素二值化比特流進行讀取,并判斷其他四組子殘差語法元素組中的色度uac分量和色度vac分量是否都為全零分量;
若否,則將分組選擇指針依次指向其他四組子殘差語法元素組對應的緩存模塊,對其他四組子殘差語法元素組對應的緩存模塊中的色度uac分量和色度vac分量的語法元素二值化比特流進行讀取。
在其中一個實施例中,調度單元240在宏塊類型不是幀內16×16像素塊時,執(zhí)行判斷其他四組子殘差語法元素組中的第一亮度yac分量是否都為全零分量的步驟;
在其他四組子殘差語法元素組中的第一亮度yac分量都為全零分量時,則執(zhí)行判斷其他四組子殘差語法元素組中的第二亮度yac分量是否都為全零分量的步驟;
在其他四組子殘差語法元素組中的第二亮度yac分量都為全零分量時,執(zhí)行判斷其他四組子殘差語法元素組中的第三亮度yac分量是否都為全零分量的步驟;
在其他四組子殘差語法元素組中的第三亮度yac分量都為全零分量時,執(zhí)行判斷其他四組子殘差語法元素組中的第四亮度yac分量是否都為全零分量的步驟;
在其他四組子殘差語法元素組中的第四亮度yac分量都為全零分量時,執(zhí)行判斷一組子殘差語法元素組中的色度udc分量和色度vdc分量是否都為全零分量的步驟。
在一組子殘差語法元素組中的色度udc分量和色度vdc分量都為全零分量時,執(zhí)行判斷其他四組子殘差語法元素組中的色度uac分量和色度vac分量是否都為全零分量的步驟。
本發(fā)明的視頻圖像幀的二進制語法元素的生成系統(tǒng)與本發(fā)明的視頻圖像幀的二進制語法元素的生成方法一一對應,在上述視頻圖像幀的二進制語法元素的生成方法的實施例中闡述的技術特征及其有益效果均適用于視頻圖像幀的二進制語法元素的生成系統(tǒng)的實施例中。
在一個具體的實施例中,視頻圖像幀的二進制語法元素的生成方法的本質是并行生成二進制語法元素,主要通過把待編碼的語法元素按照類別進行分組,分別對每個分組進行并行二值化。
視頻圖像幀的二進制語法元素的生成方法對應的系統(tǒng)如圖3所示,其中包括:并行二進制語法元素生成單元、多個緩存單元、緩存調度單元。
進一步的,上述的“按照類別”,是不限定具體的分類方法,原則上是可以把每兩個相鄰的語法元素分一組。但是考慮到實際硬件邏輯面積與速度的平衡性,在本發(fā)明中,會考慮語法元素相關性和獨立性進行分組,如:宏塊類型分組、宏塊預測方式分組、子宏塊殘差編碼方案(cbp)分組、殘差塊數(shù)據(jù)分組;
進一步的,上述的“二值化”,是h.264/avc規(guī)定的一系列標準轉換運算,其主要包括:一元(u)二值化、舍位一元(tu)二值化、串聯(lián)一元/k階順序exp_golomb(uegk)二值化、固定長度(fl)二值化;
通過緩存模塊進行緩存,緩存模塊主要由一定數(shù)量的寄存器組成,通過可以同時讀寫的方式,一方面在輸入端接收并行輸出的不定長二進制比特流,另一方面在輸出端穩(wěn)定地送出多個二進制語法元素。由于h.264標準中的句法都是經(jīng)過精心設計的,構成句法的各語法元素都是相互依賴的,關聯(lián)性很強。因此需要對緩存模塊輸出的二進制語法元素進行緩存調度,主要用于把多個緩存模塊輸出的并行二進制語法元素進行重新排序,組成一連串符合編碼順序的語法元素二進制比特,輸出后進行后續(xù)算術編碼;
進一步的,上述“重新排序”的順序主要是指:先編碼宏塊類型語法元素,再編碼宏塊預測方式語法元素,然后編碼子宏塊殘差編碼方案(cbp)及量化參數(shù)偏移值(dqp)語法元素,最后再編碼殘差塊數(shù)據(jù)語法元素。
本發(fā)明的視頻圖像幀的二進制語法元素的生成方法,充分利用了不同類型語法元素之間的獨立性,對各語法元素進行分組,實現(xiàn)并行處理,克服了傳統(tǒng)串行方式處理的效率低下問題;針對語法元素二值化所產(chǎn)生不固定長比特的問題,采用支持同時讀寫的緩存模塊,實現(xiàn)了穩(wěn)定的多比特語法元素的輸出;最后,通過緩存調度進行重新排序操作,保證了語法元素編碼順序的正確性,從而保護了各語法元素之間的相關性。總體來說,本發(fā)明在保證語法元素編碼順序正確性的基礎上,通過并行處理及緩存操作提升了語法元素二值化的處理速度,為后續(xù)高效二進制算術編碼提供了穩(wěn)定高效的輸入。
在考慮到語法元素之間的相關性,并充分利用其獨立性的基礎上,圖4提出了一種語法元素分組結構。
宏塊類型分組所包含的語法元素有:幀內16×16塊的亮度、色度cbp、預測模式,及幀間塊的分割方式;
宏塊預測分組所包含的語法元素有:幀內4×4塊的預測方式,及幀間塊的參考幀索引及運動矢量差mvd;
子宏塊殘差編碼方案分組所包含的語法元素有:幀內4×4塊的亮度、色度cbp,幀間塊的亮度、色度cbp,及當前宏塊量化參數(shù)殘差(dqp);
殘差塊數(shù)據(jù)分組所包含的語法元素有:1個4×4的亮度ydc分量、16個4×4的亮度yac分量、1個4×4的色度udc分量、1個4×4的色度vdc分量、4個4×4的色度uac分量和4個4×4的色度vac分量。
一個宏塊包含1個16×16像素大小的y分量,1個8×8像素大小的u分量,1個8×8像素大小的v分量,y分量為亮度分量,u分量和v分量均為色度分量,如圖5(a)、圖5(b)所示,其中y分量、u分量和v分量均可以劃分為4×4的像素塊,cabac殘差編碼的基本單元也是上述一個4×4像素塊。為了編碼壓縮率增加,因此對y分量、u分量和v分量進行dc、ac部分分離,具體如圖6(a)、圖6(b)、圖6(c)所示,可以看到,dc部分就是把像素序號為0的部分分離出來,重新組成一個新的4x4像素塊;ac部分則是去除dc像素后剩余的部分。
在h.264/avc中,一個宏塊的基本處理單元大小是16×16像素,上述前三個分組所包含的語法元素在每一個宏塊只需要處理一次,而cabac殘差塊語法元素基本處理單元大小為4×4像素,一個宏塊的殘差塊組成如圖7所示:1個4×4的亮度ydc分量、16個4×4的亮度yac分量、1個4×4的色度udc分量、1個4×4的色度vdc分量、4個4×4的色度uac及4個4×4的色度vac分量。因此,對于殘差塊數(shù)據(jù)語法元素,每一個宏塊都需要最多要順序處理27次。為了實現(xiàn)并行語法元素的處理,需要專門對殘差塊數(shù)據(jù)分組進行更進一步地分組。
圖8給出了殘差塊數(shù)據(jù)子分組方法。
第一,把圖7中ydc、udc、vdc的4×4塊語法元素組成子殘差分組0;
第二,把圖7中yac0、yac4、yac8、yac12、uac0、vac0的4×4塊語法元素組成子殘差分組1;
第三,把圖7中yac1、yac5、yac9、yac13、uac1、vac1的4×4塊語法元素組成子殘差分組2;
第四,把圖7中yac2、yac6、yac10、yac14、uac2、vac2的4×4塊語法元素組成子殘差分組3;
第五,把圖7中yac3、yac7、yac11、yac15、uac3、vac3的4×4塊語法元素組成子殘差分組4;
根據(jù)圖3、圖4及圖8,可以清晰地了解并行生成二進制語法元素的過程:在cabac編碼開始時,先讀取待編碼的語法元素(如宏塊類型、宏塊預測方式等等),然后根據(jù)上述分組方法把各個語法元素分成8個組,同時且獨立地對各分組的語法元素進行二值化,然后把二值化后的比特流分別寫入各自的緩存模塊中。在實際使用情況中可以驗證,通過這種分組并行二值化語法元素的機制,可以達到在對宏塊預測分組進行二值化的過程中,同時完成圖5中ydc、yac0、yac1、yac2、yac3塊的二值化過程的效果。
由于采用了并行二值化的結構,多個語法元素二值化比特流會同時輸出,為了保證數(shù)據(jù)不溢出,因此緩存模塊非常必要。在實際工程應用中,使用fifo(firstinputfirstoutput,先入先出隊列)模塊作為緩存模塊,整個緩存過程如下:每個fifo模塊都定義一個has_bit變量,用于表示現(xiàn)在fifo模塊存儲二值化比特個數(shù),當并行二值化輸入一個bit的位流,就讓has_bit自加1,當has_bit變量大于0就是表示fifo里有二值化比特數(shù),可以輸出多個二值化比特進行算術編碼。在本實際工程應用中,由于二進制算術編碼最多支持每個周期處理3個二值化比特,所以fifo模塊也限制為一次最多輸出3個二值化比特,例如:如果has_bit>=3,輸出3bit;如果has_bit==2,則輸出2bit;如果has_bit==1,則輸出1bit;如果has_bit==0,表示fifo中沒有數(shù)據(jù),沒輸出。從實際效果看,當完成子宏塊殘差編碼方案的算術編碼后,每個子殘差分組對應的fifo模塊的has_bit都在30以上,可以每次穩(wěn)定輸出3個二值化比特。
由于cabac采用了基于上下文的算術編碼,兩種不同語法元素的編碼順序的變化都會影響實際視頻位流比特,即語法元素之間存在一定的相關性,因此本實施例使用了一個緩存調度單元,實現(xiàn)各個分組fifo輸出的切換與調度,一方面保護了語法元素編碼順序的正確性,另一方面實現(xiàn)了fifo輸出無縫切換,保證了穩(wěn)定的輸出輸出。
其中,本實施例使用的調度流程如下:
在緩存調度模塊設置一個分組選擇指針sel,用于提示當前選擇哪一個分組對應的fifo輸出;
編碼一個宏塊開始時,把sel指向宏塊類型分組fifo,一旦該分組fifo中has_bit大于0,從該分組fifo讀取輸出,送至算術編碼;
當完成所有宏塊類型語法元素二值化且該分組fifo數(shù)據(jù)讀取完后,把sel指向宏塊預測方式分組fifo,一旦該分組fifo中has_bit大于0,從該分組fifo讀取輸出,送至算術編碼;
當完成所有宏塊預測方式語法元素二值化且該分組fifo數(shù)據(jù)讀取完后,把sel指向子宏塊殘差編碼方案分組fifo,一旦該分組fifo中has_bit大于0,從該分組fifo讀取輸出,送至算術編碼;
當完成所有子宏塊殘差編碼方案語法元素二值化且該分組fifo數(shù)據(jù)讀取完后,把sel指向殘差塊數(shù)據(jù)分組fifo,殘差塊數(shù)據(jù)子分組fifo調度流程如圖9所示:
cbp(codedblockpattern)指亮度和色度分量的各小塊的殘差編碼方案。所謂的殘差方案包括:
(1)所有殘差(包括dc、ac)都編碼。
(2)只對dc系數(shù)編碼。
(3)所有殘差(包括dc、ac)都不編碼。
具體來說,cbp一共有9bit,即cbp[8:0]。
cbp[0]:為1表示yac0、yac1、yac2、yac3至少有一個非零殘差4x4塊;為0表示yac0、yac1、yac2、yac3全部都是全零殘差4x4塊。
cbp[1]:為1表示yac4、yac5、yac6、yac7至少有一個非零殘差4x4塊;為0表示yac4、yac5、yac6、yac7全部都是全零殘差4x4塊。
cbp[2]:為1表示yac8、yac9、yac10、yac11至少有一個非零殘差4x4塊;為0表示yac8、yac9、yac10、yac11全部都是全零殘差4x4塊。
cbp[3]:為1表示yac12、yac13、yac14、yac15至少有一個非零殘差4x4塊;為0表示yac12、yac13、yac14、yac15全部都是全零殘差4x4塊。
cbp[5:4]:為0表示uac0、uac1、uac2、uac3、vac0、vac1、vac2、vac3、udc、vdc全部都是全零殘差4x4塊;為1表示udc、vdc至少有一個為非零殘差4x4塊,uac0、uac1、uac2、uac3、vac0、vac1、vac2、vac3全部都是全零殘差4x4塊;為2表示uac0、uac1、uac2、uac3、vac0、vac1、vac2、vac3至少有一個是非零殘差4x4塊,udc、vdc至少有一個是非零殘差4x4塊;為3未定義。
cbp[6]:為1表示ydc為非零殘差4x4塊;為0表示ydc為全零殘差4x4塊。
cbp[7]:為1表示udc為非零殘差4x4塊;為0表示udc為全零殘差4x4塊。
cbp[8]:為1表示vdc為非零殘差4x4塊;為0表示vdc為全零殘差4x4塊。
首先,根據(jù)宏塊類型進行分支:如果宏塊類型為幀內16×16塊,則sel指向ydc分組fifo;否則需要進一步判斷cbp的值,如果cbp[0]非零,則sel指向yac0分組fifo;否則如果cbp[1]非零,則sel指向yac4分組fifo;否則如果cbp[2]非零,則sel指向yac8分組fifo;否則如果cbp[3]非零,則sel指向yac12分組fifo;否則如果cbp[5:4]非零,則sel指向udc分組fifo;否則當前宏塊殘差語法元素結束。
當sel指向ydc分組fifo時,在完成ydc語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向yac0分組fifo。
當sel指向yac0分組fifo時,在完成yac0語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向yac1分組fifo。
當sel指向yac1分組fifo時,在完成yac1語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向yac2分組fifo。
當sel指向yac2分組fifo時,在完成yac2語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向yac3分組fifo。
當sel指向yac3分組fifo時,在完成yac3語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,需要進一步判斷cbp的值,如果cbp[1]非零,則sel指向yac4分組fifo;否則如果cbp[2]非零,則sel指向yac8分組fifo;否則如果cbp[3]非零,則sel指向yac12分組fifo;否則如果cbp[5:4]非零,則sel指向udc分組fifo;否則當前宏塊殘差語法元素結束。
當sel指向yac4分組fifo時,在完成yac4語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向yac5分組fifo。
當sel指向yac5分組fifo時,在完成yac5語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向yac6分組fifo。
當sel指向yac6分組fifo時,在完成yac6語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向yac7分組fifo。
當sel指向yac7分組fifo時,在完成yac7語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,需要進一步判斷cbp的值,如果cbp[2]非零,則sel指向yac8分組fifo;否則如果cbp[3]非零,則sel指向yac12分組fifo;否則如果cbp[5:4]非零,則sel指向udc分組fifo;否則當前宏塊殘差語法元素結束。
當sel指向yac8分組fifo時,在完成yac8語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向yac9分組fifo。
當sel指向yac9分組fifo時,在完成yac9語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向yac10分組fifo。
當sel指向yac10分組fifo時,在完成yac10語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向yac11分組fifo。
當sel指向yac11分組fifo時,在完成yac11語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,需要進一步判斷cbp的值,如果cbp[3]非零,則sel指向yac12分組fifo;否則如果cbp[5:4]非零,則sel指向udc分組fifo;否則當前宏塊殘差語法元素結束。
當sel指向yac12分組fifo時,在完成yac12語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向yac13分組fifo。
當sel指向yac13分組fifo時,在完成yac13語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向yac14分組fifo。
當sel指向yac14分組fifo時,在完成yac14語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向yac15分組fifo。
當sel指向yac15分組fifo時,在完成yac11語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,需要進一步判斷cbp的值,如果cbp[5:4]非零,則sel指向udc分組fifo;否則當前宏塊殘差語法元素結束。
當sel指向udc分組fifo時,在完成udc語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向vdc分組fifo。
當sel指向vdc分組fifo時,在完成vdc語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向uac0分組fifo。
由于uac0~uac3與yac0~yac3的步驟一致,在此不重復。當完成uac3語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,將sel指向vac0分組fifo。
由于vac0~vac3與yac0~yac3的步驟一致,在此不重復。當完成vac3語法元素二值化后且該分組fifo數(shù)據(jù)讀取完后,所有殘差塊數(shù)據(jù)分組語法元素編碼也就完成。
對上述流程需要說明的是:如圖7所示,由于一個宏塊27個4×4小塊被分成5個子分組,可以知道多個4×4小塊會共用同一個子分組,而每個子分組都是使用同一個fifo緩存模塊,因此同一個子分組中不同4×4小塊不能同時二值化,否則在fifo中的數(shù)據(jù)會出現(xiàn)不同4×4小塊的數(shù)據(jù)交疊現(xiàn)象,為避免這現(xiàn)象,需要采用一些措施,具體以yac0、yac4、yac8、yac12、uac0、vac0組成的子殘差分組1為例:
開始當前宏塊編碼時,先對yac0進行二值化處理,并把所有位流寫入對應fifo中;
此時,后續(xù)yac4、yac8、yac12、uac0、vac0不要啟動二值化處理,先等到y(tǒng)ac0塊fifo的數(shù)據(jù)被讀取完后,才啟動yac4二值化處理;
yac4二值化完成后,再次等到fifo里緩存的yac4數(shù)據(jù)被讀取完成后,再啟動下一個4×4小塊的二值化處理,后續(xù)4×4小塊的處理同理,在此不進行重復。
進一步的,上述的處理方法僅針對同一個子殘差分組中的4×4小塊,對不同子殘差分組之間無需處理。
進一步的,上述對于子殘差分組的處理從實際應用的角度考慮并不會對本發(fā)明提出的并行處理產(chǎn)生負面的作用,原因在于:在讀取完fifo中的yac0數(shù)據(jù)后,選擇指針sel會指向yac1、yac2、yac3對應的子分組進行處理,在這段時間內,已經(jīng)有足夠的時間供yac4完成二值化處理,其余的塊也是如此原理,在此不進行重復。
另外,每一個4×4小塊中都包含全零標志位(coded_block_flag)、當前像素是否為零值標志位(significant_coeff_flag[i])、當前像素是否為當前4x4塊最后的非零系數(shù)標志位(last_significant_coeff_flag[i])、殘差絕對值減1的數(shù)值coeff_abs_level_minus_1[i]等語法元素需要編碼;
以上所述實施例的各技術特征可以進行任意的組合,為使描述簡潔,未對上述實施例中的各個技術特征所有可能的組合都進行描述,然而,只要這些技術特征的組合不存在矛盾,都應當認為是本說明書記載的范圍。
本領域普通技術人員可以理解實現(xiàn)上述實施例方法中的全部或部分步驟是可以通過程序來指令相關的硬件來完成。所述的程序可以存儲于一計算機可讀取存儲介質中。該程序在執(zhí)行時,包括上述方法所述的步驟。所述的存儲介質,包括:rom/ram、磁碟、光盤等。
以上所述實施例僅表達了本發(fā)明的幾種實施方式,其描述較為具體和詳細,但并不能因此而理解為對發(fā)明專利范圍的限制。應當指出的是,對于本領域的普通技術人員來說,在不脫離本發(fā)明構思的前提下,還可以做出若干變形和改進,這些都屬于本發(fā)明的保護范圍。因此,本發(fā)明專利的保護范圍應以所附權利要求為準。