H.265/HEVC編碼結構


為了增強各種應用下操作的靈活性以及數據損失的魯棒性,H.265/HEVC在編解碼的設計上添加了多種新的語法結構。相較於以往的視頻編碼標准(如H.264/AVC),這種新的語法架構使得H.265/HEVC在壓縮效率和網絡適應性兩個方面都有顯著提升。此外,根據不同業務需求、終端運算能力等,H.265/HEVC還相應地規定出不同的檔次、層、級,以適應各種應用場景。本章首先對H.265/HEVC的編碼架構和其所涉及的相關語法參數集進行詳細介紹,然后給出檔次、層、級的基本概念以及在H.265/HEVC中對它們的具體規范 [1] 。

3.1 編碼結構概述

關於編碼結構,可以從編碼時的分層處理架構和編碼完后碼流的語法架構兩方面進行描述。視頻序列由若干時間連續的圖像構成,在對其進行壓縮時,先將該視頻序列分割為若干個小的圖像組(Group Of Pictures,GOP)。在視頻編碼中,存在兩種GOP類型:封閉式GOP(Closed GOP)和開放式GOP(Open GOP),如圖3.1所示。在封閉式GOP類型中,每一個GOP以IDR(Instantaneous Decoding Refresh)圖像開始,各個GOP之間獨立編解碼。在開放式GOP類型中,第一個GOP中的第一個幀內編碼圖像為IDR圖像,后續GOP中的第一個幀內編碼圖像為non-IDR圖像,也就是說,后面GOP中的幀間編碼圖像可以越過non-IDR圖像,使用前一個GOP中的已編碼圖像做參考圖像。每個GOP又被划分為多個片(Slice),片與片之間進行獨立編解碼。其主要目的之一是在數據丟失情況下進行重新同步。每個片由一個或多個片段(Slice Segment,SS)組成。此外,為了更靈活、更有效地表示視頻內容,H.265/HEVC還引入了樹形結構單元(Coding Tree Unit,CTU)這一概念,其類似於傳統的宏塊。每個CTU包括一個亮度樹形編碼塊(Coding Tree Block,CTB)和兩個色差樹形編碼塊。一個SS在編碼時,先被分割為相同大小的CTU,每一個CTU按照四叉樹分割方式被划分為不同類型的編碼單元(Coding Unit,CU)。Slice到CU的之間的編碼結構如圖3.2所示。以上即為編碼時的分層處理架構。一般來說,為了支持視頻編碼標准的通用性,ITU—T和ISO/IEC只規定碼流的語法元素,以保證編碼器的設計更為靈活。因此本章重點介紹H.265/HEVC編碼后碼流的語法架構。

圖3.1 兩種不同的GOP類型

圖3.2 Slice到CU之間的編碼架構

在碼流結構方面,H.265/HEVC壓縮數據采用了類似於H.264/AVC的分層結構,將屬於GOP層、Slice層中共用的大部分語法元素游離出來,組成序列參數集(Sequence Parameter Set,SPS)和圖像參數集(Picture Parameter Set,PPS)。SPS包含了一個CVS(Coded Video Sequence)中所有圖像共用的信息。其中CVS被定義為一個GOP編碼后所生成的壓縮數據。SPS的內容大致包括解碼相關信息,如檔次級別、分辨率、某檔次中編碼工具開關標識和涉及的參數、時域可分級信息等。PPS包含一幅圖像所用的公共參數,即一幅圖像中所有SS引用同一個PPS。其大致內容包括初始圖像控制信息,如初始量化參數(Quantization Parameter,QP)、分塊信息等。此外,為了兼容標准在其他應用上的擴展,例如可分級視頻編碼器、多視點視頻編碼器,H.265/HEVC的語法架構中增加了視頻參數集(Video Parameter Set,VPS)。其內容大致包括多個子層共享的語法元素,其他不屬於SPS的特定信息等。對於一個SS,通過引用它所使用的PPS,該PPS又引用其對應的SPS,該SPS又引用它對應的VPS,最終得到SS的公用信息。H.265/HEVC壓縮碼流的結構如圖3.3所示。

圖3.3 H.265/HEVC壓縮碼流結構

參數集是一個獨立的數據單位,它包含視頻的不同層級編碼單元的共享信息,只有當參數集直接或間接被SS引用時才有效。一個參數集並不對應某個特定的圖像或CVS,同一個VPS或SPS可以被多個CVS引用,同一個PPS可以被多個圖像引用。在H.265/HEVC中,NAL單元根據是否裝載視頻編碼數據被分為VCLU(Video Coding Layer NAL Unit)和non-VCLU。非編碼數據的參數集作為non-VCLU進行傳輸,這為傳遞關鍵數據提供了高魯棒機制。參數集的獨立使得其可以提前發送,也可以在需要增加新參數集的時候再發送,可以被多次重發或者采用特殊技術加以保護,甚至采用帶外(Out-of-band)發送的方式。片段SS是視頻編碼數據的基本單位,一個SS的壓縮數據生成一個VCLU進行傳輸。最終,一個視頻序列的編碼碼流由一系列SS所生成的多個VCLU單元和夾雜其間的一些分割標示數據和參數集數據組成。分割標示數據用於區分一個SS屬於哪幅圖像、哪個CVS。

3.2 視頻參數集

3.2.1 視頻層描述

在H.264/AVC的碼流結構中,沒有類似VPS這樣的參數集去描述時域各層之間的依賴關系。它的擴展部分可伸縮視頻編碼中,SEI信息提供了相關各層信息,以用於不同業務和不同終端的訪問。但在一些應用場景,例如廣播和多播,由於SEI中的部分信息會重復出現在SPS中,這樣造成參數重傳而引起延遲等問題。因此在H.265/HEVC中引入VPS,以克服H.264/AVC中存在的不足,同時為設計簡潔,可擴展多層視頻編碼提供方便。VPS主要用於傳輸視頻分級信息,有利於兼容標准在可分級視頻編碼或多視點視頻編碼的擴展。

一個給定的視頻序列,無論它每一層的SPS是否相同,都參考相同的VPS。VPS包含的信息有:

① 多個子層和操作點共享的語法元素;

② 會話所需的有關操作點的關鍵信息,如檔次、級別;

③ 其他不屬於SPS的操作點特性信息,例如與多層或子層相關的虛擬參考解碼器(Hypothetical Reference Decoder,HRD)參數。對每個操作點的關鍵信息的編碼,不要求可變長編碼,這樣有利於減輕大多數網絡組成單元的負擔。H.265/HEVC的擴展版本將會在當前VPS中添加更多的語法元素,以使會話更加靈活高效並使編碼碼率具有更高的自適應性。

3.2.2 視頻層參數集

表3.1給出了VPS中包含的各個語法元素以及它們的描述子。描述子即語法元素的熵解碼算法,描述子符號表示如下。

