使用软件驱动器及硬件驱动器彼此联合来实现混合视频编码器的方法及装置转让专利

申请号 : CN201480005575.0

文献号 : CN104937931B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李坤傧刘政宏周汉良朱启诚

申请人 : 联发科技股份有限公司

摘要 :

一种视频编码方法,包含:由软件驱动器执行多个指令来处理视频编码操作的第一部分,其中该视频编码操作的第一部分包含至少运动估计功能;输送该运动估计功能产生的运动估计结果至硬件驱动器;以及由该硬件驱动器处理该视频编码操作的第二部分。一种视频编码方法,包含:由软件驱动器执行多个指令以及高速缓存来处理视频编码操作的第一部分;由硬件驱动器处理该视频编码操作的第二部分;通过该高速缓存处理该软件驱动器与该硬件驱动器之间的数据传输;以及执行地址同步来保证该高速缓存的同一输入是由该软件驱动器以及该硬件驱动器正确地取址以及存取。

权利要求 :

1.一种视频编码方法,包含:

由软件驱动器执行多个指令来处理视频编码操作的第一部分,其中该视频编码操作的第一部分包含至少运动估计功能;

输送该运动估计功能产生的运动估计结果至硬件驱动器;以及由该硬件驱动器处理该视频编码操作的第二部分;

该软件驱动器包含高速缓存,并且该视频编码方法进一步包含:通过使用该高速缓存来服务该硬件驱动器发出的数据存取需求。

2.根据权利要求1所述的视频编码方法,其特征在于,该执行该视频编码操作的第一部分的步骤包含:决定运动估计的搜索区域;以及

设置已决定的运动估计的搜索区域至该硬件驱动器。

3.根据权利要求1所述的视频编码方法,其特征在于,该数据存取需求是读取需求,来读取一个目标帧的至少一部分,其中该目标帧是一个源视频帧或者一个参考帧。

4.根据权利要求1所述的视频编码方法,其特征在于,专属的高速缓存写入线连接该硬件驱动器与该软件驱动器,该数据存取需求是写入需求,来写入该硬件驱动器产生的数据,并且该服务该数据存取需求的步骤包含:将通过该专属的高速缓存写入线输出的写入数据存储至该高速缓存。

5.根据权利要求1所述的视频编码方法,其特征在于,进一步包含:执行地址同步来保证该高速缓存的同一条目是由该软件驱动器以及该硬件驱动器正确地取址以及存取。

6.根据权利要求1所述的视频编码方法,其特征在于,进一步包含:执行数据同步,来通知该软件驱动器以及该硬件驱动器中的一个所需的数据在该高速缓存中可用。

7.根据权利要求6所述的视频编码方法,其特征在于,进一步包含:当该数据同步指示该软件驱动器与该硬件驱动器中的一个特定驱动器需要停滞时,通知该特定的驱动器停滞。

8.根据权利要求6所述的视频编码方法,其特征在于,进一步包含:当数据在该高速缓存中不可用时,从不同于该高速缓存的一个存储装置获取该数据。

9.根据权利要求1所述的视频编码方法,其特征在于,该软件驱动器与该硬件驱动器之间存在互动间隔,在该互动间隔的时间内该高速缓存保持所存储的数据。

10.根据权利要求1所述的视频编码方法,其特征在于,该视频编码操作第二部分包含运动补偿功能、帧间预测功能、变换功能、量化功能、反变换功能、反量化功能、后端处理功能、熵编码功能中的至少一个;当执行该运动估计功能时,使用源视频帧作为运动估计所需的参考帧;当执行该运动补偿功能时,使用重建帧作为运动补偿所需的参考帧。

11.一种视频编码方法,包含:

由软件驱动器执行多个指令以及高速缓存来处理视频编码操作的第一部分;由硬件驱动器处理该视频编码操作的第二部分;

通过该高速缓存执行该软件驱动器与该硬件驱动器之间的数据传输;以及执行地址同步来保证该高速缓存的同一条目是由该软件驱动器以及该硬件驱动器正确地取址以及存取。

12.根据权利要求11所述的视频编码方法,其特征在于,该视频编码操作的第一部分至少包含运动估计功能。

13.根据权利要求11所述的视频编码方法,其特征在于,进一步包含:执行数据同步,来通知该软件驱动器以及该硬件驱动器中的一个所需的数据在该高速缓存中可用。

14.根据权利要求11所述的视频编码方法,其特征在于,在该软件驱动器与该硬件驱动器之间传输数据的步骤包含:通过连接该硬件驱动器与该软件驱动器之间的专属的高速缓存写入线接收从该硬件驱动器产生的写入数据;以及存储该接收的写入数据至该高速缓存。

15.根据权利要求11所述的视频编码方法,其特征在于,进一步包含:当该软件驱动器与该硬件驱动器发出多个数据存取需求时,处理高速缓存存取冲突,以协调高速缓存存取顺序。

16.根据权利要求11所述的视频编码方法,其特征在于,进一步包含:决定该硬件驱动器发出的是存取该高速缓存还是存取不同于该高速缓存的一个存储装置。

17.根据权利要求16所述的视频编码方法,其特征在于,进一步包含:当决定该数据存取需求是存取该存储装置时,不通过该高速缓存来执行该硬件驱动器与该存储装置之间的数据传输。

