视频画面处理方法、装置及电子设备与流程

文档序号:14943050发布日期:2018-07-13 21:34

本发明涉及数据处理领域,具体而言,涉及一种视频画面处理方法、装置及电子设备。



背景技术:

在Android系统中,采用硬件解码视频时,若出现将当前播放视频画面的播放器切换到后台,或者将全屏播放的视频画面最小化,又或者将全屏播放的视频画面进行小窗切换等情况时,会导致视频窗口可视区域的销毁,从而使得硬件解码器关闭,当将后台的播放器又重新切换回来时,或将最小化的视频画面全屏切换,又或是将小窗画面又重新切换为全屏画面时,需要重新创建视频窗口可视区域及硬件解码器,由于重新创建硬件解码器有一定的耗时,会导致视频卡顿,用户体验差。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种视频画面处理方法、装置及电子设备,以解决上述问题。

为了实现上述目的,本发明实施例采用的技术方案如下:

第一方面,本发明实施例提供了一种视频画面处理方法,所述方法包括:将硬件解码器解码的视频画面绘制到预先创建的内存渲染区域以及视频窗口可视区域;当需要重新创建视频窗口可视区域时,将绘制在所述内存渲染区域上的视频画面绘制到新的视频窗口可视区域。

第二方面,本发明实施例提供了一种视频画面处理装置,所述装置包括:第一处理模块,用于将硬件解码器解码的视频画面绘制到预先创建的内存渲染区域以及视频窗口可视区域;第二处理模块,用于当需要重新创建视频窗口可视区域时,将绘制在所述内存渲染区域上的视频画面绘制到新的视频窗口可视区域。

第三方面,本发明实施例提供了一种电子设备,所述电子设备包括存储器及处理器,所述存储器耦接到所述处理器,所述存储器存储指令,当所述指令由所述处理器执行时以使所述处理器执行以下操作:将硬件解码器解码的视频画面绘制到预先创建的内存渲染区域以及视频窗口可视区域;当需要重新创建视频窗口可视区域时,将绘制在所述内存渲染区域上的视频画面绘制到新的视频窗口可视区域。

与现有技术相比,本发明实施例提供的一种视频画面处理方法、装置及电子设备,由于预先创建的内存渲染区域以及视频窗口可视区域,若出现当前播放视频画面的播放器切换到后台,或者将全屏播放的视频画面最小化,又或者将全屏播放的视频画面进行小窗切换等情况时,由于只会销毁视频窗口可视区域,而内存渲染区域并不会被销毁,因此硬件解码器并不会被关闭,且由于将硬件解码器解码的视频画面绘制到预先创建的内存渲染区域以及视频窗口可视区域,因此当需要重新创建视频窗口可视区域时,无需重新创建硬件解码器,可以直接将绘制在所述内存渲染区域上的视频画面绘制到新的视频窗口可视区域,解决了视频卡顿的问题,提高了用户体验。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1是本发明实施例提供的电子设备的结构示意图。

图2是本发明第一实施例提供的一种视频画面处理方法的流程图。

图3是本发明第一实施例提供的一种视频画面处理方法中步骤S200的流程图。

图4是本发明第一实施例提供的一种视频画面处理方法中步骤S220的流程图。

图5是本发明第一实施例提供的一种视频画面处理方法中步骤S300的流程图。

图6是本发明第二实施例提供的一种视频画面处理方法的流程图。

图7是本发明实施例提供的一种视频画面处理装置的结构框图。

图8是本发明实施例提供的一种视频画面处理装置中第一处理模块的结构框图。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

图1示出了一种可应用于本发明实施例中的电子设备100的结构框图。如图1所示,电子设备100包括存储器102、存储控制器104,一个或多个(图中仅示出一个)处理器106、外设接口108、射频模块110、音频模块112、触控屏幕114等。这些组件通过一条或多条通讯总线/信号线116相互通讯。

