掌桥专利:专业的专利平台
掌桥专利
首页

一种图片处理方法及装置

文献发布时间:2023-06-19 09:36:59


一种图片处理方法及装置

技术领域

本申请涉及终端技术领域,尤其涉及一种图片处理方法及装置。

背景技术

移动设备显示应用程序(Application,APP)界面上的图片之前,该移动设备的中央处理器(Central Processing Unit,CPU)需要先将该图片解码成位图数据,并将该位图数据保存在属于CPU的内存分区中,然后CPU将属于CPU内存分区中的位图数据转换成纹理数据,并将该纹理数据传输到属于图形处理器(Graphics Processing Unit,GPU)的内存分区中,最后通过GPU将该纹理数据绘制出来,显示在移动设备的显示屏上。

可以理解的是,APP上的图片显示过程需要占用CPU的一块内存用于存储数据处理过程中解码生成的位图数据,还需要占用GPU的一块内存用于存储将位图数据转换后的纹理数据。可见,上述技术方案需要给CPU分配一块内存,并给GPU分配一块内存,内存占用较为浪费;再者,将位图数据转换成纹理数据上传到GPU的内存中,耗时比较大,在图片显示过程中易出现卡顿的现象,用户查看图片不流畅,导致用户体验较差。

发明内容

本申请提供一种图片处理方法及装置,解决了现有技术中图片显示的处理过程中内存占用的浪费问题,和位图数据转换成纹理数据上传到GPU的内存中耗时大造成的卡顿问题。

为达到上述目的,本申请采用如下技术方案:

第一方面提供一种图片处理方法,该方法可以应用于电子设备。该方法可以包括:电子设备显示一个应用的交互界面,当检测到用户作用于该交互界面的预设操作,同时应用基于输入事件,开始获取待显示的图片数据,将应用待显示的图片数据解码为位图数据,并将位图数据封装为纹理数据;将纹理数据存储于图形处理器GPU可访问的内存分区中;触发GPU读取纹理数据执行绘制处理,得到渲染后的数据;触发显示器根据渲染数据渲染后的数据显示图片。应理解:预设操作包括但不限于滑动,点击,双击,长按,重按,隔空手势,视线焦点移动等。

现有技术中,内存分配器先为CPU申请内存分区,用于存储供CPU访问的位图数据,而后再为GPU申请内存分区,用于存储供GPU访问的纹理数据。而在本申请实施例中,电子设备定义的内存分配器,用于申请存储纹理数据的、供图形处理器GPU可访问的内存分区,在对图片数据进行解码时,将图片数据解码后生成的纹理数据存储在该内存分区中,这样一来,不需要申请供CPU访问的内存分区,可以解决现有技术中图片显示的处理过程中内存占用的浪费问题;并且,本申请对图片数据进行解码的过程,也不需要将位图数据转换成纹理数据再将数据从CPU的内存上传到GPU的内存,可以解决数据拷贝耗时大而造成的卡顿问题,提升用户体验。

在一种可能的设计方式中,在将应用的待显示的图片数据解码为位图数据之前,该方法还包括:创建软件解码器;定义内存分配器,内存分配器用于申请GPU可访问的内存分区,GPU可访问的内存分区用于存储纹理数据。上述可能的实现方式中,通过改进内存分配器,定义GPU可访问的内存分区,且该内存分区用于存储解码生成的纹理数据,不需要申请CPU可访问的内存,减少了内存占用的浪费。

在一种可能的设计方式中,内存分配器用于申请GPU可访问的内存分区包括:内存分配器用于调用第一接口向内部存储器申请GPU可访问的内存分区,第一接口为GPU申请内存分区的标准接口,GPU可访问的内存分区包括GPU可访问的物理地址范围和GPU可访问的内存分区的大小。上述可能的实现方式中,通过调用GPU申请内存分区的标准接口来申请内存,避免了申请CPU的内存,减少了内存占用的浪费。