18.根据权利要求16所述的视频编码方法,其特征在于,进一步包含:当决定该数据存取需求是存取该高速缓存,并且该数据存取需求是一个读取需求时,如果发生高速缓存命中,从该高速缓存传输所需的数据至该硬件驱动器。

19.根据权利要求16所述的视频编码方法,其特征在于,进一步包含:当决定该数据存取需求是存取该高速缓存,并且该数据存取需求是一个读取需求时,如果所需的数据在该高速缓存中不可用,产生高速缓存缺失。

20.一种混合视频编码器,包含:

软件驱动器,配置为执行多个指令来处理视频编码操作的第一部分,其中该视频编码操作的第一部分包含至少运动估计功能;以及硬件驱动器,耦接至该软件驱动器,该硬件驱动器配置为接收该运动估计功能产生的运动估计结果,并且处理该视频编码操作的第二部分;

该软件驱动器包含高速缓存,并且该视频编码方法进一步包含:通过使用该高速缓存来服务该硬件驱动器发出的数据存取需求。

21.一种混合视频编码器,包含:

软件驱动器,配置为执行多个指令来处理视频编码操作的第一部分,其中该软件驱动器包含高速缓存;以及硬件驱动器,配置为处理该视频编码操作的第二部分,其中通过该高速缓存执行该软件驱动器与该硬件驱动器之间的数据传输,并且该硬件驱动器进一步执行地址同步来保证该高速缓存的同一条目是由该软件驱动器以及该硬件驱动器正确地取址以及存取。

说明书 :

使用软件驱动器及硬件驱动器彼此联合来实现混合视频编码

器的方法及装置

[0001] 交叉引用
[0002] 本发明请求美国临时案申请号61/754,938(申请日2013年1月21日)、美国申请号14/154,132(申请日2014年1月13日)的优先权,且这些申请案的所有内容以引用方式纳入。

技术领域

[0003] 本发明的实施例与视频编码有关,更具体来说,与一种使用软件驱动与硬件驱动彼此联合以实现混合视频编码的方法及装置有关。

背景技术

[0004] 尽管全硬件的视频编码器满足性能要求,但是全硬件的解决方案成本高昂。可编程驱动器(即一种执行代码命令的功能的软件驱动器)的计算能力越来越强,但依然无法满足视频编码的高端特性,例如720p@30fps或1080p@30fps的视频编码。此外,可编程驱动器的能源消耗也比全硬件的解决方案更高。更进一步,当使用可编程驱动器时,存储器频宽也将成为一个问题。此外,当不同的应用程序(包括操作系统OS)也在相同的可编程驱动器上运行时,在视频编码过程中可编程驱动器的资源将会实时变化。
[0005] 因此,需要一种新型的视频编码设计,其能够综合基于硬件实现以及基于软件实现的优势来完成视频编码操作。

发明内容

[0006] 为了解决上述问题,本发明的实施例中提供了一种软件驱动器与硬件驱动器彼此结合来实现勋和视频编码的方法及装置。
[0007] 依据本发明的第一实施例,提供一种视频编码方法。该方法至少包含以下步骤:由软件驱动器执行多个指令来处理视频编码操作的第一部分,其中该视频编码操作的第一部分包含至少运动估计功能;输送该运动估计功能产生的运动估计结果至硬件驱动器;以及由该硬件驱动器处理该视频编码操作的第二部分。
[0008] 依据本发明的第二实施例,提供一种视频编码方法。该方法至少包含以下步骤:由软件驱动器执行多个指令以及高速缓存来处理视频编码操作的第一部分;由硬件驱动器处理该视频编码操作的第二部分;通过该高速缓存执行该软件驱动器与该硬件驱动器之间的数据传输;以及执行地址同步来保证该高速缓存的同一条目是由该软件驱动器以及该硬件驱动器正确地取址以及存取。
[0009] 依据本发明的第三实施例,提供一种混合视频编码器。该混合视频编码器包含软件驱动器与硬件驱动器。软件驱动器配置为执行多个指令来处理视频编码操作的第一部分,其中该视频编码操作的第一部分包含至少运动估计功能。硬件驱动器耦接至该软件驱动器,该硬件驱动器配置为接收该运动估计功能产生的运动估计结果,并且处理该视频编码操作的第二部分。
[0010] 依据本发明的第四实施例,提供一种混合视频编码器。该混合视频编码器包含软件驱动器与硬件驱动器。软件驱动器,配置为执行多个指令来处理视频编码操作的第一部分,其中该软件驱动器包含高速缓存;以及硬件驱动器,配置为处理该视频编码操作的第二部分,其中通过该高速缓存执行该软件驱动器与该硬件驱动器之间的数据传输,并且该硬件驱动器进一步执行地址同步来保证该高速缓存的同一条目被正确地取址并且由该软件驱动器以及该硬件驱动器存取。
[0011] 根据本发明,混合视频编码器或解码器的全硬件解决方案和全软件解决方案之间的设计提出了很好的权衡成本和其他因素(例如,功率消耗,内存带宽等)。在一设计中,至少软件实现运动估计,除了软件实现的其他编码步骤由硬件完成视频编码。此处,建议的解决方案称为混合机制/混合视频编码。
[0012] 在本发明中,揭露了多种方法与装置,这些方法与装置具有相同点,即都是由在可编程驱动器上执行软件指令来至少实现运动估计,可编程驱动器的举例说明为中央处理器(CPU)例如基于ARM处理器或其类似、数字信号处理器(DSP)、图形处理器单元(GPU)等。
[0013] 所提出的解决方案采用混合机制,其中至少由软件实现运动估计,以合理利用可编程处理器(即软件驱动器)中可用的新指令以及该可编程处理器的较大的高速缓存。此外,视频编码操作的其他部分的至少一部分,例如运动补偿、帧间预测、变换/量化、反变换、反量化、后端处理(例如去区块过滤、采样适应性便宜过滤、适应性环路滤波等等)、熵编码等等,是由硬件驱动器(即纯硬件)实现。在所提出的混合解决方案中,可编程处理器的高速缓存中存储的至少部分数据能够被硬件驱动器与软件驱动器两者存取。举例来说,至少一部分源视频帧存储在高速缓存中,并且被硬件驱动器与软件驱动器两者存取。另举一例来说,至少一部分参考帧存储在高速缓存中,并且被硬件驱动器与软件驱动器两者存取。在另举一例,由软件功能或者硬件功能产生的至少一部分中间数据存储在高速缓存中,并且被硬件驱动器与软件驱动器两者存取。
[0014] 在阅读后续对各种数据和附图所示的较佳实施方式的详细叙述后,本领域技术人员将毫无疑义地了解本发明的上述和其他目的。