存储器102可用于存储软件程序以及模块,如本发明实施例中的视频画面处理方法及装置对应的程序指令/模块,处理器106通过运行存储在存储器102内的软件程序以及模块,从而执行各种功能应用以及数据处理,如本发明实施例提供的视频画面处理方法。

存储器102可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。处理器106以及其他可能的组件对存储器102的访问可在存储控制器104的控制下进行。

外设接口108将各种输入/输入装置耦合至处理器106以及存储器102。在一些实施例中,外设接口108,处理器106以及存储控制器104可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。

射频模块110用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通讯网络或者其他设备进行通讯。

音频模块112向用户提供音频接口,其可包括一个或多个麦克风、一个或者多个扬声器以及音频电路。

触控屏幕114在电子设备100与用户之间同时提供一个输出及输入界面。具体地,触控屏幕114向用户显示视频输出,这些视频输出的内容可包括文字、图形、视频及其任意组合。

可以理解,图1所示的结构仅为示意,电子设备100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。

本发明实施例提供的视频画面处理方法可以运行于图1所示的电子设备100中。该方法通过将硬件解码器解码的视频画面绘制到预先创建的内存渲染区域以及视频窗口可视区域,保证了视频的正常播放,并且由于预先创建内存渲染区域以及视频窗口可视区域,因此当出现当前播放视频画面的播放器切换到后台,或者将全屏播放的视频画面最小化,又或者将全屏播放的视频画面进行小窗切换等情况时,硬件解码器并不会被关闭,且由于将硬件解码器解码的视频画面绘制到预先创建的内存渲染区域以及视频窗口可视区域,因此当需要重新创建视频窗口可视区域时,无需重新创建硬件解码器,可以直接将绘制在所述内存渲染区域上的视频画面绘制到新的视频窗口可视区域,解决了视频卡顿的问题,提高了用户体验。下面对该视频画面处理方法进行详细说明。

图2示出了本发明实施例提供的一种视频画面处理方法的流程图,请参阅图2,该视频画面处理方法运行于上述电子设备中,所述方法包括:

步骤S200,将硬件解码器解码的视频画面绘制到预先创建的内存渲染区域以及视频窗口可视区域。

硬件解码器解码,是指不依赖于CPU的视频解码。作为一种实施方式,硬件解码器解码可以是通过GPU(Graphics Processing Unit,图像处理器)解码,硬件解码器可以是GPU解码时使用的解码单元。

硬件解码器解码的视频画面,是指电子设备将接收到的压缩视频流通过硬件解码器解码产生的视频画面。

将硬件解码器解码的视频画面绘制到预先创建的内存渲染区域以及视频窗口可视区域的实施方式也有多种。作为一种实施方式,可以将硬件解码器解码的每帧视频画面同时绘制到预先创建的内存渲染区域以及视频窗口可视区域。作为另一种实施方式,也可以将硬件解码器解码的每帧视频画面先绘制到该视频窗口可视区域,再将硬件解码器解码的视频画面绘制到该内存渲染区域。

作为又一种实施方式,请参阅图3,步骤S200可以包括:

步骤S210,将硬件解码器解码的每帧视频画面依次绘制到预先创建的内存渲染区域。

在安装有安卓操作系统的电子设备中,通常采用surface机制进行画面渲染。因此,作为一种实施方式,在安装有安卓操作系统的电子设备中,该内存渲染区域为surface渲染机制中的surface对象。其中,surface对象对应内存中一块区域,安卓操作系统的绘图操作可以作用于它,即安卓操作系统可以调用绘图操作将硬件解码器解码的每帧视频画面的数据依次绘制到surface对象对应的内存区域。当安卓操作系统调用绘图操作将一帧视频画面的数据绘制到surface对象时,此时该帧视频画面对于用户而言是不可见的。

预先创建内存渲染区域的方式也有多种。作为一种实施方式,可以调用malloc函数,开辟一块足够大小的内存区域,作为内存渲染区域。作为另一种实施方式,若该内存渲染区域为surface渲染机制中的surface对象,则可以根据surface渲染机制中创建surface对象的方式来预先创建的内存渲染区域。进一步的,若所述视频窗口可视区域为surface渲染机制中的GLSurfaceView对象,则在surface渲染机制中可以通过下述函数的调用来预先创建内存渲染区域:先创建GLSurfaceView对象,该GLSurfaceView对象包括一个GLSurfaceView渲染线程;调用该GLSurfaceView渲染线程的函数生成对应的TextureID;进一步的,调用创建SurfaceTexture对象的函数,并将该TextureID作为该函数的入口参数传入,生成一个SurfaceTexture对象;调用创建surface对象的函数,并将该SurfaceTexture对象作为该函数的入口参数传入,生成对应的surface对象。其中,该创建GLSurfaceView对象的函数,通过GLSurfaceView渲染线程的函数生成对应的TextureID的函数,创建SurfaceTexture对象的函数,以及创建surface对象的函数在安卓操作系统的surface渲染机制下都是可实现的,此处不再赘述。

步骤S220,将绘制到所述内存渲染区域的视频画面绘制到所述视频窗口可视区域。

作为一种实施方式,在安装安卓操作系统的电子设备中,该视频窗口可视区域可以为GLSurfaceView对象。其中,该GLSurfaceView对象内嵌另一块内存渲染区域surface对象,该GLSurfaceView对象内嵌的surface对象专门负责OpenGL的渲染。

将预先创建的内存渲染区域surface对象上的视频画面,首先绘制到GLSurfaceView对象内嵌的surface对象上,再通过调用GLSurfaceView.Renderer函数,将GLSurfaceView对象内嵌的surface对象上的视频画面显示出来。

进一步的,若所述视频窗口可视区域为GLSurfaceView对象,在创建GLSurfaceView对象时,会同时生成一个对应的GLSurfaceView渲染线程,在Android系统中,每个GLSurfaceView渲染线程对应一个唯一的识别号,也就是说该视频窗口可视区域对应一个唯一识别号,作为一种实施方式,请参阅图4,步骤220可以包括:

步骤S221,将所述内存渲染区域与所述唯一识别号绑定。

作为一种实施方式,该GLSurfaceView渲染线程对应的唯一的识别号,可以是调用该GLSurfaceView渲染线程的函数生成对应的TextureID。该内存渲染区域(surface对象)是根据该TextureID创建的。

作为一种实施方式,在安装安卓操作系统的电子设备中,可以调用attachToGLContext函数,将该TextureID与该surface对象绑定起来。若该surface对象是根据SurfaceTexture对象生成的,也可以调用attachToGLContext函数,将该TextureID与该SurfaceTexture对象绑定起来。可以理解的是,将该TextureID与该surface对象绑定起来,或是将该TextureID与该SurfaceTexture对象绑定起来,其实质都是为了后续渲染线程通过该唯一识别号寻找到对应的内存渲染区域。

步骤S222,根据所述唯一识别号,将绘制到所述内存渲染区域的当前视频画面绘制到视频窗口可视区域。

作为一种实施方式,该GLSurfaceView渲染线程调用绘图操作,并将该TextureID作为绘图操作的入口函数传入,实现将绘制到surface对象的当前视频画面绘制到该GLSurfaceView对象。

步骤S223,当在所述视频窗口可视区域的当前视频画面绘制完成,解除所述内存渲染区域与所述唯一识别号的绑定。

作为一种实施方式,在安装安卓操作系统的电子设备中,可以调用detachFromGLContext函数,将该TextureID与该surface对象解绑(或者该TextureID与该SurfaceTexture对象解绑)。。

