1. 程式人生 > >HEVC的並行解碼語法和條帶結構Slice和Tile

HEVC的並行解碼語法和條帶結構Slice和Tile

首先是Slice和Tile這兩個我一直弄不清楚的概念
1.Slice
一幅影象可以被劃分為一個或多個片或稱為條帶(Slice),每個片的資料編碼都是獨立的。
如下圖,一幅影象被劃分為N個Slice,Slice成條帶形。在編碼時,每一個Slice中的CTU按光柵掃描順序進行編碼。
這裡寫圖片描述
Slice頭資訊無法通過前一個Slice的頭資訊推斷得到,這就要求Slice不能跨過它的邊界來進行幀內或幀間預測,但環路濾波器可以跨越Slice進行濾波。使用Slice的主要目的是當資料丟失後能再次保證解碼同步。(個人理解:如果Slice1的資訊丟失,不會影響到整個影象,編碼端讀取到Slice2的頭資訊後,就可以重新同步)
這裡加入兩個概念方便理解接下來的內容:參考影象集合和參考影象表
圖序計數(picture order count,POC)用以標識解碼完成作為參考的影象。這些影象組成參考影象集(reference picture set,RPS)。解碼影象快取中儲存兩個參考影象表list 0和list 1,,單向預測時,選取二者之一作為參考,雙向預測時,兩個list中各選擇一個作為參考。
每個slice可攜帶的最大位元數通常受限,因此根據視訊場景的運動程度,slice所包含的的CTU數量可能有很大不同。
根據編碼型別,Slice可以分為:
(1)I Slice:該Slice中所有CU的編碼過程都使用幀內預測。
(2)P Slice:在I Slice的基礎上,該Slice中的CU還可以使用幀間預測,每個預測塊(PB)使用至多一個運動補償預測資訊。P Slice只使用影象參考列表list0。
(3)B Slice:在P Slice的基礎上,B Slice中的CU也可以使用幀間預測,但是每個PB可以使用至多兩個運動補償預測資訊。B Slice可以使用影象參考列表list 0和list 1。
這裡有個問題:Slice和IPB幀的關係,是不是I幀只有I Slice P幀只有P Slice B幀只有B Slice?:謝謝慢慢積累部落格博主嶽麓吹雪的解答:I幀裡面只能有I slice P幀裡面可以有I、P slice B幀裡面可以有I、B、P slice
一個獨立的Slice可以進一步劃分為若干個條帶片段Slice segment(SS),包括一個獨立SS和若干個依賴SS。
如圖Slice以獨立SS作為開始,一個SS包含整數個CTU(至少一個)。預測過程不可以跨越Slice邊界,但是可以跨越依賴SS邊界,一個Slice中的SS之間可以相互參考。(注意此處SS不是Slice啊,是它的一個片段)
這裡寫圖片描述

2.Tile
在HEVC中一幅影象可以劃分為若干個Tile(這是相比AVC的優化改進),即從從水平和垂直方向將影象分割為若干個矩形區域,把這些矩形區域稱為Tile。
下圖是一種劃分的示例,劃分的Tile並不要求均勻分佈,整幅影象被劃分為9個Tile,每個Tile都是矩形。通常每個Tile包含的CTU資料近似相等。
這裡寫圖片描述
每個Tile包含整數個CTU,其可以獨立編碼,在編碼時,每一個Tile包含的CTU按照掃描順序進行編碼。劃分Tile的主要目的是增強並行處理能力而不引入新的錯誤擴散,(另外個人理解引入Tile可以對視訊進行多解析度編碼)。
3、Slice與Tile的關係
一幅影象可以被劃分為若干個Slice,也可以劃分為若干個Tile,兩者劃分的目的都是為了進行獨立編碼。某些Slice中可以包含多個Tile,同樣某些Tile中也可以包含多個Slice。Tile包含的CTU個數和Slice中的CTU個數互不影響。

不同點:
劃分方式:Tile為矩形,Slice為條帶形。
組成結構:Slice由一系列的SS組成,一個SS由一系列的CTU組成。而Tile直接由一系列CTU組成。