在一种可能的设计方式中,将应用的待显示的图片数据解码为位图数据,并将位图数据封装为纹理数据包括:对待显示的图片数据的第一行的图片数据进行解码,生成第一行的图片数据的位图数据,对第一行的图片数据的位图数据进行数据转换,生成第一行的图片数据的纹理数据;然后对待显示的图片数据的第二行数据执行上述处理,直至处理完待显示的图片数据的最后一行的图片数据。上述可能的实现方式中,通过对图片数据进行解码,对解码生成的位图数据并行地转换处理,直接得到纹理数据,从而避免了将CPU的内存分区中存储的位图数据转换成纹理数据再上传到GPU的内存分区中的过程,从而可以避免数据上传耗时大造成的卡顿问题。

在一种可能的设计方式中,对待显示的图片数据的第一行的图片数据进行解码,生成第一行的图片数据的所述位图数据,对第一行的图片数据的位图数据进行数据转换,生成第一行的图片数据的纹理数据;然后对待显示的图片数据的第二行数据执行上述处理,直至处理完待显示的图片数据的最后一行的图片数据,包括:调用解码函数对第一行图片数据进行解码处理,生成第一行图片数据对应的位图数据;调用纹理转换动态库,对第一行图片数据对应的位图数据进行数据类型转换处理,生成第一行图片数据对应的纹理数据,纹理转换动态库包括将位图数据转换为纹理数据的转换函数;然后对待显示的图片数据的第二行图片数据执行上述处理,直至处理完待显示的图片数据的最后一行的图片数据。上述可能的实现方式中,通过对位图数据进行并行化的加速处理,直接生成纹理数据,从而避免了将CPU的内存分区中存储的位图数据转换成纹理数据再上传到GPU的内存分区中的过程,从而可以避免数据上传耗时大造成的卡顿问题。

第二方面提供一种电子设备,该电子设备包括:存储器和一个或多个处理器;存储器和处理器耦合;存储器用于存储计算机程序代码,计算机程序代码包括计算机指令,当处理器执行计算机指令时,电子设备执行第一方面及其任一种可能的设计方式所述的方法。

第三方面提供一种芯片系统,该芯片系统可以应用于电子设备;该系统包括一个或多个接口电路和一个或多个处理器;接口电路和处理器通过线路互联;接口电路用于从电子设备的存储器接收信号,并向处理器发送信号,该信号包括存储器中存储的计算机指令;当处理器执行计算机指令时,电子设备执行第一方面及其任一种可能的设计方式所述的方法。

第四方面提供一种可读存储介质,可读存储介质中存储有指令,当可读存储介质在电子设备上运行时,使得电子设备执行第一方面及其任一种可能的设计方式所述的方法。

第五方面提供一种计算机程序产品,其特征在于,当计算机程序产品在计算机上运行时,使得计算机执行第一方面及其任一种可能的设计方式所述的方法。

可以理解地,上述提供的任一种电子设备、芯片系统、可读存储介质和计算机程序产品,均可以根据上文所提供的对应的图片显示方法来实现,因此,其所能达到的有益效果可参考上文所提供的图片显示方法的有益效果,此处不再赘述。

附图说明

图1为本申请实施例提供的一种电子设备的结构示意图;

图2为本申请实施例提供的一种电子设备处理器和内存的结构示意图;

图3为本申请实施例提供的一种电子设备的软件结构图;

图4为本申请实施例提供的一种图片显示方法的处理示意图;

图5为本申请实施例提供的另一种图片显示方法的处理示意图;

图6为本申请实施例提供的一种图片显示方法的处理流程示意图;

图7为本申请实施例提供的一种图片显示方法的软件处理流程图;

图8为本申请实施例提供的另一种图片显示方法的软件处理流程图;

图9为本申请实施例提供的一种芯片系统的结构示意图。

具体实施方式

在介绍本申请的实施例之前,先对技术方案中设计的相关术语做简单介绍。

位图(bitmap),也称为点阵图片或栅格图片,是由称作像素(图片元素)的单个点组成的。这些像素点可以进行不同的排列和染色以构成图片。

图片数据:可以为电子设备待显示的本地图片文件或下载得到的图片数据流,图片数据的格式可以为便携式网络图形(Portable Network Graphics,PNG)、JPEG格式(Joint Photographic Experts Group)或流媒体文件(Stream)等格式。

位图数据:将图片数据进行解码处理后生成的位图格式的图片数据即可称为位图数据。

纹理(texture)数据:一种图片数据的格式,是可以表示物体表面细节的位图数据;具体可以为表示图片的彩色平面花纹或凹凸不平的沟纹的图片数据。纹理数据可以作为GPU可以识别并进行绘制处理的数据。

