视频解码数据传输方法及装置与流程

文档序号:11157721阅读:377来源:国知局
视频解码数据传输方法及装置与制造工艺

本公开涉及移动终端技术技术领域,具体而言,涉及一种视频解码数据传输方法以及一种视频解码数据传输装置。



背景技术:

随着集成电路技术以及通信网络技术的飞速发展,移动终端逐渐拥有了强大的处理能力和通信功能。目前,移动终端已经从简单的通话工具变为一个综合信息处理平台,成为渗透广泛、普及迅速、影响巨大、深入至人类社会生活方方面面的终端产品。

在移动终端用户量迅速增长的背景下,越来越多的用户选择使用移动终端进行视频观看。参考图1所示,现有的视频解码流程例如可以包括:首先将源文件通过Inport拷贝到解码库中,利用半波解码进行解码,解码完成后将解码数据通过Outport拷贝到视频库中;播放时,再将解码数据拷贝到GPU(Graphics Processing Unit,图形处理器)中,经处理后才能播放。上述方式对于CPU的占用率非常的大,播放720P的视频时,CPU的占用率在70%以上;播放1080P的视频时,CPU的占用率可能到90%以上。因此,现有技术中的技术方案还存在有待改进之处。

需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。



技术实现要素:

本公开的目的在于提供一种视频解码数据传输方法以及一种视频解码数据传输装置,进而至少在一定程度上克服由于相关技术的限制和缺陷而导致的一个或者多个问题。

根据本公开的一个方面,提供一种视频解码数据传输方法,包括:

通过通道管理函数创建一包含文件标识符的ION共享内存;

根据所述文件标识符构建私有句柄结构对象并根据所述私有句柄结构对象以及所述ION共享内存创建本地窗口缓存器;

在接收到视频解码数据时,将所述视频解码数据填充至所述本地窗口缓存器中;

将被所述视频解码数据填充的所述本地窗口缓存器对应的所述私有句柄结构对象传递至一视频库中;

所述视频库根据接收到的所述本地窗口缓存器对应的所述私有句柄结构对象访问所述本地窗口缓存器中的所述视频解码数据。

在本公开的一种示例性实施例中,根据所述文件标识符构建私有句柄结构对象并根据所述私有句柄结构对象以及所述ION共享内存创建本地窗口缓存器包括:

根据所述文件标识符构建若干私有句柄结构对象;

根据若干所述私有句柄结构对象以及所述ION共享内存创建若干本地窗口缓存器;其中,

各所述私有句柄结构对象与各所述本地窗口缓存器一一对应。

在本公开的一种示例性实施例中,所述视频解码数据传输方法还包括:

利用所述本地窗口缓存器创建一共享数据接口;

所述共享数据接口根据所述本地窗口缓存器对应的所述私有句柄结构对象获取所述本地窗口缓存器中的视频解码数据并渲染至一显示设备上。

在本公开的一种示例性实施例中,所述共享数据接口包括开放式图形库或者矢量图形算法库中的一种或多种。

在本公开的一种示例性实施例中,所述视频解码数据为YUV数据。

根据本公开的另一个方面,提供一种视频解码数据传输装置,包括:

ION共享内存创建模块:用于通过通道管理函数创建一包含文件标识符的ION共享内存;

本地窗口缓存器创建模块:用于根据所述文件标识符构建私有句柄结构对象并根据所述私有句柄结构对象以及所述ION共享内存创建本地窗口缓存器;

数据填充模块:用于在接收到视频解码数据时,将所述视频解码数据填充至所述本地窗口缓存器中;

私有句柄结构对象传递模块:用于将被所述视频解码数据填充的所述本地窗口缓存器对应的所述私有句柄结构对象传递至一视频库中;

视频解码数据访问模块:用于所述视频库根据接收到的所述本地窗口缓存器对应的所述私有句柄结构对象访问所述本地窗口缓存器中的所述视频解码数据。

在本公开的一种示例性实施例中,根据所述文件标识符构建私有句柄结构对象并根据所述私有句柄结构对象以及所述ION共享内存创建本地窗口缓存器包括:

根据所述文件标识符构建若干私有句柄结构对象;

根据若干所述私有句柄结构对象以及所述ION共享内存创建若干本地窗口缓存器;其中,

各所述私有句柄结构对象与各所述本地窗口缓存器一一对应。

在本公开的一种示例性实施例中,所述视频解码数据传输装置还包括:

共享数据接口创建模块:用于利用所述本地窗口缓存器创建一共享数据接口;

视频解码数据渲染模块:用于所述共享数据接口根据所述本地窗口缓存器对应的所述私有句柄结构对象获取所述本地窗口缓存器中的视频解码数据并渲染至一显示设备上。