ae(v):基於上下文自適應的二元算術編碼。

b(8):讀進連續的8 bit。

f(n):讀進連續的n bit。

se(v):有符號指數Golomb熵編碼。

u(n):讀進連續的n bit,且它們解碼后的值為無符號整數。

ue(n):無符號指數Golomb熵編碼。

上面描述子中括號內的參數為n時,表明該語法元素是定長編碼;參數為v時表示語法元素采用變長編碼。

表3.1 VPS內的語法元素

   

vps_video_parameter_set_id: 當前VPS的標識號,以供其他句法元素引用。

vps_reserved_three_2bits: 保留位,其值為3。

vps_max_layers_minus1: 當前保留,其值為0,用於以后的3D視頻編碼或可分級視頻編碼的使用。

vps_max_sub_layers_minus1: 表示比特流中可支持時域子層的最大數目減1,取值0~6,即最大可支持7個子層。

vps_temporal_id_nesting_flag: 當vps_max_sub_layers_minus1為0時,這個參數值為1;當vps_max_sub_layers_minus1大於0時,這個參數指定是否對幀間預測進行額外限定。該參數用於指示時域子層升檔,即從低子層切入高子層。

vps_reserved_0xffff_16bits: 兩字節的保留位,其值等於0xFFFF。

vps_sub_layer_ordering_info_present_flag: 其值為1時表示vps_max_dec_pic_buffering_minus1[i]、vps_max_num_reorder_pics[i]、vps_max_latency_increase_plus1[i]存在並用於第vps_max_sub_layers_minus1 + 1子層;其值為0時表示這三個語法元素可以用於所有子層。

vps_max_dec_pic_buffering_minus1 [i]:規定了HighestTid等於i時,CVS的圖像存儲單元中解碼圖像所需要的最大緩存。

vps_max_num_reorder_pics [i]:規定了HighestTid等於i時,在CVS中解碼順序在某一幅圖像之后,而顯示順序在該幅圖像之前的圖像的最大數量。

vps_max_latency_increase_plus1 [i]:當HighestTid等於i時,該語法元素用於計算VpsMaxLatencyPictures[i]的值。

vps_max_layer_id: 指定CVS中所有的NAL單元的nuh_layer_id的最大值。

vps_num_layer_sets_minus1: 指定VPS中圖層集的數量。在該版本中,該語法元素值被要求等於0。但解碼器應該允許其可取0~1023之間的其他值。

layer_id_included_flag [i][j]:該語法元素取值為1時,表示圖層標識列表layerSetLayerIdList[i]中包含nuh_layer_id等於j的情況;其值為0時,則表示圖層標識列表layerSetLayerIdList[i]中不包含nuh_layer_id等於j的情況。

vps_timing_info_present_flag: 該語法元素取值為1時,表示在VPS中語法元素vps_num_units_in_tick、vps_time_scale、vps_poc_proportional_to_timing_flag、vps_num_hrd_parameters存在;其值為0時則表示在VPS中不存在這四個語法元素。

vps_num_units_in_tick: 該語法元素規定當時鍾頻率為vps_time_scale Hz時,所花的時間單位的個數。以秒為單位時,一個時鍾周期等於vps_num_units_in_tick除以vps_time_scale。例如,當一個視頻的幀率為25Hz時,vps_time_scale等於27 000 000Hz,vps_num_units_in_tick就等於1 080 000,因此一個時鍾周期就是0.04s。

vps_time_scale: 一秒內時間單位的個數。

vps_poc_proportional_to_timing_flag: 該語法元素值為1,表示CVS中的每一幅圖像(不包括第一幅圖像)的POC與它的顯示時間和第一幅圖像的顯示時間的比值成正比;否則,不成比例。

vps_num_ticks_poc_diff_one_minus1: 表示POC之間差值為1時,時鍾周期的數目。

vps_num_hrd_parameters: 指定VPS RBSP中語法結構體hrd_parameters()的數目。

hrd_layer_set_idx [i]:規定第i個語法結構體hrd_parameters()使用的圖層集的索引。

cprms_present_flag [i]:表示第i個hrd_parameters()中是否存在所有子層公用的HRD參數。

vps_extension_flag: 該語法元素取值為0,表示在VPS PBSP中沒有語法元素vps_extension_data_flag。在該版本中,vps_extension_flag取值等於0;其值等於1用於保留為將來使用。

vps_extension_data_flag: 可以是任意值。在該版本中,其取值不影響解碼器,解碼器可以忽略該語法元素。

3.3 序列參數集

在H.265/HEVC中,一個CVS由一個隨機接入點開始,第一幅圖像可以是IDR圖像,也可以是non-IDR圖像。non-IDR圖像可以是BLA(Broken Link Access)圖像或CRA(Clean Random Access)圖像。對於一段視頻碼流,其可能包含一個或者多個編碼視頻序列CVS。序列參數集SPS的內容就是包含一個CVS中所有編碼圖像的共享編碼參數,SPS通過被PPS引用而作用於編碼圖像,一個CVS中所有被使用的PPS必須引用同一個SPS。實際上,SPS為所有的SS提供了公共參數,如圖像的格式、檔次、級等。當一個SPS被引用時,該SPS處於激活狀態,直到整個CVS結束。

表3.2給出了SPS中所含的語法元素,其內容大致分為以下幾個部分。

① 圖像格式的信息。包括采樣格式、圖像分辨率、量化深度、解碼圖像是否需要裁剪輸出以及相關的裁剪參數。

② 編碼參數信息。包括編碼塊、變換塊的最小尺寸和最大尺寸,幀內、幀間預測編碼時變換塊的最大划分深度,對4:4:4采樣格式的三個通道分量是否單獨編碼,是否需要幀內強濾波,幀間預測過程中的某些限制條件[如非對稱模式(AMP)的使用、時域MV預測的使用]是否使用量化矩陣,是否需要樣點自適應補償(SAO),是否采用PCM模式及在該模式下的相關編碼參數。

③ 與參考圖像相關的信息。包括短期參考圖像的設置,長期參考圖像的使用和數目,長期參考圖像的POC和其能否作為當前圖像的參考圖像。

④ 檔次、層和級相關參數。具體內容見3.8節。

⑤ 時域分級信息。包括時域子層的最大數目,控制傳輸POC進位的參數,時域子層順序標識開關,與子層相關的參數(如解碼圖像緩沖區的最大需求)。

⑥ 可視化可用性信息(Video Usability Information,VUI),用於表征視頻格式等額外信息。

⑦ 其他信息。包括當前SPS引用的VPS編號、SPS標識號和SPS擴展信息。

表3.2 序列參數集SPS

   

   

sps_video_parameter_set_id: 指定當前激活的VPS的ID號。

sps_max_sub_layers_minus1: 用於指定時域子層的最大數目。