渲染后的数据:图像处理器GPU根据纹理数据和绘制指令进行像素渲染和像素填充过程,生成的数据被称为渲染后的数据。电子设备的显示处理模块可以根据渲染后的数据,进行图像显示处理。

卡顿:是指出现在手机、笔记本等电子设备中的一种现象,具体状况可以为各种电子设备在进行操作过程中,例如玩游戏的时候、或者显示图片的时候的画面滞帧现象。

应用程序编程接口(Application Programming Interface,API):是一些预先定义的函数,目的是提供应用程序,和开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

本申请中涉及的电子设备可以是手机、平板电脑、桌面型、膝上型、手持计算机、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本,以及蜂窝电话、个人数字助理(personal digital assistant,PDA)、增强现实(augmentedreality,AR)/虚拟现实(virtual reality,VR)设备等包括触摸屏的设备。

如图1示出了电子设备100的结构示意图。

电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。

可以理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。

处理器110可以包括一个或多个处理单元,应理解:处理器110可以包括中央处理器(Central Processing Unit,CPU),应用处理器(application processor,AP),调制解调器,图形处理器(graphics processing unit,GPU),图片信号处理器(image signalprocessor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signalprocessor,DSP),基带处理器,神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。作为举例,图1中处理器110中只示出了中央处理器和图形处理器。

其中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。

处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。

在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。

可以理解的是,本申请实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在本申请另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。

电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图片处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。

显示屏194用于显示图片,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light-emittingdiode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrixorganic light emitting diode的,AMOLED),柔性发光二极管(flex light-emittingdiode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot lightemitting diodes,QLED)等。在一些实施例中,电子设备100可以包括1个或N个显示屏194,N为大于1的正整数。

外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。

内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图片播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。需要说明的是,在本申请实施例中,内部存储器121与本申请实施例中描述的内存意义相同,该内部存储器121中的存储数据区可以包括CPU可以访问的内存分区和GPU可以访问的内存分区。

接下来介绍该电子设备100包括的中央处理器CPU、图形处理器GPU与内存的硬件连接关系,以及三者分别的作用。如图2所示,CPU可以是一块大规模的集成电路,是一台计算机的运算核心和控制中心。它的功能主要是解释计算机指令以及处理计算机软件中的数据。

CPU主要包括运算器(算术逻辑运算单元,Arithmetic Logic Unit,ALU)和高速缓冲存储器(cache)及实现它们之间联系的数据(data)、控制及状态的总线(bus)。它与内部存储器(memory)和输入/输出(I/O)设备合称为电子计算机三大核心部件。

GPU又称显示核心、视觉处理器、显示芯片,是一种专门处理图片运算工作的微处理器。GPU的用途是将电子设备所需要的显示信息进行转换驱动,并向显示器提供行扫描信号,控制显示器的正确显示,是连接显示器和CPU的重要元件。如图2所示,GPU可以包括:工作管理模块,用于管理GPU执行CPU下发的渲染指令;外围总线(Advanced Peripheral Bus,APB)模块,着色器模块,渲染材质,内存管理单元(MMU)和L2缓存模块。CPU向GPU发送命令,该命令具体可以为渲染图片的指令;GPU可以通过发送中断与CPU进行数据交互。

内部存储器简称为内存,是电子设备中用于存储数据和程序的器件,是与CPU和GPU进行沟通的桥梁。如图2所示,内存可以为双倍速率(Double Data Rate,DDR)存储器,简称DDR内存,电子设备中所有程序的运行都是在内存中进行的,因此内存的性能对电子设备的影响非常大。内存中的存储数据区可以用于暂时存放处理器CPU或GPU的运算数据,以及与硬盘等外部存储器交换的数据。只要电子设备在运行中,CPU或GPU就会把需要运算的数据调到内存中进行运算,当运算完成后再将结果从内存中传送出来。因此,如图2所示,DDR内存中包括有GPU可访问的内存分区和CPU可访问的内存分区。

电子设备100的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本申请实施例以分层架构的Android系统为例,示例性说明电子设备100的软件结构。

图3是申请实施例的电子设备100的软件结构框图。