在本公开的一种示例性实施例中,所述共享数据接口包括开放式图形库或者矢量图形算法库中的一种或多种。

在本公开的一种示例性实施例中,所述视频解码数据为YUV数据。

根据本公开的再一个方面,提供一种移动终端,包括:

处理器;以及

存储器,用于存储所述处理器的可执行指令;

其中所述处理器配置为经由执行所述可执行指令来执行以下操作:

通过通道管理函数创建一包含文件标识符的ION共享内存;

根据所述文件标识符构建私有句柄结构对象并根据所述私有句柄结构对象以及所述ION共享内存创建本地窗口缓存器;

在接收到视频解码数据时,将所述视频解码数据填充至所述本地窗口缓存器中;

将被所述视频解码数据填充的所述本地窗口缓存器对应的所述私有句柄结构对象传递至一视频库中;

所述视频库根据接收到的所述本地窗口缓存器对应的所述私有句柄结构对象访问所述本地窗口缓存器中的所述视频解码数据。

本公开一种视频解码数据传输方法及装置,通过创建一包含文件标识符的ION共享内存并创建本地窗口缓存器;然后将接收到的视频解码数据填充至本地窗口缓存器中;当视频库需要访问该视频解码数据时,可以直接根据本地窗口缓存器对应的私有句柄结构对象访问本地窗口缓存器中的所述视频解码数据;通过利用私有句柄结构对象直接访问本地窗口缓存器中的视频解码数据,减少了从视频输出到视频库之间的内存拷贝,减少了CPU的压力,提高了系统的整体性能。

本公开其他视频解码数据传输方法及装置,进一步的通过创建ION共享内存以及共享数据接口,减少了从CPU到GPU之间的内存拷贝,提高了整体的播放速度。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1示意性示出一种现有的视频解码播放的流程图。

图2示意性示出一种视频解码数据传输的方法流程图。

图3示意性示出创建本地窗口缓存器的方法流程图。

图4示意性示出另一种视频解码数据传输的方法流程图。

图5示意性示出一种视频解码数据传输的装置框图。

图6示意性示出一种应用上述视频解码数据传输方法或视频解码数据传输装置的移动终端的结构框图。

具体实施方式

现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。

此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

本示例实施方式中首先提供了一种视频数据解码传输方法。参考图2所示,该视频数据解码传输方法可以包括以下步骤:

步骤S210.通过通道管理函数创建一包含文件标识符的ION共享内存。

步骤S220.根据所述文件标识符构建私有句柄结构对象并根据所述私有句柄结构对象以及所述ION共享内存创建本地窗口缓存器。

步骤S230.在接收到视频解码数据时,将所述视频解码数据填充至所述本地窗口缓存器中。

步骤S240.将被所述视频解码数据填充的所述本地窗口缓存器对应的所述私有句柄结构对象传递至一视频库中。

步骤S250.所述视频库根据接收到的所述本地窗口缓存器对应的所述私有句柄结构对象访问所述本地窗口缓存器中的所述视频解码数据。

上述视频数据解码方法,通过创建ION共享内存并利用私有句柄结构对象直接访问本地窗口缓存器中的视频解码数据,减少了从视频输出到视频库之间的内存拷贝,减少了CPU的压力,提高了系统的整体性能。

下面,将对本示例实施方式中视频解码数据传输方法的各步骤进行详细的说明。

在步骤S210中,通过通道管理函数创建一包含文件标识符的ION共享内存。

在本示例实施方式中,通道管理函数(ioctl)是设备驱动程序中对设备的I/O通道进行管理的函数;其中,对I/O通道进行管理可以包括对设备的一些特性进行控制,例如可以是串口的传输波特率、马达的转速等等。ioctl的参数例如可以包括int ioctl(int fd,int cmd,…);其中,fd例如可以包括用户程序打开设备时使用open函数返回的文件标识符,cmd例如可以包括用户程序对设备的控制命令;省略号例如可以是一些补充参数,补充参数的个数可以为1或者0,由cmd来决定;上述ION共享内存例如可以是google在Android4.0ICS为了解决内存碎片管理而引入的通用内存管理器,它会更加融合Kernel(操作系统内核);ION共享内存与PMEM类似,可以管理一或多个内存池,其中有一些会在Boot Time(启动时间)的时候预先分配,以备给特殊的硬件(例如可以包括GPU以及显示控制器等等)使用;ION共享内存可以通过heaps(堆或者堆内存)来管理这些pool(内存池);ION共享内存可以被userspace(用户控件)的process(进程)之间或者内核中的模块之间进行内存共享。举例而言:

在本示例中,通过ioctl创建ION共享内存,使得存储在本地窗口缓存器中的解码视频数据可以通过相应的文件标识符进行共享。进一步的,上述视频解码数据可以为YUV数据;其中,YUV例如可以是被欧洲电视系统所采用的一种颜色编码方法,可以属于PAL,也可以包括PAL和SECAM模拟彩色电视制式采用的颜色空间;在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号B-Y(即U)、R-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去;上述色彩的表示方法可以被解释为YUV色彩空间表示。其中,采用YUV色彩空间的重要性例如可以是其亮度信号Y和色度信号U、V是分离的。

在步骤S220中,根据所述文件标识符构建私有句柄结构对象并根据所述私有句柄结构对象以及所述ION共享内存创建本地窗口缓存器。参考图3所示,该步骤还可以包括步骤S2202~S2204。其中:

在步骤S2202中,根据所述文件标识符构建若干私有句柄结构对象;在步骤S2204中,根据若干所述私有句柄结构对象以及所述ION共享内存创建若干本地窗口缓存器。

其中,上述各私有句柄结构对象与各本地窗口缓存器一一对应。

在本示例实施方式中,handle(句柄)可以被定义为:在文件I/O中,如果要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选择一个到该文件的路径来打开文件;上述操作系统函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据;要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统;buffer(缓冲寄存器,也可以称为缓冲器)可以使高速工作的CPU与慢速工作的外设起协调和缓冲作用,实现数据传送的同步。举例而言:

在本示例中,可以根据上述文件标识符创建若干私有句柄结构对象(private_handle_t),并根据上述ION共享内存以及若干私有句柄结构对象创建若干本窗口缓存器(NativeWindowBuffer),形成一内存池,使得buffer可以共享。

在在步骤S230中,在接收到视频解码数据时,将所述视频解码数据填充至所述本地窗口缓存器中。

在本示例实施方式中,当视频解码完成后,Outport将视频解码数据输出至ION共享内存中,ION共享内存在接收到上述视频解码数据时,将视频解码数据填充至上述内存池中的任一本地窗口缓存器(NativeWindowBuffer)中。其中,上述Outport例如可以被定义为输出数据的硬件端口,例如可以表示为:void outport(int port,int value)。此外,在本公开的其他示例性实施例中,根据实际情况也可以对Outport做其他的定义,本示例性实施例中对此不做特殊限定。

在步骤S240中,将被所述视频解码数据填充的所述本地窗口缓存器对应的所述私有句柄结构对象传递至一视频库中。

在步骤S250中,所述视频库根据接收到的所述本地窗口缓存器对应的所述私有句柄结构对象访问所述本地窗口缓存器中的所述视频解码数据。

在本示例实施方式中,将上述视频解码数据填充至本地窗口缓存器中后,将该窗口缓存器对应的私有句柄结构对象传递至一视频库中,当视频库需要访问该视频解码数据时,首先根据接收到的私有句柄结构对象在内存池中找到对应的本地窗口缓存器,然后再访问该视频解码数据。此外,在本公开的其他示例性实施例中,根据实际情况也可以通过其他的方式访问视频解码数据,本示例性实施例中对此不做特殊限定。

进一步的,参考图4所示,在本公开的其他示例性实施例中,该视频解码数据传输方法还可以包括步骤S410以及步骤S420。其中:

在步骤S410中,利用所述本地窗口缓存器创建一共享数据接口;在步骤S420中,所述共享数据接口根据所述本地窗口缓存器对应的所述私有句柄结构对象获取所述本地窗口缓存器中的视频解码数据并渲染至一显示设备上。

在本示例实施方式中,共享数据接口(EGLImage)例如可以代表一种由EGL客户API(Application Programming Interface,应用程序编程接口)创建的共享资源类型;共享数据接口例如可以创建2D图像共享数据,也可以创建任意类型的共享数据;共享数据接口可以包括开放式图形库、矢量图形算法库中等等;其中,开放式图形库(OpenGL,Open Graphics Library)例如可以被定义为一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口;也可以被用于二维或三维图像,是一个功能强大,调用方便的底层图形库;矢量图形算法库(OpenVG,Open Vector Graphics)例如可以被定义为针对诸如Flash和SVG的矢量图形算法库提供底层硬件加速界面的免授权费、跨平台应用程序接口API;OpenVG的初始目标主要面向需要高质量矢量图形算法加速技术的便携手持设备,用以在小屏幕设备上实现动人心弦的用户界面和文本显示效果,并支持硬件加速以在极低的处理器功率级别下实现流畅的交互性能。在本示例中,利用上述本地窗口缓存器创建一共享数据接口;当播放上述解码视频数据时,共享数据接口首先根据上述私有句柄结构对象在内存池中找到对应的本地窗口缓存器,然后再获得该视频解码数据并将其渲染至一显示设备上。此外,在本公开的其他示例性实施例中,根据实际情况也利用其他的方式将视频解码数据渲染至显示设备上,本示例性实施例中对此不做特殊限定。