sps_temporal_id_nesting_flag: 當sps_max_sub_layers_minus1大於0時,其規定了是否額外地限制CVS的幀間預測,當vps_temporal_id_nesting_flag取值為1時,該語法元素取值為1。當sps_max_sub_layers_minus1為0時,該語法元素取值為1。

sps_seq_parameter_set_id: 表示SPS的標識號,取值范圍為[0,15]。

chroma_format_idc: 表示色度采樣格式,取值范圍為[0,3]。例如取值為1時,表示采用4:2:0格式。

separate_colour_plane_flag: 該語法元素取值為1,則表示對4:4:4格式的三種通道分量采用單獨編碼;該語法元素取值為0則表示彩色分量不進行獨立編碼。當該語法元素沒有給出時,可推測出其值為0。

pic_width_in_luma_samples: 表明解碼圖像中亮度樣點的寬度。

pic_height_in_luma_samples: 表明解碼圖像中亮度樣點的高度。

conformance_window_flag: 表示解碼器是否要對解碼后的圖像裁剪輸出。

conf_win_left_offset、conf_win_right_offset、conf_win_top_offset和conf_win_bottom_offset: 當conformance_window_flag值為1時,解碼圖片需要裁減輸出,這四個參數用於指定左、右、上、下的裁剪寬度。

bit_depth_luma_minus8: 表示亮度像素的比特深度。

bit_depth_chroma_minus8: 表示色度像素的比特深度。

log2_max_pic_order_cnt_lsb_minus4: 該語法元素的取值范圍為[0,12],其用於計算變量MaxPicOrderCntLsb的值。MaxPicOrderCntLsb用於控制進位,比特流中只傳一個低位的POC,不用傳高位POC。利用前參考圖像的高、低位POC和MaxPicOrderCntLsb得到當前圖像的高位POC,再結合當前圖像的低位POC,可以得到當前圖像實際的POC。

sps_sub_layer_ordering_info_present_flag: 時域子層順序標識開關。該值等於1,表示sps_max_dec_pic_buffering_minus1[i]、sps_max_num_reorder_pics[i]、sps_max_latency_increase_plus1[i]適用於sps_max_sub_layers_minus1 + 1子層;該值等於0,則表示這些參數適用於所有子層。

sps_max_dec_pic_buffering_minus1 [i]:當HighestTid取值為i時,該語法元素規定了解碼圖像緩沖區的最大需求。

sps_max_num_reorder_pics [i]:當HighestTid取值為i時,表示解碼順序在某一圖像之后,而顯示順序在該圖像之前的圖像的最大數量。其取值范圍為[0,sps_max_dec_pic_buffering_minus1[i]]。

sps_max_latency_increase_plus1 [i]:該值不為0時,其用於計算SpsMaxLatencyPictures[i]的值。

log2_min_luma_coding_block_size_minus3: 指定亮度編碼塊的最小尺寸。

log2_diff_max_min_luma_coding_block_size: 指定亮度編碼塊最大尺寸和最小尺寸的差值。

log2_min_transform_block_size_minus2: 指定亮度變換塊的最小尺寸。

log2_diff_max_min_transform_block_size: 指定亮度變換塊最大尺寸和最小尺寸的差值。

max_transform_hierarchy_depth_inter: 表示幀間預測時變換塊的最大划分深度。取值范圍為[0,CtbLog2SizeY Log2MinTrafoSize] 。

max_transform_hierarchy_depth_intra: 表示幀內預測時變換塊的最大划分深度。取值范圍為[0,CtbLog2SizeY Log2MinTrafoSize] 。

scaling_list_enabled_flag: 表示對變換系數在量化過程中是否使用量化矩陣。

sps_scaling_list_data_present_flag: 表示是否存在量化矩陣數據。

amp_enabled_flag: 表示是否使用非對稱划分模式,非對稱模式即PartMode等於PART_2NxnU,PART_2NxnD,PART_nLx2N或PART_nRx2N。

sample_adaptive_offset_enabled_flag: 表示去方塊濾波過程后重構圖像是否使用樣點自適應補償(SAO)。

pcm_enabled_flag: 表示是否使用PCM模式。

pcm_sample_bit_depth_luma_minus1: 表示亮度分量中PCM樣點的比特深度。

pcm_sample_bit_depth_chroma_minus1: 表示色度分量中PCM樣點的比特深度。

log2_min_pcm_luma_coding_block_size_minus3: 表示在PCM模式下,編碼塊的最小尺寸。

log2_diff_max_min_pcm_luma_coding_block_size: 表示在PCM模式下,編碼塊尺寸最大值和最小值的差值。

pcm_loop_filter_disabled_flag: 表示在PCM模式下,編碼單元的重建像素是否使用環路濾波。

num_short_term_ref_pic_set: 指明在SPS中short_term _ref_pic_set()的數目。其取值范圍為[0,64] 。

long_term_ref_pics_present_flag: 表示幀間預測時是否使用長期參考圖像。

num_long_term_ref_pics_sps: 指定SPS中長期參考圖像的數目,其取值范圍是[0,32]。

lt_ref_pic_poc_lsb_sps [i]:表示POC與SPS中第i個長期參考圖像的MaxPicOrderCntLsb取模之后的值。

used_by_curr_pic_lt_sps_flag [i]:表示第i個長期參考圖像能否作為當前圖像的參考圖像。

sps_temporal_mvp_enabled_flag: 指定非IDR圖像的片頭中是否存在句法元素slice_temporal_mvp_enabled_flag(表示幀間預測過程中能否使用時域MV預測)。

strong_intra_smoothing_enabled_flag: 表示濾波過程是否使用雙向線性插值。

vui_parameters_present_flag: 表示是否含有語法結構體vui_parameters()。

sps_extension_flag: 其值為0,則表示語法元素sps_extension_data_flag不存在;其值為1,則語法元素sps_extension_data_flag被保留以供將來使用。

sps_extension_data_flag: 可以為任意值,在現有版本中解碼器忽略該語法元素。

3.4 圖像參數集

在編碼視頻流中,一個CVS包含多幅圖像,每幅圖像可能包括一個或多個SS,每個SS頭提供了其所引用的PPS標識號,以此得到相應PPS中的公用信息。對於同一幅圖像,其內所有的SS都用同一個PPS。需要注意的是,PPS中存在一些與SPS中相同的參數,PPS中的這些參數值將會覆蓋SPS中它們的取值,也就是說,SS使用PPS中的這些參數進行解碼。在解碼開始時,所有的PPS全部是非活動狀態,而且在解碼的任意時刻最多只能有一個PPS處於激活狀態。當某一幅圖像在其解碼過程中引用了某個PPS時,這個PPS便處於激活狀態,直到該圖像解碼結束。

表3.3給出了PPS中所涉及的具體的語法元素,圖像參數集的內容大致分為以下幾個部分。