分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为四层,从上至下分别为应用程序层,应用程序框架层,安卓运行时(Android runtime)和系统库,以及内核层。

应用程序层可以包括一系列应用程序包。

如图3所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,WLAN,蓝牙,音乐,视频,短信息等应用程序。

应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。

如图3所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器等。

窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。

内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可以包括视频,图片,音频,拨打和接听的电话,浏览历史和书签,电话簿等。

视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。

电话管理器用于提供电子设备100的通信功能。例如通话状态的管理(包括接通,挂断等)。

资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。

通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。

Android Runtime包括核心库和虚拟机。Android runtime负责安卓系统的调度和管理。

应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。

系统库可以包括多个功能模块。例如:表面管理器(surface manager),媒体库(media libraries),三维图形处理库(例如:OpenGL ES),2维图形引擎(例如:SGL)等。

表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2维和3维图层的融合。

媒体库支持多种常用的音频,视频格式回放和录制,以及静态图片文件等。媒体库可以支持多种音视频编码格式,例如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。

三维图形处理库用于实现三维图形绘图,图片渲染,合成,和图层处理等。

2维图形引擎是2维绘图的绘图引擎。

内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。

下面结合捕获到触发图片显示的场景,示例性说明电子设备100软件以及硬件的工作流程。

当触摸传感器180K接收到触摸操作,相应的硬件中断被发给内核层。内核层将触摸操作加工成原始输入事件(包括触摸坐标,触摸操作的时间戳等信息)。原始输入事件被存储在内核层。应用程序框架层从内核层获取原始输入事件,识别该输入事件所对应的控件。以该触摸操作是触摸单击操作,该单击操作所对应的控件为图库应用图标的控件为例,图库应用调用应用框架层的接口,启动图库应用,进而通过调用内核层启动显示驱动,通过显示屏194呈现图片。

本申请实施例提供一种图片处理方法,如图4,可以包括图片加载、图片解码和GPU绘制这几个处理过程。

首先对待显示的图片进行图片加载过程。手机显示一个应用的交互界面,当检测到用户作用于该交互界面的预设操作时,例如预设操作可以包括滑动,点击,双击,长按,重按,隔空手势,视线焦点移动等,这时,首先需要对待显示的图片加载处理,得到待显示的图片数据。其中,待显示的图片数据可以为手机本地图片文件或下载得到的图片数据流,图片数据的格式可以为PNG、JPEG或Stream等格式。其中,本地图片文件可以为系统通过输入\输出口读取手机本地存储的图片文件,图片数据流可以为通过统一资源定位符(UniformResource Locator,URL)从网络下载的图片数据。

接着,进行图片解码处理。该部分处理过程可以为如图5所示的手机中的一个应用程序显示图片的过程。该应用程序需要显示图片时,将解码器解码处理得到的位图数据不是存储于CPU的内存分区,而是直接通过纹理管理模块并行化加速,将位图数据封装为纹理数据,将生成的纹理数据存储于GPU的内存分区中。从而节省了现有技术图片显示中位图解码占用的CPU的内存空间,且消除了上传纹理数据而产生的耗时问题,使得用户查看图片流畅,提升用户的使用体验。

最后,GPU绘制操作具体可以为,GPU接收到CPU发送的绘制指令,对GPU内存分区中的纹理数据进行绘制处理,生成的渲染后的数据存储在GPU的内存中,用于下一步的显示处理。

在了解本申请的原理的基础上,下面对本申请的技术方案进行进一步阐述。

如图6所示,该图片处理方法可以包括如下步骤601-603:

601:电子设备显示一个应用的交互界面,当检测到用户作用于该交互界面的预设操作时,获取待显示图片的图片数据,创建解码器,定义内存分配器,该内存分配器用于申请供图形处理器GPU可访问的内存分区,该GPU可访问的内存分区用于存储纹理数据。

需要说明的是,该解码器包括软件解码器和硬件解码器,该实施例以软件解码器为例进行说明,并不构成对本申请的限制。

本申请实施例以电子设备为手机为例进行说明。