此外,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。

本示例实施方式还提供了一种视频解码数据传输装置。参考图5所示,该视频解码输出装置可以包括:ION共享内存创建模块510、本地窗口缓存器创建模块520、数据填充模块530、私有句柄结构对象传递模块540以及视频解码数据访问模块550。其中:

ION共享内存创建模块510可以用于通过通道管理函数创建一包含文件标识符的ION共享内存。

本地窗口缓存器创建模块520可以用于根据所述文件标识符构建私有句柄结构对象并根据所述私有句柄结构对象以及所述ION共享内存创建本地窗口缓存器。

数据填充模块530可以用于在接收到视频解码数据时,将所述视频解码数据填充至所述本地窗口缓存器中。

私有句柄结构对象传递模块540可以用于将被所述视频解码数据填充的所述本地窗口缓存器对应的所述私有句柄结构对象传递至一视频库中。

视频解码数据访问模块550可以用于所述视频库根据接收到的所述本地窗口缓存器对应的所述私有句柄结构对象访问所述本地窗口缓存器中的所述视频解码数据。

在本示例实施方式中,根据所述文件标识符构建私有句柄结构对象并根据所述私有句柄结构对象以及所述ION共享内存创建本地窗口缓存器包括:根据所述文件标识符构建若干私有句柄结构对象;根据若干所述私有句柄结构对象以及所述ION共享内存创建若干本地窗口缓存器;其中,各所述私有句柄结构对象与各所述本地窗口缓存器一一对应。

在本示例实施方式中,所述视频解码数据传输装置还包括:

共享数据接口创建模块可以用于利用所述本地窗口缓存器创建一共享数据接口。

视频解码数据渲染模块可以用于所述共享数据接口根据所述本地窗口缓存器对应的所述私有句柄结构对象获取所述本地窗口缓存器中的视频解码数据并渲染至一显示设备上。

在本示例实施方式中,所述共享数据接口包括开放式图形库或者矢量图形算法库中的一种或多种。

在本示例实施方式中,所述视频解码数据为YUV数据。

上述视频解码数据传输装置中各模块的具体细节已经在对应的视频解码数据传输方法中进行了详细想描述,因此此处不再赘述。

应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。

参照图6,应用上述视频解码数据传输的移动终端600可以包括以下一个或多个组件:处理组件602,存储器604,电源组件606,多媒体组件608,音频组件610,输入/输出(I/O)的接口612,传感器组件614,以及通信组件616。

处理组件602通常控制移动终端600的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件602可以包括一个或多个处理器620来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件602可以包括一个或多个模块,便于处理组件602和其他组件之间的交互。例如,处理组件602可以包括多媒体模块,以方便多媒体组件604和处理组件602之间的交互。

存储器604被配置为存储各种类型的数据以支持在设备600的操作。这些数据的示例包括用于在移动终端600上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器604可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。

电源组件606为移动终端600的各种组件提供电力。电源组件606可以包括电源管理系统,一个或多个电源,及其他与为移动终端600生成、管理和分配电力相关联的组件。

多媒体组件608包括在所述移动终端600和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件608包括一个前置摄像头和/或后置摄像头。当设备600处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。

音频组件610被配置为输出和/或输入音频信号。例如,音频组件610包括一个麦克风(MIC),当移动终端600处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器604或经由通信组件616发送。在一些实施例中,音频组件610还包括一个扬声器,用于输出音频信号。

I/O接口612为处理组件602和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。

传感器组件614包括一个或多个传感器,用于为移动终端600提供各个方面的状态评估。例如,传感器组件614可以检测到设备600的打开/关闭状态,组件的相对定位,例如所述组件为移动终端600的显示器和小键盘,传感器组件614还可以检测移动终端600或移动终端600一个组件的位置改变,用户与移动终端600接触的存在或不存在,移动终端600方位或加速/减速和移动终端600的温度变化。传感器组件614可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件614还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件614还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。

通信组件616被配置为便于移动终端600和其他设备之间有线或无线方式的通信。移动终端600可以接入基于通信标准的无线网络,如WiFi,2G或6G,或它们的组合。在一个示例性实施例中,通信组件616经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件616还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。

在示例性实施例中,移动终端600可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。

通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者网络设备等)执行根据本公开实施方式的方法。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由所附的权利要求指出。

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