① 編碼工具的可用性標志。指明片頭中一些工具是否可用。這些編碼工具主要包括符號位隱藏、幀內預測受限、去方塊濾波、P/B圖像的加權預測、環路濾波跨越片邊界或者Tile邊界、Transform skip模式和Transquant bypass模式。

② 量化過程相關句法元素。包括每個Slice中QP初始值的設定以及計算每個CU的QP時所需的參數。此外,還有亮度量化參數的偏移量和由它導出的色度量化參數的偏移量等。有關量化過程中QP的具體計算及相關參數詳見6.2節。

③ Tile相關句法元素。包括Tile划分模式的可用性標志,以及在使用Tile划分模式時的一些參數,例如Tile的划分形式,總行數、總列數及第幾行、第幾列的標識等。

④ 去方塊濾波相關句法元素。包括去方塊濾波的可用性標志以及使用去方塊濾波時的一些控制信息和參數,如去方塊濾波的默認補償值β和tC。

⑤ 片頭中的控制信息。包括當前片是否為依賴片、片頭中是否有額外的Slice頭比特、圖像解碼順序與輸出順序的先后關系以及CABAC中確定上下文變量初始化表格時使用的方法等。

⑥ 其他編碼一幅圖像時可以共用的信息。包括ID標識符、參考圖像的數目和並行產生merge候選列表的能力等。其中ID標識符用於標識當前活動的參數集,主要是當前活動的PPS的自身ID和其引用的SPS的ID。此外,PPS中還包括變換矩陣信息是否存在的標志位,這一變換矩陣信息若存在,便會對SPS中的該信息進行覆蓋。

表3.3 圖像參數集PPS

   

pps_pic_parameter_set_id: 表示當前激活的PPS的ID號,取值范圍為[0,63]。

pps_seq_parameter_set_id: 表示當前激活的SPS的ID號,取值范圍為[0,15]。

dependent_slice_segments_enabled_flag: 表示Slice頭中是否存在句法元素dependent_slice_segment_flag,用於判斷當前片段是否含有依賴片。

output_flag_present_flag: 表示Slice頭中是否存在句法元素pic_output_flag,pic_output_flag影響解碼圖像的輸出和移除過程。

num_extra_slice_header_bits: 其值為0,表示Slice頭RBSP中沒有額外Slice頭比特。其他值保留供ITU-T及ISO/IEC將來使用。

sign_data_hiding_enabled_flag: 表示是否不允許使用符號位隱藏技術。

cabac_init_present_flag: 表示片頭中是否存在句法元素cabac_init_flag,cabac_init_flag用於判斷在CABAC中使用何種方法來確定上下文變量的初始值。

num_ref_idx_l0_default_active_minus1: 該語法元素取值范圍為[0,14],表示在num_ref_idx_active_override_flag等於0時,P Slice和B Slice中num_ref_idx_l0_active_minus1的默認值,即引用的list0中參考圖像數目的最大默認值。

num_ref_idx_l1_default_active_minus1: 該語法元素取值范圍為[0,14],表示在num_ref_idx_active_override_flag為0時,num_ref_idx_l1_active_minus1的默認值,即引用list1中參考圖像數目的最大默認值。

init_qp_minus26: 規定了每個Slice中亮度分量的量化參數初始值。

constrained_intra_pred_flag: 表示幀內預測是否受限,即是否允許使用采用幀間預測模式的鄰近塊信息進行幀內預測。

transform_skip_enabled_flag: 指定在殘差編碼句法中是否存在transform_skip_flag,transform_skip_flag用於表示殘差編碼是否為tansform skip模式。

cu_qp_delta_enabled_flag: 其值取1,表明當前PPS中存在diff_cu_qp_delta_depth,並且在變換單元句法中可能存在cu_qp_delta_abs;其值等於0,則表示兩個句法元素都不存在。

diff_cu_qp_delta_depth: 表示在傳送cu_qp_delta_abs和cu_qp_delta_sign_flag的編碼單元中,亮度CTB尺寸與最小亮度CB尺寸的差值,用於每個CU中QP值的計算。其詳細計算過程見6.2節。該語法元素取值范圍為[0,log2_diff_max_min_luma_coding_block_size]。

pps_cb_qp_offset和pps_cr_qp_offset: 表示色度分量Cb和Cr分別采用的量化參數(Qp′Cb 和Qp′Cr )相對於亮度分量的量化參數(Qp′Y )的偏移量,其取值范圍都是[-12,+12]。

pps_slice_chroma_qp_offsets_present_flag: 指明Slice頭中是否存在slice_cb_qp_offset和slice_cr_qp_offset,這兩個值用來計算量化參數Qp′Cb 和Qp′Cr 。

weighted_pred_flag: 表示P Slice是否使用加權預測。

weighted_bipred_flag: 表示B Slice是否使用雙向加權預測。

transquant_bypass_enabled_flag: 表示是否存在cu_transquant_bypass_flag。cu_transquant_bypass_flag用於判斷是否為transquant_bypass模式,即是否跳過伸縮變換和環路濾波過程。

tiles_enabled_flag: 表示是否使用Tile模式。

entropy_coding_sync_enabled_flag: 表示是否使用熵編碼同步機制。

num_tile_columns_minus1: 表示划分該圖像的Tile的總列數。

num_tile_rows_minus1: 表示划分該圖像的Tile的總行數。

uniform_spacing_flag: 表示圖像中Tile的列邊界和行邊界的分布是否一致。

column_width_minus1 [i]:表示縱向第i個Tile的寬度。

row_height_minus1 [i]:表示橫向第i個Tile的高度。

loop_filter_across_tiles_enabled_flag: 表示是否允許環路濾波跨越Tile邊界。

pps_loop_filter_across_slices_enabled_flag: 表示是否允許環路濾波跨越Slice的左邊界和上邊界。

deblocking_filter_control_present_flag: 表示PPS中是否存在去方塊濾波的控制信息。

deblocking_filter_override_enabled_flag: 表示Slice頭中是否存在語法元素deblocking_filter_override_flag。

pps_deblocking_filter_disabled_flag: 表示Slice中是否使用去方塊濾波器。

pps_beta_offset_div2和pps_tc_offset_div2: 其用於給出Slice所使用的默認的去方塊濾波參數補償值β和tC。該兩個語法元素的取值范圍都是[6,6]。

pps_scaling_list_data_present_flag: 表示當前PPS中是否存在變換矩陣的信息,若存在,這一信息會對SPS中的該信息進行覆蓋。

lists_modification_present_flag: 表示Slice頭中是否存在句法結構ref_pic_lists_modification()。

log2_parallel_merge_level_minus2: 用於給出變量Log2ParMrgLevel的值。變量Log2ParMrgLevel被用在merge模式下亮度分量MV的產生過程中,表示並行產生merge候選列表的能力。