附图说明

[0015] 图1是依据本发明的一实施例中的混合视频编码器的区块图;
[0016] 图2绘示了由图1所示的混合视频编码器所执行的视频编码操作的前端组建区块。
[0017] 图3是软件驱动器与硬件驱动器执行任务并且在帧编码时间的时间间隔交换信息的举例说明。
[0018] 图4绘示了依据本发明第二实施例的混合视频编码器。具体实施例
[0019] 在说明书及权利要求书当中使用了某些词汇来指称特定的组件。所属领域中技术人员应可理解,硬件制造商可能会用不同的名词来称呼同一个组件。本说明书及权利要求书并不以名称的差异来作为区分组件的方式,而是以组件在功能上的差异来作为区分的准则。在通篇说明书及权利要求书中所提及的“包含”是一个开放式的用语,故应解释成“包含但不限定于”。此外,“耦接”一词在此是包含任何直接及间接的电气连接手段,因此,若文中描述第一装置耦接于第二装置,则代表该第一装置可直接电气连接于该第二装置,或者透过其他装置或连接手段间接地电气连接至该第二装置。
[0020] 由于可编程驱动器的计算能力持续地提高,当前的CPU、DSP、或者GPU通常具有特定的指令(例如SIMD(single instruction multiple data)指令集)或者加速单元来增进通常计算的能力。通过一些传统的快速运动估计(ME)算法,软件运动估计在可编程处理器中可实现。本发明的全文中使用可编程驱动器、软件驱动器、可编程处理器、软件处理器等多种名称来指示具有相同特性的通过执行软件代码来完成任务的处理器。相似地,本发明的全文中使用硬件驱动器、硬件处理器等多种名称来指示具有相同特性的通过纯硬件来完成任务的处理器。本发明的实施例中所提出的方法使得在一个可编程处理器中可以使用新的指令。并在可编程处理器中大容量高速缓存的使用中取得优势。此外,由于提前的运动估计算法,软件运动估计可实现。上述软件执行运动估计的功能可以在一个单一可编程驱动器或者多可编程驱动器(例如多核)中实现。
[0021] 请参考图1,图1是依据本发明的一实施例中的混合视频编码器100的区块图。图1中绘示了系统10中的视频编码器100。即混合视频编码器100可以是电子装置的一部分,更具体来说,可以是电子装置中的集成电路(IC)中的主处理电路的一部分。电子装置的例子包括,但不限于,移动电话(例如智能电话或者功能电话),移动电脑(例如电脑本),个人数字辅助,个人计算机(例如膝上电脑)。混合视频编码器100包含至少一个软件驱动器(即软件编码器部分),其通过执行指令(即编码代码)来实现预计的功能,更进一步包含至少一个硬件驱动器(即硬件编码器部分),其通过使用纯硬件来实现预计的功能。换句话说,混合视频编码器100是通过联合的软件与硬件来实现视频编码的操作。
[0022] 在本实施例中,系统10是一个片上系统(SoC),具有多个可编程驱动器包含其中,其中一或多个可编程驱动器被用作混合视频编码器100所需的软件驱动器。举例来说,但并不局限于此,可编程驱动器是DSP子系统102,GPU子系统104以及CPU子系统106。需注意的是,系统10进一步包含其他的可编程硬件,其能够执行嵌入的指令或者被一个序列器(sequencer)控制。DSP子系统102包含DSP(例如CEVA XC321处理器)112以及高速缓存113。GPU子系统104包含GPU(例如nVidia Tesla K20处理器)114以及高速缓存115。CPU子系统
106包含CPU(例如Intel Xeon处理器)116以及高速缓存117。每一高速缓存113、115、117可以由一个或者多个存储器组成。举例来说,CPU116可包含第一级高速缓存(L1)以及第二季高速缓存(L2)。另举一例,CPU116具有多核结构,并且每一核具有各自的第一级高速缓存(L1),同时多个核心共享一个第二级高速缓存(L2)。另举一例,CPU116具有多簇结构,并且每一簇具有一个核心或者多个核心。多个簇共享第三级高速缓存。不同类型的可编程驱动器进一步共享下一级高速缓存的缓存分层结构。举例来说,CPU116以及GPU114共享同一个缓存。
[0023] 软件驱动器(即,混合视频编码器100的一或多个DSP子系统102、GPU子系统104以及CPU子系统106)被配置为通过执行多个指令执行视频编码操作第一部分。举例来说,视频编码操作的第一部分包含至少一运动估计功能。
[0024] 图1中的视频编码(VENC)子系统108是混合视频编码器100的硬件驱动器,并且配置为通过使用纯硬件来执行视频编码操作第二部分。VENC子系统108包含视频编码器(VENC)118以及存储器管理单元(VMMU)119。具体的,VENC118执行除了可编程驱动器完成的步骤(例如运动估计)之外的其他编码步骤。因此,视频编码操作第二部分包含运动补偿功能,帧间预测功能,转换功能(例如,离散系数变换(DCT)),量化功能,反变换功能(例如,反DCT),反量化功能,后端处理功能(例如去块过滤(deblocking filter)以及样本自适应过滤器(sample adaptive offset filter),以及熵编码功能(entropy encoding)中至少一个。此外,使用主视频存储器(main video buffer)来存储源视频帧、重建帧、去区块帧或者视频编码中使用的杂项信息。该主视频存储器通常配置在芯片外存储器12(例如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、或者闪存)中。然而,该主视频存储器也可以配置在芯片内存储器(例如嵌入式DRAM)中。
[0025] 可编程驱动器,包含DSP子系统102、GPU子系统104以及CPU子系统106,硬件驱动器(VENC子系统108),以及存储控制器110连接至总线101。因此可编程驱动器与硬件驱动器中的每一个能够通过存储控制器110存取芯片外存储器12。
[0026] 请参考图2,其绘示了由图1所示的混合视频编码器100所执行的视频编码操作的前端组建区块。其中ME代表运动估计,MC代表运动补偿,T代表转换,IT代表反转换,Q代表量化,IQ代表反量化,REC代表重建,IP代表帧间预测,EC代表熵编码,DF代表去块过滤,并且SAO代表样本自适应过滤器。依据实际的设计考量,视频编码可以是有损的或者无损的。
[0027] 一个或者多个组建区块是由软件来实现的(即,图1中所示的至少一可编程驱动器),并且其他的是由硬件来实现的(即,图1中所示的硬件驱动器)。需注意的是,软件部分至少实现了ME功能。一些视频可能包含或者不包含环路滤波(in-loop filter),例如DF或者SAO。源视频帧携带了原始视频帧数据,并且混合视频编码器100的前端任务是以有损方式或者无损方式压缩源视频帧数据。参考帧是用来定义未来帧的。在较老的视频编码标准中,例如MPEG-2,对于P帧仅仅使用一个参考帧(即先前帧)。对于B帧使用两个参考帧(即一个过去的帧以及一个未来的帧)。在较先进的视频编码标准中,使用更多的参考帧来完成视频编码。重建帧是经由反编码步骤由视频编码器/解码器产生的像素数据。视频解码器通常从压缩的比特流执行反编码步骤,并且视频编码器通常在其获得量化参数数据之后执行反编码步骤。
[0028] 重建像素数据成为使用的视频编码标准(H.261,MPEG-2,H.264等等)先前定义的参考帧。在视频标准不支持环路滤波的第一个例子中,图2中所示的DF与SAO被省略。因此,重建帧被存储至参考帧存储器来作为一个参考帧使用。在视频标准仅支持一个环路滤波(即,DF)的第二个例子中,图2中所示的SAO被省略,因此后端处理帧是去区块帧(deblocked frame),并且存储至参考帧存储器来作为参考帧使用。在视频标准支持一个以上的环路滤波(即DF与SAO)的第三个例子中,后端处理帧是已完成SAO的帧,并且存储至参考帧存储器来作为参考帧使用。简单来说,存储至参考帧存储器的参考帧可以是一个重建帧或者是一个后端处理帧,这依据混合视频编码器100实际应用的视频编码标准而决定。在后续说明中,使用重建帧作为参考帧来举例说明,但本领域技术人员可以了解当使用的视频编码标准支持环路滤波器时,可以使用一个后端处理帧来代替重建帧作为参考帧。图2中所示的环路滤波器仅仅用来举例说明。在其他的替代设计中,可以使用不同的环路滤波器,例如适应性环路滤波器(adaptive loop filter,ALF)。进一步来说,中间数据(intermediate data)是视频编码过程中产生的数据,例如运动向量信息,量化参数残余,决定的编码模式(帧内/帧间/方向等等)等可以编码或者不编码至输出的比特流。此外,在图2所示的举例说明中,最大编码单元信息(LCU信息)与样本自适应过滤信息(SAO信息)经由熵编码至输出比特流。
[0029] 由于硬件/软件参与至少一依据软件的编码步骤(例如,运动估计)以及其他依据硬件的编码步骤(例如,运动补偿、重建等),因此重建帧(或者后端处理帧)对于运动估计可能是可用的。举例来说,通常ME需要源视频帧M以及重建帧M-1来进行运动向量搜寻。然而,在以帧为基础的影响下,混合视频编码器100的硬件驱动器(VENC子系统108)依然可以处理帧M-1。在这种情况下,原来的视频帧(例如,源视频帧M-1)可用作运动估计的参考帧,即重建帧(或后端处理帧)不用做运动估计的参考帧。需注意的是,运动补偿是基于重建帧(或后端处理帧)M-1来进行的,依据从源视频帧M以及M-1或者获得的运动估计结果。简单来说,混合视频编码器100执行的视频编码操作包含运动估计功能以及运动补偿;当执行运动估计时,源视频帧被用作运动估计所需的参考帧;当执行后续的运动补偿时,重建帧(或者后端处理帧)被用作运动补偿所需的参考帧。
[0030] 图3是软件驱动器与硬件驱动器执行任务并且在帧编码时间的时间间隔交换信息的举例说明。软件驱动器(例如,CPU子系统106)执行运动估计,并且发送运动信息(例如,运动向量)至硬件驱动器(例如,VENC子系统108)。硬件驱动器完成视频编码程序中除了运动估计之外的其他任务,例如运动补偿、变换、量化、反变换、反量化、熵编码等等。在图3的举例说明中以重建环&EC表示。换言之,在软件驱动器与硬件驱动器之间存在数据的传输/转换,其原因为完整的视频编码操作是由软件驱动器与硬件驱动器共同完成的。优选地,软件驱动器与硬件驱动器之间的数据的传输/转换是通过高速缓存来实现的。高速缓存机制的细节将如下详述。此处的互动间隔(interaction interval)指的是软件驱动器与硬件驱动器彼此沟通的时间或者空间间隔。举例来说,上述的沟通方法包含从硬件驱动器至软件驱动器发送一个中断信号INT。如图3所示,软件驱动器在时间TM-2产生一个指示IND来通知硬件驱动器,并且当帧M-2的运动估计已完成并开始下一帧M-1的运动估计时,转移与帧M-2有关的信息至硬件部分。当接到软件驱动器的通知之后,硬件驱动器参考软件驱动器所提供的信息来开始与帧M-2有关的编码步骤,从而获得相对应的重建帧M-2以及帧M-2的压缩比特流。硬件驱动器当完成与帧M-2的编码步骤时在时间TM-2’通知软件驱动器。如图3所示,软件驱动器对于帧M-1的处理速度比硬件驱动器对于帧M-2的处理速度要快。因此软件驱动器等待硬件驱动器完成与帧M-2相关的编码步骤。
[0031] 在接到了硬件驱动器的通知之后,软件部分传输与帧M-1有关的相关信息至硬件驱动器,并且开始在时间TM-1执行下一帧M的运动估计。软件驱动器可以从硬件驱动器获得帧M-2的相关信息。举例来说,软件驱动器可以从硬件驱动器获得压缩的帧M-2的比特流大小,编码模式信息,量化信息,处理时间信息,以及/或者存储器频宽信息等相关信息。当接收到软件驱动器的通知之后,硬件驱动器参考从软件驱动器获得的信息来开始与帧M-1相关的编码步骤来获得对应的重建帧M-1。当在时间TM-1’完成与帧M-1相关的编码步骤时,硬件驱动器通知软件驱动器。如图3所示,由于帧M软件部分的处理速度慢于硬件驱动器处理帧M-1的处理速度,因此硬件驱动器等待软件驱动器完成与帧M相关的编码步骤。
[0032] 在完成帧M的运动估计之后,软件驱动器传输与帧M相关的信息至硬件部分,并在TM开始帧M+1的运动估计。当接收到软件驱动器的通知之后,硬件驱动器参考从软件驱动器获得的信息来开始与帧M相关的编码步骤,以获得相对应的重建帧M。硬件驱动器在时间TM’当完成了与帧M有关的编码步骤时通知软件驱动器。如图3所示,软件驱动器处理帧M+1的时间与硬件驱动器处理帧M的时间相等。因此硬件驱动器与软件驱动器不需要彼此等待。
[0033] 需注意的是,软件部分与硬件部分的互动间隔并不局限于编码一个完整帧的时间区间。该间隔可是一个宏块(宏块,MB)、一个最大的编码单元(LCU)或者一个切片(slice)、或一个瓦片(tile)。该间隔也可是多个宏块、多个最大的编码单元(LCU)、多个切片、或多个瓦片。该间隔也可是一个或者多个宏块(或最大编码单元)行。当互动间隔的间隔尺寸小时,重建帧(或后端处理帧)的数据对于运动估计是可用的。举例来说,在一个以切片为基础的互动(即视频编码是依据切片而并非帧来进行的)的情况下,混合视频编码器100的硬件驱动器以及软件驱动器可处理相同源视频帧M的不同切片,并且重建帧M-1(其是从源视频帧M-1获得,源视频帧M-1在源视频帧M之前)在此时也可用。在这种情况下,混合视频编码器100的软件驱动器处理源视频帧M的一个切片,重建帧M-1可被用作一个参考帧,从而提供软件驱动器执行的运动估计所参考的参考像素数据。在图3所示的举例说明中,如果需要的话,软件驱动器可以在一个帧间隔内等待硬件驱动器。然而,这并非本发明的一个限制。举例来说,混合视频编码器100的软件驱动器可配置为依据一序列的源视频帧连续地执行运动估计,而并不等待混合视频编码器100的硬件驱动器。
[0034] 依据本发明的精神,可提供其他多个实施例,这些实施例具有相同的特性,即运动估计是由在可编程驱动器上运行的软件来完成的。一个实施例是软件驱动器处理ME,并且硬件驱动器处理MC、T、Q、IQ、IT、EC。对于不同的视频编码标准,硬件驱动器可进一步处理后端流程,例如DB以及SAO。另一个实施例是软件驱动器处理ME以及MC,并且硬件驱动器处理T、Q、IQ、IT、EC。硬件驱动器可进一步处理后端流程,例如DB以及SAO。这些替代设计都通过软件来实现ME(即执行指令),因此都在本发明的范围之内。
[0035] 在另一实施例中,混合视频编码器100的软件编码部分在一或多个可编程驱动器上执行运动估计。软件编码部分所执行的运动估计结果接着被混合视频编码器100的硬件编码部分使用。运动估计的结果包含,但不限于,运动向量、编码单元的编码模式、参考帧指数、单一参考帧或者多个参考帧、以及/或者用来执行帧内或帧间编码所需的其他信息。软件编码部分进一步决定每一编码区域(例如宏块、LCU、切片或帧)的比特预算(bit budget)以及量化设置。软件编码部分也决定当前要编码的帧的帧类型,并且上述决定可依据运动估计结果的至少部分信息来决定。举例来说,软件编码部分决定当前帧为I帧、P帧、B帧或其他帧类型。软件编码部分可进一步决定要编码的当前帧的片数量以及片类型,并且上述决定可依据运动估计结果的至少部分信息来决定。举例来说,软件编码部分可决定要编码的当前帧包含两个片。软件编码部分可决定当前帧具有编码为I片的第一片,并且其他的片为P片。软件编码部分进一步决定上述I片与P片的区域。可依据在运动估计中收集的统计信息来决定第一片编码为I片。举例来说,统计信息包含视频内容复杂度或者整体帧的一部分的活动性信息、运动信息、运动估计成本功能信息或者其他第一片的运动估计所产生的信息。
[0036] 软件编码部分依据缩小比例的源视频帧(其通过原始源视频帧获得)以及缩小比例的参考帧(其通过原始参考帧获得)进行粗略的运动估计。粗略运动估计的结果输送给硬件编码部分。硬件编码部分执行最终的或者好的运动估计以及相对应的运动补偿。在另一方面,硬件编码部分直接进行运动补偿,而不进行最终的运动估计。
[0037] 软件编码部分进一步从硬件编码部分获得精确的编码结果,来决定后续一个帧或者多个编码帧的搜索范围。举例来说,垂直搜索范围+/-48被应用至编码第一帧。该帧的编码结果指示编码的运动向量主要是在垂直搜索范围+/-16的范围之内。软件编码部分接着决定缩减该垂直搜索范围至+/-32并应用该范围来编码第二帧。通过这个举例说明,但并非本发明的限制,第二帧可是第一帧之后的任意一帧。决定的搜索范围可以进一步送至硬件编码部分来进行运动估计或者其他处理。上述搜索范围的确定可以被当做软件视频编码器所执行的运动估计的一部分。
[0038] 软件编码部分进一步从其他外部装置获得运动信息来决定搜索范围。该外部装置可以是一个图像信号处理器(image signal processor,ISP)、电子/光学图像稳定单元(electronic/optical image stabilization unit)、图型处理单元(graphic processing unit,GPU)、显示处理器、运动过滤器或位置传感器。如果编码的第一帧被决定为一个静态场景,软件编码部分可进一步缩减垂直搜索区域至+/-32,并应用该区域来编码第一帧。
[0039] 在一个例子中,当视频编码标准是高效率视频编码(High Efficiency Video Coding,HEVC)/H.265时,软件编码部分也决定要编码的当前帧的瓦片数量与瓦片参数,并且该决定是至少依据运动估计的结果的信息来决定。举例来说,软件编码部分决定在要进行1080p编码的当前帧内有两个瓦片,每一个瓦片是960x1080。软件编码部分决定在要进行1080p编码的当前帧内有两个瓦片,每一个瓦片是1920x 540。上述决定被硬件编码部分所使用来完成编码的其他处理。
[0040] 软件编码部分利用可编程驱动器的高速缓存来存储至少一部分当前源视频帧的数据与至少一部分参考帧的数据,以此获得优势,并由于较低的数据存储延时而增进编码性能。参考帧可以是重建帧或后端处理帧。混合视频编码器100所使用的高速缓存113/115/117可以是一级高速缓存、二级高速缓存、三级高速缓存或者更高级高速缓存。
[0041] 为了简洁与方便,假设混合视频编码器100的软件驱动器使用CPU子系统106。因此当执行运动估计时,软件驱动器(即CPU子系统106)从较大尺寸的缓存(例如芯片外存储器12)获取源视频帧以及参考帧。当高速缓存117的上述数据是可用时,硬件驱动器(即VENC子系统108)将从软件驱动器的高速缓存117获得源视频帧数据或者参考帧数据。否则,源视频帧数据或者参考帧数据也将从较大尺寸的帧缓冲器存取。
[0042] 在这个实施例中,使用高速缓存一致性机制(coherence mechanism)来检查是否高速缓存117中是否存在上述数据。该高速缓存一致性机制当数据存在于高速缓存117时,从高速缓存117中获取数据,或者将数据存取需求(即读取需求)传递至存储控制器110来从帧存储器中获得所需的数据。换言之,CPU子系统106的高速缓存控制器通过使用高速缓存117来服务硬件驱动器发出的数据存取需求。当高速缓存命中发生时,高速缓存控制器返回缓存的数据。当高速缓存缺失发生时,存储控制器110将收到硬件驱动器所需数据的数据存取需求,并且执行数据存取转换。
[0043] 两种类型的高速缓存一致性机制可以在该实施例中使用。第一种是保守高速缓存一致性机制(conservative cache coherence mechanism),另外一种是攻击高速缓存一致性机制(aggressive cache coherence mechanism)。为了从硬件驱动器发出的数据存取需求的干扰,对于软件驱动器与硬件驱动器使用保守高速缓存一致性机制。保守高速缓存一致性机制仅仅处理读取交易(read transaction),此外当数据没有在高速缓存117中时,没有高速缓存确实发生并且没有数据替换执行。举例来说,软件驱动器中的高速缓存控制器(未显示)或者系统10内的总线控制器(未显示)监控/探听总线101上的读取交易地址,其中总线101连接至软件驱动器(CPU子系统106)以及硬件驱动器(VENC子系统108)。当硬件驱动器发出的读取需求的交易地址与高速缓存117内部高速缓存的数据的地址匹配时,高速缓存命中发生,并且高速缓存控制器直接传输缓存的数据至硬件驱动器。
[0044] 需注意的是,从硬件驱动器发出的写入交易(write transaction)总是由分层结构的下一级存储器的管理器处理,分层结构的下一级存储器通常是芯片外存储器12或者下一级高速缓存。因此CPU子系统106的高速缓存控制器将决定从VENC子系统108发出的数据存取需求是存取高速缓存117还是存取不同于高速缓存117的其他存储装置(例如芯片外存储器12)。当从VENC子系统108发出的数据存取需求是写入需求时,决定该写入需求时存取该存储装置(例如芯片外存储器12)。因此,VENC子系统108与存储装置(例如芯片外存储器12)之间数据交易就不通过高速缓存117而执行。当软件驱动器不需要从硬件驱动器写入数据时,应用数据同步机制(data synchronization mechanism)来指示写入数据对于软件驱动器是可用的。数据同步机制的进一步详细说明如下。
[0045] 在另一方面,为了让硬件驱动器更好地使用可编程驱动器的高速缓存,可以使用攻击高速缓存一致性机制。请参考图4,其绘示了依据本发明第二实施例的混合视频编码器400。图4所示的系统20与之间图1所示的系统10的区别是在软件驱动器与硬件驱动器之间具有专属高速缓存写入线(dedicated cache write line)(即额外的写入路径)402,因此,允许硬件驱动器写入数据至软件驱动器的高速缓存。为了简单清楚地描述,假设软件驱动器是由CPU子系统106实现,并且硬件驱动器是由VENC子系统108实现。然而,这仅仅作为举例说明使用,而并非本发明的限制。
[0046] 在一个举例说明中,当CPU子系统106作为软件驱动器时,运动估计是由CPU子系统106中的CPU 116完成的,高速缓存写入线连接在CPU子系统106与VENC子系统108之间。如上所述,可编程驱动器(例如,CPU子系统106)内部的高速缓存控制器监控/探听总线101上的读取交易地址,其中总线101连接至软件驱动器(CPU子系统106)以及硬件驱动器(VENC子系统108)。因此CPU子系统106的高速缓存控制器可决定VENC子系统108是否发出一个数据存取需求来存取高速缓存117或者一个与高速缓存117不同的存储装置(例如芯片外存储器
12)。当VENC子系统108发出的数据存取需求是一个读取存取并且所需的数据在高速缓存
117内是可用状态的话,则发生高速缓存命中,并且使得高速缓存控制器将所需的数据从高速缓存117传输至VENC子系统108。当VENC子系统108发出的数据存取需求是一个读取存取并且所需的数据在高速缓存117内是不可用状态的话,则发生高速缓存缺失,并且使得高速缓存控制器发出一个存储器读取需求至它的下一级记忆分层组织,通常发送至芯片外存储器12或者下一级高速缓存。所读取的数据从下一级记忆分层组织返回,并且替代一个高速缓存线或者高速缓存117内的等量数据。从下一级记忆分层组织返回的数据也传输至VENC子系统108。
[0047] 当从VENC子系统108发出的数据存取需求是一个写入需求,以请求写入数据至CPU子系统106的高速缓存117时,可以应用回写策略(write back)或者直写策略(write through)。对于回写策略来说,从VENC子系统108写入的数据传输至CPU子系统106并且因此初始地经由专属高速缓存写入线402写入高速缓存117。当包含写入数据的高速缓存块/线将要被新的内容修改/取代时,从VENC子系统108写入的数据通过总线101写入下一级记忆分层组织。对于直写策略来说,从VENC子系统108写入的数据同步地经由专属高速缓存写入线402写入高速缓存117以及经由总线写入下一级记忆分层组织。本领域技术人员能够了解回写策略与直写策略的细节,更详细的描述在此省略。
[0048] 除了软件编码部分,在一些可编程驱动器可运行一个操作系统(operation system,OS)。在这种情况下,除了高速缓存,可编程驱动器还具有存储器保护单元(memory protect unit,MPU)或者存储器管理单元(MMU),在其中执行虚拟地址至物理地址的转换。为了使得存储在高速缓存内的数据被硬件驱动器存取,应用地址同步机制(address synchronization mechanism)使得高速缓存的相同的条目能够被正确地取址以及由硬件驱动器与软件驱动器存取。举例来说,从VENC子系统108发出的数据存取需求由通过VMMU 
119的另一转换来完成虚拟地址至物理地址的转换,并且这种转换与在CPU子系统106内的转换同步。
[0049] 为了利用高速缓存,应用数据同步机制(data synchronization mechanism)。上述数据同步机制帮助增加要读取的数据已经在高速缓存内的机会,并且因此减少需要从下一级记忆分层组织(例如芯片外存储器12或者下一级高速缓存)获得数据的可能性。该数据同步机制也帮助减少高速缓存缺失或者高速缓存数据替代的机会。
[0050] 数据同步机制包含一个指示(例如图3所示的IND),来指示硬件驱动器(例如VENC子系统108)其所需要的数据当前在软件驱动器的高速缓存(例如CPU子系统106的高速缓存117)内可用。举例来说,当软件驱动器完成了一帧的运动估计,软件驱动器设置该指示。硬件驱动器接着在同一帧上执行其余的编码操作。由软件驱动器读取的数据,例如源视频帧数据以及参考帧数据,较大可能地依然存在在高速缓存中。更具体来说,当如上所述的互动间隔的间隔尺寸设置较小时,当硬件驱动器被操作来执行在先前软件驱动器处理的同一帧上的其余编码步骤时,由软件驱动器读取的数据较大可能性地在软件驱动器的高速缓存中依然可用,因此,硬件驱动器能够从高速缓存而不是下一级记忆分层组织(例如芯片外存储器12)读取数据,例如运动向量、运动补偿系数数据、量化系数、上述的中间数据等可能依然存在于软件驱动器的高速缓存中。因此硬件驱动器也能够从高速缓存而不是下一级记忆分层组织(例如芯片外存储器12)读取这些数据。上述指示可以使用任意的可行的指示方式来实现,举例来说,上述指示可以是硬件驱动器的一个激发(trigger)、一个旗标(flag)或者一个命令序列。
[0051] 此外,可以使用一个更攻击的数据同步机制。举例来说,当软件驱动器(例如CPU子系统106)在一个编码区域(例如在一个完整帧中的多个宏块)完成执行运动估计时,软件驱动器设置该指示。即,该指示是设置来每一次软件驱动器完成一个完整帧的一部分的运动估计时,通知硬件驱动器(例如VENC子系统108)。硬件驱动器接着执行在该帧的该部分执行剩余的编码步骤。由软件驱动器读取的数据,例如源视频帧数据以及参考帧数据、以及软件驱动器产生的数据(例如运动向量以及运动补偿系数数据)也较高可能性地依然存在在软件驱动器的高速缓存中。因此,硬件驱动器能够从高速缓存而不是下一级记忆分层组织(例如芯片外存储器12)来读取这些数据。相似地,上述指示可使用任意可行的指示方式来实现。举例来说,上述指示可以是硬件驱动器的一个激发(trigger)、一个旗标(flag)或者一个命令序列。另举一例来说,上述指示可以是已经处理的或者尚未处理的宏块的位置信息、或者已经处理的或尚未处理的宏块的数量。
[0052] 此外,硬件驱动器能够应用与软件驱动器相似的数据同步方法。举例来说,当硬件驱动器完成重建帧数据(或后端处理帧数据)至软件驱动器的高速缓存的写入部分时,硬件驱动器也能够设置一个指示。举例来说,该由硬件驱动器设置的指示可以是一个中断(interrupt)、一个旗标、已经处理的或者尚未处理的宏块的位置信息、或者已经处理的或尚未处理的宏块的数量等等。
[0053] 数据同步机制也可与一个停滞机制(stall mechanism)合作,例如当数据同步机制指示需要一个停滞时,软件驱动器或者硬件驱动器处于停滞状态。举例来说,当硬件驱动器无空闲(busy)并且不能接受下一处理器的另一触发时,硬件驱动器能够产生一个停滞指示,来指示软件驱动器停滞,从而软件驱动器的高速缓存内的数据不会被复写(overwrite)、替代或者冲刷(flush)。该停滞指示可以使用任意的可行的指示方式来实现。举例来说,该停滞指示可以是硬件驱动器的非空闲信号、或者命令序列的丰满信号(fullness signal)。另举一例来说,上述停滞指示可以是已经处理的或者尚未处理的宏块的位置信息、或者已经处理的或尚未处理的宏块的数量。
[0054] 综上所述,本发明所述的视频编码的方法以及装置将硬件部分与软件部分协同起来。其利用了可编程驱动器及其相对应的高速缓存的力量并且部分应用特定的硬件来缩减芯片区域的成本。具体来说,所提出的混合视频编码器至少使得运动估计是由软件来实施,同时至少一个主要的任务(MC、T、Q、IT、IQ、IP、DF及SAO其中之一)是由硬件实施。
[0055] 本发明中描述的例子和优选实施例,是帮助理解本发明的而并不局限于这些实施例。相反,它的目的是为了涵盖各种修改和类似的安排。因此,权利要求书的范围应给予最广泛的解释,包括所有这些修改和类似的安排。