示例性的,当某一应用运行时,手机显示该应用的交互界面,如果手机检测到用户作用于交互界面的滑动操作时,屏幕中显示的图片内容需要刷新,如图7所示,手机的硬件层的触控硬件接收到用户的触发操作后,将该输入事件发送给内核层的触控输入,而后该输入事件经过系统库的读取事件和事件分发,读取事件负责从触控输入中读取输入事件,事件分发负责将输入事件分发到应用程序框架层的窗口管理。窗口管理主要用于将输入事件分发给不同的处理模块,例如,本申请的图片显示事件,将被窗口管理分发给界面管理进行处理,界面管理通过事件传递,将事件传递给相应的界面显示区域;界面管理接收到该图片显示的事件,执行上述图5所示的处理过程。这时,应用程序框架层的窗口管理会接收到输入事件,获取图片数据,可以理解为窗口管理接收到图片显示的触发操作的输入事件,该输入事件用于触发获取待显示图片数据。

其中,待显示图片数据包括手机本地存储的图片文件或通过URL下载的图片数据流。例如,用户点击手机上的某一应用“图库”,手机需要显示图库中图片的缩略图,则触发了本地存储图片的显示场景。再例如,应用程序为微信时,用户通过手指在屏幕上滑动,使得微信的显示界面中显示的图片内容需改变,该图片内容可以通过URL下载图片数据流,以显示滑动操作后的图片。

创建软件解码器时,如图7,具体为,在获取到图片显示的触发操作的时候,该应用会通过解码处理的接口调用系统库中的解码模块完成创建软件解码器,在调用解码模块时,系统会同时通过调用内存管理定义内存分配器,实现定义隶属于解码模块的内存分配器。也就是说,在触发软件解码器解码的同时,定义解码后生成的数据的内存分配属性。在本申请实施例中,解码模块对图片数据解码后得到的是纹理数据,因此本申请定义的内存分配器申请到的内存分区为存放该纹理数据的、GPU可以访问的内存分区。

本申请实施例通过在软件结构的安卓运行时(Android runtime)和系统库,内存管理新增加两个类,或者说新增了两个函数,包括第一函数和第二函数,实现图片解码处理中的内存分配和管理的过程。示例性的,新增的两个函数可以为TextureImageAllocator,和TextureImage,其中,TextureImageAllocator可以用于实现申请分配GPU可访问的内存分区;TextureImage可以用于指示该内存分区用于存放纹理数据。

示例性的,相关的软件具体执行流程可以为如图8所示,CPU通过解码器底层实现的入口调用解码的接口,选择调用纹理数据类型的内存分配器TextureImageAllocator,而后调用保存纹理数据的类TextureImage,开始向内部存储器申请分配内存分区。CPU再通过保存纹理数据的类调用开始分配内存分区的接口,并将纹理数据类型的内存分配器指向对应的内存分配的接口,开始分配内存分区。内部存储器分配好内存分区后,CPU获取分配好的内存分区的物理地址,将该内存分区的物理地址指向存储解码后数据的内存分区。

602:电子设备分配GPU可访问的内存分区。

电子设备分配内存分区,内存分配器用于调用第一接口向内部存储器申请GPU可访问的内存分区,该第一接口可以为GPU申请内存分区的标准接口,该GPU可访问的内存分区包括GPU可访问的物理地址范围和该GPU可访问的内存分区的大小。

具体的分配内存分区的过程可以为,系统调用GPU的申请内存的接口,这个接口是系统封装定义好的,可以用于申请和响应内存的分配,实现GPU的内存的分配。申请之后获取到的是授权GPU访问的DDR地址空间,响应数据可以包括用于存储内存地址的指针数据。本申请避免了现有技术中分配两块内存所致的内存浪费的问题。

例如,内存管理调用GPU的标准的申请内存的接口,向DDR内存申请内存分区,DDR内存向GPU反馈分配的内存分区的大小、用于指示该内存分区的物理地址的内存指针,该内存分区的存放数据类型为纹理数据等。

603:电子设备将待显示的图片数据解码为位图数据,将位图数据封装为纹理数据,将纹理数据存储于GPU可访问的内存分区中。

对图片数据按行进行解码处理,生成位图数据,系统直接将生成的该位图数据按行进行数据类型的转换处理,生成纹理数据,存储在步骤602申请到的GPU可访问的内存分区。