slice_segment_header_extension_present_flag: 表示SS頭擴展句法元素是否存在。在該版本中,規定其取值為0。其取值為1,用做保留,供ITU-T及ISO/IEC將來使用。

pps_extension_flag: 表示是否存在語法元素pps_extension_data_flag。在該版本中,規定其取值為0。其取值為1,用做保留,供ITU-T及ISO/IEC將來使用。

pps_extension_data_flag: 可以是任意值。該語法元素的取值不影響解碼器。解碼過程忽略該語法元素。

3.5 片段層

3.5.1 片與片段

一幅圖像可以被分割為一個或多個片(Slice),每個片的壓縮數據都是獨立的,Slice頭信息無法通過前一個Slice的頭信息推斷得到。這就要求Slice不能跨過它的邊界來進行幀內或幀間預測,且在進行熵編碼前需要進行初始化。但在進行環路濾波時,允許濾波器跨越Slice的邊界進行濾波。除了Slice的邊界可能受環路濾波影響外,Slice的解碼過程可以不使用任何來自其他Slice的影響,且有利於實現並行運算。使用Slice的主要目的是當數據丟失后能再次保證解碼同步。

根據編碼類型不同,Slice可分為以下幾部分。

① I Slice:該Slice中所有CU的編碼過程都使用幀內預測。

② P Slice:在I Slice的基礎上,該Slice中的CU還可以使用幀間預測,每個預測塊(PB)使用至多一個運動補償預測信息。P Slice只使用圖像參考列表list 0。

③ B Slice:在P Slice的基礎上,B Slice中的CU也可以使用幀間預測,但是每個PB可以使用至多兩個運動補償預測信息。B Slice可以使用圖像參考列表list 0和list 1。

一個獨立的Slice可以被進一步划分為若干SS,包括一個獨立SS和若干個依賴SS,並且以獨立SS作為該Slice的開始。一個SS包含整數個CTU(至少一個),並且這些CTU分布在同一個NAL單元中。SS可以作為一個分組來傳送視頻編碼數據。其中,獨立SS是指它所涉及的句法元素可以由自身確定,依賴SS是指它所涉及的某些句法元素由已解碼的獨立SS推導得到。依賴SS可以共享獨立SS攜帶的一些信息,例如RPS信息、SAO的可用性和加權預測的可用性等。預測過程不能跨越獨立Slice的邊界,但是可以跨越依賴SS的邊界,一個Slice內的SS之間可以相互參考。下面的例子將分別對同一幅圖像中的Slice及其所包含的SS做詳細說明。

例:如圖3.4所示,一幅圖像划分為兩個Slice。第一個Slice由一個包含4個CTU的獨立Slice segment、一個包含32個CTU的依賴SS和另外一個包含24個CTU的依賴SS組成;而第二個Slice由唯一一個包含39個CTU的獨立SS組成。

圖3.4 Slice、獨立SS、依賴SS 3者之間關系示意圖

H.265/HEVC編碼的最高層為SS層,SS層所需要的圖像層信息可以通過引用相應的PPS來獲得。SS頭包含其引用的PPS的標識號,同一幅圖像中的所有SS引用同一個PPS。此外,SS頭中會存在一些與PPS中相同的參數,SS頭中的這些參數值會對PPS中的該參數值進行覆蓋。以下部分對H.265/HEVC中SS相關語法語義做詳細介紹。

3.5.2 片頭語法語義

表3.4和表3.5分別給出了SS及SS頭的相關句法元素。

表3.4 SS的句法元素

表3.5 SS頭的句法元素

   

   

   

end_of_slice_segment_flag: 用於判斷當前SS是否結束。

end_of_sub_stream_one_bit: 取值應該為1。

first_slice_segment_in_pic_flag: 表示按照解碼順序,當前SS是否為第一個SS。

no_output_of_prior_pics_flag: 在IDR和BLA圖像解碼之后該語法元素會影響解碼圖像緩沖器中已解碼圖像的輸出。

slice_pic_parameter_set_id: 表示當前Slice所引用的PPS的ID號。

dependent_slice_segment_flag: 表示當前SS是否依賴SS。

slice_segment_address: 對一幅圖像的CTU進行光柵掃描后,當前SS中第一個CTU的地址。

slice_reserved_flag [i]:其值和語義保留,供ITU-T及ISO/IEC將來使用。解碼器應該忽略該句法元素的值。

slice_type: 指明Slice的編碼類型。其值為0,表示該Slice是B Slice;其值為1,表示該Slice是P Slice;其值為2,表示該Slice是I Slice。

pic_output_flag: 該句法元素影響解碼圖像的輸出和移除過程。

colour_plane_id: 當separate_colour_plane_flag為1時,該語法元素規定了彩色平面。其值為0,1,2時,分別對應着Y,Cb,Cr。

slice_pic_order_cnt_lsb: 規定了當前圖像的POC與MaxPicOrderCntLsb取模后的值,用於計算當前圖像的POC值。

short_term_ref_pic_set_sps_flag: 其值為1,表示當前圖像的短期參考圖像集可以通過SPS中的句法結構st_ref_pic_set()得出;其值為0,則表示當前圖像的短期參考圖像集可通過Slice頭中的句法結構st_ref_pic_set()得出。當num_short_term_ref_pic_sets取值為0時,short_term_ref_pic_set_sps_flag應該等於0。

short_term_ref_pic_set_idx: 表示當前圖像使用哪一個短期參考圖像集(由當前激活的SPS中指定)。

num_long_term_sps: 表示當前圖像的長期參考圖像(在當前激活的SPS中指定)的數目。

num_long_term_pics: 表示當前圖像的長期參考圖像(在Slice頭中指定)的數目。

lt_idx_sps [i]:表示當前圖像的第i個長期參考圖像在候選長期參考圖像列表中的索引號。

poc_lsb_lt [i]:表示當前圖像的第i個長期參考圖像的POC值與MaxPicOrderCntLsb取模之后的值。

used_by_curr_pic_lt_flag [i]:表示當前圖像長期參考圖像集中第i個參考圖像是否可以用做當前圖像的參考。

delta_poc_msb_present_flag [i]:表示delta_poc_msb_cycle_lt[i]是否存在。

delta_poc_msb_cycle_lt [i]:用於計算當前圖像的第i個長期參考圖像的POC值(長期參考圖像包括兩部分——SPS和Slice頭中分別指定的長期參考圖像,該句法元素中的delta表示任一部分中相鄰兩個長期參考圖像的poc_msb_cycle_lt的差值)。

slice_temporal_mvp_enabled_flag: 表示幀間預測是否使用時域MV預測。

slice_sao_luma_flag: 表示當前Slice的亮度分量是否使用SAO。

slice_sao_chroma_flag: 表示當前Slice的色度分量是否使用SAO。

