用于硬件加速的视频编码的主编码器的制造方法

文档序号:10664073阅读:379来源:国知局
用于硬件加速的视频编码的主编码器的制造方法
【专利摘要】通过控制针对编码视频的比特流句法的各高层的决策,主编码器即使在与来自不同供应商的跨不同硬件平台的加速器硬件一起使用时也能提供一致的行为。例如,主编码器控制高级的编码行为并为输出比特流的序列层和图片层(以及可能的其它层,诸如片头部层)设置句法元素的值,而只使用少量的计算资源。包括加速器硬件的加速器随后以与主编码器所设置的句法元素的值一致的方式来控制针对句法的较低层的编码决策,为较低层的句法设置句法元素的值,这允许加速器在作出其编码决策时有一定的灵活性。
【专利说明】用于硬件加速的视频编码的主编码器
[0001 ] 背景
[0002]工程师使用压缩(也叫做源编码(source coding或source encoding))来降低数字视频的比特率。压缩通过将视频信息转换成较低比特率的形式来降低存储和传送该信息的成本。解压(也被称为解码)从压缩的形式中重构一种版本的原始信息。“编解码器”是编码器/解码器系统。
[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)已被批准。视频编解码器标准通常定义针对编码视频比特流的句法的选项,从而详述当在编码和解码时使用特定特征时该比特流中的参数。例如,比特流被分层地组织,如针对序列的序列层参数、针对序列的图像的图像层参数、针对图片中的切的片层参数、以及针对给定图像的块的低层参数。在许多情况下,视频编解码器标准还提供关于解码器应当执行以在解码时取得一致的结果的解码操作的细节。除了编解码器标准外,各种专用编解码器格式定义针对编码视频比特流的句法的其它选项以及相应的解码操作。
[0004]虽然一些视频编码操作在该操作所使用的计算资源方面是相对简单的,但另一些视频编码操作在计算上是复杂的。例如,运动估计、频率变换、部分采样插值、环路去块滤波、颜色转换、以及视频大小调整可能需要大量的计算。这种计算复杂性可能在各种情形下是有问题的,诸如高品质编码、高比特率视频(例如,经压缩的高清晰度视频)或实时编码。
[0005]因此,一些编码器使用硬件加速来将某些计算密集型操作卸载到图形处理器或其它专用硬件。例如,在某些配置中,计算机系统包括至少一个主中央处理单元(“CPU”)以及至少一个图形处理单元(“GPU”)或专门适配用于图形处理或视频编码的其它硬件。主编码器使用主CPU来控制总的编码并使用GPU(或其它专用硬件)来执行共同需要大量计算的操作,从而实现对视频编码的加速。在典型的用于硬件加速视频编码的体系结构中,主编码器控制总的编码。主编码器通过信号将控制信息和数据发送给加速器硬件的设备驱动程序。
[0006]在一个现有的用于硬件加速视频编码的体系结构中,硬件供应商提供用于与该供应商的加速硬件一起工作的主编码器。主编码器展示接口,通过该接口,应用可规定主编码器应该如何控制编码。在许多情形下,来自不同供应商的主编码器提供与应用通过该接口规定的编码行为不一致的编码。在极端情况下,应用可能与供应商提供的硬件不兼容。
[0007]概述
[0008]概括来说,详细的描述呈现了在用于硬件加速编码的主编码器的设计和使用中的创新。通过控制针对编码媒体的比特流句法的高层的决策,主编码器即使在与来自不同供应商的跨不同硬件平台的加速器硬件一起使用时也能提供一致的行为。
[0009]主编码器为媒体的序列层句法和图片层句法中的至少一个设置输出比特流的句法元素的值。例如,输出比特流包括指示由主编码器为序列层句法设置的句法元素的值的一个或多个序列参数集(“SPS”)句法结构以及由主编码器为图片层句法设置的句法元素的值的一个或多个图片参数集(“PPS”)句法结构。主编码器还可为片头部层句法设置输出比特流的句法元素的值。例如,当主编码器为片头部层句法设置输出比特流的句法元素的值时,输出比特流包括由主编码器为片头部层句法设置的句法元素的值的片头部句法结构 (诸如参考图片列表信息或参考图片集信息)。当主编码器为句法的给定层(例如,序列层、 图片层或片头部层)设置句法元素的值时,它可设置该层所有的句法元素的值或该层的仅一些句法元素的值。主编码器也可为一个或多个补充增强信息(“SEI”)消息、用于指示图片边界的访问单元分隔符(“AUD”)、和/或其它信息设置输出比特流的句法元素的值。主编码器可以对由主编码器设置的句法元素的值进行熵编码/格式化,或者它可以将该值传递给加速器来进行熵编码/格式化。主编码器可以将由主编码器设置的句法元素的值写到输出比特流,或者它可以将该值传递给加速器来写到输出比特流。
[0010]主编码器还用控制参数的值来填充一个或多个控制结构。控制参数可包括一个或多个速率控制参数,该速率控制参数指定影响质量和/或比特率的目标或因素。主编码器可 (直接或间接地)从加速器接收反馈信息(例如,媒体的复杂度信息、质量信息和/或比特率信息)并至少部分基于该反馈信息来确定控制参数的值。其它控制结构可包括指示预处理分析的结果的信息(例如,感兴趣区域信息、复杂度信息、噪声类型信息、噪声水平信息和/ 或亮度采样水平信息),这可帮助加速器作出一些编码决策。
[0011]主编码器发起由包括加速器硬件的加速器执行的对媒体的编码,跨越位于主编码器和加速器硬件之间的加速器接口传递控制结构。这促进了加速器根据由主编码器为序列层句法和图片层句法(以及可能的片头部层句法)中的至少一个设置的句法元素的值对编码操作的控制。例如,由加速器控制的编码操作可包括针对媒体的(至少对于片数据的较低层级的句法,诸如宏块、子宏块、分区、残留数据单元、编码树单元、编码单元、预测单元、变换单元、或其部分)的图片内估计和预测操作、运动估计和补偿操作、频率变换操作、量化操作、和熵编码/格式化操作。位于主编码器和加速器硬件之间的加速器接口可包括主编码器和一个或多个设备驱动程序之间的应用程序编程接口( “API”)和设备驱动程序接口 (“DDI”)。例如,加速器接口可用于与多种不同类型的加速器硬件中的任何一种的设备驱动程序一起工作,并且加速器接口可针对多种编解码标准或格式中的任何一种与主编码器一起工作。
[0012]加速器根据主编码器设置的句法元素的参数和值来执行媒体的较低句法层(例如,宏块、子宏块、分区、残留数据单元、编码树单元、编码单元、预测单元、变换单元、或其部分)的编码操作。在编码之后,输出比特流包括指示由所述加速器为媒体的片数据层句法和比特流句法的较低层所设置的句法元素的值的句法结构。此外,如果加速器为片头部层句法设置了输出比特流的句法元素的值,输出比特流包括由加速器为片头部层句法设置的句法元素的值的片头部句法结构。
[0013]在开始编码之前(或者甚至在对一些编码控制属性进行编码期间),主编码器可以根据应用跨主编码器所公开的接口上的一个或多个调用来设置编码控制属性的值。主编码器公开的接口可包括用于设置各种编码控制属性的值的子例程(例如,规程、函数、成员函数、对接方法等)和用于检索那些编码控制属性的值的子例程。主编码器还可公开另一接口,该接口包括用于管理输入流的子例程和用于管理输出流的子例程。
[0014]参考附图阅读以下详细描述,将更清楚本发明的前述和其它目标、特征和优点。
[0015]附图简述
[0016]图1是其中可实现所描述的一些实施例的示例计算系统的示图。
[0017]图2a和2b是其中可实现所描述的一些实施例的示例网络环境的示图。
[0018]图3是结合其可实现所描述的一些实施例的示例编码器系统的示图。
[0019]图4a和4b是示出结合其可实现所描述的一些实施例的示例视频编码器的示图。
[0020]图5a和5b是示出其中可实现一些所描述的实施例的用于硬件加速视频编码的体系结构的示图。
[0021]图6是示出包括用于通过主编码器来进行硬件加速视频编码的一般化技术的流程图。
[0022]详细描述
[0023]详细的描述呈现了在用于硬件加速视频编码的主编码器的设计和使用中的创新。具体来说,通过控制针对编码视频的比特流句法的各高层的决策,主编码器即使在与来自不同供应商的加速器硬件一起使用时也能提供一致的行为。例如,主编码器可控制高级的编码行为并为输出比特流的序列层和图片层(以及可能的其它层,诸如片-头部层)设置句法元素,而只使用少量的计算资源。包括加速器硬件(并且通常包括针对加速器硬件的一个或多个设备驱动程序)的加速器随后以与由主编码器设置的句法元素的值一致的方式控制针对比特流句法的较低层的编码决策(例如,针对图片内估计和预测、运动估计和补偿、频率变换、量化、和至少一些熵编码/格式化)。
[0024]虽然本文中描述的操作是被适当描述为由视频编码器来执行,但在许多情况中,这些操作可由另一类型的媒体处理工具(例如图像编码器或其它数据编码器)来执行。
[0025]本文中描述的一些创新是参考专用于H.264/AVC标准或H.265/HEVC标准的句法元素和操作来示出的。本文中描述的各创新还可以被实现为用于其它标准或格式的硬件加速编码。例如,本文所描述的创新可被用来提供针对VPx、SMPTE 421M或另一种当前或未来的格式的硬件加速编码。
[0026]在本文描述的一些示例中,硬件加速编码一般遵循针对H.264/AVC的DirectX视频加速(“DXVA”)的方案,重新使用调用模式、基本数据流、数据结构等,或扩展这类调用模式、基本数据流、数据结构等。替代地,本文所描述的创新被实现用于根据主编码器和加速器之间的加速器接口的另一种规范的硬件加速编码。
[0027]更一般地,本文中描述的各示例的各种替代是可能的。例如,通过改变流程图所示出的阶段的顺序,通过拆分、重复或省略某些阶段等等,可以改变参考流程图所描述的某些技术。所公开的技术的各方面能够被组合地或分开地使用。不同的实施例使用所描述的创新中的一个或多个。本文中描述的一些创新解决了背景中指出的一个或多个问题。通常,所给出的技术/工具并不解决所有这些问题。
[0028]1.示例计算系统
[0029]图1示出了其中可实现所描述的若干创新的合适计算系统(100)的概括示例。计算系统(100)并不旨对使用范围或功能提出任何限制,因为这些创新可以在不同的通用或专用计算系统中实现。
[0030]参考图1,计算系统(100)包括一个或多个处理单元(I 10、115)和存储器(120、125)。处理单元(I 10、115)执行计算机可执行指令。处理单元可以是通用中央处理单元(“CPU”)、专用集成电路(“ASIC”)中的处理器或任何其它类型的处理器。在多处理系统中, 多个处理单元执行计算机可执行指令以提高处理能力。例如,图1示出CPU(llO)以及图形处理单元或协处理单元(115)。有形存储器(120、125)可以是易失性存储器(例如,寄存器、高速缓存、RAM )、非易失性存储器(例如,ROM、EEPR0M、闪存等)或两者的某种组合,可通过(诸) 处理单元存取。存储器(120,125)存储实现设计和使用用于硬件加速的视频编码的主编码器的一个或多个创新的软件(180),该软件是计算机可执行指令的形式。
[0031]计算系统可具有附加的特征。例如,计算系统(100)包括存储(140)、一个或多个输入设备(150)、一个或多个输出设备(160)以及一个或多个通信连接(170)。诸如总线、控制器或网络之类的互连机制(未示出)将计算系统(100)的各组件互连。通常,操作系统软件 (未示出)为在计算系统(100)中执行的其它软件提供操作环境,并协调计算系统(100)的各组件的活动。[〇〇32] 有形存储(140)可以是可移动或不可移动的,并包括磁盘、磁带或磁带盒、⑶-R0M、 DVD或可用于储存信息并可在计算系统(100)内访问的任何其它介质。存储(140)存储实现设计和使用用于硬件加速的视频编码的主编码器的一个或多个创新的软件(180)的指令。 [〇〇33](诸)输入设备(150)可以是触摸输入设备(诸如键盘、鼠标、笔或跟踪球)、语音输入设备、扫描设备或向计算系统(100)提供输入的另一设备。对于视频,(诸)输入设备(150) 可以是相机、视频卡、TV调谐卡、或接受模拟或数字形式的视频输入的类似设备、或将视频样本读到计算系统(100)中的⑶-ROM或⑶-RW。(诸)输出设备(160)可以是显示器、打印机、 扬声器、CD刻录机或提供来自计算系统(100)的输出的另一设备。
[0034](诸)通信连接(170)允许通过通信介质与另一计算实体通信。通信介质传达诸如计算机可执行指令、音频或视频输入或输出、或已调制数据信号中的其它数据之类的信息。 已调制数据信号是使其一个或多个特征以在信号中编码信息的方式设置或改变的信号。作为示例而非限制,通信介质可以使用电的、光学的、RF或其它载体。
[0035]各创新可以在计算机可读介质的一般上下文中描述。计算机可读介质是可在计算环境内访问的任何可用有形介质。作为示例而非局限,对于计算系统(1〇〇),计算机可读介质包括存储器(120、125 )、存储(140 )、和以上任意的组合。
[0036]各创新可在计算机可执行指令(诸如包括在程序模块中的在目标现实或虚拟处理器上在计算系统中执行的那些计算机可执行指令)的一般上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、库、对象、类、组件、数据结构等。如各实施例中所描述的,这些程序模块的功能可以被组合,或者在这些程序模块之间拆分。针对各程序模块的计算机可执行指令可以在本地或分布式计算系统中执行。
[0037]术语“系统”和“设备”在此被互换地使用。除非上下文明确指示,否则,术语并不暗示对计算系统或计算设备的类型的任何限制。一般说来,计算系统或计算设备可以是本地的或分布式的,并且可以包括具有实现本文中描述的功能的软件的专用硬件和/或通用硬件的任意组合。
[0038]为了陈述方便,本详细描述使用了如“确定”、“设置”和“填充”等术语来描述计算系统中的计算机操作。这些术语是对由计算机执行的操作的高级抽象,且不应与人类所执行的动作混淆。对应于这些术语的实际的计算机操作取决于实现而不同。
[0039]I1.示例网络环境
[0040]图2a和2b示出了包括视频编码器(220)和视频解码器(270)的示例网络环境(201,202)。编码器(220)和解码器(270)使用合适的通信协议通过网络(250)连接。网络(250)可包括因特网或另一计算机网络。
[0041]在图2a所示的网络环境(201)中,每个实时通信(“RTC”)工具(210)都包括用于双向通信的编码器(220)和解码器(270)两者。给定的编码器(220)可以产生符合H.265/HEVC标准、SMPTE 42IM标准、H.264/AVC标准、另一标准、或专用格式的输出,使得相应的解码器(270)接受来自编码器(220)的编码数据。双向通信可以是视频会议、视频电话呼叫或其它双方或多方通信场景的部分。虽然,图2a中的网络环境(201)包括两个实时通信工具(210),但网络环境(201)可改为包括参与多方通信的三个或更多个实时通信工具(210)。
[0042]实时通信工具(210)管理编码器(220)做出的编码。图3示出可以被包括在实时通信工具(210)中的示例编码器系统(300)。替换地,实时通信工具(210)使用另一编码器系统。实时通信工具(210)还管理解码器(270)做出的解码。
[0043]在图2b中示出的网络环境(202)中,编码工具(212)包括编码供递送给多个回放工具(214)的视频的编码器(220),此多个回放工具(214)包括解码器(270)。单向通信可被提供用于视频监视系统、web相机监视系统、远程桌面会议演示或在其中编码视频并将视频从一个位置发送到一个或多个其它位置的其它场景。虽然在图2b中的网络环境(202)包括两个回放工具(214),但该网络环境(202)可以包括更多或更少的回放工具(214)。一般来说,回放工具(214)与编码工具(212)通信以确定回放工具(214)要接收的视频流。回放工具(214)接收该流、缓冲所接收的经编码数据达合适的时间段并开始解码和回放。
[0044]图3示出可以被包括在编码工具(212)中的示例编码器系统(300)。替换地,编码工具(212)使用另一编码器系统。编码工具(212)还可以包括用于管理与一个或多个回放工具(214)的连接的服务器侧控制器逻辑。回放工具(214)还可以包括用于管理与编码工具(212)的连接的客户机侧控制器逻辑。
[0045]II 1.示例编码器系统。
[0046]图3是结合其可实现所描述的一些实施例的示例编码器系统(300)的框图。编码器系统(300)可以是能够用多种编码模式中的任一者(诸如用于实时通信的低等待时间编码模式、转码模式和用于从文件或流中产生供回放的媒体的较高等待时间编码模式)操作的通用编码工具,或它可以是适用于一种这样的编码模式的专用编码工具。编码器系统(300)可以适用于编码特定类型的内容(例如屏幕捕捉内容)。编码器系统(300)被实现为使用主编码器来执行一些功能而使用加速器来执行其它功能,其中加速器包括加速器硬件和用于加速器硬件的一个或多个设备驱动程序。总体上,编码器系统(300)从视频源(310)接收源视频帧序列(311)并产生经编码数据作为到信道(390)的输出。
[0047]视频源(310)可以是相机、调谐器卡、存储介质、或其它数字视频源。视频源(310)以例如每秒30帧的帧速率产生视频帧序列。如本文中所使用的,术语“帧”一般指代源、编码或经重构的图像数据。对于逐行扫描视频,帧是逐行扫描视频帧。对于隔行视频,在各示例实施例中,隔行视频帧可以在编码之前被去隔行。替换地,两个互补的隔行视频场可以被编码在一起作为单个视频帧或者被编码成两个经分开编码的场。除了指示逐行扫描视频帧或隔行扫描视频帧之外,术语“帧”或“图片”可以指示单个非成对的视频场、互补的成对视频场、表示在给定时间的视频对象的视频对象平面、或较大图像中的感兴趣区域。视频对象平面或区域可以是包括场景的多个对象或区域的较大图像的一部分。
[0048]抵达的源帧(311)被存储在包括多个帧缓冲器存储区域(321、322、…、32n)的源帧临时存储器存储区域(320)中。帧缓冲区(321、322等)在源帧存储区域(320)中保持一个源帧。在一个或多个源帧(311)已被存储在帧缓冲器(321,322等)中后,帧选择器(330)(其可受主编码器指示)从源帧存储区域(320)中选择一个个体源帧。帧选择器(330)选择帧以供输入到编码器(340)的次序可不同于视频源(310)产生这些帧的次序,例如某些帧的编码可以被按序延迟,从而允许一些更后面的帧被先编码并由此促成时间上向后的预测。在编码器(340)之前,编码器系统(300)可包括预处理器(未示出),该预处理器在编码之前执行对选中的帧(331)的预处理(例如滤波)。预处理功能可由主编码器提供,或者主编码器可使用加速器来执行预处理操作中的至少一些。预处理可包括将色彩空间转换成主要(例如亮度) 和次要(例如偏向红色和偏向蓝色的色度差)分量以及对编码的重采样处理(例如以减少色度分量的空间分辨率)。通常,在编码之前,视频已被转换成诸如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)(其中一些操作由主编码器执行而另一些操作由加速器执行)编码选中的帧(331)以产生编码帧(341)并且还产生存储器管理控制操作(“MMC0”)信号(342)或参考图片集(“RPS”)信息。RPS是在针对当前帧或任意后续帧的运动补偿中可用于供参考的帧集。如果当前帧不是已被编码的第一帧,则在执行其编码处理时,编码器(340)可以使用已经被存储在经解码帧的临时存储器存储区域(360)中的一个或多个先前被编码/解码的帧 (369)。这样的存储的经解码帧(369)被用作用于当前源帧(331)的内容的帧间预测的参考帧。MMC0/RPS信息(342)向解码器指示哪些经重构的帧可被用作参考帧,并且因此应该被存储在帧存储区域中。
[0050]通常,编码器(340)包括执行诸如分隔、图片内部预测估计和预测、运动估计和补偿、频率变换、量化和熵编码之类的编码任务。由编码器(340)执行的确切操作可以取决于压缩格式而变化。输出的经编码数据的格式可以是H.265/HEVC格式、H.264/AVC格式、另一种H.26x格式、Windows媒体视频格式、VC-x格式、MPEG-x格式、VPx格式、或其它格式。主编码器执行编码器(340)的至少一些高级的编码操作,但其它操作(例如,针对较低层次句法的图片内估计和预测、运动估计和补偿、频率变换、量化、以及熵编码/格式化)由加速器进行。 [〇〇51]在H.265/HEVC实现中,编码器(340)可以将帧分割成相同尺寸或不同尺寸的多个小块。例如,编码器(340)沿小块行和小块列来拆分帧,这些小块行和小块列利用帧边界定义在该帧内的小块的水平和垂直边界,其中每个小块是矩形区域。小块通常被用于提供并行处理的选项。在H.265/HEVC实现、H.264/AVC实现以及其它实现中,帧可以被组织成一个或多个片,其中一个片可以是整个帧或该帧的区域。片可以独立于帧中的其它片编码,这改善了错误复原性。出于编码和解码的目的,片或小块的内容被进一步分割成块或其它样本值集。
[0052]对于遵循H.264/AVC标准的句法,编码器(340)可以将帧分割成相同尺寸或不同尺寸的多个片。编码器(340)将帧(或片)的内容拆分成16x16个宏块。宏块包括被组织为4个8x8亮度块的亮度样本值和被组织为8x8色度块的相应的色度样本值。通常,宏块具有诸如帧间或帧内之类的预测模式。出于信号化预测信息(例如预测模式细节、运动向量(“MV”)信息等)和/或预测处理的目的,宏块包括一个或多个预测单元(例如,8x8的块、4x4的块,这些块可被称为用于帧内预测的分区)。宏块还具有用于残差编码/解码目的的一个或多个残留数据单元。
[0053]对于根据H.265/HEVC标准的句法来说,编码器(340)将帧(或片或小块)的内容拆分成编码树单元。编码树单元(“CTU”)包括被组织为亮度编码树块(“CTB”)的亮度样本值,并且对应的被组织为两个色度CTB的色度样本值。CTU(及其CTB)的尺寸由编码器(340)来选择,并且可例如为64x64、32x32或16x16个样本值。CTU包括一个或多个编码单元。编码单元(“CU”)具有亮度编码块(“CB”)和两个相应的色度CB。通常,CU具有诸如帧间或帧内之类的预测模式。出于信号化预测信息(例如预测模式细节、位移值等)和/或预测处理的目的,CU包括一个或多个预测单元。预测单元(“PU”)具有亮度预测块(“PB”)和两个色度PB。出于残留编码/解码的目的,CU还具有一个或多个变换单元,其中变换单元(“TU”)具有一变换块(“TB”)和两个色度TB。编码器(340)决定如何将视频分割成CTU、CU、PU、TU等。
[0054]在H.265/HEVC实现中,片可以包括单个片段(独立的片段)或被划分成多个片段(独立的片段和一个或多个从属的片段)。片段是包含在单个网络抽象层(“NAL”)单元中的、在小块扫描中连续排序的整数数目的CTU。对于独立的片段,片段头部包括适用于该独立的片段的句法元素的值。对于从属片段,截短的片段头部包括适用于该从属片段的句法元素的几个值,并且从属片段的其它句法元素的值是以解码顺序从在前的独立的片段的值中推导出来的。
[0055]如本文中所使用的,术语“±夬”可以指示宏块、预测单元、残留数据单元、或者CB、PB或TB,或者某些其它样本值集,这取决于上下文。
[0056]回到图3,编码器(340)根据来自源帧(331)中的其它、先前重构的样本值的预测来表示该帧(331)内编码的块。例如,对于块的帧内空间预测,图片内估计器估计相邻的经重构样本值到该块的外插。图片内估计器可以输出经熵编码的预测信息(例如帧内空间预测的预测模式(方向))。帧内预测预测器应用预测信息来确定帧内预测值。
[0057]编码器(340)依据来自参考帧的预测来表示源帧(331)的帧间编码的预测的块。运动估计器估计块相对于一个或多个参考帧(369)的运动。当使用多个参考帧时,这多个参考帧可来自不同的时间方向或相同的时间方向。经运动补偿的预测参考区域是(诸)参考帧中用于生成当前帧中的样本块的经运动补偿的预测值的样本区域。运动估计器输出诸如MV量信息之类的运动信息,该运动信息被熵编码。运动补偿器将MV应用于参考帧(369)以确定用于帧间预测的经运动补偿的预测值。
[0058]编码器可确定块的预测值(帧内或帧间)和相应的原始值之间的差值(如果有的话)。这些差或预测残留值将进一步使用频率变换、量化和熵编码来编码。例如,编码器(340)为图片、小块、片和/或视频中的其它部分设置量化参数(“QP”)的值,并相应地量化变换系数。编码器(340)的熵编码器压缩经量化的变换系数值以及某些辅助信息(例如MV信息、QP值、模式决策、参数选择)。典型的熵编码技术包括指数-Golomb编码、Golomb-Rice编码、算术编码、差分编码、Huffman编码、行程长度编码、可变长度到可变长度(“V2V”)编码、 可变长度到固定长度(“V2F”)编码、Lempel-ZiV( “LZ”)编码、字典编码、概率区间划分熵编码(“PIPE”)和上述编码的组合。熵编码器可针对不同种类的信息使用不同的编码技术,并可组合地应用多个技术(例如,通过应用Golomb-Rice编码,随后应用算术编码),并可从特定编码技术内的多个码表中进行选择。[〇〇59]自适应去块滤波器可以被包括在编码器(340)中的运动补偿循环内以平滑经解码的帧中的块边界行和/或列上的间断。可替换地或另外地应用其它滤波(诸如去振铃滤波、 自适应环路滤波(“ALF")或样本自适应偏移(“SA0”)滤波;未示出)作为内环路滤波操作。
[0060]由编码器(340)产生的编码数据包括针对各层比特流句法的句法元素。例如,对于根据H.264/AVC或H.265/HEVC的标准的句法,图片参数集(“PPS”)是包含了与图片相关联的句法元素的句法结构。PPS可被用于单个图片,或者PPS可被重用于序列中的多个图片。PPS 典型地与图片的编码数据分开地发送信号(例如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实现,加速器控制针对片数据(宏块、子宏块、分区、残留数据单元、或其中的一部分)的编码决策,包括针对运动估计/补偿、帧内图像估计/预测和残差编码的决策。类似地,对于H.265/HEVC实现,加速器控制针对小块和/或片内的块(CTU的CTB、CU的CB、PU的PB、TU的TB等)的编码决策。[〇〇62]在一些示例实现中,编码器(340)的主编码器可作出速率控制决策,该决策可被传递给编码器(340)的加速器。加速器可进而执行速率一失真优化或与由主编码器指定的速率控制目标一致的其它决策制定过程。加速器可将反馈信息(例如,关于编码的结果的质量和/或比特率)提供回给主编码器,供主编码器用在速率控制决策中。[〇〇63] 编码帧(341)和MMC0/RPS信息(342)(或与MMC0/RPS信息(342)等价的信息,因为在编码器(340)处已经知道各帧的依赖关系和排序结构)由解码处理仿真器(350)处理。解码处理仿真器(350)实现了解码器的一些功能,例如对任务进行解码以重构参考帧。以与MM⑶/RPS信息(342)相一致的方式,解码处理仿真器(350)确定给定的经编码帧(341)是否需要被重构并被存储以供在对要编码的后续帧的帧间预测中用作参考帧。如果编码帧(341)需要被存储,则解码处理仿真器(350)对将由解码器进行的解码处理建模,该解码器接收编码帧(341)并产生相应的经解码的帧(351)。通过这么做,当编码器(340)已经使用已被存储在经解码帧存储区域(360)中的经解码的帧(369)时,解码处理仿真器(350)还使用来自存储区域(360)的经解码的帧(369)作为解码处理的一部分。主编码器可指导或执行解码过程仿真器(350)的至少一些高级操作,而另一些操作由加速器执行。
[0064]经解码帧临时存储器存储区域(360)包括多个帧缓冲存储区域(361,362,...,36η)。以与MMC0/RPS信息(342)相一致的方式,解码处理仿真器(350)(例如,通过主编码器)管理存储区域(360)中的内容,以便标识出具有编码器(340)不再需要将其用作参考帧的帧的任何帧缓冲区(361、362等)。在对解码处理进行建模之后,解码处理仿真器(350)在帧缓冲区(361、362等)中存储已经以此方式标识出的新解码的帧(351)。
[0065]编码帧(341)和MMC0/RPS信息(342)被缓冲在临时的经编码数据区域(370)中。被聚集在经编码数据区域(370)中的经编码数据包含一个或多个图片的经编码数据作为基本经编码视频位流的句法的一部分。在经编码数据区域(370)中被聚集的经编码数据还可包括与编码视频数据相关的媒体元数据(例如作为一个或多个补充增强信息(“SEI”)消息或视频可用性信息(“VUI”)消息中的一个或多个参数),该媒体元数据可由主编码器设置。
[0066]来自临时的经编码数据区域(370)的经聚集的数据(371)由信道编码器(380)处理。信道编码器(380)可以分组化和/或复用经聚集的数据以供作为媒体流传输或存储(例如根据媒体程序流或传输流格式,例如ITU-T H.222.0| IS0/IEC 13818-1或因特网实时传输协议格式(例如IETF RFC 3550)),在这种情况中,信道编码器(380)可以添加句法元素作为媒体传输流的句法的一部分。或者,信道编码器(380)可以组织经聚集的数据以供存储成文件(例如根据媒体容器格式,诸如IS0/IEC 14496-12),在这种情况中信道编码器(380)可添加句法元素作为媒体存储文件的句法的一部分。或者,更一般地,信道编码器(380)可以实现一个或多个媒体系统复用协议或传输协议,在这种情况中,信道编码器(380)可以添加句法元素作为(诸)协议的句法的一部分。信道编码器(380)将输出提供给信道(390),该信道(390)表示存储、通信连接或该输出的另一信道。信道编码器(380)或信道(390)还可以包括例如用于前向纠错(“FEC")编码和模拟信号调制的其它元素(未示出)。
[0067]IV.示例视频编码器。
[0068]图4a和4b是可结合其实现所描述的一些实施例的通用视频编码器(400)的框图。编码器(400)接收包括当前图片的视频图片序列作为输入视频信号(405)并在经编码视频比特流(495)中产生经编码数据作为输出。编码器(400)被实现为使用主编码器来执行一些功能而使用加速器来执行其它功能,其中加速器包括加速器硬件和用于加速器硬件的一个或多个设备驱动程序。具体来说,主编码器执行编码器(400)的至少一些高级编码操作,而其它操作由加速器执行。
[0069]编码器(400)是基于块的并使用取决于实现的块格式。块还可在不同的阶段上被进一步细分,例如在预测、频率变换和/或熵编码阶段。例如,在针对H.264/AVC标准的编码的实现中,编码器将图片分割成包括宏块的片。作为另一示例,在H.264/AVC实现中,图片可以被划分成64x64块、32x32块或16x16块,这些块进而可以被划分成更小的样本值块以用于编码和解码——编码器将图片分割成CTU(CTB)、CU(CB) ,PU(PB)以及TU(TB)。
[0070]编码器(400)使用图片内编码和/或图片间编码来压缩图片。编码器(400)的许多组件被用于图片内编码和图片间编码两者。由这些组件执行的确切操作可取决于正压缩的信息的类型而变化。
[0071]在示例实现中,编码器(400)的主编码器控制编码的高级行为。主编码器设置至少一些用于序列参数集(“SPS”)和图片参数集(“PPS”)句法结构的句法元素值。对于H.264/AVC实现,主编码器还可设置至少一些用于片头部句法结构的句法元素值。例如,对于要被编码的片,主编码器控制片的RPL构造、编码格式、图片顺序计数、图片/片的类型(1、P或B)、当前的图片是否是参考图片、比特率(例如,通过QP值,或通过片或图片的尺寸值,或通过指定序列的比特率)、熵编码模式、去块滤波决策、以及其它编码行为。对于H.265/HEVC实现,主编码器可类似地为SPS、PPS以及片头部(此处为片的片段头部)设置至少一些句法元素的值。编码器(400)的加速器控制剩余的编码决策。例如,对于H.264/AVC实现,加速器控制针对片数据(宏块、子宏块、分区、残留数据单元、或其中的一部分)的编码决策,包括针对运动估计/补偿、帧内图像估计/预测和残差编码的模式决策。类似地,对于H.265/HEVC实现,加速器控制针对小块和/或片的块(CTU的CTB、⑶的CB、PU的PB、TU的TB等)的编码决策。
[0072]在H.265/HEVC实现中,小块化模块(410)可任选地将图片分割成相同尺寸或不同尺寸的多个小块。例如,小块化模块(410)沿小块行和小块列来拆分图片,所述小块行和小块列利用图片边界定义在图片内的小块的水平和垂直边界,其中每个小块是矩形区域。在H.264/AVC实现或H.265/HEVC实现中,编码器(400)将图片分割成一个或多个片,其中每个片包括一个或多个片的片段。
[0073]通用编码控件(420)(其在主编码器(用于高级编码决策)和加速器(用于低级编码决策)之间被拆分)接收输入视频信号(405)的图片以及来自编码器(400)的各个模块的反馈(未示出)。总的说来,通用编码控件(420)将控制信号(未示出)提供给其它模块以在编码期间设置和改变编码参数。具体来说,在一些示例实现中,编码器(400)的主编码器可作出速率控制决策,该决策被传送给编码器(400)的加速器。加速器可进而执行速率-失真优化或与由主编码器指定的速率控制目标一致的其它决策过程。在加速器中,通用编码控件(420)还可以评估编码期间的与数据或状态有关的中间结果,例如以改进运动估计或速率-失真分析。通用编码控件(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)(其可由加速器来实现)确定如何执行对输入视频信号(405)的当前图片的样本值块的图片内预测。当前图片可全部或部分使用图片内编码来编码。对于空间内预测,使用当前图片的重构(438)的值,图片内估计器(440)确定如何从当前图片的邻近的、先前重构的样本值中空间地预测当前图片的当前块的样本值。图片内估计器(440)产生诸如(图片内空间预测的)预测模式方向之类的辅助信息帧内预测数据(442)。图片内预测数据(442)被提供给头部格式化器/熵编码器(490)以及图片内预测器(445)。
[0077]根据帧内预测数据(442),可由加速器实现的图片内预测器(445)从当前图片的相邻的、先前重构的样本值中空间地预测当前图片中的当前块的样本值。
[0078]帧内/帧间切换(其可由加速器来实现)选择针对给定块的预测(458)将是经运动补偿的预测还是图片内预测。预测(458)的块和输入视频信号(405)的原始当前图片的对应部分之间的差异(如果有的话)提供残留值(418)。在当前图片的重构期间,经重构的残留值与预测(458)组合来从视频信号(405)中产生对原始内容的近似或准确重构(438)。(在有损压缩中,一些信息从视频信号(405)中丢失。)
[0079]在变换器/缩放器/量化器(430)(其可由加速器来实现)中,频率变换器将空间域视频数据转换为频域(即频谱、变换)数据。对于基于块的视频编码,频率变换器将离散余弦变换、其整数近似、或另一类型的前向块变换应用于预测残留数据的块(或者在预测(458)为空的情况下,应用于样本值数据),从而产生频率变换系数的块。编码器(400)可能还能够指示这样的变换步骤被省略了。缩放器/量化器对变换系数进行缩放和量化。例如,量化器用量化步骤尺寸将死区标量量化应用于频域数据,该量化步骤尺寸在逐图片的基础上、逐小块的基础上、逐片的基础上、逐块的基础上、因频率而异的基础上或在其它基础上变化。。经量化的变换系数数据(432)被提供给头部格式化器/熵编码器(490)。
[0080]在缩放器/逆变换器(435)(其可由加速器来实现)中,对于非字典模式,缩放器/逆量化器对经量化的变换系数执行逆缩放和逆量化。逆频率变换器执行逆频率变换,从而产生经重构的预测残留值或样本值的块。经重构的残留值与预测(458)的值(例如,经运动补偿的预测值、图片内预测值)组合以形成重构(438)。
[0081]对于图片内预测,重构(438)的值可以被馈送回图片内估计器(440)和图片内预测器(445)。同样,重构(438)的值可以被用于对后续图片的经运动补偿的预测。重构(438)的值可被进一步滤波。对于视频信号(405)的给定图片,滤波控件(460)(其可由加速器来实现)确定如何对重构(438)的值执行去块滤波和SAO滤波。滤波控件(460)生成滤波控制数据(462),它被提供给头部格式化器/熵编码器(490)和合并器/(诸)滤波器(465)。
[0082]在合并器/(诸)滤波器(465)(其可由加速器来实现)中,编码器(400)将来自不同小块的内容合并到图片的经重构版本中。编码器(400)根据滤波器控制数据(462)选择性地执行去块滤波和SAO滤波,以便自适应地平滑各帧中的各边界上的间断。可替换地或另外地应用其它滤波(例如去振铃滤波或ALF;未示出)。取决于编码器(400)的设置,边界可选择性地被滤波或根本不被滤波,并且编码器(400)可在编码比特流内提供句法元素以指示是否应用这样的滤波。DPB(470)缓冲经重构的当前图片以供在后续的经运动补偿的预测中使用。
[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格式、或其它格式。替代地,加速器执行对由主编码器设置的句法元素的值的格式化和熵编码,这些值被传递给加速器。
[0084]取决于所需的压缩的实现和类型,编码器的模块可被添加、省略、拆分成多个模块、与其它模块组合、和/或用相似的模块来替代。在替换实施例中,具有不同模块和/或其它配置的模块的编码器执行一个或多个所描述的技术。编码器的具体实施例通常使用编码器(400)的变型或补充版本。所示的编码器(400)内的各模块之间的关系指示了信息在编码器中的一般流动;为简明起见,未示出其它关系。
[0085]V.硬件加速编码中的创新
[0086]本章节描述了在用于硬件加速编码的主编码器的设计和使用中的创新。具体来说,主编码器控制针对经编码视频的比特流句法的各高层的决策。例如,主编码器可控制高级的编码行为并为输出比特流的序列层和图片层(以及可能的其它层,诸如片-头部层)设置句法元素。包括加速器硬件(并且可能包括针对加速器硬件的一个或多个设备驱动程序)的加速器随后以与由主编码器设置的句法元素的值一致的方式控制针对比特流句法的较低层的编码决策。以此方式,主编码器可在即使与来自不同供应商的跨不同硬件平台的加速器硬件一起使用时也提供一致的表现,同时只使用少量的计算资源。
[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”)包括用于管理输入流的子例程(例如,规程、函数、成员函数、对接方法等)和用于管理输出流的子例程。ICodecAPI接口包括用于设置各种编码控制属性的值的子例程和用于检索那些编码控制属性的值的子例程。主编码器被预期以与ICodecAPI接口的规格一致的方式来控制编码,然而在其它方面,对高级行为的控制和对句法元素的值的设置被留给由IHV提供的主编码器。这为IHV赋予了在实现主编码器方面的自由和灵活性。然而在实践中,对于相同的ICodecAPI设置,来自不同IHV的主编码器可执行导致非常不同的编码视频的比特流的编码。在极端的情况下,由一个IHV提供的主编码器可能以与ICodecAPI设置不一致的方式来编码视频。
[0091]例如,在ICodecAPI 设置中,C0DECAPI_A VEncVideoMaxNumRefFrame 规定编码器所支持的最大参考帧数量。这控制了(用于参考图片的)存储器利用率,并且在某些实现中,可影响运动估计的复杂性。对于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规定从当前关键帧(开始GOP的图片内编码帧)到下一个关键帧的最大帧数(以帧为单位)。(在这一上下文中,GOP是一系列一个或多个旨在帮助随机存取的图片。典型地,GOP以I图片开始。)然而,GOP的大小受具有某一数量个层的时间扩展性是否被启用和/或B图片编码是否被启用的影响。对于相同值的CODE CAP I _AVEncMPVGOPSize,来自不同IHV的主编码器可能取决于时间扩展性和/或B图片编码是否被使用而表现地非常不同。
[0093]作为另一示例,一般来说,使用长期参考图片(通过对短期参考图片进行谨慎的选择)促进了从网络分组丢失中恢复。在H.264/AVC标准中,短期参考图片的选择和更新可使用丽CO信息、RPL重排序句法元素或滑动窗口DI3B管理来信号化。在这些选项中,使用MMCO信息的几种方式对于网络分组丢失而言并不稳健。在这些使用MMCO信息的方式中,如果图片的MM⑶信息丢失,则DPB状态在编码器和解码器之间有差异,并且可保持不同步达一定时间,这阻碍了错误恢复。然而,一些来自IHV的主编码器以这些对于丢失而言不稳健的方式来使用MMCO信息。
[0094]总得来说,当高级行为在来自不同IHV的主编码器中不同时,兼容性和一致性可能会成问题。当给定应用应用编码器设置时,运行在具有不同加速器硬件的计算机系统上的主编码器可能会产生非常不同的编码视频的比特流。此外,当标识出主编码器之间的不兼容或不一致的行为时,纠正或减缓这些问题可能是资源密集且昂贵。
[0095]B.控制主编码器的高层行为
[0096]根据本文描述的创新,主编码器控制针对经编码视频的比特流句法的各高层的决策。在一些示例实现中,对于以高质量编码的高清晰度视频,主编码器控制几乎所有的高级行为和句法元素,而只使用少量的可用于编码的计算资源。以此方式,主编码器可即使在与来自不同供应商的加速器硬件一起使用时也提供一致行为。
[0097]例如,主编码器为输出比特流的序列层和图片层设置句法元素(一些或全部)的值,以及为片头部层设置句法元素(一些或全部)的值。加速器(包括加速器硬件以及针对加速器硬件的一个或多个设备驱动程序)随后以与由主编码器设置的句法元素的值一致的方式控制针对比特流句法的较低层的编码决策。对于H.264/AVC标准,主编码器可设置SPS和PPS句法结构中的句法元素的值。当编码图片的一个片时,主编码器还可以设置片的片头部的句法元素的值。总的来说,由主编码器设置的句法元素控制最高级的编码行为,包括片的RPL构造、RPS更新、编码格式、图片顺序计数、图片(片)类型、当前图片是否是参考图片、压缩图片大小(通过QP值)、错误恢复、时间层/时间层结构的数量、片大小(以宏块为单位)、熵编码模式、去块滤波器使用、以及编码的其它方面。
[0098]在一些实现中,主编码器对输出H.264/AVC比特流的SPS句法结构、PPS句法结构,SEI消息,AUD(用于指示图片边界)以及片头部句法结构中的句法元素的值进行编码(格式化、熵编码等)。对于给定的主图片,主编码器可以将SPS句法结构(如果有的话)、PPS句法结构(如果有的话)、SEI消息(如果有的话)、AUD(如果有的话)以及片头部句法结构、或以上的元素写到H.264/AVC编码视频的输出缓冲区。加速器通过以与SPS、PPS和片头部中的句法元素的值一致的方式对主图片的片数据(宏块、子宏块、分割、残留数据单元等)进行编码(例如,针对较低层的句法执行用于图片内估计和预测、运动估计和补偿、频率变换、量化、以及熵编码/格式化的操作)来继续。加速器对输出H.264/A VC比特流的宏块句法结构、预测单元句法结构、残留数据句法结构等中的句法元素的值进行编码(格式化、熵编码等)。加速器可将宏块、预测单元、残留数据单元的句法结构写到H.264/AVC编码视频的输出缓冲区来完成片和主图片的NAL单兀。
[0099]加速器控制针对低层比特流句法的编码决策。例如,加速器按照由主编码器设置的SPS句法结构和PPS句法结构以及片头部(对于H.265/HEVC实现是片的片段头部)中的句法元素的值来控制预测模式决策、速率一失真优化或其它决策制定过程。对于图片间预测,加速器可在运动估计期间控制MV搜索和选择。对于图片间预测,加速器可控制对预测方向的选择。不同IHV可为加速器的决策制定过程实现不同的算法设计,这促进了算法设计中的定制和创新。
[0100]在替代方法中,加速器具有对于编码的更多控制。例如,主编码器控制序列层句法和图片层句法(诸如SPS句法结构和PPS句法结构的(一些或全部)句法元素的值)以及SEI消息和AUD,而加速器控制片头部句法和比特流句法的较低层。例如,对于H.264/AVC编码,这允许IHV指定加速器硬件在设置片层QP值和片类型值以及赋予对解码图片缓冲(“DPB”)使用的更多控制时所遵循的决策制定过程。对于给定的主图片,主编码器可以将SPS句法结构(如果有的话)、PPS句法结构(如果有的话)、SEI消息(如果有的话)、以及AUD(如果有的话)、或以上的元素写到H.264/AVC编码视频的输出缓冲区。加速器通过以与SPS和PPS句法结构中的句法元素的值一致的方式作出片头部决策并对主图片的片数据(宏块、子宏块、分割、残留数据单元等)进行编码(例如,针对较低层的句法执行用于图片内估计和预测、运动估计和补偿、频率变换、量化、以及熵编码/格式化的操作)来继续。加速器可将片头部句法结构和宏块、预测数据单元、残留数据单元的句法结构写到H.264/AVC编码视频的输出缓冲区来完成片和主图片的NAL单兀。
[0101]主编码器可管理编码的速率控制。例如,主编码器可以根据基于质量的方案、恒定比特率(“CBR”)方案、可变比特率(“VBR”)方案、受约束VBR方案或不受约束比特率方案来执行速率控制。对于两遍式视频编码(其中编码器在第一遍中评估视频和编码选项,随后在第二遍中执行编码)或1.5遍式视频编码(其中编码器预看几帧以评估视频和编码选项),加速器可例如通过与用来与加速器硬件传递其它信息的相同的加速器接口或通过一不同接口来向主编码器提供反馈信息。反馈信息可包括来自两遍式编码的第一遍或来自1.5遍式视频编码的预看帧的视频的复杂度信息、质量信息和/或比特率信息。或者,反馈信息可仅仅是最后编码的帧的比特率?目息。
[0102]除了规定较高层的句法结构的控制参数(例如,用于速率控制)和句法元素,主编码器可为加速器提供有关输入图片的特性的信息。这类信息可跨位于主编码器和加速器硬件之间的接口上提供,该接口可以是与用于与加速器硬件传递其它信息的相同的加速器接口和/或可以是一不同接口。例如,为了帮助加速器作出其决策,主编码器可提供关于图片的一个或多个感兴趣区域(“R0I”)、图片的不同部分的复杂性、噪声类型、噪声水平、图片锐度、亮度采样水平(用于加权预测)、关于可能的MV的提示等的信息。可提供ROI信息以指示图片中的哪里包括面部或可能在编码期间值得有额外的质量的其它区域。ROI信息可以被参数化,例如被参数化为针对图片的不同区域的QP值。
[0103]根据一些示例实现,主编码器可(向应用)公开接口,该接口包括用于设置编码控制属性的值的子例程和用于检索编码控制属性的值的子例程。例如,接口是ICodecAPI接口或其变形。主编码器还可公开另一接口,该接口包括用于管理输入流的子例程和用于管理输出流的子例程。例如,该另一接口是頂FTransf orm接口或其变形。通过这些接口中的一个或多个或以其它方式,应用可初始化主编码器、设置输入分辨率、输出分辨率、目标比特率或质量、编码配置文件、编码级别等。该接口或另一接口还可支持在编码过程中对某些编码控制属性(如分辨率、比特率)的重置,而无需重新分配所有资源,以允许对分辨率或速率的动态改变。而且,由主编码器所公开的该接口或另一接口可支持对于加速器能力(例如,所支持的最大分辨率、所支持的编码配置文件、所支持的编码级别、所支持的参考图片的最大数量、所支持的编码格式、所支持的颜色空间等等)和/或主编码器的预处理能力(例如,噪声分析、脸部检测、亮度采样水平分析)的查询。
[0104]在一些示例实现中,加速器可以对要编码的图像执行预处理分析操作。即使高级决策可能已经由主编码器作出,加速器仍可根据主编码器所设置的句法元素的值来执行场景变化检测、复杂度分析、光流检测或其它分析以支持加速器的智能决策。
[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)被缓冲在加速器可访问的图片缓冲器或其它存储区域中。以此方式,输入视频(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来执行一些编码操作。除了设置在编码视频(521)中的至少一些较高层的句法元素的值,主编码器(520)还跨加速器接口(530)上将控制信息和其它数据提供给加速器硬件(550)的设备驱动程序(540)。典型地,主编码器(520)被实现为应用软件(如图5b中所示)或用户模式软件。
[0111]针对主编码器(520),加速器接口(530)提供了针对加速器的一致接口,无论加速器的提供者是谁。反过来,对于加速器,加速器接口(530)提供了针对主编码器的一致接口,无论主编码器的提供者是谁。加速器接口(530)的细节取决于实现。例如,如图5b中所示,加速器接口(530)可作为API(529)被公开给主编码器(520)。当主编码器(520)调用API(529)的子例程时,一个或多个操作系统(“OS”)组件(531)检查参数的有效性、调整指针、或以其它方式处理调用。类似地,与加速器相关联的设备驱动程序(540)可通过加速器接口(530)的设备驱动程序接口( “DDI”)(532)来公开,该接口包括OS组件(531)调用的将控制信息和其它数据(按照值或按照引用)传递给与加速器相关联的设备驱动程序(540)的子例程。替代地,加速器接口(530)包括主编码器(520)以及与加速器相关联的设备驱动程序(540)之间的单层软件,或者加速器接口( 530)具有某种其它组织。
[0112]在一个示例交互中,主编码器(520)用指令和数据来填充一个或多个缓冲器,随后调用加速器接口(530)的子例程(例如,规程、函数、成员函数、接口方法等)来通过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)或系统中的各模块之间的另一接口上通过值或通过引用来被传递、传输、发送等,其中使用任何可用的机制来将数据从一个实体(例如,视频源、主编码器、设备驱动程序层或加速器硬件)传递到另一实体(例如,主编码器、设备驱动程序层、加速器硬件或容器接收点)。
[0114]为了确保在主编码器(520)和加速器之间传递的数据的格式、组织和定时的一致性,加速器接口(530)的接口规范可定义用于供根据一个特定的编解码器标准或格式进行编码的指令和数据的协议。在写入缓冲器或读取缓冲器、恰当的锁定或释放缓冲器以避免干扰设备驱动程序(540)的操作、以及在需要时通知设备驱动程序(540)缓冲器的状态时, 主编码器(520)遵循所指定的约定。设备驱动程序(540)根据指定的约定来检索缓冲的指令和数据、(用加速器硬件(550)来)执行编码、写入输出缓冲器、并根据需要通知主编码器 (520)缓冲器的状态。例如,加速器接口(530)可以包括用于开始对图片编码的子例程、用于分配缓冲器、提交缓冲器供编码、以及释放缓冲器的子例程、以及用于结束对图片编码的子例程。在调用用于开始对图片编码的子例程之后,主编码器(520)根据需要调用子例程来分配输入缓冲器、输出缓冲器和用于控制结构的缓冲器,并将数据添加到这些缓冲器(例如, 添加SPS、PPS和片头部句法结构到输出缓冲器)。主编码器(520)随后调用子例程来根据缓冲的指令和数据发起编码操作。当对图片的编码已完成时,主编码器(520)调用子例程来结束编码,并可调用子程序来释放输入缓冲器、输出缓冲器或其它缓冲器。替换地,编码器可逐片地、逐小块地或者以某个其它的基础来调用子例程来开始编码、分配缓冲器、传递数据、发起编码等。
[0115]从用于传递指令和数据的数据结构上来看,针对特定的标准或格式的接口规范被适配于该标准/格式的特定比特流句法和语义。数据结构可对于不同的编解码器标准或格式是不同的,即使底层的通过加速器接口(530)的调用模式是相同的。在一些示例实现中, 加速器接口(530)是可扩展的一一可以添加新的能力同时保持向后兼容性。
[0116]取决于实现,用于输入视频(511)的输入缓冲器的存储器、用于编码视频(521)的输出缓冲器以及用于控制结构的缓冲器可以从系统存储器或从视频存储器中分配。不同的设备驱动程序可使用不同类型的存储器。
[0117]在一些实现中,主编码器(520)在编码期间管理存储器使用。主编码器(520)控制 DPB的内容、控制缓冲器的创建、重用和释放、以及控制参考图片使用。主编码器(520)还将 SPS句法结构、PPS句法结构、SEI消息、AUD、片头部(对于H.265/HEVC实现是片的片段头部)、 或其元素,以及由主编码器(520)设置的其它句法元素的值写入到输出缓冲区。主编码器 (520)可使用各种追踪结构(例如,队列)来管理存储器。在其它实现中,设备驱动程序(540) 在编码期间管理存储器使用的至少一些方面。例如,设备驱动程序(540)控制缓冲器的创建、重用和释放。在这种情况下,在主编码器后(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状态、控制RPL构造、规定如何执行参考图像标记和重新排序、以及以其它方式管理RPS更新。主编码器(520)选择和编码SPS句法结构、PPS句法结构,片头部(例如,片的片段头部)、SE I消息和AUD、或其元素的句法元素的值。其余的编码功能(诸如运动估计和补偿、图片内估计和预测、频率变换、量化以及环路滤波被卸载给加速器。熵编码/格式化可以在主编码器(520)和加速器之间进行拆分,这取决于正在被编码的句法元素。或者,加速器可对由加速器设置的句法元素的值以及对由主编码器(520)设置的并传递给加速器的句法元素的值执行熵编码/格式化。替代地,对于不同的加速配置文件,加速器代替主编码器(520)执行某些编码任务,或者主编码器(520)执行某些原先由加速器执行的额外任务。
[0120]如图5b中所示,容器接收点(590)可执行对于编码视频(521)的额外的格式化。例如,容器接收点(590)可以打包和/或复用编码视频(521)以供作为媒体流传输或存储、组织编码视频(521)以供作为文件存储,或者以其它方式实现一个或多个媒体系统复用协议或传输协议,如参考图3描述的。
[0121]D.用于使用主编码器的硬件加速编码的技术
[0122]图6示出用于采用主编码器来硬件加速编码的通用技术(600)。参考图3或图4a和4b描述的视频编码器或另一媒体编码器执行技术(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、或部分片头部)的值,而该给定层的其余元素由加速器设置。对于由主编码器设置的句法元素的值,主编码器也可执行熵编码/格式以及将该值写入输出比特流。或者,对于由主编码器设置的句法元素的值, 加速器可执行熵编码/格式和/或将该值写入输出比特流。在任一情况下,由主编码器设置的句法元素的值被传递到加速器。
[0126]主编码器还可为H.264/AVC或H.264/HEVC比特流设置一个或多个SEI消息、AUD和/ 或其它信息的句法元素的值。
[0127]对于缺乏序列层句法的比特流句法,主编码器为图片层句法设置句法元素的值。 或者,对于包括序列层和图片层之间的额外句法层(例如,入口点层或G0P层)的比特流句法,除了序列层和图片层,主编码器还为该额外层设置句法元素的值。
[0128]返回到图6,主编码器还用控制参数的值来填充(620)—个或多个控制结构。例如, 控制参数包括一个或多个速率控制参数,该速率控制参数指定影响质量和/或比特率的目标或因素。控制结构可进一步包括指示由主编码器或应用(例如,感兴趣区域信息、复杂度信息、噪声类型信息、噪声水平信息和/或亮度采样水平信息)执行的预处理分析的结果的 fg息。
[0129]主编码器发起(630)由包括加速器硬件的加速器执行的对媒体的编码。主编码器跨位于主编码器和加速器硬件之间的加速器接口上传递控制结构。这促进了加速器根据由主编码器为序列层句法和/或图片层句法设置的句法元素的值对编码操作的控制。主编码器也可指定用于媒体的帧的一个或多个的输入缓冲器和用于输出比特流的编码数据(例如,包括由主编码器设置的句法元素)的一个或多个输出缓冲器。位于主编码器和加速器硬件之间的加速器接口可包括主编码器和加速器的设备驱动程序之间的API和/或DDI。例如, 加速器接口可用于与多种不同类型的加速器硬件中的任何一种的设备驱动程序一起工作, 并且加速器接口可针对多种编解码标准或格式(如H.26x、MPEG-x,VC-x,VPx)中的任何一种与主编码器一起工作。[〇13〇]加速器根据主编码器设置的句法元素的参数和值来控制媒体的较低句法层(例如,宏块、子宏块、分割、残留数据单元、(^、⑶^扣等彡的编码操作肩如扇速器可以控制针对媒体的较低层句法的图片内估计和预测操作、运动估计和补偿操作、频率变换操作、 量化操作、和熵编码/比特流格式化操作。在加速器将句法元素的值写入输出比特流之后, 输出比特流包括指示由加速器为媒体的较低层句法设置的句法元素的值的句法结构。例如,对于H.264/AVC比特流,比特流包括片数据层句法结构、预测单元句法结构、残留数据单元句法结构等。当它们是由加速器设置的时,输出比特流还可以包括指示由加速器为片头部层句法设置的句法元素的值的片头部层句法结构。
[0131]出于简化的目的,图6没有示出视频序列的编码操作的定时。在实践中,例如,主编码器可以为序列层句法设置句法元素的值,随后逐图片地(1)设置给定图片的图片层句法的句法元素的值,(2)用该给定图片的控制参数的值来填充控制结构,以及(3)使用加速器硬件来发起对该给定图片的编码。或者,作为另一示例,主编码器可以为序列层句法和图片层句法设置句法元素的值,随后逐片地(1)设置给定片的片头部层句法的句法元素的值, (2)用该给定片的控制参数的值来填充控制结构,以及(3)使用加速器硬件来发起对该给定片的编码,随后对序列中的下一图片重复。
[0132]在开始编码之前,或者甚至在对一些编码控制属性进行编码期间,主编码器可以响应应用跨主编码器所公开的接口上的一个或多个调用来设置编码控制属性的值。此外, 主编码器可直接或间接从加速器接收反馈信息(例如,媒体的复杂度信息、质量信息和/或比特率信息)。至少部分基于该反馈信息,主编码器可确定速率控制参数或其它参数的值。
[0133]鉴于可应用所公开的本发明的原理的许多可能的实施例,应当认识到,所示实施例仅是本发明的优选示例,并且不应认为是限制本发明的范围。相反,本发明的范围由后续的权利要求来界定。我们要求作为我们的发明保护落入这些权利要求范围和精神内的所有内容。
【主权项】
1.一个或多个存储计算机可执行指令的计算机可读介质,所述计算机可执行指令使得计算系统由此被编程为执行一种方法,所述方法包括: 使用主编码器来响应于应用跨所述主编码器所公开的接口上作出的一个或多个调用来设置编码控制属性的值; 使用所述主编码器来为媒体的序列层句法和图片层句法中的至少一个设置输出比特流的句法元素的值; 使用所述主编码器来用控制参数的值填充一个或多个控制结构;以及 使用所述主编码器来发起由包括加速器硬件的加速器执行的对所述媒体的编码,其中所述一个或多个控制结构通过位于所述主编码器和所述加速器硬件之间的加速器接口来传递,由此促进所述加速器根据由所述主编码器为序列层句法和图片层句法中的至少一个设置的句法元素的值来控制编码操作。2.如权利要求1所述的一个或多个计算机可读介质,其特征在于,由所述加速器控制的编码操作包括针对所述媒体的较低层句法的图片内估计和预测操作、运动估计和补偿操作、频率变换操作、量化操作、和熵编码//比特流格式化操作,并且其中,在编码之后,所述输出比特流包括: 指示由所述主编码器为序列层句法所设置的句法元素的值的序列参数集句法结构; 指示由所述主编码器为图片层句法所设置的句法元素的值的图片参数集句法结构;以及 指示由所述加速器为片数据层句法和句法的较低层所设置的句法元素的值的其它句法结构。3.如权利要求2所述的一个或多个计算机可读介质,其特征在于,在编码之后,所述输出比特流还包括指示由所述加速器为片头部层句法所设置的句法元素的值的片头部层句法结构,由所述加速器为片头部层句法所设置的句法元素的值包括参考图片列表构造的句法元素的值。4.如权利要求2所述的一个或多个计算机可读介质,其特征在于,在编码之后,所述输出比特流还包括指示由所述主编码器为片头部层句法所设置的句法元素的值的片头部层句法结构,由所述主编码器为片头部层句法所设置的句法元素的值包括参考图片列表构造的句法元素的值。5.如权利要求1所述的一个或多个计算机可读介质,其特征在于,所述方法还包括,使用所述主编码器来为一个或多个补充增强信息消息、访问单元分割符和/或其它信息设置输出比特流的句法元素的值。6.如权利要求1所述的一个或多个计算机可读介质,其特征在于,位于所述主编码器和所述加速器硬件之间的加速器接口包括应用程序编程接口和设备驱动程序接口,其中所述加速器接口用于与多个不同类型的加速器硬件中的任意一个加速器硬件的设备驱动程序一起工作,并且其中所述加速器接口用于针对多个编解码器标准或格式中的任意一种与主编码器一起工作。7.如权利要求1所述的一个或多个计算机可读介质,其特征在于,所述方法还包括: 在所述主编码器处接收来自所述加速器的反馈信息,其中所述反馈信息包括所述媒体的复杂度信息、质量信息以及比特率信息中的一个或多个;以及使用所述主编码器来至少部分基于所述反馈信息来确定控制参数的值。8.如权利要求1所述的一个或多个计算机可读介质,其特征在于,所述一个或多个控制 结构进一步包括指示预处理分析的结果的信息,所述信息包括感兴趣区域信息、复杂度信 息、噪声类型信息、噪声水平信息以及亮度采样水平信息中的一个或多个。9.一种用于实现主编码器的计算系统中的方法,包括:使用主编码器来为视频的序列层句法和图片层句法中的至少一个设置输出比特流的 句法元素的值,其中在编码之后,所述输出比特流包括:指示由所述主编码器为序列层句法所设置的句法元素的值的序列参数集句法结构;以 及指示由所述主编码器为所述视频的图片层句法所设置的句法元素的值的图片参数集 句法结构;使用所述主编码器来用控制参数的值填充一个或多个控制结构;以及使用所述主编码器来发起由包括加速器硬件的加速器执行的对所述视频的编码,其中 所述一个或多个控制结构通过位于所述主编码器和所述加速器硬件之间的加速器接口来 传递,由此促进所述加速器根据由主编码器对序列层句法和图片层句法所设置的句法元素 的值对图片内估计和预测操作、运动估计和补偿操作、频率变换操作、量化操作、以及至少 一些熵编码/比特流格式化操作的控制,并且其中,在编码后,所述输出比特流包括指示由 所述加速器为所述视频的片数据层句法和句法的较低层所设置的句法元素的值的其它句 法结构。10.—种包括处理器、存储器和加速器硬件的计算系统,其中所述计算系统实现被适配 成执行一种方法的主编码器,所述方法包括:使用主编码器来为视频的序列层句法和图片层句法中的至少一个设置输出比特流的 句法元素的值,其中在编码之后,所述输出比特流包括:指示由所述主编码器为序列层句法所设置的句法元素的值的序列参数集句法结构;以 及指示由所述主编码器为所述视频的图片层句法所设置的句法元素的值的图片参数集 句法结构;使用所述主编码器来用控制参数的值填充一个或多个控制结构;以及使用所述主编码器来发起由包括加速器硬件的加速器执行的对所述视频的编码,其中 所述一个或多个控制结构通过位于所述主编码器和所述加速器硬件之间的加速器接口来 传递,由此促进所述加速器根据由主编码器对序列层句法和图片层句法所设置的句法元素 的值对图片内估计和预测操作、运动估计和补偿操作、频率变换操作、量化操作、以及至少 一些熵编码/比特流格式化操作的控制,并且其中,在编码后,所述输出比特流包括指示由 所述加速器为所述视频的片数据层句法和句法的较低层所设置的句法元素的值的其它句 法结构。
【文档编号】H04N19/146GK106031177SQ201580009316
【公开日】2016年10月12日
【申请日】2015年2月10日
【发明人】Y·吴, G·J·沙利文, S·萨德瓦尼
【申请人】微软技术许可有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1