欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于硬件加速的視頻編碼的主編碼器的制造方法

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