num_ref_idx_active_override_flag: 表示當前Slice中語法元素的num_ref_idx_l0_active_minus1和num_ref_idx_l1_active_minus1是否存在。

num_ref_idx_l0_active_minus1: 表示可能用於解碼當前Slice的參考圖像list0中的最大參考索引值,其取值范圍為[0,14]。

num_ref_idx_l1_active_minus1: 表示可能用於解碼當前Slice的參考圖像list1中的最大參考索引值,其取值范圍為[0,14]。

mvd_l1_zero_flag: 其值為1表示mvd_coding(x0,y0,1)未被解析,且對於compIdx = 0..1,MvdL1[x0][y0][compIdx]被設為0;其值為0表示mvd_coding(x0,y0,1)已被解析。

cabac_init_flag: 規定在上下文變量的初始化過程中,是否使用初始化表。

collocated_from_l0_flag: 規定用於時域MV預測的collocated圖像來自參考圖像列表list0還是list1。

collocated_ref_idx: 規定用於時域MV預測的collocated圖像的參考索引號。

five_minus_max_num_merge_cand: 指定MVP候選點可合並的最大數目。

slice_qp_delta: 規定當前Slice中CB可使用的的量化參數QpY 。

slice_cb_qp_offset: 該語法元素值加上變量pps_cb_qp_offset的值即為量化參數變量Qp′Cb 的值。

slice_cr_qp_offset: 該語法元素值加上變量pps_cr_qp_offset的值即為量化參數Qp′Cr 的值。

deblocking_filter_override_flag: 表示Slice頭是否存在去方塊濾波參數。

slice_deblocking_filter_disabled_flag: 表示當前Slice是否使用去方塊濾波。該語法元素不存在時,可推測出其值等於pps_deblocking_filter_disabled_flag。

slice_beta_offset_div2和slice_tc_offset_div2: 用於獲取當前Slice的去方塊濾波補償參數β和tC。該兩個語法元素不存在時,可推測出其值分別等於pps_beta_offset_div2和pps_tc_offset_div2。

slice_loop_filter_across_slices_enabled_flag: 表示環路濾波是否可以跨越當前Slice的上邊界和左邊界。該語法元素不存在時,可推測出其值等於pps_loop_filter_across_slices_enabled_flag。

num_entry_point_offsets: 表示Slice頭中句法元素entry_point_offset _minus1[i]的數目。

offset_len_minus1: 表示句法元素entry_point_offset_minus1[i]的比特長度。

entry_point_offset_minus1 [i]:規定第i個entry point的以字節為單位的偏移量。

slice_segment_header_extension_length: 表示SS頭擴充數據的長度。

slice_segment_header_extension_data_byte: 可以是任意值,解碼器忽略該語法元素。在該版本中,其值不影響解碼。

3.6 Tile單元

3.6.1 Tile單元描述

H.265/HEVC對H.264/AVC的改進之處還在於Tile概念的提出。一幅圖像不僅可以划分為若干個Slice,也可以划分為若干個Tile。即從水平和垂直方向將一幅圖像分割為若干個矩形區域,一個矩形區域就是一個Tile。每個Tile包含整數個CTU,其可以獨立解碼。划分Tile的主要目的是在增強並行處理能力的同時又不引入新的錯誤擴散。Tile提供比CTB更大程度的並行(在圖像或者子圖像的層面上),在使用時無須進行復雜的線程同步。

Tile的划分並不要求水平和垂直邊界均勻分布,可根據並行計算和差錯控制的要求靈活掌握。通常情況下,每一個Tile中包含的CTU數據是近似相等的。在編碼時,圖像中的所有Tile按照掃描順序進行處理,每個Tile中的CTU也按照掃描順序進行編碼。一個Tile包含的CTU個數和Slice中的CTU個數互不影響,圖3.5中給出了Tile的一種划分方式。這是3×3的划分,整幅圖像被划分為9個Tile,每個Tile都為矩形。在同一幅圖像中,可以同時存在某些Slice中包含多個Tile和某些Tile中包含多個Slice的情況。

圖3.5 Tile划分示意圖

3.6.2 Slice與Tile

在H.265/HEVC中,Slice和Tile划分的目的都是為了進行獨立解碼,但是二者的划分方式又有所不同。Tile形狀基本上為矩形,Slice的形狀則為條帶狀。Slice由一系列的SS組成,一個SS由一系列的CTU組成。Tile則直接由一系列的CTU組成。Slice/SS和Tile之間必須遵守一些基本原則,每個Slice/SS和Tile至少要滿足以下兩個條件之一。

① 一個Slice/SS中的所有CTU屬於同一個Tile。

② 一個Tile中的所有CTU屬於同一個Slice/SS。

下面的例子將分別對同一幅圖像中的Slice和Tile划分做詳細說明。

例:圖3.6中一幅圖像在垂直方向上被分割為三個Tile。圖3.6(a)中這三個Tile中各自的所有CTU都屬於同一個Slice,圖3.6(b)中一個Slice中的所有CTU都屬於同一個Tile。

圖3.6 Tile和Slice之間的關系

3.7 樹形編碼塊

傳統的視頻編碼都是基於宏塊實現的,對於4:2:0采樣格式的視頻,一個宏塊包含一個16×16大小的亮度塊和兩個8×8大小的色度塊。考慮到高清視頻/超高清視頻的自身特性,H.265/HEVC標准中引入了樹形編碼單元CTU,其尺寸由編碼器指定,且可大於宏塊尺寸。同一位置處的一個亮度CTB和兩個色度CTB,再加上相應的語法元素形成一個CTU。對於一個大小為L×L的亮度CTB,L的取值可以是16、32或64。在高分辨率視頻的編碼中,使用較大的CTB可以獲得更好的壓縮性能。

為了靈活、高效地表示視頻場景中的不同紋理細節、運動變化的視頻內容或者視頻對象,H.265/HEVC為圖像划分定義了一套全新的語法單元,包括編碼單元CU、預測單元(Prediction Unit,PU)和變換單元(Transform Unit,TU)。其中編碼單元是進行預測、變換、量化和熵編碼等處理的基本單元,預測單元是進行幀內/幀間預測的基本單元,變換單元是進行變換和量化的基本單元。這三個單元的分離,不僅使得變換、預測和編碼各個處理環節更加靈活,也使得各環節的划分更加符合視頻圖像的紋理特征,保證編碼性能的最優化。

3.7.1 編碼單元