可以理解的是,由于当出现将当前播放视频画面的播放器切换到后台,或者将全屏播放的视频画面最小化(对应GLSurfaceView隐藏),又或者将全屏播放的视频画面进行小窗切换(对应视频GLSurfaceView从View树中移走)等情况时,视频窗口可视区域(GLSurfaceView对象)会被销毁,而当将后台的播放器又重新切换回来时,或将最小化的视频画面全屏切换,又或是将小窗画面又重新切换为全屏画面时,视频窗口可视区域(GLSurfaceView对象)又会被重建,不同GLSurfaceView渲染线程对应不同的唯一的识别号,因此,当GLSurfaceView对象不断的销毁和创建时,其对应的唯一识别号会不断改变。进一步的,由于后续渲染线程是通过该唯一识别号寻找到对应的内存渲染区域的,因此,每当根据所述唯一识别号,将绘制到所述内存渲染区域的当前视频画面绘制到视频窗口可视区域之前,都先将所述内存渲染区域与所述唯一识别号绑定,以使渲染线程根据所述唯一识别号,能够寻找到正确的内存渲染区域。当在所述视频窗口可视区域的当前视频画面绘制完成,解除所述内存渲染区域与所述唯一识别号的绑定,以保证下一次将绘制到所述内存渲染区域的当前视频画面绘制到视频窗口可视区域之前,能够重新进行最新的绑定。

步骤S300,当需要重新创建视频窗口可视区域时,将绘制在所述内存渲染区域上的视频画面绘制到新的视频窗口可视区域。

可以理解的是,当将后台的播放器又重新切换回来时,或将最小化的视频画面全屏切换(对应View设为可见),又或是将小窗画面又重新切换为全屏画面(对应视频View添加回View树)时,都需要重新创建视频窗口可视区域。

请参阅图5,作为一种实施方式,所述新的视频窗口可视区域对应一个新的唯一识别号,步骤S300可以包括:

步骤S310,将所述内存渲染区域与所述新的唯一识别号绑定。

绑定的实施方式可以与步骤S221相似,此处不再赘述。

步骤S320,根据所述新的唯一识别号,将绘制到所述内存渲染区域的当前视频画面绘制到新的视频窗口可视区域。

步骤S320的实施方式可以与步骤S222相似,此处不再赘述。

步骤S330,当在所述新的视频窗口可视区域的当前视频画面绘制完成,解除所述内存渲染区域与所述新的唯一识别号的绑定。

解绑的实施方式可以与步骤S223相似,此处不再赘述。

可以理解的是,通过这种方式,使得每次重新创建视频窗口可视区域时,都是根据新的唯一识别号来寻找对应的内存渲染区域。

请参阅图6,下面以该视频窗口可视区域为GLSurfaceView对象,该内存渲染区域为surface对象对该视频画面处理方法的一种实施方式进行说明,该方法运行于安装有安卓系统的电子设备中。

步骤S401,预先创建GLSurfaceView对象,该GLSurfaceView对象包括一个GLSurfaceView渲染线程。

步骤S402,该GLSurfaceView渲染线程生成对应的TextureID。

步骤S403,根据该TextureID,生成一个SurfaceTexture对象。

步骤S404,根据该SurfaceTexture对象,生成对应的surface对象。

步骤S405,将该surface对象发送给视频播放器。

步骤S406,该视频播放器将硬件解码器解码的一帧视频画面绘制到该surface对象,绘制完成后,发送通知到该GLSurfaceView对象。

步骤S407,该GLSurfaceView对象接收到该通知,在该GLSurfaceView渲染线程内部调用安卓公开的接口函数attachToGLContext,将SurfaceTexture对象与该GLSurfaceView渲染线程生成的TextureID绑定起来。

步骤S408,该GLSurfaceView渲染线程根据TextureID,将绘制到surface对象上的视频画面绘制到该GLSurfaceView对象上。

步骤S409,当在该GLSurfaceView对象上的当前视频画面绘制完成,调用安卓公开的接口函数detachFromGLContext,解除SurfaceTexture对象与该TextureID的绑定。

步骤S410,当需要重新创建GLSurfaceView对象时,该重新创建的GLSurfaceView对象对应一个新的GLSurfaceView渲染线程,该新的GLSurfaceView渲染线程重新生成一个新的TextureID,调用安卓公开的接口函数attachToGLContext,将SurfaceTexture对象与该新的TextureID绑定起来,该新的GLSurfaceView渲染线程根据新的TextureID,将绘制到surface对象上的视频画面绘制到该新的GLSurfaceView对象上,当在该新的GLSurfaceView对象上的当前视频画面绘制完成,调用安卓公开的接口函数detachFromGLContext,解除SurfaceTexture对象与该新的TextureID的绑定。

本发明实施例提供的视频画面处理方法,由于预先创建的内存渲染区域以及视频窗口可视区域,若出现当前播放视频画面的播放器切换到后台,或者将全屏播放的视频画面最小化,又或者将全屏播放的视频画面进行小窗切换等情况时,由于只会销毁视频窗口可视区域,而内存渲染区域并不会被销毁,因此硬件解码器并不会被关闭,且由于将硬件解码器解码的视频画面绘制到预先创建的内存渲染区域以及视频窗口可视区域,因此当需要重新创建视频窗口可视区域时,无需重新创建硬件解码器,可以直接将绘制在所述内存渲染区域上的视频画面绘制到新的视频窗口可视区域,解决了视频卡顿的问题,提高了用户体验。

请参阅图7,是本发明实施例提供的视频画面处理装置500的功能模块示意图。所述视频画面处理装置500运行于所述电子设备100,所述视频画面处理装置500包括第一处理模块510及第二处理模块520。

第一处理模块510,用于将硬件解码器解码的视频画面绘制到预先创建的内存渲染区域以及视频窗口可视区域。

作为一种实施方式,所述视频窗口可视区域为GLSurfaceView对象,所述内存渲染区域为surface对象。

作为一种实施方式,请参阅图8,所述第一处理模块510可以包括第一绘制模块511及第二绘制模块512。

所述第一绘制模块511,用于将硬件解码器解码的每帧视频画面依次绘制到预先创建的内存渲染区域。

所述第二绘制模块512,用于将绘制到所述内存渲染区域的视频画面绘制到视频窗口可视区域。

作为一种实施方式,所述视频窗口可视区域对应一个唯一识别号,所述第二绘制模块512,具体用于将所述内存渲染区域与所述唯一识别号绑定;根据所述唯一识别号,将绘制到所述内存渲染区域的当前视频画面绘制到视频窗口可视区域;当在所述视频窗口可视区域的当前视频画面绘制完成,解除所述内存渲染区域与所述唯一识别号的绑定。

作为一种实施方式,所述视频窗口可视区域为GLSurfaceView对象,所述内存渲染区域为surface对象。所述GLSurfaceView对象包括一个GLSurfaceView渲染线程;所述唯一识别号是由所述GLSurfaceView渲染线程生成的TextureID;所述surface对象是根据该TextureID创建的。

第二处理模块520,用于当需要重新创建视频窗口可视区域时,将绘制在所述内存渲染区域上的视频画面绘制到新的视频窗口可视区域。

作为一种实施方式,所述新的视频窗口可视区域对应一个新的唯一识别号,所述第二处理模块520,具体用于将所述内存渲染区域与所述新的唯一识别号绑定;根据所述新的唯一识别号,将绘制到所述内存渲染区域的当前视频画面绘制到新的视频窗口可视区域;当在所述新的视频窗口可视区域的当前视频画面绘制完成,解除所述内存渲染区域与所述新的唯一识别号的绑定。

以上各模块可以是由软件代码实现,此时,上述的各模块可存储于电子设备100的存储器102内。以上各模块同样可以由硬件例如集成电路芯片实现。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本发明实施例所提供的视频画面处理装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

再多了解一些
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1