Slice/SS和Tile要遵循的一些基本原則,每個Slice/SS和Tile之間至少滿足以下兩個條件之一:
(1)一個Slice/SS中的所有CTU屬於同一個Tile。
例如下圖中一幅影象的每一個Slice的所有CTU都屬於同一個Tile。
這裡寫圖片描述
(2)一個Tile中所有CTU屬於同一個Slice/SS。
如下圖,一幅影象在垂直方向被劃分為三個Tile,這三個Tile中各自的所有CTU都屬於同一個Slice。
這裡寫圖片描述

HEVC引入了三種新技術來增強並行處理能力和條帶結構的封裝性。
(1)Tiles:將影象分割為矩形區域的選項。其主要目的增強並行處理效能而非容錯性。Tiles是影象中共享頭資訊編碼但是可以獨立解碼的區域,並可在空間域作為影象的隨機接入點。通常,每一個tile中包含的CTU的數目是接近於相等的。Tile提供了一種簡單的並行處理模式,不需要複雜的執行緒同步。
(2)波前並行處理:該模式中,條帶被分割成CTU的行。第一行按正常處理,第二行在第一行兩個CTU完成後開始處理,第三行在第二行的兩個CTU處理完成後開始處理,以此類推。通常該方法的壓縮效能高於tiles。
(3)依賴性條帶分割:允許依賴於某一特定波前入口點或者tile的資料在一個獨立的NAL單元中攜帶傳輸。只有在其他條帶的部分資料解碼完成後,才能解碼一個依賴性條帶的波前入口點。(每個NAL 單元包括:一組對應於視訊編碼資料的 NAL 頭資訊和一個原始位元組序列負荷(RBSP)。 頭資訊中包含著一個可否丟棄的指示 標記,標識著該NAL單元的丟棄能否引起錯誤擴散,一般,如果NAL單元中的資訊不用於構建參考影象,則認為可以將其丟棄;最後包含的是NAL單元的型別資訊,暗示著其內含有效載荷的內容。 送到解碼器端的NAL單元必須遵守嚴格的順序,如果應用程式接收到的NAL單元處於亂序,則必須提供一種恢復其正確順序的方法。)

相關推薦

HEVC並行解碼語法結構SliceTile

首先是Slice和Tile這兩個我一直弄不清楚的概念 1.Slice 一幅影象可以被劃分為一個或多個片或稱為條帶(Slice),每個片的資料編碼都是獨立的。 如下圖,一幅影象被劃分為N個Slice,Slice成條帶形。在編碼時,每一個Slice中的CT

HEVC中的(slice)與片段(slice segment)

HEVC中提出了條帶與條帶片段兩個概念。 按照定義,條帶是由獨立條帶片段(independent slice segment)及其所附屬的非獨立條帶片段(dependent slice segment)(如果存在的話)構成的。編碼非獨立條帶片段時,條帶頭就只需標明其起始地址及其它非常少的必要資訊即可,其它

C指標之結構聯合體

1、結構體基礎知識   聚合資料型別(aggregate data type)能夠同時儲存超過一個的單獨資料。C語言提供了兩種型別的聚合資料結構,陣列和結構體。   陣列是相同型別的資料元素的集合,它的每個元素都是通過下標引用或者指標間接訪問來選擇的;結構也是一些值的集合,這些值稱為它的成

152-練習34 迴圈結構練習字元操作

3,猜數字遊戲,我有一個數,請您猜猜是多少?//請您輸入一個0-50之間的數:20(使用者輸入數字)//您猜小了,這個數字比20大:30//您猜大了,這個數字比30小:25//恭喜您猜對了,這個數字為:25使用者猜錯了就繼續猜,猜對了就停止遊戲。 Random random =

03->OpenGL多邊形,glut實現三角形三角形扇

pub 技術分享 oat single 頂點 rip ++ {} void 圖形學中基本圖元是多邊形,一般要求是凸多邊形,三角形是最簡單的凸多邊形,在圖形渲染中比一般多邊形其繪制速度快。今天學習OpenGL繪制三角形條帶和三角形扇基礎。編程環境! 1. 三角形條帶 指