近年來標清和高清視頻產業得到了蓬勃發展。大尺寸圖像的一個特點是平緩區域的面積更大,用較大的塊進行編碼能夠極大地提升編碼效率。在H.264/AVC中,編碼塊(Coding Block,CB)的大小是固定的。而在H.265/HEVC中,一個CTB可以直接作為一個CB,也可以進一步以四叉樹的形式划分為多個小的CB。所以H.265/HEVC中CB的大小是可變的,亮度CB最大為64×64,最小為8×8。一方面大的CB可以使得平緩區域的編碼效率大大提高,另一方面小的CB能很好地處理圖像局部的細節,從而可以使復雜圖像的預測更加准確。一個亮度CB和相應的色度CB及它們相關的句法元素共同組成一個編碼單元(CU)。在H.265/HEVC中,一幅圖像可以被划分為若干個互不重疊的CTU,在CTU內部,采用基於四叉樹的循環分層結構。同一層次上的編碼單元具有相同的分割深度。一個CTU可能只包含一個CU(沒有進行划分),也可能被划分為多個CU。圖3.7是一幅圖像划分為CTU以及一個CTU划分為CU的示意圖。

圖3.7 圖像划分結構示意圖

編碼單元是否繼續被划分取決於分割標志位Split flag。對於編碼單元CUd ,假設它的大小為2N×2N,深度為d。如果它對應的Split flag值為0,則CUd 不再進行四叉樹划分;反之,CUd 將會被划分為4個獨立的編碼單元CUd+1 。編碼單元CUd+1 的深度和大小分別變為d+1和N×N。圖3.8給出了CUd ,d和Split flag三者之間的划分關系。這種靈活的單元表示方法與H.264/AVC中的宏塊划分方法相比有以下優點。

圖3.8 編碼單元的循環四叉樹分層結構

① 編碼單元的大小可以大於傳統的宏塊大小(16×16)。對於平坦區域,用一個較大的編碼單元編碼可以減少所用的比特數,提高編碼效率。這一點在高清視頻應用領域體現得尤為明顯。

② 通過合理地選擇CTU大小和最大層次深度,編碼器的編碼結構可以根據不同的圖片內容、圖片大小以及應用需求獲得較大程度的優化。

③ 所有的單元類型都統稱為編碼單元,消除了宏塊與亞宏塊之分,並且編碼單元的結構可以根據CTU大小、最大編碼深度以及一系列划分標志Split flag簡單地表示出來。

此外,表3.6給出了CU所涉及的相關語法元素。

表3.6 編碼單元語法語義

   

   

cu_transquant_bypass_flag: 表示對CU是否進行伸縮、變換和環路濾波過程。

cu_skip_flag [x0][y0]:表示是否跳過當前CU。

pred_mode_flag: 其值為0,表示當前CU的預測模式為MODE_INTER;其值為1,表示當前CU的預測模式為MODE_INTRA。

part_mode: 規定當前CU的分割模式,其值取決於CU的預測模式(CuPredMode[x0][y0])。表3.7給出了該語法元素對應的具體的分割模式。

表3.7 part_mode語義

pcm_flag [x0][y0]:該值等於1,表示CU(亮度CB位於(x0,y0))中存在語法結構體pcm_sample(),不存在語法結構體transform_tree();其值等於0,則表示不存在語法結構體pcm_sample()。

pcm_alignment_zero_bit: 表示一個等於0的比特。

prev_intra_luma_pred_flag [x0 + i][y0 + j]、mpm_idx [x0 + i][y0 + j]和rem_intra_luma_pred_mode [x0 + i][y0 + j]:規定亮度分量的幀內預測模式。當prev_intra_luma_pred_flag[x0 + i][y0 + j]等於1時,幀內預測模式可以從其相鄰預測單元的幀內預測模式推測得到。

intra_chroma_pred_mode [x0][y0]:規定色度分量的幀內預測模式。

rqt_root_cbf: 表示當前CU是否存在transform_tree()語法結構體。

3.7.2 預測單元

預測單元PU規定了編碼單元的所有預測模式,一切與預測有關的信息都定義在預測單元部分。比如,幀內預測的方向、幀間預測的分割方式、運動矢量預測,以及幀間預測參考圖像索引號都屬於預測單元的范疇。一個2N×2N的編碼單元所包含的預測單元划分模式如圖3.9所示。

圖3.9 H.265/HEVC預測單元的划分模式

對於一個2N×2N的CU模式,幀內預測單元PU的可選模式有兩種:2N×2N和N×N;幀間預測單元PU的可選模式有8種:4種對稱模式(2N×2N、2N×N、N×2N、N×N)和4種非對稱模式(2N×nU、2N×nD、nL×2N、nR×2N)。其中2N×nU和2N×nD分別以上下1:3、3:1的比率划分,nL×2N和nR×2N分別以左右1:3、3:1的比率划分。skip模式是幀間預測的一種,當需要編碼的運動信息只有運動參數集索引(采用運動合並技術),編碼殘差信息不需要編碼時,為2N×2N skip模式。此外,表3.8還給出了PU相關的語法元素。

表3.8 預測單元語法語義

   

mvp_l0_flag [x0][y0]:表示MVP在list0中的索引。該語法元素不存在時,可以推測出其值等於0。

mvp_l1_flag [x0][y0]:表示MVP在list1中的索引。該語法元素不存在時,可以推測出其值等於0。

merge_flag [x0][y0]:表示當前PU的幀間預測參數是否由相鄰幀間預測塊推測得到。當該語法元素不存在時,若CuPredMode[x0][y0]等於MODE_SKIP,則該語法元素值等於1;否則等於0。

merge_idx [x0][y0]:表示在融合(merge)候選列表中的候選索引。該語法元素值不存在時,可推測出其值等於0。

inter_pred_idc [x0][y0]:規定當前PU使用list0、list1,還是雙向預測,見表3.9。該語法元素值不存在時,可推測出其值為PRED_L0。

表3.9 inter_pred_idc的語義

ref_idx_l0 [x0][y0]:表示當前PU的list0的參考圖像索引。該語法元素值不存在時,默認為0。

ref_idx_l1 [x0][y0]:表示當前PU的list1的參考圖像索引。該語法元素值不存在時,默認為0。

3.7.3 變換單元

變換單元是獨立完成變換和量化的基本單元,其尺寸也是靈活變化的。H.265/HEVC突破了原有的變換尺寸限制,可支持大小為4×4~32×32的編碼變換,以變換單元(TU)為基本單元進行變換和量化。它的大小依賴於CU模式,在一個CU內,允許TU跨越多個PU,以四叉樹的形式遞歸划分。圖3.10給出了CTU為64×64時各個CU中TU的分割結構。對於一個2N×2N的CU,有一個標志位決定其是否划分為4個N×N的TU,是否可以進一步划分由SPS中的TU的最大划分深度決定。根據預測殘差的局部變化特性,TU可以自適應地選擇最優的模式。大塊的TU模式能夠將能量更好地集中,小塊的TU模式能夠保存更多的圖像細節。這種靈活的分割結構,可以使變換后的殘差能量得到充分壓縮,以進一步提高編碼增益。同時,表3.10給出了TU相關的語法元素。

圖3.10 CU中TU四叉樹划分示意圖

表3.10 變換單元語法元素

