用于硬件加速的視頻編碼的主編碼器的制造方法
【專利摘要】通過控制針對編碼視頻的比特流句法的各高層的決策,主編碼器即使在與來自不同供應商的跨不同硬件平臺的加速器硬件一起使用時也能提供一致的行為。例如,主編碼器控制高級的編碼行為并為輸出比特流的序列層和圖片層(以及可能的其它層,諸如片頭部層)設置句法元素的值,而只使用少量的計算資源。包括加速器硬件的加速器隨后以與主編碼器所設置的句法元素的值一致的方式來控制針對句法的較低層的編碼決策,為較低層的句法設置句法元素的值,這允許加速器在作出其編碼決策時有一定的靈活性。
【專利說明】用于硬件加速的視頻編碼的主編碼器
[0001 ] 背景
[0002]工程師使用壓縮(也叫做源編碼(source coding或source encoding))來降低數字視頻的比特率。壓縮通過將視頻信息轉換成較低比特率的形式來降低存儲和傳送該信息的成本。解壓(也被稱為解碼)從壓縮的形式中重構一種版本的原始信息?!熬幗獯a器”是編碼器/解碼器系統(tǒng)。
[0003]在過去的二十年中,已采用了各種視頻編解碼器標準,包括ITU-T H.26UH.262(MPEG-2或IS0/IEC 13818-2)、Η.263和H.264(MPEG_4AVC或IS0/IEC 14496-10)標準、MPEG-KIS0/IEC 11172 I 172-2)和MPEG-4視覺(IS0/IEC 14496-2)標準以及SMPTE 421M(VC_1)標準。最近,HEVC標準(ITU-T H.265SIS0/IEC 23008-2)已被批準。視頻編解碼器標準通常定義針對編碼視頻比特流的句法的選項,從而詳述當在編碼和解碼時使用特定特征時該比特流中的參數。例如,比特流被分層地組織,如針對序列的序列層參數、針對序列的圖像的圖像層參數、針對圖片中的切的片層參數、以及針對給定圖像的塊的低層參數。在許多情況下,視頻編解碼器標準還提供關于解碼器應當執(zhí)行以在解碼時取得一致的結果的解碼操作的細節(jié)。除了編解碼器標準外,各種專用編解碼器格式定義針對編碼視頻比特流的句法的其它選項以及相應的解碼操作。
[0004]雖然一些視頻編碼操作在該操作所使用的計算資源方面是相對簡單的,但另一些視頻編碼操作在計算上是復雜的。例如,運動估計、頻率變換、部分采樣插值、環(huán)路去塊濾波、顏色轉換、以及視頻大小調整可能需要大量的計算。這種計算復雜性可能在各種情形下是有問題的,諸如高品質編碼、高比特率視頻(例如,經壓縮的高清晰度視頻)或實時編碼。
[0005]因此,一些編碼器使用硬件加速來將某些計算密集型操作卸載到圖形處理器或其它專用硬件。例如,在某些配置中,計算機系統(tǒng)包括至少一個主中央處理單元(“CPU”)以及至少一個圖形處理單元(“GPU”)或專門適配用于圖形處理或視頻編碼的其它硬件。主編碼器使用主CPU來控制總的編碼并使用GPU(或其它專用硬件)來執(zhí)行共同需要大量計算的操作,從而實現對視頻編碼的加速。在典型的用于硬件加速視頻編碼的體系結構中,主編碼器控制總的編碼。主編碼器通過信號將控制信息和數據發(fā)送給加速器硬件的設備驅動程序。
[0006]在一個現有的用于硬件加速視頻編碼的體系結構中,硬件供應商提供用于與該供應商的加速硬件一起工作的主編碼器。主編碼器展示接口,通過該接口,應用可規(guī)定主編碼器應該如何控制編碼。在許多情形下,來自不同供應商的主編碼器提供與應用通過該接口規(guī)定的編碼行為不一致的編碼。在極端情況下,應用可能與供應商提供的硬件不兼容。
[0007]概述
[0008]概括來說,詳細的描述呈現了在用于硬件加速編碼的主編碼器的設計和使用中的創(chuàng)新。通過控制針對編碼媒體的比特流句法的高層的決策,主編碼器即使在與來自不同供應商的跨不同硬件平臺的加速器硬件一起使用時也能提供一致的行為。
[0009]主編碼器為媒體的序列層句法和圖片層句法中的至少一個設置輸出比特流的句法元素的值。例如,輸出比特流包括指示由主編碼器為序列層句法設置的句法元素的值的一個或多個序列參數集(“SPS”)句法結構以及由主編碼器為圖片層句法設置的句法元素的值的一個或多個圖片參數集(“PPS”)句法結構。主編碼器還可為片頭部層句法設置輸出比特流的句法元素的值。例如,當主編碼器為片頭部層句法設置輸出比特流的句法元素的值時,輸出比特流包括由主編碼器為片頭部層句法設置的句法元素的值的片頭部句法結構 (諸如參考圖片列表信息或參考圖片集信息)。當主編碼器為句法的給定層(例如,序列層、 圖片層或片頭部層)設置句法元素的值時,它可設置該層所有的句法元素的值或該層的僅一些句法元素的值。主編碼器也可為一個或多個補充增強信息(“SEI”)消息、用于指示圖片邊界的訪問單元分隔符(“AUD”)、和/或其它信息設置輸出比特流的句法元素的值。主編碼器可以對由主編碼器設置的句法元素的值進行熵編碼/格式化,或者它可以將該值傳遞給加速器來進行熵編碼/格式化。主編碼器可以將由主編碼器設置的句法元素的值寫到輸出比特流,或者它可以將該值傳遞給加速器來寫到輸出比特流。
[0010]主編碼器還用控制參數的值來填充一個或多個控制結構??刂茀悼砂ㄒ粋€或多個速率控制參數,該速率控制參數指定影響質量和/或比特率的目標或因素。主編碼器可 (直接或間接地)從加速器接收反饋信息(例如,媒體的復雜度信息、質量信息和/或比特率信息)并至少部分基于該反饋信息來確定控制參數的值。其它控制結構可包括指示預處理分析的結果的信息(例如,感興趣區(qū)域信息、復雜度信息、噪聲類型信息、噪聲水平信息和/ 或亮度采樣水平信息),這可幫助加速器作出一些編碼決策。
[0011]主編碼器發(fā)起由包括加速器硬件的加速器執(zhí)行的對媒體的編碼,跨越位于主編碼器和加速器硬件之間的加速器接口傳遞控制結構。這促進了加速器根據由主編碼器為序列層句法和圖片層句法(以及可能的片頭部層句法)中的至少一個設置的句法元素的值對編碼操作的控制。例如,由加速器控制的編碼操作可包括針對媒體的(至少對于片數據的較低層級的句法,諸如宏塊、子宏塊、分區(qū)、殘留數據單元、編碼樹單元、編碼單元、預測單元、變換單元、或其部分)的圖片內估計和預測操作、運動估計和補償操作、頻率變換操作、量化操作、和熵編碼/格式化操作。位于主編碼器和加速器硬件之間的加速器接口可包括主編碼器和一個或多個設備驅動程序之間的應用程序編程接口( “API”)和設備驅動程序接口 (“DDI”)。例如,加速器接口可用于與多種不同類型的加速器硬件中的任何一種的設備驅動程序一起工作,并且加速器接口可針對多種編解碼標準或格式中的任何一種與主編碼器一起工作。
[0012]加速器根據主編碼器設置的句法元素的參數和值來執(zhí)行媒體的較低句法層(例如,宏塊、子宏塊、分區(qū)、殘留數據單元、編碼樹單元、編碼單元、預測單元、變換單元、或其部分)的編碼操作。在編碼之后,輸出比特流包括指示由所述加速器為媒體的片數據層句法和比特流句法的較低層所設置的句法元素的值的句法結構。此外,如果加速器為片頭部層句法設置了輸出比特流的句法元素的值,輸出比特流包括由加速器為片頭部層句法設置的句法元素的值的片頭部句法結構。
[0013]在開始編碼之前(或者甚至在對一些編碼控制屬性進行編碼期間),主編碼器可以根據應用跨主編碼器所公開的接口上的一個或多個調用來設置編碼控制屬性的值。主編碼器公開的接口可包括用于設置各種編碼控制屬性的值的子例程(例如,規(guī)程、函數、成員函數、對接方法等)和用于檢索那些編碼控制屬性的值的子例程。主編碼器還可公開另一接口,該接口包括用于管理輸入流的子例程和用于管理輸出流的子例程。
[0014]參考附圖閱讀以下詳細描述,將更清楚本發(fā)明的前述和其它目標、特征和優(yōu)點。
[0015]附圖簡述
[0016]圖1是其中可實現所描述的一些實施例的示例計算系統(tǒng)的示圖。
[0017]圖2a和2b是其中可實現所描述的一些實施例的示例網絡環(huán)境的示圖。
[0018]圖3是結合其可實現所描述的一些實施例的示例編碼器系統(tǒng)的示圖。
[0019]圖4a和4b是示出結合其可實現所描述的一些實施例的示例視頻編碼器的示圖。
[0020]圖5a和5b是示出其中可實現一些所描述的實施例的用于硬件加速視頻編碼的體系結構的示圖。
[0021]圖6是示出包括用于通過主編碼器來進行硬件加速視頻編碼的一般化技術的流程圖。
[0022]詳細描述
[0023]詳細的描述呈現了在用于硬件加速視頻編碼的主編碼器的設計和使用中的創(chuàng)新。具體來說,通過控制針對編碼視頻的比特流句法的各高層的決策,主編碼器即使在與來自不同供應商的加速器硬件一起使用時也能提供一致的行為。例如,主編碼器可控制高級的編碼行為并為輸出比特流的序列層和圖片層(以及可能的其它層,諸如片-頭部層)設置句法元素,而只使用少量的計算資源。包括加速器硬件(并且通常包括針對加速器硬件的一個或多個設備驅動程序)的加速器隨后以與由主編碼器設置的句法元素的值一致的方式控制針對比特流句法的較低層的編碼決策(例如,針對圖片內估計和預測、運動估計和補償、頻率變換、量化、和至少一些熵編碼/格式化)。
[0024]雖然本文中描述的操作是被適當描述為由視頻編碼器來執(zhí)行,但在許多情況中,這些操作可由另一類型的媒體處理工具(例如圖像編碼器或其它數據編碼器)來執(zhí)行。
[0025]本文中描述的一些創(chuàng)新是參考專用于H.264/AVC標準或H.265/HEVC標準的句法元素和操作來示出的。本文中描述的各創(chuàng)新還可以被實現為用于其它標準或格式的硬件加速編碼。例如,本文所描述的創(chuàng)新可被用來提供針對VPx、SMPTE 421M或另一種當前或未來的格式的硬件加速編碼。
[0026]在本文描述的一些示例中,硬件加速編碼一般遵循針對H.264/AVC的DirectX視頻加速(“DXVA”)的方案,重新使用調用模式、基本數據流、數據結構等,或擴展這類調用模式、基本數據流、數據結構等。替代地,本文所描述的創(chuàng)新被實現用于根據主編碼器和加速器之間的加速器接口的另一種規(guī)范的硬件加速編碼。
[0027]更一般地,本文中描述的各示例的各種替代是可能的。例如,通過改變流程圖所示出的階段的順序,通過拆分、重復或省略某些階段等等,可以改變參考流程圖所描述的某些技術。所公開的技術的各方面能夠被組合地或分開地使用。不同的實施例使用所描述的創(chuàng)新中的一個或多個。本文中描述的一些創(chuàng)新解決了背景中指出的一個或多個問題。通常,所給出的技術/工具并不解決所有這些問題。
[0028]1.示例計算系統(tǒng)
[0029]圖1示出了其中可實現所描述的若干創(chuàng)新的合適計算系統(tǒng)(100)的概括示例。計算系統(tǒng)(100)并不旨對使用范圍或功能提出任何限制,因為這些創(chuàng)新可以在不同的通用或專用計算系統(tǒng)中實現。
[0030]參考圖1,計算系統(tǒng)(100)包括一個或多個處理單元(I 10、115)和存儲器(120、125)。處理單元(I 10、115)執(zhí)行計算機可執(zhí)行指令。處理單元可以是通用中央處理單元(“CPU”)、專用集成電路(“ASIC”)中的處理器或任何其它類型的處理器。在多處理系統(tǒng)中, 多個處理單元執(zhí)行計算機可執(zhí)行指令以提高處理能力。例如,圖1示出CPU(llO)以及圖形處理單元或協處理單元(115)。有形存儲器(120、125)可以是易失性存儲器(例如,寄存器、高速緩存、RAM )、非易失性存儲器(例如,ROM、EEPR0M、閃存等)或兩者的某種組合,可通過(諸) 處理單元存取。存儲器(120,125)存儲實現設計和使用用于硬件加速的視頻編碼的主編碼器的一個或多個創(chuàng)新的軟件(180),該軟件是計算機可執(zhí)行指令的形式。
[0031]計算系統(tǒng)可具有附加的特征。例如,計算系統(tǒng)(100)包括存儲(140)、一個或多個輸入設備(150)、一個或多個輸出設備(160)以及一個或多個通信連接(170)。諸如總線、控制器或網絡之類的互連機制(未示出)將計算系統(tǒng)(100)的各組件互連。通常,操作系統(tǒng)軟件 (未示出)為在計算系統(tǒng)(100)中執(zhí)行的其它軟件提供操作環(huán)境,并協調計算系統(tǒng)(100)的各組件的活動。[〇〇32] 有形存儲(140)可以是可移動或不可移動的,并包括磁盤、磁帶或磁帶盒、⑶-R0M、 DVD或可用于儲存信息并可在計算系統(tǒng)(100)內訪問的任何其它介質。存儲(140)存儲實現設計和使用用于硬件加速的視頻編碼的主編碼器的一個或多個創(chuàng)新的軟件(180)的指令。 [〇〇33](諸)輸入設備(150)可以是觸摸輸入設備(諸如鍵盤、鼠標、筆或跟蹤球)、語音輸入設備、掃描設備或向計算系統(tǒng)(100)提供輸入的另一設備。對于視頻,(諸)輸入設備(150) 可以是相機、視頻卡、TV調諧卡、或接受模擬或數字形式的視頻輸入的類似設備、或將視頻樣本讀到計算系統(tǒng)(100)中的⑶-ROM或⑶-RW。(諸)輸出設備(160)可以是顯示器、打印機、 揚聲器、CD刻錄機或提供來自計算系統(tǒng)(100)的輸出的另一設備。
[0034](諸)通信連接(170)允許通過通信介質與另一計算實體通信。通信介質傳達諸如計算機可執(zhí)行指令、音頻或視頻輸入或輸出、或已調制數據信號中的其它數據之類的信息。 已調制數據信號是使其一個或多個特征以在信號中編碼信息的方式設置或改變的信號。作為示例而非限制,通信介質可以使用電的、光學的、RF或其它載體。
[0035]各創(chuàng)新可以在計算機可讀介質的一般上下文中描述。計算機可讀介質是可在計算環(huán)境內訪問的任何可用有形介質。作為示例而非局限,對于計算系統(tǒng)(1〇〇),計算機可讀介質包括存儲器(120、125 )、存儲(140 )、和以上任意的組合。
[0036]各創(chuàng)新可在計算機可執(zhí)行指令(諸如包括在程序模塊中的在目標現實或虛擬處理器上在計算系統(tǒng)中執(zhí)行的那些計算機可執(zhí)行指令)的一般上下文中描述。一般而言,程序模塊包括執(zhí)行特定任務或實現特定抽象數據類型的例程、程序、庫、對象、類、組件、數據結構等。如各實施例中所描述的,這些程序模塊的功能可以被組合,或者在這些程序模塊之間拆分。針對各程序模塊的計算機可執(zhí)行指令可以在本地或分布式計算系統(tǒng)中執(zhí)行。
[0037]術語“系統(tǒng)”和“設備”在此被互換地使用。除非上下文明確指示,否則,術語并不暗示對計算系統(tǒng)或計算設備的類型的任何限制。一般說來,計算系統(tǒng)或計算設備可以是本地的或分布式的,并且可以包括具有實現本文中描述的功能的軟件的專用硬件和/或通用硬件的任意組合。
[0038]為了陳述方便,本詳細描述使用了如“確定”、“設置”和“填充”等術語來描述計算系統(tǒng)中的計算機操作。這些術語是對由計算機執(zhí)行的操作的高級抽象,且不應與人類所執(zhí)行的動作混淆。對應于這些術語的實際的計算機操作取決于實現而不同。
[0039]I1.示例網絡環(huán)境
[0040]圖2a和2b示出了包括視頻編碼器(220)和視頻解碼器(270)的示例網絡環(huán)境(201,202)。編碼器(220)和解碼器(270)使用合適的通信協議通過網絡(250)連接。網絡(250)可包括因特網或另一計算機網絡。
[0041]在圖2a所示的網絡環(huán)境(201)中,每個實時通信(“RTC”)工具(210)都包括用于雙向通信的編碼器(220)和解碼器(270)兩者。給定的編碼器(220)可以產生符合H.265/HEVC標準、SMPTE 42IM標準、H.264/AVC標準、另一標準、或專用格式的輸出,使得相應的解碼器(270)接受來自編碼器(220)的編碼數據。雙向通信可以是視頻會議、視頻電話呼叫或其它雙方或多方通信場景的部分。雖然,圖2a中的網絡環(huán)境(201)包括兩個實時通信工具(210),但網絡環(huán)境(201)可改為包括參與多方通信的三個或更多個實時通信工具(210)。
[0042]實時通信工具(210)管理編碼器(220)做出的編碼。圖3示出可以被包括在實時通信工具(210)中的示例編碼器系統(tǒng)(300)。替換地,實時通信工具(210)使用另一編碼器系統(tǒng)。實時通信工具(210)還管理解碼器(270)做出的解碼。
[0043]在圖2b中示出的網絡環(huán)境(202)中,編碼工具(212)包括編碼供遞送給多個回放工具(214)的視頻的編碼器(220),此多個回放工具(214)包括解碼器(270)。單向通信可被提供用于視頻監(jiān)視系統(tǒng)、web相機監(jiān)視系統(tǒng)、遠程桌面會議演示或在其中編碼視頻并將視頻從一個位置發(fā)送到一個或多個其它位置的其它場景。雖然在圖2b中的網絡環(huán)境(202)包括兩個回放工具(214),但該網絡環(huán)境(202)可以包括更多或更少的回放工具(214)。一般來說,回放工具(214)與編碼工具(212)通信以確定回放工具(214)要接收的視頻流?;胤殴ぞ?214)接收該流、緩沖所接收的經編碼數據達合適的時間段并開始解碼和回放。
[0044]圖3示出可以被包括在編碼工具(212)中的示例編碼器系統(tǒng)(300)。替換地,編碼工具(212)使用另一編碼器系統(tǒng)。編碼工具(212)還可以包括用于管理與一個或多個回放工具(214)的連接的服務器側控制器邏輯。回放工具(214)還可以包括用于管理與編碼工具(212)的連接的客戶機側控制器邏輯。
[0045]II 1.示例編碼器系統(tǒng)。
[0046]圖3是結合其可實現所描述的一些實施例的示例編碼器系統(tǒng)(300)的框圖。編碼器系統(tǒng)(300)可以是能夠用多種編碼模式中的任一者(諸如用于實時通信的低等待時間編碼模式、轉碼模式和用于從文件或流中產生供回放的媒體的較高等待時間編碼模式)操作的通用編碼工具,或它可以是適用于一種這樣的編碼模式的專用編碼工具。編碼器系統(tǒng)(300)可以適用于編碼特定類型的內容(例如屏幕捕捉內容)。編碼器系統(tǒng)(300)被實現為使用主編碼器來執(zhí)行一些功能而使用加速器來執(zhí)行其它功能,其中加速器包括加速器硬件和用于加速器硬件的一個或多個設備驅動程序。總體上,編碼器系統(tǒng)(300)從視頻源(310)接收源視頻幀序列(311)并產生經編碼數據作為到信道(390)的輸出。
[0047]視頻源(310)可以是相機、調諧器卡、存儲介質、或其它數字視頻源。視頻源(310)以例如每秒30幀的幀速率產生視頻幀序列。如本文中所使用的,術語“幀”一般指代源、編碼或經重構的圖像數據。對于逐行掃描視頻,幀是逐行掃描視頻幀。對于隔行視頻,在各示例實施例中,隔行視頻幀可以在編碼之前被去隔行。替換地,兩個互補的隔行視頻場可以被編碼在一起作為單個視頻幀或者被編碼成兩個經分開編碼的場。除了指示逐行掃描視頻幀或隔行掃描視頻幀之外,術語“幀”或“圖片”可以指示單個非成對的視頻場、互補的成對視頻場、表示在給定時間的視頻對象的視頻對象平面、或較大圖像中的感興趣區(qū)域。視頻對象平面或區(qū)域可以是包括場景的多個對象或區(qū)域的較大圖像的一部分。
[0048]抵達的源幀(311)被存儲在包括多個幀緩沖器存儲區(qū)域(321、322、…、32n)的源幀臨時存儲器存儲區(qū)域(320)中。幀緩沖區(qū)(321、322等)在源幀存儲區(qū)域(320)中保持一個源幀。在一個或多個源幀(311)已被存儲在幀緩沖器(321,322等)中后,幀選擇器(330)(其可受主編碼器指示)從源幀存儲區(qū)域(320)中選擇一個個體源幀。幀選擇器(330)選擇幀以供輸入到編碼器(340)的次序可不同于視頻源(310)產生這些幀的次序,例如某些幀的編碼可以被按序延遲,從而允許一些更后面的幀被先編碼并由此促成時間上向后的預測。在編碼器(340)之前,編碼器系統(tǒng)(300)可包括預處理器(未示出),該預處理器在編碼之前執(zhí)行對選中的幀(331)的預處理(例如濾波)。預處理功能可由主編碼器提供,或者主編碼器可使用加速器來執(zhí)行預處理操作中的至少一些。預處理可包括將色彩空間轉換成主要(例如亮度) 和次要(例如偏向紅色和偏向藍色的色度差)分量以及對編碼的重采樣處理(例如以減少色度分量的空間分辨率)。通常,在編碼之前,視頻已被轉換成諸如YUV的色彩空間,其中亮度 (Y)分量的樣本值表示明亮度或強度值,而色度(U,V)分量的樣本值表示色差值。色差值(以及從YUV色彩空間到諸如RGB的另一色彩空間和/或從另一色彩空間到YUV色彩空間的轉換操作)的精確定義取決于實現。通常,如在此所用,術語YUV指示具有亮度(或照度)分量和一個或多個色度(或色差)分量的任意色彩空間,包括Y’UV、YIQ、Y’IQ和YDbDr以及諸如YCbCr 和YCoCg之類的變體。色度樣本值可以被子采樣到較低的色度采樣率(例如用于YUV 4:2:0 格式或YUV 4:2:2),或者色度樣本值可以具有與亮度樣本值相同的分辨率(例如用于YUV 4:4:4格式)。在YUV 4: 2:0格式中,色度分量在水平上被下采樣了 1/2并且在垂直上被下采樣了 1/2。在YUV 4:2:2格式中,色度分量在水平上被下采樣了 1/2?;蛘?,視頻可用另一格式 (例如,RGB 4:4:4格式)來編碼。
[0049]編碼器(340)(其中一些操作由主編碼器執(zhí)行而另一些操作由加速器執(zhí)行)編碼選中的幀(331)以產生編碼幀(341)并且還產生存儲器管理控制操作(“MMC0”)信號(342)或參考圖片集(“RPS”)信息。RPS是在針對當前幀或任意后續(xù)幀的運動補償中可用于供參考的幀集。如果當前幀不是已被編碼的第一幀,則在執(zhí)行其編碼處理時,編碼器(340)可以使用已經被存儲在經解碼幀的臨時存儲器存儲區(qū)域(360)中的一個或多個先前被編碼/解碼的幀 (369)。這樣的存儲的經解碼幀(369)被用作用于當前源幀(331)的內容的幀間預測的參考幀。MMC0/RPS信息(342)向解碼器指示哪些經重構的幀可被用作參考幀,并且因此應該被存儲在幀存儲區(qū)域中。
[0050]通常,編碼器(340)包括執(zhí)行諸如分隔、圖片內部預測估計和預測、運動估計和補償、頻率變換、量化和熵編碼之類的編碼任務。由編碼器(340)執(zhí)行的確切操作可以取決于壓縮格式而變化。輸出的經編碼數據的格式可以是H.265/HEVC格式、H.264/AVC格式、另一種H.26x格式、Windows媒體視頻格式、VC-x格式、MPEG-x格式、VPx格式、或其它格式。主編碼器執(zhí)行編碼器(340)的至少一些高級的編碼操作,但其它操作(例如,針對較低層次句法的圖片內估計和預測、運動估計和補償、頻率變換、量化、以及熵編碼/格式化)由加速器進行。 [〇〇51]在H.265/HEVC實現中,編碼器(340)可以將幀分割成相同尺寸或不同尺寸的多個小塊。例如,編碼器(340)沿小塊行和小塊列來拆分幀,這些小塊行和小塊列利用幀邊界定義在該幀內的小塊的水平和垂直邊界,其中每個小塊是矩形區(qū)域。小塊通常被用于提供并行處理的選項。在H.265/HEVC實現、H.264/AVC實現以及其它實現中,幀可以被組織成一個或多個片,其中一個片可以是整個幀或該幀的區(qū)域。片可以獨立于幀中的其它片編碼,這改善了錯誤復原性。出于編碼和解碼的目的,片或小塊的內容被進一步分割成塊或其它樣本值集。
[0052]對于遵循H.264/AVC標準的句法,編碼器(340)可以將幀分割成相同尺寸或不同尺寸的多個片。編碼器(340)將幀(或片)的內容拆分成16x16個宏塊。宏塊包括被組織為4個8x8亮度塊的亮度樣本值和被組織為8x8色度塊的相應的色度樣本值。通常,宏塊具有諸如幀間或幀內之類的預測模式。出于信號化預測信息(例如預測模式細節(jié)、運動向量(“MV”)信息等)和/或預測處理的目的,宏塊包括一個或多個預測單元(例如,8x8的塊、4x4的塊,這些塊可被稱為用于幀內預測的分區(qū))。宏塊還具有用于殘差編碼/解碼目的的一個或多個殘留數據單元。
[0053]對于根據H.265/HEVC標準的句法來說,編碼器(340)將幀(或片或小塊)的內容拆分成編碼樹單元。編碼樹單元(“CTU”)包括被組織為亮度編碼樹塊(“CTB”)的亮度樣本值,并且對應的被組織為兩個色度CTB的色度樣本值。CTU(及其CTB)的尺寸由編碼器(340)來選擇,并且可例如為64x64、32x32或16x16個樣本值。CTU包括一個或多個編碼單元。編碼單元(“CU”)具有亮度編碼塊(“CB”)和兩個相應的色度CB。通常,CU具有諸如幀間或幀內之類的預測模式。出于信號化預測信息(例如預測模式細節(jié)、位移值等)和/或預測處理的目的,CU包括一個或多個預測單元。預測單元(“PU”)具有亮度預測塊(“PB”)和兩個色度PB。出于殘留編碼/解碼的目的,CU還具有一個或多個變換單元,其中變換單元(“TU”)具有一變換塊(“TB”)和兩個色度TB。編碼器(340)決定如何將視頻分割成CTU、CU、PU、TU等。
[0054]在H.265/HEVC實現中,片可以包括單個片段(獨立的片段)或被劃分成多個片段(獨立的片段和一個或多個從屬的片段)。片段是包含在單個網絡抽象層(“NAL”)單元中的、在小塊掃描中連續(xù)排序的整數數目的CTU。對于獨立的片段,片段頭部包括適用于該獨立的片段的句法元素的值。對于從屬片段,截短的片段頭部包括適用于該從屬片段的句法元素的幾個值,并且從屬片段的其它句法元素的值是以解碼順序從在前的獨立的片段的值中推導出來的。
[0055]如本文中所使用的,術語“±夬”可以指示宏塊、預測單元、殘留數據單元、或者CB、PB或TB,或者某些其它樣本值集,這取決于上下文。
[0056]回到圖3,編碼器(340)根據來自源幀(331)中的其它、先前重構的樣本值的預測來表示該幀(331)內編碼的塊。例如,對于塊的幀內空間預測,圖片內估計器估計相鄰的經重構樣本值到該塊的外插。圖片內估計器可以輸出經熵編碼的預測信息(例如幀內空間預測的預測模式(方向))。幀內預測預測器應用預測信息來確定幀內預測值。
[0057]編碼器(340)依據來自參考幀的預測來表示源幀(331)的幀間編碼的預測的塊。運動估計器估計塊相對于一個或多個參考幀(369)的運動。當使用多個參考幀時,這多個參考幀可來自不同的時間方向或相同的時間方向。經運動補償的預測參考區(qū)域是(諸)參考幀中用于生成當前幀中的樣本塊的經運動補償的預測值的樣本區(qū)域。運動估計器輸出諸如MV量信息之類的運動信息,該運動信息被熵編碼。運動補償器將MV應用于參考幀(369)以確定用于幀間預測的經運動補償的預測值。
[0058]編碼器可確定塊的預測值(幀內或幀間)和相應的原始值之間的差值(如果有的話)。這些差或預測殘留值將進一步使用頻率變換、量化和熵編碼來編碼。例如,編碼器(340)為圖片、小塊、片和/或視頻中的其它部分設置量化參數(“QP”)的值,并相應地量化變換系數。編碼器(340)的熵編碼器壓縮經量化的變換系數值以及某些輔助信息(例如MV信息、QP值、模式決策、參數選擇)。典型的熵編碼技術包括指數-Golomb編碼、Golomb-Rice編碼、算術編碼、差分編碼、Huffman編碼、行程長度編碼、可變長度到可變長度(“V2V”)編碼、 可變長度到固定長度(“V2F”)編碼、Lempel-ZiV( “LZ”)編碼、字典編碼、概率區(qū)間劃分熵編碼(“PIPE”)和上述編碼的組合。熵編碼器可針對不同種類的信息使用不同的編碼技術,并可組合地應用多個技術(例如,通過應用Golomb-Rice編碼,隨后應用算術編碼),并可從特定編碼技術內的多個碼表中進行選擇。[〇〇59]自適應去塊濾波器可以被包括在編碼器(340)中的運動補償循環(huán)內以平滑經解碼的幀中的塊邊界行和/或列上的間斷??商鎿Q地或另外地應用其它濾波(諸如去振鈴濾波、 自適應環(huán)路濾波(“ALF")或樣本自適應偏移(“SA0”)濾波;未示出)作為內環(huán)路濾波操作。
[0060]由編碼器(340)產生的編碼數據包括針對各層比特流句法的句法元素。例如,對于根據H.264/AVC或H.265/HEVC的標準的句法,圖片參數集(“PPS”)是包含了與圖片相關聯的句法元素的句法結構。PPS可被用于單個圖片,或者PPS可被重用于序列中的多個圖片。PPS 典型地與圖片的編碼數據分開地發(fā)送信號(例如PPS的一個NAL單元和用于圖片的編碼數據的一個或多個其它NAL單元)。在圖片的經編碼數據內,句法元素指示要為該圖片使用哪個 PPS。類似地,對于遵照H.264/AVC或H.265/HEVC的標準的句法,序列參數集(“SPS”)是包含了與圖片的序列相關聯的句法元素的句法結構。比特流可包括單個SPS或多個SPSJPS通常被信號化成與序列的其它數據分開,并且其它數據中的句法元素指示要使用哪個SPS。
[0061]在某些示例實現中,編碼器(340)的主機編碼器控制編碼的高級行為,并為句法的至少序列層和圖片層設置至少一些句法元素的值。對于H.264/AVC實現,主編碼器還可為片頭部設置句法元素的值。例如,對于要被編碼的片,主編碼器控制該片的參考圖片列表的構造。一般來說,參考圖片列表(“RPL”)是為該片構造的參考圖片的經索引列表。RPL包括可在針對該片的運動補償中被使用的參考圖片。RPL中的參考圖片選自RPS,但RPS可能包括不在 RPL中的其它圖片,并且RPL可包括一個給定參考圖片多次。主編碼器還可控制編碼格式、與相對于輸入和編碼順序的輸出和顯示順序有關的信息(例如,圖片順序計數)、圖片/片的類型(1、P或B)、當前的圖片是否是參考圖片、比特率(例如,通過QP值,或通過片或圖片的尺寸值,或通過指定序列的比特率)、熵編碼模式、去塊濾波決策、以及通過從SPS和PPS句法結構直至片頭部的各句法元素的設置來定義的其它編碼行為。對于H.265/HEVC實現,主編碼器可類似地為SPS、PPS以及片頭部(此處為片的片段頭部)設置句法元素的值。編碼器(340)的加速器控制剩余的編碼決策。例如,對于H.264/AVC實現,加速器控制針對片數據(宏塊、子宏塊、分區(qū)、殘留數據單元、或其中的一部分)的編碼決策,包括針對運動估計/補償、幀內圖像估計/預測和殘差編碼的決策。類似地,對于H.265/HEVC實現,加速器控制針對小塊和/或片內的塊(CTU的CTB、CU的CB、PU的PB、TU的TB等)的編碼決策。[〇〇62]在一些示例實現中,編碼器(340)的主編碼器可作出速率控制決策,該決策可被傳遞給編碼器(340)的加速器。加速器可進而執(zhí)行速率一失真優(yōu)化或與由主編碼器指定的速率控制目標一致的其它決策制定過程。加速器可將反饋信息(例如,關于編碼的結果的質量和/或比特率)提供回給主編碼器,供主編碼器用在速率控制決策中。[〇〇63] 編碼幀(341)和MMC0/RPS信息(342)(或與MMC0/RPS信息(342)等價的信息,因為在編碼器(340)處已經知道各幀的依賴關系和排序結構)由解碼處理仿真器(350)處理。解碼處理仿真器(350)實現了解碼器的一些功能,例如對任務進行解碼以重構參考幀。以與MM⑶/RPS信息(342)相一致的方式,解碼處理仿真器(350)確定給定的經編碼幀(341)是否需要被重構并被存儲以供在對要編碼的后續(xù)幀的幀間預測中用作參考幀。如果編碼幀(341)需要被存儲,則解碼處理仿真器(350)對將由解碼器進行的解碼處理建模,該解碼器接收編碼幀(341)并產生相應的經解碼的幀(351)。通過這么做,當編碼器(340)已經使用已被存儲在經解碼幀存儲區(qū)域(360)中的經解碼的幀(369)時,解碼處理仿真器(350)還使用來自存儲區(qū)域(360)的經解碼的幀(369)作為解碼處理的一部分。主編碼器可指導或執(zhí)行解碼過程仿真器(350)的至少一些高級操作,而另一些操作由加速器執(zhí)行。
[0064]經解碼幀臨時存儲器存儲區(qū)域(360)包括多個幀緩沖存儲區(qū)域(361,362,...,36η)。以與MMC0/RPS信息(342)相一致的方式,解碼處理仿真器(350)(例如,通過主編碼器)管理存儲區(qū)域(360)中的內容,以便標識出具有編碼器(340)不再需要將其用作參考幀的幀的任何幀緩沖區(qū)(361、362等)。在對解碼處理進行建模之后,解碼處理仿真器(350)在幀緩沖區(qū)(361、362等)中存儲已經以此方式標識出的新解碼的幀(351)。
[0065]編碼幀(341)和MMC0/RPS信息(342)被緩沖在臨時的經編碼數據區(qū)域(370)中。被聚集在經編碼數據區(qū)域(370)中的經編碼數據包含一個或多個圖片的經編碼數據作為基本經編碼視頻位流的句法的一部分。在經編碼數據區(qū)域(370)中被聚集的經編碼數據還可包括與編碼視頻數據相關的媒體元數據(例如作為一個或多個補充增強信息(“SEI”)消息或視頻可用性信息(“VUI”)消息中的一個或多個參數),該媒體元數據可由主編碼器設置。
[0066]來自臨時的經編碼數據區(qū)域(370)的經聚集的數據(371)由信道編碼器(380)處理。信道編碼器(380)可以分組化和/或復用經聚集的數據以供作為媒體流傳輸或存儲(例如根據媒體程序流或傳輸流格式,例如ITU-T H.222.0| IS0/IEC 13818-1或因特網實時傳輸協議格式(例如IETF RFC 3550)),在這種情況中,信道編碼器(380)可以添加句法元素作為媒體傳輸流的句法的一部分。或者,信道編碼器(380)可以組織經聚集的數據以供存儲成文件(例如根據媒體容器格式,諸如IS0/IEC 14496-12),在這種情況中信道編碼器(380)可添加句法元素作為媒體存儲文件的句法的一部分?;蛘?,更一般地,信道編碼器(380)可以實現一個或多個媒體系統(tǒng)復用協議或傳輸協議,在這種情況中,信道編碼器(380)可以添加句法元素作為(諸)協議的句法的一部分。信道編碼器(380)將輸出提供給信道(390),該信道(390)表示存儲、通信連接或該輸出的另一信道。信道編碼器(380)或信道(390)還可以包括例如用于前向糾錯(“FEC")編碼和模擬信號調制的其它元素(未示出)。
[0067]IV.示例視頻編碼器。
[0068]圖4a和4b是可結合其實現所描述的一些實施例的通用視頻編碼器(400)的框圖。編碼器(400)接收包括當前圖片的視頻圖片序列作為輸入視頻信號(405)并在經編碼視頻比特流(495)中產生經編碼數據作為輸出。編碼器(400)被實現為使用主編碼器來執(zhí)行一些功能而使用加速器來執(zhí)行其它功能,其中加速器包括加速器硬件和用于加速器硬件的一個或多個設備驅動程序。具體來說,主編碼器執(zhí)行編碼器(400)的至少一些高級編碼操作,而其它操作由加速器執(zhí)行。
[0069]編碼器(400)是基于塊的并使用取決于實現的塊格式。塊還可在不同的階段上被進一步細分,例如在預測、頻率變換和/或熵編碼階段。例如,在針對H.264/AVC標準的編碼的實現中,編碼器將圖片分割成包括宏塊的片。作為另一示例,在H.264/AVC實現中,圖片可以被劃分成64x64塊、32x32塊或16x16塊,這些塊進而可以被劃分成更小的樣本值塊以用于編碼和解碼——編碼器將圖片分割成CTU(CTB)、CU(CB) ,PU(PB)以及TU(TB)。
[0070]編碼器(400)使用圖片內編碼和/或圖片間編碼來壓縮圖片。編碼器(400)的許多組件被用于圖片內編碼和圖片間編碼兩者。由這些組件執(zhí)行的確切操作可取決于正壓縮的信息的類型而變化。
[0071]在示例實現中,編碼器(400)的主編碼器控制編碼的高級行為。主編碼器設置至少一些用于序列參數集(“SPS”)和圖片參數集(“PPS”)句法結構的句法元素值。對于H.264/AVC實現,主編碼器還可設置至少一些用于片頭部句法結構的句法元素值。例如,對于要被編碼的片,主編碼器控制片的RPL構造、編碼格式、圖片順序計數、圖片/片的類型(1、P或B)、當前的圖片是否是參考圖片、比特率(例如,通過QP值,或通過片或圖片的尺寸值,或通過指定序列的比特率)、熵編碼模式、去塊濾波決策、以及其它編碼行為。對于H.265/HEVC實現,主編碼器可類似地為SPS、PPS以及片頭部(此處為片的片段頭部)設置至少一些句法元素的值。編碼器(400)的加速器控制剩余的編碼決策。例如,對于H.264/AVC實現,加速器控制針對片數據(宏塊、子宏塊、分區(qū)、殘留數據單元、或其中的一部分)的編碼決策,包括針對運動估計/補償、幀內圖像估計/預測和殘差編碼的模式決策。類似地,對于H.265/HEVC實現,加速器控制針對小塊和/或片的塊(CTU的CTB、⑶的CB、PU的PB、TU的TB等)的編碼決策。
[0072]在H.265/HEVC實現中,小塊化模塊(410)可任選地將圖片分割成相同尺寸或不同尺寸的多個小塊。例如,小塊化模塊(410)沿小塊行和小塊列來拆分圖片,所述小塊行和小塊列利用圖片邊界定義在圖片內的小塊的水平和垂直邊界,其中每個小塊是矩形區(qū)域。在H.264/AVC實現或H.265/HEVC實現中,編碼器(400)將圖片分割成一個或多個片,其中每個片包括一個或多個片的片段。
[0073]通用編碼控件(420)(其在主編碼器(用于高級編碼決策)和加速器(用于低級編碼決策)之間被拆分)接收輸入視頻信號(405)的圖片以及來自編碼器(400)的各個模塊的反饋(未示出)??偟恼f來,通用編碼控件(420)將控制信號(未示出)提供給其它模塊以在編碼期間設置和改變編碼參數。具體來說,在一些示例實現中,編碼器(400)的主編碼器可作出速率控制決策,該決策被傳送給編碼器(400)的加速器。加速器可進而執(zhí)行速率-失真優(yōu)化或與由主編碼器指定的速率控制目標一致的其它決策過程。在加速器中,通用編碼控件(420)還可以評估編碼期間的與數據或狀態(tài)有關的中間結果,例如以改進運動估計或速率-失真分析。通用編碼控件(420)產生指示在編碼期間作出的判定的通用控制數據(422),使得對應的解碼器可以作出一致的判定。通用控制數據(422)被提供給頭部格式化器/熵編碼器(490) ο
[0074]如果使用圖片間預測來預測當前的圖片,運動估計器(450)(其可由加速器來實現)相對于一個或多個參考圖片估計輸入視頻信號(405)的當前圖片的采樣值的塊的運動。經解碼的圖片緩沖器(“DPB”,470)緩沖一個或多個經重構的先前編碼的圖片以供用作參考圖片。一般來說,主編碼器控制DPB(470)的內容,但實際上不訪問DPB (470)中的圖片;DPB(470)中的圖片可由加速器訪問。當使用多個參考圖片時,這多個參考圖片可以來自不同的時間方向或相同的時間方向。運動估計器(450)產生諸如MV數據、合并模式索引值(對于H.265/HEVC實現)和參考圖片選擇數據之類的輔助信息運動數據(452)。運動數據(452)被提供給頭部格式化器/熵編碼器(490)以及運動補償器(455)。
[0075]運動補償器(455)(其可由加速器來實現)將MV應用于來自DPB(470)的經重構的參考圖片。運動補償器(455)產生針對當前圖片的經運動補償的預測。
[0076]在編碼器(400)內的分開的路徑中,圖片內估計器(440)(其可由加速器來實現)確定如何執(zhí)行對輸入視頻信號(405)的當前圖片的樣本值塊的圖片內預測。當前圖片可全部或部分使用圖片內編碼來編碼。對于空間內預測,使用當前圖片的重構(438)的值,圖片內估計器(440)確定如何從當前圖片的鄰近的、先前重構的樣本值中空間地預測當前圖片的當前塊的樣本值。圖片內估計器(440)產生諸如(圖片內空間預測的)預測模式方向之類的輔助信息幀內預測數據(442)。圖片內預測數據(442)被提供給頭部格式化器/熵編碼器(490)以及圖片內預測器(445)。
[0077]根據幀內預測數據(442),可由加速器實現的圖片內預測器(445)從當前圖片的相鄰的、先前重構的樣本值中空間地預測當前圖片中的當前塊的樣本值。
[0078]幀內/幀間切換(其可由加速器來實現)選擇針對給定塊的預測(458)將是經運動補償的預測還是圖片內預測。預測(458)的塊和輸入視頻信號(405)的原始當前圖片的對應部分之間的差異(如果有的話)提供殘留值(418)。在當前圖片的重構期間,經重構的殘留值與預測(458)組合來從視頻信號(405)中產生對原始內容的近似或準確重構(438)。(在有損壓縮中,一些信息從視頻信號(405)中丟失。)
[0079]在變換器/縮放器/量化器(430)(其可由加速器來實現)中,頻率變換器將空間域視頻數據轉換為頻域(即頻譜、變換)數據。對于基于塊的視頻編碼,頻率變換器將離散余弦變換、其整數近似、或另一類型的前向塊變換應用于預測殘留數據的塊(或者在預測(458)為空的情況下,應用于樣本值數據),從而產生頻率變換系數的塊。編碼器(400)可能還能夠指示這樣的變換步驟被省略了。縮放器/量化器對變換系數進行縮放和量化。例如,量化器用量化步驟尺寸將死區(qū)標量量化應用于頻域數據,該量化步驟尺寸在逐圖片的基礎上、逐小塊的基礎上、逐片的基礎上、逐塊的基礎上、因頻率而異的基礎上或在其它基礎上變化。。經量化的變換系數數據(432)被提供給頭部格式化器/熵編碼器(490)。
[0080]在縮放器/逆變換器(435)(其可由加速器來實現)中,對于非字典模式,縮放器/逆量化器對經量化的變換系數執(zhí)行逆縮放和逆量化。逆頻率變換器執(zhí)行逆頻率變換,從而產生經重構的預測殘留值或樣本值的塊。經重構的殘留值與預測(458)的值(例如,經運動補償的預測值、圖片內預測值)組合以形成重構(438)。
[0081]對于圖片內預測,重構(438)的值可以被饋送回圖片內估計器(440)和圖片內預測器(445)。同樣,重構(438)的值可以被用于對后續(xù)圖片的經運動補償的預測。重構(438)的值可被進一步濾波。對于視頻信號(405)的給定圖片,濾波控件(460)(其可由加速器來實現)確定如何對重構(438)的值執(zhí)行去塊濾波和SAO濾波。濾波控件(460)生成濾波控制數據(462),它被提供給頭部格式化器/熵編碼器(490)和合并器/(諸)濾波器(465)。
[0082]在合并器/(諸)濾波器(465)(其可由加速器來實現)中,編碼器(400)將來自不同小塊的內容合并到圖片的經重構版本中。編碼器(400)根據濾波器控制數據(462)選擇性地執(zhí)行去塊濾波和SAO濾波,以便自適應地平滑各幀中的各邊界上的間斷??商鎿Q地或另外地應用其它濾波(例如去振鈴濾波或ALF;未示出)。取決于編碼器(400)的設置,邊界可選擇性地被濾波或根本不被濾波,并且編碼器(400)可在編碼比特流內提供句法元素以指示是否應用這樣的濾波。DPB(470)緩沖經重構的當前圖片以供在后續(xù)的經運動補償的預測中使用。
[0083]頭部格式化器/熵編碼器(490)(對于較低級句法元素其可由加速器來實現而對于較高級句法元素可由主編碼器來實現(或者對于所有的句法元素可由加速器來實現))對通用控制數據(422)、經量化的變換系數數據(432)、圖片內預測數據(442)、運動數據(452)以及濾波器控制數據(462)進行格式化和/或熵編碼。例如,主編碼器控制對SPS和PPS句法結構中的句法元素的值、SEI消息和AUD、或其元素的格式化和熵編碼,而加速器控制對較低級句法結構中的句法元素(宏塊、子宏塊、分割、殘留數據單元,CTU(CTB)、CU(CB)、PU(PB)、TU(TB)等)的值的格式化和熵編碼。取決于實現,主編碼器或加速器可控制對中間層級的句法結構中的句法元素(諸如片頭部(對于H.265/HEVC實現,片的片段頭部)的值的格式化和熵編碼。頭部格式化器/熵編碼器(490)在編碼視頻位流(495)中提供經編碼數據。經編碼視頻比特流(495)的格式可以是H.265/HEVC格式、H.264/AVC格式、另一種H.26x格式、Windows媒體視頻格式、VC-x格式、MPEG-x格式、VPx格式、或其它格式。替代地,加速器執(zhí)行對由主編碼器設置的句法元素的值的格式化和熵編碼,這些值被傳遞給加速器。
[0084]取決于所需的壓縮的實現和類型,編碼器的模塊可被添加、省略、拆分成多個模塊、與其它模塊組合、和/或用相似的模塊來替代。在替換實施例中,具有不同模塊和/或其它配置的模塊的編碼器執(zhí)行一個或多個所描述的技術。編碼器的具體實施例通常使用編碼器(400)的變型或補充版本。所示的編碼器(400)內的各模塊之間的關系指示了信息在編碼器中的一般流動;為簡明起見,未示出其它關系。
[0085]V.硬件加速編碼中的創(chuàng)新
[0086]本章節(jié)描述了在用于硬件加速編碼的主編碼器的設計和使用中的創(chuàng)新。具體來說,主編碼器控制針對經編碼視頻的比特流句法的各高層的決策。例如,主編碼器可控制高級的編碼行為并為輸出比特流的序列層和圖片層(以及可能的其它層,諸如片-頭部層)設置句法元素。包括加速器硬件(并且可能包括針對加速器硬件的一個或多個設備驅動程序)的加速器隨后以與由主編碼器設置的句法元素的值一致的方式控制針對比特流句法的較低層的編碼決策。以此方式,主編碼器可在即使與來自不同供應商的跨不同硬件平臺的加速器硬件一起使用時也提供一致的表現,同時只使用少量的計算資源。
[0087]A.背景
[0088]在現代視頻編解碼標準和格式中,編碼視頻比特流是分層組織的。通常,一個序列的參數被信號化為序列頭部或序列參數集(“SPS”)句法結構。序列中的給定圖片的參數被信號化為圖片頭部或圖片參數集(“PPS”)句法結構。圖片的各部分(如小塊、片、宏塊等)的參數在圖片的越來越小的部分的比特流句法的越來越低的層處被信號化。
[0089]一般來說,更高層的句法的參數(如H.264/AVC比特流或H.265/HEVC比特流中的SPS、PPS以及片頭部、或更一般的序列層、圖片層和片頭部句法元素)消耗整個編碼視頻的比特率中的非常小的部分。例如,根據一些估計,SPS、PPS以及片頭部消耗典型的高清晰度視頻的高品質H.264/AVC比特流的大約0.01 %。(對于較低清晰度的視頻,或以較低質量編碼的視頻,該分數可能大得多。)在大多數情況下,用于序列層、圖片層和片頭部句法的句法元素值使用相對簡單的編碼模式來編碼,諸如赫夫曼編碼的變體、指數Golomb編碼或其它可變長度編碼、或固定長度編碼。因此,對序列層、圖片層和片頭部句法的句法元素的值進行編碼的計算成本是非常低的,即使在設置那些值時遵循的決策制定過程在算法上是復雜的。同時,序列層、圖片層和片頭部句法的句法元素的值往往是編碼視頻比特流中最重要的值,因為它們控制編碼(以及對應的解碼)期間的幾乎所有的高級行為。例如,對于H.264/AVC編碼和解碼,SPS、PPS和片頭部的句法元素控制RPL構造、圖片(片)類型、圖片之間的參考圖片關系、壓縮圖片大小(通過QP值)、顯示格式、編碼格式、相對于輸入和編碼順序的輸出和顯示順序、小塊和片分割、熵編碼模式、去塊濾波器使用、最小解碼延遲、錯誤恢復、以及時間層/時間層結構的數量、以及編碼和解碼的其它方面。
[0090]在原先的硬件加速視頻編碼的體系結構中,獨立硬件供應商(“IHV”)提供了公開兩個接口的主編碼器。媒體基礎變換(“MFT”)接口( “MFTransform”)包括用于管理輸入流的子例程(例如,規(guī)程、函數、成員函數、對接方法等)和用于管理輸出流的子例程。ICodecAPI接口包括用于設置各種編碼控制屬性的值的子例程和用于檢索那些編碼控制屬性的值的子例程。主編碼器被預期以與ICodecAPI接口的規(guī)格一致的方式來控制編碼,然而在其它方面,對高級行為的控制和對句法元素的值的設置被留給由IHV提供的主編碼器。這為IHV賦予了在實現主編碼器方面的自由和靈活性。然而在實踐中,對于相同的ICodecAPI設置,來自不同IHV的主編碼器可執(zhí)行導致非常不同的編碼視頻的比特流的編碼。在極端的情況下,由一個IHV提供的主編碼器可能以與ICodecAPI設置不一致的方式來編碼視頻。
[0091]例如,在ICodecAPI 設置中,C0DECAPI_A VEncVideoMaxNumRefFrame 規(guī)定編碼器所支持的最大參考幀數量。這控制了(用于參考圖片的)存儲器利用率,并且在某些實現中,可影響運動估計的復雜性。對于H.264/A VC標準,C0DECAPI_A VEncVideoMaxNumRef Frame設置映射到SPS句法元素max_num_ref_frames。雖然在簡單場景中,大多數主編碼器正確地根據C0DECAPI AVEncVideoMaxNumRefFrame設置來設置max_num_ref_frames,但是參考幀的最大數量受長期參考圖片是否被支持以及多達三層的時間擴展性是否被支持的影響。當一定數量的長期參考圖片被啟用和/或當多達三層的時間擴展性被啟用時,來自許多IHV的主編碼器不能正確地授予設置。
[0092]作為另一示例,為了控制一組圖片(“G0P”)的大小,設置C0DECAPI_AVEncMPVGOPSize的ICodecAPI規(guī)定從當前關鍵幀(開始GOP的圖片內編碼幀)到下一個關鍵幀的最大幀數(以幀為單位)。(在這一上下文中,GOP是一系列一個或多個旨在幫助隨機存取的圖片。典型地,GOP以I圖片開始。)然而,GOP的大小受具有某一數量個層的時間擴展性是否被啟用和/或B圖片編碼是否被啟用的影響。對于相同值的CODE CAP I _AVEncMPVGOPSize,來自不同IHV的主編碼器可能取決于時間擴展性和/或B圖片編碼是否被使用而表現地非常不同。
[0093]作為另一示例,一般來說,使用長期參考圖片(通過對短期參考圖片進行謹慎的選擇)促進了從網絡分組丟失中恢復。在H.264/AVC標準中,短期參考圖片的選擇和更新可使用麗CO信息、RPL重排序句法元素或滑動窗口DI3B管理來信號化。在這些選項中,使用MMCO信息的幾種方式對于網絡分組丟失而言并不穩(wěn)健。在這些使用MMCO信息的方式中,如果圖片的MM⑶信息丟失,則DPB狀態(tài)在編碼器和解碼器之間有差異,并且可保持不同步達一定時間,這阻礙了錯誤恢復。然而,一些來自IHV的主編碼器以這些對于丟失而言不穩(wěn)健的方式來使用MMCO信息。
[0094]總得來說,當高級行為在來自不同IHV的主編碼器中不同時,兼容性和一致性可能會成問題。當給定應用應用編碼器設置時,運行在具有不同加速器硬件的計算機系統(tǒng)上的主編碼器可能會產生非常不同的編碼視頻的比特流。此外,當標識出主編碼器之間的不兼容或不一致的行為時,糾正或減緩這些問題可能是資源密集且昂貴。
[0095]B.控制主編碼器的高層行為
[0096]根據本文描述的創(chuàng)新,主編碼器控制針對經編碼視頻的比特流句法的各高層的決策。在一些示例實現中,對于以高質量編碼的高清晰度視頻,主編碼器控制幾乎所有的高級行為和句法元素,而只使用少量的可用于編碼的計算資源。以此方式,主編碼器可即使在與來自不同供應商的加速器硬件一起使用時也提供一致行為。
[0097]例如,主編碼器為輸出比特流的序列層和圖片層設置句法元素(一些或全部)的值,以及為片頭部層設置句法元素(一些或全部)的值。加速器(包括加速器硬件以及針對加速器硬件的一個或多個設備驅動程序)隨后以與由主編碼器設置的句法元素的值一致的方式控制針對比特流句法的較低層的編碼決策。對于H.264/AVC標準,主編碼器可設置SPS和PPS句法結構中的句法元素的值。當編碼圖片的一個片時,主編碼器還可以設置片的片頭部的句法元素的值??偟膩碚f,由主編碼器設置的句法元素控制最高級的編碼行為,包括片的RPL構造、RPS更新、編碼格式、圖片順序計數、圖片(片)類型、當前圖片是否是參考圖片、壓縮圖片大小(通過QP值)、錯誤恢復、時間層/時間層結構的數量、片大小(以宏塊為單位)、熵編碼模式、去塊濾波器使用、以及編碼的其它方面。
[0098]在一些實現中,主編碼器對輸出H.264/AVC比特流的SPS句法結構、PPS句法結構,SEI消息,AUD(用于指示圖片邊界)以及片頭部句法結構中的句法元素的值進行編碼(格式化、熵編碼等)。對于給定的主圖片,主編碼器可以將SPS句法結構(如果有的話)、PPS句法結構(如果有的話)、SEI消息(如果有的話)、AUD(如果有的話)以及片頭部句法結構、或以上的元素寫到H.264/AVC編碼視頻的輸出緩沖區(qū)。加速器通過以與SPS、PPS和片頭部中的句法元素的值一致的方式對主圖片的片數據(宏塊、子宏塊、分割、殘留數據單元等)進行編碼(例如,針對較低層的句法執(zhí)行用于圖片內估計和預測、運動估計和補償、頻率變換、量化、以及熵編碼/格式化的操作)來繼續(xù)。加速器對輸出H.264/A VC比特流的宏塊句法結構、預測單元句法結構、殘留數據句法結構等中的句法元素的值進行編碼(格式化、熵編碼等)。加速器可將宏塊、預測單元、殘留數據單元的句法結構寫到H.264/AVC編碼視頻的輸出緩沖區(qū)來完成片和主圖片的NAL單兀。
[0099]加速器控制針對低層比特流句法的編碼決策。例如,加速器按照由主編碼器設置的SPS句法結構和PPS句法結構以及片頭部(對于H.265/HEVC實現是片的片段頭部)中的句法元素的值來控制預測模式決策、速率一失真優(yōu)化或其它決策制定過程。對于圖片間預測,加速器可在運動估計期間控制MV搜索和選擇。對于圖片間預測,加速器可控制對預測方向的選擇。不同IHV可為加速器的決策制定過程實現不同的算法設計,這促進了算法設計中的定制和創(chuàng)新。
[0100]在替代方法中,加速器具有對于編碼的更多控制。例如,主編碼器控制序列層句法和圖片層句法(諸如SPS句法結構和PPS句法結構的(一些或全部)句法元素的值)以及SEI消息和AUD,而加速器控制片頭部句法和比特流句法的較低層。例如,對于H.264/AVC編碼,這允許IHV指定加速器硬件在設置片層QP值和片類型值以及賦予對解碼圖片緩沖(“DPB”)使用的更多控制時所遵循的決策制定過程。對于給定的主圖片,主編碼器可以將SPS句法結構(如果有的話)、PPS句法結構(如果有的話)、SEI消息(如果有的話)、以及AUD(如果有的話)、或以上的元素寫到H.264/AVC編碼視頻的輸出緩沖區(qū)。加速器通過以與SPS和PPS句法結構中的句法元素的值一致的方式作出片頭部決策并對主圖片的片數據(宏塊、子宏塊、分割、殘留數據單元等)進行編碼(例如,針對較低層的句法執(zhí)行用于圖片內估計和預測、運動估計和補償、頻率變換、量化、以及熵編碼/格式化的操作)來繼續(xù)。加速器可將片頭部句法結構和宏塊、預測數據單元、殘留數據單元的句法結構寫到H.264/AVC編碼視頻的輸出緩沖區(qū)來完成片和主圖片的NAL單兀。
[0101]主編碼器可管理編碼的速率控制。例如,主編碼器可以根據基于質量的方案、恒定比特率(“CBR”)方案、可變比特率(“VBR”)方案、受約束VBR方案或不受約束比特率方案來執(zhí)行速率控制。對于兩遍式視頻編碼(其中編碼器在第一遍中評估視頻和編碼選項,隨后在第二遍中執(zhí)行編碼)或1.5遍式視頻編碼(其中編碼器預看幾幀以評估視頻和編碼選項),加速器可例如通過與用來與加速器硬件傳遞其它信息的相同的加速器接口或通過一不同接口來向主編碼器提供反饋信息。反饋信息可包括來自兩遍式編碼的第一遍或來自1.5遍式視頻編碼的預看幀的視頻的復雜度信息、質量信息和/或比特率信息。或者,反饋信息可僅僅是最后編碼的幀的比特率?目息。
[0102]除了規(guī)定較高層的句法結構的控制參數(例如,用于速率控制)和句法元素,主編碼器可為加速器提供有關輸入圖片的特性的信息。這類信息可跨位于主編碼器和加速器硬件之間的接口上提供,該接口可以是與用于與加速器硬件傳遞其它信息的相同的加速器接口和/或可以是一不同接口。例如,為了幫助加速器作出其決策,主編碼器可提供關于圖片的一個或多個感興趣區(qū)域(“R0I”)、圖片的不同部分的復雜性、噪聲類型、噪聲水平、圖片銳度、亮度采樣水平(用于加權預測)、關于可能的MV的提示等的信息??商峁㏑OI信息以指示圖片中的哪里包括面部或可能在編碼期間值得有額外的質量的其它區(qū)域。ROI信息可以被參數化,例如被參數化為針對圖片的不同區(qū)域的QP值。
[0103]根據一些示例實現,主編碼器可(向應用)公開接口,該接口包括用于設置編碼控制屬性的值的子例程和用于檢索編碼控制屬性的值的子例程。例如,接口是ICodecAPI接口或其變形。主編碼器還可公開另一接口,該接口包括用于管理輸入流的子例程和用于管理輸出流的子例程。例如,該另一接口是頂FTransf orm接口或其變形。通過這些接口中的一個或多個或以其它方式,應用可初始化主編碼器、設置輸入分辨率、輸出分辨率、目標比特率或質量、編碼配置文件、編碼級別等。該接口或另一接口還可支持在編碼過程中對某些編碼控制屬性(如分辨率、比特率)的重置,而無需重新分配所有資源,以允許對分辨率或速率的動態(tài)改變。而且,由主編碼器所公開的該接口或另一接口可支持對于加速器能力(例如,所支持的最大分辨率、所支持的編碼配置文件、所支持的編碼級別、所支持的參考圖片的最大數量、所支持的編碼格式、所支持的顏色空間等等)和/或主編碼器的預處理能力(例如,噪聲分析、臉部檢測、亮度采樣水平分析)的查詢。
[0104]在一些示例實現中,加速器可以對要編碼的圖像執(zhí)行預處理分析操作。即使高級決策可能已經由主編碼器作出,加速器仍可根據主編碼器所設置的句法元素的值來執(zhí)行場景變化檢測、復雜度分析、光流檢測或其它分析以支持加速器的智能決策。
[0105]C.用于硬件加速視頻編碼的體系結構
[0106]圖5a示出用于硬件加速編碼的通用體系結構(500)。圖5b示出用于硬件加速編碼的具體的示例結構(501)。
[0107]通用體系結構(500)包括主編碼器(520)、加速器接口(530)、加速器的一個或多個設備驅動程序(540)以及加速器的加速器硬件(550)。設備驅動程序(540)和加速器硬件(550) —同提供加速器的功能。加速器硬件(550)可以是例如一個或多個GPU或專用編碼硬件。
[0108]主編碼器(520)管理被提供的用于編碼的輸入視頻(511)。主編碼器(520)可接收并處理輸入視頻(511),隨后將輸入視頻(511)傳遞給加速器,但該步驟可能涉及大量的數據傳輸。事實上,主編碼器(520)通常管理對于輸入視頻(511)的訪問,輸入視頻(511)被緩沖在加速器可訪問的圖片緩沖器或其它存儲區(qū)域中。以此方式,輸入視頻(511)繞開主編碼器(520),主編碼器(520)通過引用加速器來傳遞輸入視頻(511)。如圖5b中所示,視頻源(510)可提供輸入視頻(511)。視頻源(510)可以是相機、調諧器卡、存儲介質、或其它數字視頻源,其生成用于編碼的視頻幀序列。在可選的包括色彩空間轉換和/或色度子采樣的預處理后,輸入視頻(511)可以是YUV 4:2:0格式、YUV 4:2:2格式、YUV 4:4:4格式或其它格式。
[0109]在圖5b所示的體系結構(501)中,應用(502)檢索和設置主編碼器的編碼控制屬性的值,并以其它方式管理編碼的某些高級方面(例如,為序列或甚至是各個圖片提供編碼提示)。應用(502)可以是例如轉碼應用、流媒體應用、相機應用、屏幕捕捉應用、或其它類型的應用。應用(502)可以通過主編碼器(520)公開的一個或多個接口(例如,ICodecAPI和/或頂FTransform接口、或其變體)與主編碼器(520)通信。
[0110]主編碼器(520)控制總的編碼并且使用一個或多個主CPU來執(zhí)行一些編碼操作。除了設置在編碼視頻(521)中的至少一些較高層的句法元素的值,主編碼器(520)還跨加速器接口(530)上將控制信息和其它數據提供給加速器硬件(550)的設備驅動程序(540)。典型地,主編碼器(520)被實現為應用軟件(如圖5b中所示)或用戶模式軟件。
[0111]針對主編碼器(520),加速器接口(530)提供了針對加速器的一致接口,無論加速器的提供者是誰。反過來,對于加速器,加速器接口(530)提供了針對主編碼器的一致接口,無論主編碼器的提供者是誰。加速器接口(530)的細節(jié)取決于實現。例如,如圖5b中所示,加速器接口(530)可作為API(529)被公開給主編碼器(520)。當主編碼器(520)調用API(529)的子例程時,一個或多個操作系統(tǒng)(“OS”)組件(531)檢查參數的有效性、調整指針、或以其它方式處理調用。類似地,與加速器相關聯的設備驅動程序(540)可通過加速器接口(530)的設備驅動程序接口( “DDI”)(532)來公開,該接口包括OS組件(531)調用的將控制信息和其它數據(按照值或按照引用)傳遞給與加速器相關聯的設備驅動程序(540)的子例程。替代地,加速器接口(530)包括主編碼器(520)以及與加速器相關聯的設備驅動程序(540)之間的單層軟件,或者加速器接口( 530)具有某種其它組織。
[0112]在一個示例交互中,主編碼器(520)用指令和數據來填充一個或多個緩沖器,隨后調用加速器接口(530)的子例程(例如,規(guī)程、函數、成員函數、接口方法等)來通過OS警告設備驅動程序(540)。在OS的可選的參數檢查、格式化、調整等之后,緩沖的指令和數據被(通過值、通過引用、或通過某種其它手段)傳遞給設備驅動程序(540),并且數據(通過值、通過引用、或通過某種其它手段)傳遞給加速器硬件(550)的存儲器,如果適當的話。在加速器硬件(550)完成編碼之后,設備驅動程序(540)通知主編碼器(520)(例如,通過用戶事件或回調)用于輸出比特流的編碼視頻在輸出緩沖器中可用。主編碼器(520)可接收并處理通過設備驅動程序(540)的來自加速器的編碼視頻,但該步驟可能涉及大量的數據傳輸。事實上, 緩沖在輸出緩沖器中的編碼視頻通常通過對主編碼器(520)的引用來傳遞。[〇113]雖然API(529)和DDI(532)的特定實現可針對一個特定0S或平臺被定制,但是在某些情況下,API(529)和/或DDI(532)可被實現用于多個不同0S或平臺。指令、控制結構、輸入視頻、編碼視頻、其它數據等可以跨API (529)、DDI (332)或系統(tǒng)中的各模塊之間的另一接口上通過值或通過引用來被傳遞、傳輸、發(fā)送等,其中使用任何可用的機制來將數據從一個實體(例如,視頻源、主編碼器、設備驅動程序層或加速器硬件)傳遞到另一實體(例如,主編碼器、設備驅動程序層、加速器硬件或容器接收點)。
[0114]為了確保在主編碼器(520)和加速器之間傳遞的數據的格式、組織和定時的一致性,加速器接口(530)的接口規(guī)范可定義用于供根據一個特定的編解碼器標準或格式進行編碼的指令和數據的協議。在寫入緩沖器或讀取緩沖器、恰當的鎖定或釋放緩沖器以避免干擾設備驅動程序(540)的操作、以及在需要時通知設備驅動程序(540)緩沖器的狀態(tài)時, 主編碼器(520)遵循所指定的約定。設備驅動程序(540)根據指定的約定來檢索緩沖的指令和數據、(用加速器硬件(550)來)執(zhí)行編碼、寫入輸出緩沖器、并根據需要通知主編碼器 (520)緩沖器的狀態(tài)。例如,加速器接口(530)可以包括用于開始對圖片編碼的子例程、用于分配緩沖器、提交緩沖器供編碼、以及釋放緩沖器的子例程、以及用于結束對圖片編碼的子例程。在調用用于開始對圖片編碼的子例程之后,主編碼器(520)根據需要調用子例程來分配輸入緩沖器、輸出緩沖器和用于控制結構的緩沖器,并將數據添加到這些緩沖器(例如, 添加SPS、PPS和片頭部句法結構到輸出緩沖器)。主編碼器(520)隨后調用子例程來根據緩沖的指令和數據發(fā)起編碼操作。當對圖片的編碼已完成時,主編碼器(520)調用子例程來結束編碼,并可調用子程序來釋放輸入緩沖器、輸出緩沖器或其它緩沖器。替換地,編碼器可逐片地、逐小塊地或者以某個其它的基礎來調用子例程來開始編碼、分配緩沖器、傳遞數據、發(fā)起編碼等。
[0115]從用于傳遞指令和數據的數據結構上來看,針對特定的標準或格式的接口規(guī)范被適配于該標準/格式的特定比特流句法和語義。數據結構可對于不同的編解碼器標準或格式是不同的,即使底層的通過加速器接口(530)的調用模式是相同的。在一些示例實現中, 加速器接口(530)是可擴展的一一可以添加新的能力同時保持向后兼容性。
[0116]取決于實現,用于輸入視頻(511)的輸入緩沖器的存儲器、用于編碼視頻(521)的輸出緩沖器以及用于控制結構的緩沖器可以從系統(tǒng)存儲器或從視頻存儲器中分配。不同的設備驅動程序可使用不同類型的存儲器。
[0117]在一些實現中,主編碼器(520)在編碼期間管理存儲器使用。主編碼器(520)控制 DPB的內容、控制緩沖器的創(chuàng)建、重用和釋放、以及控制參考圖片使用。主編碼器(520)還將 SPS句法結構、PPS句法結構、SEI消息、AUD、片頭部(對于H.265/HEVC實現是片的片段頭部)、 或其元素,以及由主編碼器(520)設置的其它句法元素的值寫入到輸出緩沖區(qū)。主編碼器 (520)可使用各種追蹤結構(例如,隊列)來管理存儲器。在其它實現中,設備驅動程序(540) 在編碼期間管理存儲器使用的至少一些方面。例如,設備驅動程序(540)控制緩沖器的創(chuàng)建、重用和釋放。在這種情況下,在主編碼器后(520)設置了 SPS句法結構、PPS句法結構、SEI 消息、AUD、片頭部(例如,片的片段標題)等的句法元素值之后,主編碼器(520)將該值傳遞給設備驅動程序(540),設備驅動程序(540)將這些值寫入輸出緩沖器。在這種情況下,設備驅動程序(540)還可在將由主編碼器(520)設置的句法元素的值在寫入輸出緩沖器之前對它們進行熵編碼/格式化。
[0118]在圖5b中,設備驅動程序(540)被拆分成一個或多個用戶模式設備驅動程序(542)和一個或多個內核模式設備驅動程序(544)。例如,用戶模式設備驅動程序(542)可包括由IHV提供的用戶模式設備驅動程序,其通過加速器接口(530)來調用,以及由OS提供的用戶模式設備驅動程序,其由IHV提供的用戶模式設備驅動程序來調用。類似地,內核模式設備驅動程序(544)可包括由OS提供的內核模式設備驅動程序(該驅動程序與OS提供的用戶模式設備驅動程序通信)以及由IHV提供的內核模式設備驅動程序,其直接控制加速器硬件(550)。替代地,對于另一個OS結構體系,設備驅動程序(540)只包括一個或多個內核模式設備驅動程序。
[0119]—般來說,加速器硬件(550)根據由主編碼器為較高層的句法設置的句法元素的值提供針對編解碼器的標準或格式的編碼操作。主編碼器(520)和加速器之間的編碼操作的劃分取決于實現,并且該劃分可針對不同加速配置文件而改變。例如,在一個加速配置文件中,主編碼器(520)控制管理總的編碼、管理DPB狀態(tài)、控制RPL構造、規(guī)定如何執(zhí)行參考圖像標記和重新排序、以及以其它方式管理RPS更新。主編碼器(520)選擇和編碼SPS句法結構、PPS句法結構,片頭部(例如,片的片段頭部)、SE I消息和AUD、或其元素的句法元素的值。其余的編碼功能(諸如運動估計和補償、圖片內估計和預測、頻率變換、量化以及環(huán)路濾波被卸載給加速器。熵編碼/格式化可以在主編碼器(520)和加速器之間進行拆分,這取決于正在被編碼的句法元素。或者,加速器可對由加速器設置的句法元素的值以及對由主編碼器(520)設置的并傳遞給加速器的句法元素的值執(zhí)行熵編碼/格式化。替代地,對于不同的加速配置文件,加速器代替主編碼器(520)執(zhí)行某些編碼任務,或者主編碼器(520)執(zhí)行某些原先由加速器執(zhí)行的額外任務。
[0120]如圖5b中所示,容器接收點(590)可執(zhí)行對于編碼視頻(521)的額外的格式化。例如,容器接收點(590)可以打包和/或復用編碼視頻(521)以供作為媒體流傳輸或存儲、組織編碼視頻(521)以供作為文件存儲,或者以其它方式實現一個或多個媒體系統(tǒng)復用協議或傳輸協議,如參考圖3描述的。
[0121]D.用于使用主編碼器的硬件加速編碼的技術
[0122]圖6示出用于采用主編碼器來硬件加速編碼的通用技術(600)。參考圖3或圖4a和4b描述的視頻編碼器或另一媒體編碼器執(zhí)行技術(600)。編碼器包括主編碼器以及用于加速器的加速器硬件。編碼器還可包括主編碼器和加速器硬件之間的一個或多個設備驅動程序。
[0123]主編碼器為在媒體(例如,視頻)的序列層句法和圖片層句法中的至少一個設置(610)輸出比特流的句法元素的值。例如,H.264/AVC或H.265/HEVC的輸出比特流包括指示由主編碼器為視頻的序列層句法設置的句法元素的值的至少一個SPS句法結構并且包括由主編碼器為視頻的圖片層句法設置的句法元素的值的至少一個PPS句法結構。SPS句法結構是序列層句法的句法元素的一種可能的組織。替代地,序列層句法的句法元素可以是在比特流中序列的編碼數據之前的序列頭部的一部分。PPS句法結構是圖片層句法的句法元素的一種可能的組織。替代地,圖片層句法的句法元素可以是在比特流中圖片的編碼數據之前的圖片頭部的一部分。
[0124]主編碼器還可為片頭部層句法設置輸出比特流的句法元素的值。例如,當它們是由主編碼器設置的時,H.264/AVC或H.265/HEVC的輸出比特流還可包括指示由主編碼器為片頭部層句法設置的句法元素(例如,RPL構造的句法元素)的值的片頭部句法結構(諸如 H.264/AVC的片頭部、或H.265/HEVC的片頭部)。
[0125]當主編碼器為給定句法層(例如,序列層、圖片層或片頭部層)設置句法元素的值時,主編碼器可設置該層所有的句法元素(例如,整個SPS、整個PPS、或整個片頭部)的值?;蛘?,當主編碼器為給定句法層(例如,序列層、圖片層或片頭部層)設置句法元素的值時,主編碼器可僅設置該層的一些句法元素(例如,部分SPS、部分PPS、或部分片頭部)的值,而該給定層的其余元素由加速器設置。對于由主編碼器設置的句法元素的值,主編碼器也可執(zhí)行熵編碼/格式以及將該值寫入輸出比特流。或者,對于由主編碼器設置的句法元素的值, 加速器可執(zhí)行熵編碼/格式和/或將該值寫入輸出比特流。在任一情況下,由主編碼器設置的句法元素的值被傳遞到加速器。
[0126]主編碼器還可為H.264/AVC或H.264/HEVC比特流設置一個或多個SEI消息、AUD和/ 或其它信息的句法元素的值。
[0127]對于缺乏序列層句法的比特流句法,主編碼器為圖片層句法設置句法元素的值。 或者,對于包括序列層和圖片層之間的額外句法層(例如,入口點層或G0P層)的比特流句法,除了序列層和圖片層,主編碼器還為該額外層設置句法元素的值。
[0128]返回到圖6,主編碼器還用控制參數的值來填充(620)—個或多個控制結構。例如, 控制參數包括一個或多個速率控制參數,該速率控制參數指定影響質量和/或比特率的目標或因素??刂平Y構可進一步包括指示由主編碼器或應用(例如,感興趣區(qū)域信息、復雜度信息、噪聲類型信息、噪聲水平信息和/或亮度采樣水平信息)執(zhí)行的預處理分析的結果的 fg息。
[0129]主編碼器發(fā)起(630)由包括加速器硬件的加速器執(zhí)行的對媒體的編碼。主編碼器跨位于主編碼器和加速器硬件之間的加速器接口上傳遞控制結構。這促進了加速器根據由主編碼器為序列層句法和/或圖片層句法設置的句法元素的值對編碼操作的控制。主編碼器也可指定用于媒體的幀的一個或多個的輸入緩沖器和用于輸出比特流的編碼數據(例如,包括由主編碼器設置的句法元素)的一個或多個輸出緩沖器。位于主編碼器和加速器硬件之間的加速器接口可包括主編碼器和加速器的設備驅動程序之間的API和/或DDI。例如, 加速器接口可用于與多種不同類型的加速器硬件中的任何一種的設備驅動程序一起工作, 并且加速器接口可針對多種編解碼標準或格式(如H.26x、MPEG-x,VC-x,VPx)中的任何一種與主編碼器一起工作。[〇13〇]加速器根據主編碼器設置的句法元素的參數和值來控制媒體的較低句法層(例如,宏塊、子宏塊、分割、殘留數據單元、(^、⑶^扣等彡的編碼操作肩如扇速器可以控制針對媒體的較低層句法的圖片內估計和預測操作、運動估計和補償操作、頻率變換操作、 量化操作、和熵編碼/比特流格式化操作。在加速器將句法元素的值寫入輸出比特流之后, 輸出比特流包括指示由加速器為媒體的較低層句法設置的句法元素的值的句法結構。例如,對于H.264/AVC比特流,比特流包括片數據層句法結構、預測單元句法結構、殘留數據單元句法結構等。當它們是由加速器設置的時,輸出比特流還可以包括指示由加速器為片頭部層句法設置的句法元素的值的片頭部層句法結構。
[0131]出于簡化的目的,圖6沒有示出視頻序列的編碼操作的定時。在實踐中,例如,主編碼器可以為序列層句法設置句法元素的值,隨后逐圖片地(1)設置給定圖片的圖片層句法的句法元素的值,(2)用該給定圖片的控制參數的值來填充控制結構,以及(3)使用加速器硬件來發(fā)起對該給定圖片的編碼?;蛘?,作為另一示例,主編碼器可以為序列層句法和圖片層句法設置句法元素的值,隨后逐片地(1)設置給定片的片頭部層句法的句法元素的值, (2)用該給定片的控制參數的值來填充控制結構,以及(3)使用加速器硬件來發(fā)起對該給定片的編碼,隨后對序列中的下一圖片重復。
[0132]在開始編碼之前,或者甚至在對一些編碼控制屬性進行編碼期間,主編碼器可以響應應用跨主編碼器所公開的接口上的一個或多個調用來設置編碼控制屬性的值。此外, 主編碼器可直接或間接從加速器接收反饋信息(例如,媒體的復雜度信息、質量信息和/或比特率信息)。至少部分基于該反饋信息,主編碼器可確定速率控制參數或其它參數的值。
[0133]鑒于可應用所公開的本發(fā)明的原理的許多可能的實施例,應當認識到,所示實施例僅是本發(fā)明的優(yōu)選示例,并且不應認為是限制本發(fā)明的范圍。相反,本發(fā)明的范圍由后續(xù)的權利要求來界定。我們要求作為我們的發(fā)明保護落入這些權利要求范圍和精神內的所有內容。
【主權項】
1.一個或多個存儲計算機可執(zhí)行指令的計算機可讀介質,所述計算機可執(zhí)行指令使得計算系統(tǒng)由此被編程為執(zhí)行一種方法,所述方法包括: 使用主編碼器來響應于應用跨所述主編碼器所公開的接口上作出的一個或多個調用來設置編碼控制屬性的值; 使用所述主編碼器來為媒體的序列層句法和圖片層句法中的至少一個設置輸出比特流的句法元素的值; 使用所述主編碼器來用控制參數的值填充一個或多個控制結構;以及 使用所述主編碼器來發(fā)起由包括加速器硬件的加速器執(zhí)行的對所述媒體的編碼,其中所述一個或多個控制結構通過位于所述主編碼器和所述加速器硬件之間的加速器接口來傳遞,由此促進所述加速器根據由所述主編碼器為序列層句法和圖片層句法中的至少一個設置的句法元素的值來控制編碼操作。2.如權利要求1所述的一個或多個計算機可讀介質,其特征在于,由所述加速器控制的編碼操作包括針對所述媒體的較低層句法的圖片內估計和預測操作、運動估計和補償操作、頻率變換操作、量化操作、和熵編碼//比特流格式化操作,并且其中,在編碼之后,所述輸出比特流包括: 指示由所述主編碼器為序列層句法所設置的句法元素的值的序列參數集句法結構; 指示由所述主編碼器為圖片層句法所設置的句法元素的值的圖片參數集句法結構;以及 指示由所述加速器為片數據層句法和句法的較低層所設置的句法元素的值的其它句法結構。3.如權利要求2所述的一個或多個計算機可讀介質,其特征在于,在編碼之后,所述輸出比特流還包括指示由所述加速器為片頭部層句法所設置的句法元素的值的片頭部層句法結構,由所述加速器為片頭部層句法所設置的句法元素的值包括參考圖片列表構造的句法元素的值。4.如權利要求2所述的一個或多個計算機可讀介質,其特征在于,在編碼之后,所述輸出比特流還包括指示由所述主編碼器為片頭部層句法所設置的句法元素的值的片頭部層句法結構,由所述主編碼器為片頭部層句法所設置的句法元素的值包括參考圖片列表構造的句法元素的值。5.如權利要求1所述的一個或多個計算機可讀介質,其特征在于,所述方法還包括,使用所述主編碼器來為一個或多個補充增強信息消息、訪問單元分割符和/或其它信息設置輸出比特流的句法元素的值。6.如權利要求1所述的一個或多個計算機可讀介質,其特征在于,位于所述主編碼器和所述加速器硬件之間的加速器接口包括應用程序編程接口和設備驅動程序接口,其中所述加速器接口用于與多個不同類型的加速器硬件中的任意一個加速器硬件的設備驅動程序一起工作,并且其中所述加速器接口用于針對多個編解碼器標準或格式中的任意一種與主編碼器一起工作。7.如權利要求1所述的一個或多個計算機可讀介質,其特征在于,所述方法還包括: 在所述主編碼器處接收來自所述加速器的反饋信息,其中所述反饋信息包括所述媒體的復雜度信息、質量信息以及比特率信息中的一個或多個;以及使用所述主編碼器來至少部分基于所述反饋信息來確定控制參數的值。8.如權利要求1所述的一個或多個計算機可讀介質,其特征在于,所述一個或多個控制 結構進一步包括指示預處理分析的結果的信息,所述信息包括感興趣區(qū)域信息、復雜度信 息、噪聲類型信息、噪聲水平信息以及亮度采樣水平信息中的一個或多個。9.一種用于實現主編碼器的計算系統(tǒng)中的方法,包括:使用主編碼器來為視頻的序列層句法和圖片層句法中的至少一個設置輸出比特流的 句法元素的值,其中在編碼之后,所述輸出比特流包括:指示由所述主編碼器為序列層句法所設置的句法元素的值的序列參數集句法結構;以 及指示由所述主編碼器為所述視頻的圖片層句法所設置的句法元素的值的圖片參數集 句法結構;使用所述主編碼器來用控制參數的值填充一個或多個控制結構;以及使用所述主編碼器來發(fā)起由包括加速器硬件的加速器執(zhí)行的對所述視頻的編碼,其中 所述一個或多個控制結構通過位于所述主編碼器和所述加速器硬件之間的加速器接口來 傳遞,由此促進所述加速器根據由主編碼器對序列層句法和圖片層句法所設置的句法元素 的值對圖片內估計和預測操作、運動估計和補償操作、頻率變換操作、量化操作、以及至少 一些熵編碼/比特流格式化操作的控制,并且其中,在編碼后,所述輸出比特流包括指示由 所述加速器為所述視頻的片數據層句法和句法的較低層所設置的句法元素的值的其它句 法結構。10.—種包括處理器、存儲器和加速器硬件的計算系統(tǒng),其中所述計算系統(tǒng)實現被適配 成執(zhí)行一種方法的主編碼器,所述方法包括:使用主編碼器來為視頻的序列層句法和圖片層句法中的至少一個設置輸出比特流的 句法元素的值,其中在編碼之后,所述輸出比特流包括:指示由所述主編碼器為序列層句法所設置的句法元素的值的序列參數集句法結構;以 及指示由所述主編碼器為所述視頻的圖片層句法所設置的句法元素的值的圖片參數集 句法結構;使用所述主編碼器來用控制參數的值填充一個或多個控制結構;以及使用所述主編碼器來發(fā)起由包括加速器硬件的加速器執(zhí)行的對所述視頻的編碼,其中 所述一個或多個控制結構通過位于所述主編碼器和所述加速器硬件之間的加速器接口來 傳遞,由此促進所述加速器根據由主編碼器對序列層句法和圖片層句法所設置的句法元素 的值對圖片內估計和預測操作、運動估計和補償操作、頻率變換操作、量化操作、以及至少 一些熵編碼/比特流格式化操作的控制,并且其中,在編碼后,所述輸出比特流包括指示由 所述加速器為所述視頻的片數據層句法和句法的較低層所設置的句法元素的值的其它句 法結構。
【文檔編號】H04N19/146GK106031177SQ201580009316
【公開日】2016年10月12日
【申請日】2015年2月10日
【發(fā)明人】Y·吳, G·J·沙利文, S·薩德瓦尼
【申請人】微軟技術許可有限責任公司