raid5陣列分析陣列重組過程

掉線 下一個 數據恢復方法 shadow 相同 正常的 組件 陣列 com 1.服務器raid5磁盤陣列故障 服務器型號為P2000服務器/raid5磁盤陣列/10塊磁盤/單盤容量1TB/熱備盤盤號為6,故障表現為磁盤陣列中2塊磁盤離線,提示×××警報燈,初檢結果為陣列磁盤

語法)理解結構指標動態分配記憶體

    結構體即我們自定義的資料型別,平時經常用到,結構體指標即將指標加入到一個型別中,理解結構體指標對學習指標可以進一步深入理解,並在連結串列等格式中運用非常廣泛,以下面程式舉例分析: #inclu

記憶功能的讀取賬號結構思路實例

rdd res 登錄 nes card rip ... 有變 ssa 思路 :讀取和寫入腳本配置的命令 readconfig writeconfig 兩個命令可以方便的實現腳本的記憶功能 註意writeconfig 第三個參數必須為true 腳本開始 我們讀取下腳本配置的

《Java從入門到失業》第三章:基礎語法及基本程式結構(四):基本資料型別(字元編碼char型)

3.6.4字元編碼        咦?怎麼好像有東西亂入了?不是講基本資料型別麼?哈哈,因為還剩下最後一個char型了,因為char型會牽涉到Unicode編碼相關,因此我決定先科普一下字符集編碼。     &

mybatis配置自緩存第三方緩存

word 序列化 efault slf4j nbsp javase image html 自身 參考:https://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html, http://www.yihaomen.com/articl

docker的存儲結構以前有了很大不同

img docker 發現 container ref url docker容器 str blog 在網上學習這一塊知識點時,有一個URL講得很詳細, docker 鏡像與容器存儲目錄結構精講 http://blog.csdn.net/wanglei_storage/a

bootstrap-基本導航-搜索欄

bootstrap-基本導航條-帶搜索欄1.運行效果如圖所示2.實現代碼如下<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compat

spring 發送郵件代碼示例(附件附件的)

cat subject exception type except 郵件 auto help utf import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; im

結構化、半結構結構化數據

tracking 數據庫 能夠 二維 表示 結構化數據 媒體 acl 面向 在實際應用中,我們會遇到各式各樣的數據庫如nosql非關系數據庫(memcached,redis。mangodb)。RDBMS關系數據庫(oracle,mysql等),另一些其他的數據庫如hba

結構類的區別,聯系

變量賦值 屬性 left 運行 效率 整體 如果 場景 區別 結構體和類的共同點:都可以將多個數據封裝為一個整體結構體和類的不同點: 結構體只能封裝數據,而類還可以封裝行為; 結構體實例是值類型,類實例是對象類型 結構體實例存儲在棧空間,類實例存儲在堆空間 結構體變量賦值

delphi 結構TList的用法

sage ring double nbsp phi reat delphi final del type PRecord = ^TMyRec; TMyRec = record s: string[8]; i: integer; d: double;en

JavaScript 函數調用時括號括號的區別

span script nod 才會 彈出 產生 都是 必須 得到 function countBodyChildren(){ var body_element = document.getElementsByTagName("body")[0]; ale

數據結構--DFSBFS

一個 spa namespace bsp num max 鄰接矩陣 bool traverse 專題--深度優先搜索與廣度優先搜索 知識點:   鄰接矩陣結構;   DFS深度優先搜索;   BFS廣度優先搜索。 1 #include <iostrea

js實現存儲對象的數據結構hashTablelist

bsp rip func 返回 null port reset ast shift 以下代碼是typescript語言來寫的,其實和es6面向對象的寫法基本一致。大家閱讀後都明白這些方法的作用。 hash hash結構用於處理和表現類似key/value的鍵值對,其中k

JavaWeb | 之 | 角色管理的表結構設計原理

添加 原理 com 數據庫表結構 效果 image 簡單 javaweb span 1, 根據實際工作的實際需要,不同的角色會有不同的權限,因此出現 角色管理,表結構總結如下: 首先:數據庫表結構: a.角色表: b.權限表: c.角