cu_qp_delta_abs: 表示當前編碼單元的亮度量化參數和它的預測值的差值CuQpDeltaVal的絕對值。

cu_qp_delta_sign_flag: 表示CuQpDeltaVal的符號。

3.8 檔次、層和級別

在H.264中就有對檔次(Profile)和級別(Level)的划分,它們規定了比特流必須要遵守的一些限制要求。而H.265/HEVC在此基礎上又定義了一個新的概念:層(Tier)。檔次、層和級別為多種不同應用提供了兼容性。檔次主要規定編碼器可采用哪些編碼工具或算法。級別則是指根據解碼端的負載和存儲空間情況對關鍵參數加以限制[如最大采樣頻率、最大圖像尺寸、分辨率、最小壓縮率,最大比特率和CPB(解碼緩沖區)大小等]。考慮到應用可以依據最大的碼率和CPB大小來區分,因此有些Level定義了兩個Tier:主層(Main Tier)和高層(High Tier),主層用於大多數應用,高層用於那些最苛刻的應用。滿足某一Level或Tier的解碼器應當可以解碼當前Level和Tier,以及比當前Level和Tier更低的Level和Tier的所有碼流,滿足某一Profile的解碼器必須支持該Profile中的所有特性。編碼器不必實現Profile中的所有特性,但生成的碼流必須遵守標准規定。

3.8.1 檔次

在H.265/HEVC標准中提出了三種檔次,分別是Main,Main 10和Main Still Picture。這三個檔次的限制條件如下:

① 只支持4:2:0色度采樣信號;

② 使用了Tiles便不能使用WPP,每一個Tile的亮度分辨率至少要為256×64;

③ Main和Main Still Picture檔次支持8位像素深度,Main 10檔次則支持10位像素深度,Main Still Picture檔次不支持幀間預測。

1. Main

支持每像素8比特的位深、4:2:0的采樣格式,是最常見的檔次。

2. Main 10

2012年10月的會議上,提案JCTVC-K0109提出了10比特位深的檔次,其指出10比特位深的圖像有助於提高視頻質量。該提案獲得通過,這一技術主要應用於消費電子領域。Main 10檔次支持每像素8比特或者10比特的位深、4:2:0的采樣格式。由於采用更多的比特來描述像素值,Main 10可以大幅度提高重構視頻的質量。支持Main 10檔次的解碼器必須同時可以解碼Main和Main 10檔次的碼流。

3. Main Still Picture

Main Still Picture檔次支持單個靜止圖像,其按照Main檔次的規定進行編碼。為了測試Main Still Picture檔次下靜態圖像的壓縮性能,將H.265/HEVC HM 8.0rc2,JPEG 2000 kakadu v6.0和JPEG IJG v6b進行實驗對比。視頻質量評價標准采用基於PSNR的客觀評價和基於平均意見得分(MOS)的主觀評價。對於4:2:0色度采樣信號,相比於JPEG 2000和JPEG,在相同重構視頻質量下(PSNR度量),H.265/HEVC編碼下得到的碼率分別下降了20.26%和61.63%;在相同重構視頻質量下(MOS度量),H.265/HEVC編碼下得到的碼率分別下降了30.96%和43.10%。

下面主要給出Main和Main 10這兩個檔次各自可采用的編碼工具,見表3.11。關於Main Still Picture檔次,可按照Main檔次中提供的編碼工具進行編碼。

表3.11 Main和Main 10所采用的編碼工具

   

3.8.2 層和級別

H.265/HEVC標准中定義了兩個層和13個級,見表3.12。兩個層分別是Main Tier和High Tier。4和4以上的8個Level支持High Tier。Tier按其最高比特率來處理應用問題,Main Tier可適用於大多數應用,High Tier用於高需求應用。符合某一Tier/Level的解碼器能夠解碼當前以及比當前Tier/Level低的所有碼流。

表3.12 Level和Tier

   

同一個Level實際上就是一套對編碼比特流的一系列編碼參數的限制。H.265/HEVC的13個級支持從QCIF到8k多種分辨率的圖像。圖像寬高受到該級別定義參數MaxLumaPS的限制——圖像的寬和高均須小於等於8倍的MaxLumaPS再開方。此外,Level還約束了每幅圖像中垂直和水平方向Tile的最大數量,以及每秒最大的Tile數量。此外,表3.13還給出了它們相關的語法元素。

表3.13 檔次、層和級的語法語義

   

general_profile_space: 在該版本中,其值取0。該語法元素的其他值保留將來使用。它規定了一個檔次空間,包含所有檔次的ID號和對應的內容。

general_tier_flag: 規定了當前檔次中使用的層的內容。

general_profile_idc: 其值取0時,表示當前CVS編碼過程使用的檔次的ID號。其他值保留供ITU-T及ISO/IEC將來使用。

general_profile_compatibility_flag [j]:當general_profile_space值等於0時,該語法元素取值為1,表示當前CVS編碼過程使用的檔次的ID號為j。

general_progressive_source_flag 和general_interlaced_source_flag: 用於指定CVS中圖像的掃描方式,即逐行掃描、隔行掃描或未指明掃描方式等。

general_non_packed_constraint_flag: 指明CVS中是否存在frame packing arrangement SEI messages。

general_frame_only_constraint_flag: 指定field_seq_flag的值是否為0。

general_reserved_zero_44bits: 其值為0,解碼器應忽略該值。

general_level_idc: 指明CVS中使用的level的ID號。

sub_layer_profile_present_flag [i]:表示在TemporalId等於i的子層中,其profile_tier_level()語法結構體中是否存在檔次的信息。

sub_layer_level_present_flag [i]:表示在TemporalId等於i的子層中,其profile_tier_level()語法結構體中是否存在級的信息。

reserved_zero_2bits [i]:其值為0。解碼器應忽略該值。以下是跟子層有關的語法元素,它們適用於TemporalId等於i的子層,其語法語義和前面的general部分相同。

sub_layer_profile_space [i]

sub_layer_tier_flag [i]

sub_layer_profile_idc [i]

sub_layer_profile_compatibility_flag [i][j]

sub_layer_progressive_source_flag [i]

sub_layer_interlaced_source_flag [i]

sub_layer_non_packed_constraint_flag [i]

sub_layer_frame_only_constraint_flag [i]

sub_layer_reserved_zero_44bits [i]

sub_layer_level_idc [i]

參考文獻

[1] High efficiency video coding, ITU-T Recommendation H.265 and ISO/IEC 23008-2 (HEVC), ITU-T and ISO/IEC JTC 1, Apr. 2013.

   

出自:《新一代高效視頻編碼H.265/HEVC:原理、標准與實現》

萬帥 & 楊付正

   

   

來自 <http://reader.epubee.com/books/mobile/90/9046b984943e32a544cd1d11b1244ba4/text00007.html>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM