媒体播放器和播放方法、硬件加速下的视频的后处理方法

文档序号:7983770阅读:681来源:国知局
媒体播放器和播放方法、硬件加速下的视频的后处理方法
【专利摘要】本申请公开了视频后处理方法、媒体播放器和媒体播放方法,其中,媒体播放器包括:分离模块,用于将输入的媒体源文件进行分离并输出到解码模块;解码模块,用于对分离后得到的视频流调用图形处理器自带的硬件解码器进行解码;渲染模块,用于渲染解码得到的视频流,并调用自定义演示组件对视频流的各幅图像进行图像后处理,输出处理后的视频流。由于是采用图形处理器自带的硬件解码功能对视频流解码,即视频流数据的解码是在图形处理器而非CPU中进行,从而降低了播放视频时的CPU资源占有率;对图形处理器中的数据通过调用自定义演示组件进行视频后处理,使得在提升CPU处理效率的同时在硬件加速模式下也能实现色彩调节、添加字幕等效果。
【专利说明】媒体播放器和播放方法、硬件加速下的视频的后处理方法
【技术领域】
[0001]本申请涉及多媒体【技术领域】,尤其涉及一种硬件加速下的视频的后处理方法,以及采用这种方法的媒体播放器和媒体播放方法。
【背景技术】
[0002]目前大部分视频播放器采用软件解码,如图1所示,首先通过解码器101对特定格式的编码视频进行解码,其次利用视频后处理器102对视频进行处理,接着由渲染器103对处理后的视频进行渲染,将渲染后的视频输出到显示器104予以显示。这种软件解码技术将全部的视频解码和后处理工作放在CPU中进行。然而,一方面,视频尤其是高清视频采用的编码算法的计算复杂度高,另一方面,视频的图像像素数量较大尤其是高清视频的图像像素数据量更大;这使得CPU在解码视频尤其是高清视频时往往会满负荷工作,造成PC响应其它用户命令缓慢而出现画面显示不连续、声音播放断断续续的现象,更有甚者出现操作系统无响应的情况。
[0003]为了降低CPU解码视频时的工作负荷,近年来,各大GPU (图形处理器,GraphicProcessing Unit)生产厂商纷纷研发了支持视频硬件解码的GPU产品,强大的GPU将直接支持硬件解码,即可以支持对高清视频源的编码格式,如MPEG2、H.264、WMV和VC-1等编码格式进行解码。微软公司为此专门制订了 DXVA (硬件视频加速,DirectX VideoAcceleration)规范。如果在视频播放时能利用GPU去解码,则由CPU承担的部分或全部解码工作转为GPU来承担,从而可以极大降低播放视频时的CPU资源占用率,使得其能及时响应其它的用户命令。然而,由于开启GPU视频解码加速功能后,使得常见的视频解码后处理等过程无法实施,即无法进行色彩调节、加字幕等处理,画面效果可能较纯软件解码方式下降,反而会造成负面的影响。

【发明内容】