本申请实施例通过在安卓运行和系统库层新增了一个并行转换纹理数据的库,记为纹理转换libtexture动态库,该动态库可以将位图数据转换为纹理数据。本申请实施例libtexture动态库可以动态的根据生成的位图数据和纹理数据之间的数据类型生成转换函数,将该转换函数通过libtexture动态库来实现,采用并行化处理和加速库的方式,直接生成纹理数据。

相关的软件具体执行流程可以为如图8所示,CPU调用解码函数(例如,libjpeg解码函数),开始按行扫描解码,将图片数据按行完成解码处理后生成位图数据;然后CPU调用纹理转换(例如,libtexture动态库),按行通过并行化加速处理将位图数据转换成纹理数据,将生成的纹理数据存储到申请的内存空间中,CPU接着按照上述流程执行下一行的处理。

示例性的,CPU调用解码函数libjpeg对第一行图片数据进行解码处理,生成第一行图片数据对应的位图数据;CPU调用纹理转换动态库libtexture,对第一行图片数据对应的位图数据进行数据类型转换处理,生成第一行图片数据对应的纹理数据,纹理转换动态库包括将位图数据转换为纹理数据的转换函数;然后CPU对待显示的图片数据的第二行图片数据执行上述处理,直至处理完待显示的图片数据的最后一行的图片数据。

本申请实施例通过利用现有解码器的基础功能,扩展出封装纹理的功能和算法,具体为在libjpeg解码功能的基础上,基于现有的解码能力,增加libtexture动态库,将libjpeg解码生成的数据通过并行的解码处理和数据类型转换,生成纹理数据,从而解决现有技术中纹理转换和上传过程耗时大而可能造成的卡顿现象,提升用户的使用体验。

604:电子设备触发GPU读取纹理数据执行绘制处理,得到渲染后的数据;将渲染后的数据存储于显示器的内存分区中,触发显示器根据渲染后的数据显示图片。

进一步的,GPU可以根据纹理数据和绘制指令执行绘制处理,得到渲染后的数据。如图7所示,渲染后的数据将该渲染后的数据保存到GPU的内存中,显示处理的数据合成(SurfaceFlinger)获取到GPU的这块内存后,通过合成器硬件抽象层和显示驱动,存储于液晶显示器(Liquid Crystal Display,LCD)的内存中,由液晶显示器LCD进行显示。

本申请实施例通过在系统的应用程序框架层和系统库进行新增和改进,实现了图片数据解码后直接并行化处理,生成纹理数据,并将纹理数据存储在为GPU申请的内存分区,以便GPU根据纹理数据进行绘制处理,解决了现有技术中需要为CPU和GPU申请两块内存的浪费问题,同时解决了现有技术在上传纹理的过程中,数据从CPU的内存拷贝到GPU的内存的耗时问题,改善卡顿现象,提升用户的使用体验。

本申请另一些实施例提供了一种电子设备,该电子设备可以包括:存储器和一个或多个处理器,该存储器和处理器耦合。该存储器用于存储计算机程序代码,该计算机程序代码包括计算机指令。当处理器执行计算机指令时,电子设备可执行上述方法实施例中的各个功能或者步骤。该电子设备的结构可以参考图1所示的电子设备100的结构。

本申请实施例还提供一种芯片系统,该芯片系统可以应用于上述实施例中的电子设备,如图9所示,该芯片系统包括至少一个处理器901和至少一个接口电路902。处理器901和接口电路902可通过线路互联。例如,接口电路902可用于从其它装置(例如电子设备的存储器)接收信号。又例如,接口电路902可用于向其它装置(例如处理器901)发送信号。示例性的,接口电路902可读取存储器中存储的指令,并将该指令发送给处理器901。当所述指令被处理器901执行时,可使得电子设备执行上述实施例中电子设备执行的各个功能或者步骤。当然,该芯片系统还可以包含其他分立器件,本申请实施例对此不作具体限定。

本申请实施例还提供一种计算机存储介质,该计算机存储介质包括计算机指令,当所述计算机指令在上述电子设备上运行时,使得该电子设备执行上述方法实施例中手机执行的各个功能或者步骤。

本申请实施例还提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行上述方法实施例中手机执行的各个功能或者步骤。

通过以上实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

相关技术
  • 一种图片生成处理方法、图片显示处理方法和装置
  • 一种图片处理方法、图片处理装置以及图片处理平台
技术分类

06120112229491