[0004]本申请提供一种视频的后处理方法,以及采用这种方法的媒体播放器和媒体播放方法,无论视频播放时是否采用硬件加速,均可实现色彩调节、字幕添加等图像后处理效果O
[0005]根据本申请的第一方面,提供一种媒体播放器,包括:分离模块,用于将输入的媒体源文件按文件类型进行分离并输出到解码模块;解码模块,用于对分离后得到的视频流调用图形处理器自带的硬件解码器进行解码;渲染模块,用于渲染解码得到的视频流,并调用自定义演示组件对视频流的各幅图像进行图像后处理,输出处理后的视频流。
[0006]所述自定义演示组件包括色彩单元、字幕单元、形变单元中的至少一个,所述色彩单元用于对视频流中各幅图像进行色彩调节,所述字幕单元用于将字幕添加到视频流的各幅图像,所述形变单元用于对视频流中各幅图像进行旋转、缩放、平移。
[0007]所述字幕单元包括:创建子单元,用于向从外部接口引入的字幕文本数据添加时间戳,形成时间戳字幕队列,创建保存字幕图像的缓冲,将从时间戳字幕队列中查找到的当前字幕文本形成字幕绘制图像,并添加字幕效果,将添加效果后的字幕绘制图像输出到缓冲中,得到最终的字幕图像;加载子单元,用于复制视频流的各幅图像到后台表面,查找当前时间对应的字幕图像,将查找到的字幕图像合成到后台表面中相应的各幅图像。
[0008]所述色彩单元基于Direct3D的像素着色器实现;所述渲染模块基于DirectX的视频混合渲染器和视频增强渲染器实现。
[0009]所述图形处理器支持DirectX 9.0及以上接口和Direct3D Shader 3.0及以上接□。
[0010]根据本申请的第二方面,提供一种媒体播放方法,包括:分离步骤,将输入的媒体源文件按文件类型进行分离并输出到解码模块;解码步骤,对分离后得到的视频流调用图形处理器自带的硬件解码器进行解码;渲染步骤,渲染解码得到的视频流,并调用自定义演示组件对视频流的各幅图像进行图像后处理,输出处理后的视频流。
[0011]所述自定义演示组件包括色彩单元、字幕单元、形变单元中的至少一个,所述色彩单元用于对视频流中各幅图像进行色彩调节,所述字幕单元用于将字幕添加到视频流的各幅图像,所述形变单元用于对视频流中各幅图像进行旋转、缩放、平移;所述渲染步骤包括:混合步骤,收集输入的视频流并通知所述自定义演示组件进行处理;执行步骤,所述自定义演示组件判断是否存在色彩控制任务、字幕添加任务、形变任务中的任意种任务,如果存在色彩控制任务则调用所述色彩单元进行色彩调节,如果存在字幕则调用所述字幕单元进行字幕添加,如果存在形变任务则调用所述形变单元进行图像的旋转、缩放、平移;输出步骤,将执行处理后的视频流输出到显示装置予以显示。
[0012]根据本申请的第三方面,提供一种硬件加速下的视频后处理方法,包括:自定义步骤,基于DirectX的视频混合渲染器和视频增强渲染器,对演示组件自定义以支持图像后处理接口,所述图像后处理接口包括色彩接口、字幕接口和形变接口,所述色彩接口实现对视频流中各幅图像的色彩调节,所述字幕接口实现将字幕添加到视频流的各幅图像,所述形变接口实现对视频流中各幅图像的旋转、缩放、平移。
[0013]所述硬件加速所依赖的图形处理器支持DirectX9.0及以上接口和Direct3DShader3.0 及以上接 口。
[0014]本申请的有益效果是:由于是采用图形处理器自带的硬件解码功能对视频流解码,即视频流数据的解码是在图形处理器中进行而非在CPU中,从而降低了播放视频时的(PU资源占有率;对处于图形处理器中的数据通过调用自定义演示组件进行视频后处理,使得在提升CPU处理效率的同时在硬件加速模式下也能实现色彩调节、添加字幕等效果。
【专利附图】

【附图说明】
[0015]图1为常用的软件解码的处理过程示意图;
[0016]图2为DirectX的VMR/EVR的结构示意图;
[0017]图3为VMR/EVR处理媒体数据的流程示意图;
[0018]图4为本申请一种实施例的媒体播放器的结构示意图;
[0019]图5为本申请一种实施例中渲染模块的处理流程示意图;
[0020]图6为本申请一种实施例的媒体播放器的处理流程示意图;
[0021]图7为本申请一种实施例的字幕单元的处理流程示意图;[0022]图8为本申请一种实施例的媒体播放器的应用实例示意图。
【具体实施方式】
[0023]下面通过【具体实施方式】结合附图对本申请作进一步详细说明。
[0024]针对目前多媒体播放器采用硬件解码无法进行色彩调节、加字幕等后处理的问题,本申请基于Direct3D来实现无论多媒体播放器播放时是否采用硬件加速,均可进行色彩调节、加字幕等后处理。
[0025]首先对本申请要用到的一些技术术语进行说明:
[0026](I) DirectX、Direct3D> DirectDraw> DirectShow:DirectX 是由微软公司创建开发的多媒体编程接口,由显示、声音、输入和网络四大部分组成,显示部分又分为DirectDraw和Direct3D,前者负责2D加速,后者负责3D加速,声音部分包括DirectSound,而DirectShow则是建立在DirectDraw和DirectSound基础之上的新一代流媒体处理开发包,与DirectX开发包一起发布。
[0027](2)表面:指的是为存储合成图像分配的预定空间,实质上就是一块显存区域。
[0028](3)将视频图像画到后台表面:是指将图像数据从一块显卡区域复制到另一块区域。
[0029](4)字幕:包括外部字幕和内部字幕,外部字幕是指有单独的字幕文件,即外部独立的字幕文件;内部字幕是指写在视频文件内的字幕流,是通过视频编码直接嵌入在图像中。
[0030]这里结合图2和图3来说明DirectX的VMR/EVR (视频混合渲染器/视频增强渲染器,Video Mixing Renderer/Enhanced Video Renderer)的结构及其媒体数据的处理过程。
[0031]为适应各种不同的应用,VMR采用了模块化设计策略,除了几个输入引脚(PinO、PinU…、Pin η)外,VMR还包括2到5个子组件,如图2所示,VMR包括混合器(Mixer)、图像合成器(Compositor)、分配演示器(Allocator Presenter,又称图像呈现单元)、核心同步控制器(Core Synchronization Unit)和窗口管理器(Window Manager)。
[0032]混合器用于负责收集每路输入流的信息,并将它们进行Z排序(即确定图像显示在窗口的位置);混合器还决定 每个输入引脚何时接受输入样本,同时,还要在恰当的时间通知图像合成器执行实际的混合;混合器也为每个输出图像添加时间戳;当应用程序提供一幅位图用于显示在合成后的图像的最上层时,即使输入流的Z顺序发生了改变,混合器也必须保证位图处于最上面。
[0033]图像合成器用于执行实际的混合,将多路输入流合成到一个单一的DirectDraw或Direct3D表面,DirectDraw或Direct3D表面由分配演示器提供,其中,表面是指为存储合成图像分配的预定空间。通常VMR/EVR内部提供一个缺省的图像合成器供应用程序进行二维的Alpha混合,应用程序可以自定义图像合成器。
[0034]分配演示器用于给图像合成器分配DirectDraw或Direct3D表面,同时负责与图形卡通信。应用程序可以自定义分配演示器,用于分配DirectDraw或Direct3D表面,并且在显示之前获得访问视频数据的能力。
[0035]核心同步控制器用于计算图像时间戳给图像合成器,使其真正意义上完成图像的合成功能。
[0036]窗口管理器只有当VMR工作在窗口模式下才使用。VMR这种组件式结构使应用程序可以根据需要以不同的方式对其操作,VMR支持三种不同的操作模式(即有窗口、无窗口和无呈现)和两种混合模式(即单一流和多个流)。有窗口模式是默认模式,VMR会创建一个单独的窗口,并将视频呈现到该窗口上;无窗口模式通过将视频直接呈现到应用程序窗口上,为应用程序提供了更强的控制能力;而无呈现模式使用程序自定义的分配演示器对象。
[0037]整个VMR/EVR中的数据流向如图3所示,两路或多路输入流在混合器混合,经图像合成器合成送入分配演示器处理,分配演示器再将处理的图像输出到显示器。
[0038]基于DirectX的VMR/EVR,本申请的设计思想是:为了在显示之前实现对图像的处理(如色彩调节、加字幕等),首先要实现的就是自定义分配演示器,用于替换系统默认的分配演示器,在视频图像渲染到显示器之前获取视频数据,实现字幕处理、色彩调节、旋转缩放等后处理。
[0039]实施例1
[0040]如图4所示为本申请的一种媒体播放器的实施方式,包括:分离模块101、解码模块102和渲染模块103。
[0041]分离模块101用于将输入的媒体源文件按文件类型进行分离并输出到解码模块,分离后可得到视频流数据、音频流数据(包括不同声道/语种的音频)和字幕流数据中的任意种。分离模块可采用本领域技术人员通用的相应技术实现,本申请对此不作限定。
[0042]解码模块102用于对分离后得到的视频流调用图形处理器自带的硬件解码器进行解码,应理解,对于分离后得到的音频流可调用相应的音频解码器进行解码,解码后的音频流可经音频输出设备播放,当然,解码后的视频流可以是未经视频后处理的数据,也可以是经过视频后处理的数据,具体合成算法可采用本领域相应的技术实现。解码模块的具体实现可采用本领域技术人员通用的`相应技术实现,本申请对此也不作限定。图形处理器支持DirectX9.0及以上接口和Direct3D Shader3.0及以上接口。
[0043]由于是采用图形处理器自带的硬件解码功能对视频流解码,即视频流数据的解码是在GPU而非CPU中进行,从而降低了播放视频时的CPU资源占有率,提高了 CPU处理效率。
[0044]渲染模块103用于渲染解码得到的视频流,并调用自定义演示组件111对视频流的各幅图像进行图像后处理,输出处理后的视频流。本实施例的?宣染|旲炔基于DirectX的视频混合渲染器和视频增强渲染器实现,即同样包括如前述的混合器、图像合成器、核心同步控制器和窗口管理器,不同之处在于该渲染模块的分配演示器为自定义的演示组件。自定义的演示组件包括色彩单元、字幕单元、形变单元中的至少一个,色彩单元用于对视频流中各幅图像进行色彩调节,字幕单元用于将字幕添加到视频流的各幅图像,形变单元用于对视频流中各幅图像进行旋转、缩放、平移。
[0045]本实施例采用自定义的演示组件代替DirectX的VMR/EVR中的分配演示器组件,自定义演示组件兼容DirectX的VMR/EVR中的分配演示器组件的功能,还提供了图像后处理接口。当视频流数据到达自定义演示组件时,数据已经处于GPU中,若渲染模块需要显示图像,则调用自定义演示组件上的接口进行图像显示,对于VMR7使用DirectDraw,而对于VMR9/EVR则使用Direct3D进行图像显示。当接收到用户界面的处理指令时,渲染模块调用底层硬件的接口对图像进行相应处理。自定义演示组件具体就是在基于DirectX的VMR/EVR中的分配演示器组件的基础上,创建图像处理接口,如创建接口 IColorControl以处理色彩控制,创建接口 ISubtitle以处理字幕添加。
[0046]渲染模块中处理的流程可参考图5,首先采用混合器完成混合,然后自定义演示组件判断是否存在色彩控制任务、字幕添加任务、其他任务(如形变任务)中的任意种任务,如果存在色彩控制任务则调用色彩单元进行色彩调节,如果存在字幕则调用字幕单元进行字幕添加,如果存在形变任务则调用形变接口进行图像的旋转、缩放、平移等处理,处理完所有任务后,当然,如果不存在任何任务则直接输出视频流。也就是说自定义演示组件对任务的处理是并行的,当然,也可以存在先后顺序,例如可以先执行形变任务、再执行色彩控制任务、最后执行字幕添加任务,或者是其他顺序,又或者,自定义演示组件在处理时首先判断是否色彩控制任务,若有,执行色彩调节;若无,再判断是否有外部字幕/内部字幕需要显示,如果有,则加载生成的字幕图像,然后与视频图像合成。媒体播放器的一种处理流程如图6所示,包括如下步骤:
[0047]步骤S101,利用系统显卡的硬件解码功能对输入的视频源进行解码;
[0048]步骤S102,判断是否有色彩控制任务,若是则执行步骤S103,若否则执行步骤S104 ;
[0049]步骤S103,对图像进行色彩调节,继续执行S104 ;
[0050]步骤S104,判断是否有字幕添加任务,若是则执行步骤S105,若否则执行步骤S106 ;
[0051]步骤S105,加载字幕合成到图像,继续执行S106 ;
[0052]步骤S106,判断是否有形变任务,若是则执行步骤S107,若否则执行步骤S108 ;
[0053]步骤S107,对视频图像进行旋转、缩放、平移等处理;
[0054]步骤S108,对图像渲染输出;
[0055]步骤S109,将渲染后的视频输出到显示器予以显示。
[0056]一种具体实现中,渲染模块使用DirectDraw或Direct3D渲染图像的步骤如下:
[0057]I)创建显示设备系统对象,在自定义演示组件初始化时进行。
[0058]2)创建显不表面 IDirectDrawSurface7、IDirect3DSurface9tj 创建IDirectDrawSurface7表面时指定为3D设备标志,这样DirectDraw的表面也可同Direct3D 一起处理。
[0059]3)在每个视频帧混合完成后,图像已经保存在表面中。对表面图像进行如前述的一系列图像后处理,合成图像到表面,完成后渲染到显示设备进行播放。
[0060]4)释放显示设备系统对象,在自定义演示组件销毁时进行,即在当前文件播放结束后释放空间。
[0061]自定义演示组件111中的色彩单元、字幕单元和形变单元中采用的算法可通过视频图像处理相关的常用算法实现,也可以采用本申请的方案,下面分别对色彩单元和字幕单元作进一步描述。
[0062]本实施例中,色彩单元基于Direct3D的像素着色器(Pixel Shader)实现。像素着色器是在每一像素光栅化处理期间显卡的GPU上执行的一种程序,它不像顶点着色器(vertex shader),Direct3D不会用软件方法仿效像素着色器的功能。它本质上代替了固定管道功能中的多重纹理阶段并提供直接操作单独像素和访问每一个像素纹理坐标的能力。这种直接访问像素和纹理坐标允许完成多种特殊效果,比如多重纹理、逐像素光照、视野深度、云层仿真、火焰仿真和复杂阴影技术。
[0063]一种具体实现中,应用像素着色器的步骤如下:
[0064]I)使用高级着色语言(HLSL, High Level Shader Language)写出并编译 pixelshader 代码;
[0065]2)基于编译后的着色器代码创建IDirect3DPixelShader9表面以表不像素着色器;
[0066]3)通过 IDirect3DDevice9:: SetPixelShader 方法开启像素着色器。
[0067]4)当前视频播放完毕后销毁该像素着色器。
[0068]本实施例的图形处理器支持DirectX9.0及以上接口和Direct3D Shader3.0及以上接口。也就是说,使用像素着色器之前要先判断该像素着色器的版本是否为Direct3DShader3.0及以上。可以通过检查D3DCAPS9结构体的PixelShaderVersion成员和D3DVS_
VERSION宏来检测显卡支持的像素着色器版本,下面的代码片断举例说明了这种判断。
[0069]
/7 Iflhe device's supported version is less than version 2.0
if( caps.PixelShaderV^rsion < D3DPS_VERSION(2, 0))
{
ii Then pixel shader version 2.0 is not supported on this device
}
[0070]接着根据HLSL语言规则及色彩调节的算法编写HLSL代码,然后进行编译,最后设置给D3D对象以完成色彩调节。值得注意的是,在HLSL中,颜色基本都是使用XRGB表示(X代表保留位),一般将其表示为一个四维矢量,数据类型是float4。比如float4Color,那么接下来就可以用color.X、color, y、color, z来分别访问R、G、B三个分量了。对于24位或者32位图像来说,RGB每个通道都是8位,转化为10进制就是0-255的整数,不过在HLSL中情况不同,O对应的是float (0.0)而255对应的是float (1.0),所以白色的表示不再是(255,255,255)而是 float3(l.0, 1.0, 1.0)或者 float4(l.0, 1.0, 1.0, 1.0)。
[0071]最基本的四种色彩调节算法为亮度调节、对比度调节、色度调节和饱和度调节。一种具体实现中,对于亮度调节,只需要对YUV分量中的Y加上一个常量,范围为-1到I ;对于对比度调节,对比度需要使亮的更亮,暗的更暗,调节时需平滑过渡,最简单的算法公式为k* (color - 0.5)+color,扩展后的算法公式为k* (color - 0.5)+0.5 ;对于色度调节,其基本计算公式为 U’=U X Cos (H) +V X Sin (H), V’=V x Cos(H)-U x Sin (H),其中,H 是以角度表示的色彩调节参数;而对于饱和度调节,其U、V可分别乘以一个常数。以下给出色彩控制HLSL示例代码。
[0072]
【权利要求】
1.一种媒体播放器,其特征在于,包括: 分离模块,用于将输入的媒体源文件按文件类型进行分离并输出到解码模块; 解码模块,用于对分离后得到的视频流调用图形处理器自带的硬件解码器进行解码; 渲染模块,用于渲染解码得到的视频流,并调用自定义演示组件对视频流的各幅图像进行图像后处理,输出处理后的视频流。
2.如权利要求1所述的媒体播放器,其特征在于,所述自定义演示组件包括色彩单元、字幕单元、形变单元中的至少一个,所述色彩单元用于对视频流中各幅图像进行色彩调节,所述字幕单元用于将字幕添加到视频流的各幅图像,所述形变单元用于对视频流中各幅图像进行旋转、缩放、平移。
3.如权利要求2所述的媒体播放器,其特征在于,所述字幕单元包括: 创建子单元,用于向从外部接口引入的字幕文本数据添加时间戳,形成时间戳字幕队列,创建保存字幕图像的缓冲,将从时间戳字幕队列中查找到的当前字幕文本形成字幕绘制图像,并添加字幕效果,将添加效果后的字幕绘制图像输出到缓冲中,得到最终的字幕图像; 加载子单元,用于复制视频流的各幅图像到后台表面,查找当前时间对应的字幕图像,将查找到的字幕图像合成到后台表面中相应的各幅图像。
4.如权利要求2或3所述的媒体播放器,其特征在于,所述色彩单元基于Direct3D的像素着色器实现;所述渲染模炔基于DirectX的视频混合渲染器和视频增强渲染器实现。
5.如权利要求1所述 的媒体播放器,其特征在于,所述图形处理器支持DirectX9.0及以上接口和Direct3D Shader 3.0及以上接口。
6.—种媒体播放方法,其特征在于,包括: 分离步骤,将输入的媒体源文件按文件类型进行分离并输出到解码模块; 解码步骤,对分离后得到的视频流调用图形处理器自带的硬件解码器进行解码; 渲染步骤,渲染解码得到的视频流,并调用自定义演示组件对视频流的各幅图像进行图像后处理,输出处理后的视频流。
7.如权利要求6所述的媒体播放方法,其特征在于,所述自定义演示组件包括色彩单元、字幕单元、形变单元中的至少一个,所述色彩单元用于对视频流中各幅图像进行色彩调节,所述字幕单元用于将字幕添加到视频流的各幅图像,所述形变单元用于对视频流中各幅图像进行旋转、缩放、平移; 所述渲染步骤包括: 混合步骤,收集输入的视频流并通知所述自定义演示组件进行处理; 执行步骤,所述自定义演示组件判断是否存在色彩控制任务、字幕添加任务、形变任务中的任意种任务,如果存在色彩控制任务则调用所述色彩单元进行色彩调节,如果存在字幕则调用所述字幕单元进行字幕添加,如果存在形变任务则调用所述形变单元进行图像的旋转、缩放、平移; 输出步骤,将执行处理后的视频流输出到显示装置予以显示。
8.—种硬件加速下的视频后处理方法,其特征在于,包括: 自定义步骤,基于DirectX的视频混合渲染器和视频增强渲染器,对演示组件自定义以支持图像后处理接口,所述图像后处理接口包括色彩接口、字幕接口和形变接口,所述色彩接口实现对视频流中各幅图像的色彩调节,所述字幕接口实现将字幕添加到视频流的各幅图像,所述形变接口实现对视频流中各幅图像的旋转、缩放、平移。
9.如权利要求8所述的硬件加速下的视频后处理方法,其特征在于,所述硬件加速所依赖的图形处理器支持 DirectX 9.0及以上接口和Direct3DShader 3.0及以上接口。
【文档编号】H04N5/445GK103700385SQ201210369800
【公开日】2014年4月2日 申请日期:2012年9月27日 优先权日:2012年9月27日
【发明者】王云刚 申请人:深圳市快播科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1