JPEG图像到压缩GPU纹理转码器的制作方法

文档序号:15203437发布日期:2018-08-21 04:42阅读:336来源:国知局

本申请要求2016年1月8日递交的发明名称为“jpeg图像到压缩gpu纹理转码器”的第14/990,963号美国非临时申请案的在先申请优先权,该在先申请的内容以引入的方式并入本文。

本发明涉及计算机技术,更具体地,本发明涉及jpeg编码图像到纹理压缩格式的转码。



背景技术:

联合活动图像专家组(jointphotographicexpertsgroup,简称jpeg)是一种流行的有损图像压缩方法,通常用于对数字图像进行压缩。jpeg使用基于离散余弦变换(discretecosinetransform,简称dct)的压缩形式。该操作将视频源的每个帧/字段从空间(2d)域转换到频域(也称为变换域)。然后,丢弃高频信息,例如强度和色调的急剧转变。在变换域中,通过量化过程减少信息,最佳地,该过程将一个大尺寸(每个数量的出现次数不同)减小到较小尺寸。然后,对量化的系数进行排序并无损压缩成输出比特流。

多种类型的图像通常以jpeg格式存储,包括用于在智能手机等移动设备上运行的应用的应用纹理。台式电脑和笔记本电脑等许多计算设备以及智能手机和平板电脑等最近的移动设备都具有图形处理器(graphicsprocessingunit,简称gpu),所述图形处理器提供用于实现变换和渲染等图形功能的专用处理器,以增强中央处理器(centralprocessingunit,简称cpu)。gpu通常使用纹理压缩格式,例如爱立信纹理压缩(etc1或最近的etc2)。

为了在jpeg图像上使用gpu,通常希望以etc2格式对jpeg进行编码。但是为了实现这一目的,应用首先需要将jpeg图像解码为以rgb888格式存储的原始图像缓冲区,然后将其编码为etc2。然而,该过程效率较低,功耗大,浪费内存,而内存对于智能手机和平板电脑等内存小、电池有限的设备具有重要价值。

使用etc2等纹理压缩格式直接对纹理进行存储通常比使用jpeg图像压缩格式需要更多的内存。另外,etc2等纹理压缩格式通常没有jpeg图像压缩格式质量高。



技术实现要素:

第一示例性实施例提供了一种系统,包括:图形处理器(graphicsprocessingunit,简称gpu);图像压缩格式到纹理压缩格式转码器,用于将以图像压缩格式存储的图像转换为以纹理压缩格式表示的多个块,其中,所述图像压缩格式到纹理压缩格式转码器包括:图像压缩格式解码器,用于将所述图像解码为一个或多个解码块;图像压缩格式分离器,用于将每个解码块拆分成多个解码子块,经过所述拆分,表示所述多个解码子块中每个解码子块所包含的像素数据所需的颜色数量减小或最小化;一个或多个纹理压缩格式编码器,用于通过将所述解码子块的色彩空间转换为yuv并使用所述转换后的色彩空间确定是单个基色、两个基色还是其他合适数量的基色对所述子块进行编码,从而将所述多个解码子块中的每个解码子块编码为纹理压缩格式的块;总线,用于将所述纹理压缩格式的多个块传输至所述gpu进行处理。第二示例性实施例提供了一种系统,包括:

图形处理器(graphicsprocessingunit,简称gpu);联合活动图像专家组(jointphotographicexpertsgroup,简称jpeg)到爱立信纹理压缩(etc2)转码器,用于将jpeg图像转换为多个etc2块,其中,所述jpeg到etc2转码器包括:

jpeg解码器,用于将所述jpeg图像解码为一个或多个解码块;

jpeg分离器,将每个解码块拆分成多个解码子块;

一个或多个etc2编码器,用于将所述多个解码子块中的每个解码子块编码为etc块;总线,用于将所述多个etc2块传输至所述gpu进行处理。

第三示例性实施例提供了一种包括指令的非瞬时性计算机可读存储介质,其中,当所述指令被机器的至少一个处理器执行时,所述指令使所述机器进行以下操作:接收jpeg图像,其中,所述jpeg图像包括一个或多个最小编码单元(minimumcodedunit,简称mcu);使用jpeg解码器对每个mcu进行解码;将每个解码mcu拆分成多个解码子块;使用etc2编码器将每个解码子块编码为etc2;将每个编码etc2子块传输至图形处理器(graphicsprocessingunit,简称gpu)进行处理。

附图说明

图1是根据示例性实施例的用于硬件jpeg到etc2转码的系统的框图;

图2是根据示例性实施例的用于jpeg-etc2转码的方法的流程图;

图3是根据示例性实施例的使用etc1对子块进行编码的方法的流程图;

图4是根据示例性实施例的使用etc2对子块进行编码的方法的流程图;

图5是根据示例性实施例的将jpeg图像转码为etc2格式的示例图;

图6是可结合本文所述的各种硬件架构使用的代表性软件架构的框图;

图7是根据一些示例性实施例的能够从机器可读介质(例如,机器可读存储介质)中读取指令并执行本文所讨论的任意一个或多个方法的机器组件的框图。

具体实施方式

以下结合附图进行描述,所述附图是描述的一部分并通过图解说明的方式示出可以实施本发明的具体实施例。这些实施例将充分详细描述,使本领域技术人员能够实施公开的标的物而且应该明白的是可以使用其它实施例并且在不脱离本发明的范围的情况下可以做出结构上、逻辑上、电学上的改变。因此,以下示例实施例的描述并不当作限定,本发明的范围由所附权利要求书界定。

在一个实施例中,这里描述的功能或算法可以通过软件或软件和人工实现的过程的组合得以实现。该软件可以由计算机可执行指令组成,计算机可执行指令可以存储在计算机可读介质中或本地或网络的一个或多个非瞬时性存储器或其他类型基于硬件的存储设备等计算机可读存储设备中。此外,这些功能对应于模块,所述模块可以是软件、硬件、固件或其任一组合。可以根据需要在一个或多个模块中实现多个功能,所述实施例仅仅是示例。该软件可以在数字信号处理器、专用集成电路(application-specificintegratedcircuit,简称asic)、微处理器或诸如个人计算机、服务器或其他计算机系统等计算机系统上运行的其他类型处理器上执行。在一个示例性实施例中,应用纹理直接以应用压缩格式存储,在直接将硬件部分或完全从图像压缩格式转码为纹理压缩格式的同时保持了高质量,这减少了网络衍生内容的带宽使用,提高了效率,降低了内存带宽利用率,并降低了功耗。

在另一示例性实施例中,所述将图像从图像压缩格式转码为纹理压缩格式包括:将图像的解码块拆分成多个子块,从而将每个子块所包含的颜色数量最小化。这样一来,随后可以使用一种或两种颜色作为编码算法的基色将每个子块编码为纹理压缩格式。其优势在于,可以更有效地将图像从图像压缩格式即时转换为纹理压缩格式,从而最大限度地减少处理周期和存储空间,同时还可以减少网络衍生内容的带宽使用并降低使用gpu对纹理压缩格式子块进行渲染的功耗。

通常将jpeg图像编码为ycbcr色彩空间中被称为最小编码单元(minimumcodedunit,简称mcu)的8×8的像素块。块可以表示图像中某个形状(例如正方形或其他合适的二维形状)的一组相邻像素。在一个示例性实施例中,将这些mcu中的每个mcu拆分成多个块,并将这些多个块中的每个块直接编码为etc2块。例如,etc2通常处理4×4的块,因此将每个8×8的jpeg块进行解码并拆分成四个不同的4×4的块。然后,将每个4×4的块分别编码为4×4的etc2块。

ycbcr可以表示适用于视频以及如jpeg等格式的静止图像的压缩及传输的颜色信息的数字编码。yuv可以表示使用ycbcr编码的文件格式。可以使用将人类感知考虑在内的yuv对彩色图像或视频进行编码,从而降低色度分量的带宽。这样一来,使得传输错误或压缩失真通常能够被人类感知有效地掩盖,而不是使用“直接的”rgb进行表示。

图1是根据示例性实施例的用于硬件jpeg到etc2转码的系统100的框图。在一个示例性实施例中,系统100可以位于智能手机、平板电脑、台式电脑、笔记本电脑或具有中央处理器102的任意其他设备等单个计算设备上。然而,在一些示例性实施例中,系统100的各个部分可以位于不同的物理设备上。在一个示例性实施例中,中央处理器102可以实现为中央处理装置。由于许多智能手机的处理能力有限,因此系统100对于智能手机具有一定的益处,因为在处理能力有限的环境中能够将操作分流到gpu是特别重要的。但是,如上所述,系统100并不一定是在智能手机上实现的。

在一个示例性实施例中,硬件jpeg到etc2转码器104用于将jpeg图像转换为etc2格式。然后,将etc2图像发送到gpu106进行处理(并且可以在可选的显示设备114上进行显示)。如上所述,在一些示例性实施例中,并非jpeg到etc2转码中涉及的所有操作都需要在硬件中执行。因此,在一个示例性实施例中,非硬件jpeg到etc2转码器104执行的任何jpeg到etc2转码操作都可以由cpu102以软件形式执行。在一个示例性实施例中,硬件jpeg到etc2转码器104可以实现为硬件jpeg到etc转码装置或者一些其他的图像压缩格式到纹理压缩格式转码装置。

etc算法通过压缩4×4的像素块进行操作。其通过矢量量化选择一小组最适合原始16种颜色的值。例如,可以为纹理压缩编码确定一个有限颜色集合,以压缩4×4的像素块。有限颜色集合中的颜色可能小于16种。实际上,使用不同的模式对不同类型的块进行编码。etc1模式最适合具有一种颜色的不同阴影的块,而etc2模式最适合具有两种或更多不同种颜色的阴影的块。

在etc1模式中,一个块被编码为2个子块,每个子块大小为2×4。在h模式下,将该块进行水平拆分。在t模式下,将该块进行竖直拆分。此外,etc1模式支持差分编码,其中,编码一个子块比编码另一个子块要更多的数据。

存在三种可能的etc2模式:平面模式、h模式以及t模式。etc2平面模式用于对渐变进行编码,即,对渐变的三个边界颜色进行编码。etc2h模式用于对两种颜色进行编码:c0和c1以及偏移量d。每个像素被编码为c0–d、c0+d、c1–d或c1+d。

etc2t模式也用于对两种颜色进行编码:c0和c1以及偏移量d。但是,每个像素被编码为c0、c1–d、c1或c1+d。

在一个示例性实施例中,硬件jpeg到etc2转码器包括jpeg解码器108、jpeg分离器110以及一个或多个etc2编码器112a、112b、112c和112d。jpeg解码器108用于将输入的jpeg图像解码为解码mcu块。术语“解码块”是指数据结构,用于存储mcu块解码过程中的图像信息,例如jpeg解码器108的输出等。在一个示例性实施例中,该数据结构可以包括一个8×8的表格,表格中的每个表项包括与原始图像的部分中对应的像素有关的颜色信息。在一个示例性实施例中,jpeg解码器108可以实现为jpeg解码装置或其他某种图像压缩格式解码装置。然后,jpeg分离器110将这些解码mcu块中的每一个拆分成子块。术语“子块”是指jpeg分离器110等中执行的拆分操作所创建的任一块划分而来。在一个示例性实施例中,jpeg分离器110可以实现为jpeg拆分装置或其他某种图像压缩格式拆分装置。然后,使用etc2编码器112a至112d对每个子块进行编码。在一个示例性实施例中,etc2编码器112a至112d中的任意一个或全部都可以实现为etc编码装置或其他某种纹理压缩格式编码装置。这个过程将在下面进行更详细的描述。

应该注意的是,可以有利用除jpeg之外的其他图像压缩格式以及除etc2之外的其他纹理压缩格式的实施例。在这样的实施例中,jpeg到etc2转码器104可以是图像格式转码器,jpeg解码器108可以是解码器,jpeg分离器110可以是分离器,etc2编码器112a至112d中的每一个可以是纹理压缩编码器。

图2是根据示例性实施例的用于将jpeg转码为etc2的方法200的流程图。如上所述,该方法200中描述的一个或多个操作由硬件jpeg到etc2转码器104执行。在操作202中,将jpeg图像解码为一个或多个jpegmcu,其大小例如可以是8×8。在操作204中,将每个mcu拆分成多个子块,其大小例如可以是4×4。然而,也可能存在一些实施例,其中的jpegmcu和所述子块的大小和数量与此处所描述的不同。本发明中的任何内容均不应被解释为将本发明的范围限制为8×8的mcu或4×4的子块。

然后,针对每个mcu的每个子块开始循环。在操作206中,将子块的色彩空间从rgb转换为yuv。可以使用许多不同类型的转换算法中的其中一种实现从rgb色彩空间到yuv的转换。

在一个示例性实施例中,函数[r,g,b]=y'uv444torgb888(y',u,v)将y'uv格式转换为简单的rgb格式。用于y'uv444格式的rgb转换公式也适用于yuv420(或yuv422)中的标准ntsctv传输格式。对于yuv420,由于每个u或v样本用于表示组成一个正方形的四个y样本,因此,可以在采用合适的采样方法中使用如下所示的精确转换公式。

这些公式是基于ntsc标准的:

y'=0.299xr+0.587xg+0.114xb

u=–0.147xr–0.289xg+0.436xb

v=0.615xr–0.515xg–0.100xb

一种可选的公式为:

c=y'–16

d=u–128

e=v–128

使用上述系数,且请注意括号()表示将数值固定在0至255这个范围,下列公式实现了从y'uv到rgb(ntsc版本)的转换:

r=clamp((298xc+409xe+128)>>8)

g=clamp((298xc–100xd–208xe+128)>>8)

b=clamp((298xc+516xd+128)>>8)

y'uv420p是一种平面格式,表示y'、u和v值是一组而不是分散的。这是因为通过将u和v值分组在一起,图像会变得更加可压缩。当给出y'uv420p格式的一个图像阵列时,首先出现的是所有的y'值,然后是所有的u值,最后是所有的v值。

y'v12格式基本上与y'uv420p相同,但它可以进行u和v的数据切换:y'值后面跟着v值,u值在最后。只要注意从适当的位置提取u值和v值,y'uv420p和y'v12就都可以使用相同的算法进行处理。

与大多数y'uv格式一样,存在与像素一样多的y'值。在x等于高度乘以宽度的情况下,阵列中的前x个索引是每个单独像素对应的y'值。但是,u值和v值只有四分之一。u和v值对应于图像的每个2×2的块,这意味着每个u和v表项适用于四个像素。在y'值后的下一个x/4索引是每个2×2的块的u值,下一个x/4索引是也适用于每个2×2的块的v值。

返回图2,在操作208中,使用uv聚类分析判断是使用一种颜色、两种颜色还是固定数量或其他合适预定数量的颜色能够更好地对块进行编码。在一个示例性实施例中,使用k均值聚类进行聚类,其旨在将n个观察值划分为k个聚类,其中,每个观察值属于具有最近均值的聚类,用作聚类的原型。在一个示例性实施例中,可以确定uv空间中的平均颜色以及标准差。如果标准差小于特定阈值,则可以使用1种基色进行编码。否则,可以使用2种基色,并且使用2均值聚类查找最适合数据的2种颜色。

如果使用一种颜色,则在操作210中,使用etc1对子块进行编码。如果使用两种颜色,则在操作212中,使用etc2对子块进行编码。

在操作214中,判断这是否是mcu的最后子块。如果不是,则该过程循环回到操作206,对mcu中的下一个子块进行操作。如果是,则在操作216中,判断这是否是jpeg图像的最后一个mcu。如果不是,则该过程循环回到操作206,对下一个mcu中的第一个子块进行操作。如果是,则该过程结束。

图3是根据示例性实施例的使用etc1对子块进行编码的方法300的流程图。在一些示例性实施例中,方法300可以与图2中的操作210相同。这里,在操作302中,判断是否将子块拆分成竖直或水平子块。在一个示例性实施例中,这是通过计算每个竖直子块的平均颜色和每个子块的标准差(s1)以及每个水平子块的平均颜色和每个子块的标准差(s2)确定的。如果s1<s2,则将子块拆分成竖直子块,否则将子块拆分成水平子块。如果将子块拆分成水平子块,则在操作304中,使用etc1的h模式对子块进行编码。如果将子块拆分成竖直子块,则在操作306中,使用etc1的t模式对子块进行编码。

图4是根据示例性实施例的使用etc2对子块进行编码的方法400的流程图。在一些示例性实施例中,方法400可以是与图2中操作212相同的操作。在操作402中,使用聚类和分析判断是使用p模式、h模式还是t模式。如果是使用p模式,则在操作404中,将每个像素编码为3种颜色之间的渐变:c0、c1和c2。如果是使用h模式,则在操作406中,将每个像素编码为c0–d、c0+d、c1–d或c1+d,其中,c0和c1是两种颜色。如果是使用t模式,则在操作408中,将每个像素编码为c0、c1–d、c1或c1+d,其中,c0和c1是两种颜色。

图5是根据示例性实施例的将jpeg图像500转码为etc2格式的示图。这里,jpeg图像500首先由jpeg解码器508解码为一个或多个8×8的mcu502。为简单起见,图5中仅示出了单个8×8的mcu,但本领域普通技术人员应当知道,对于特定的jpeg图像500,可以使用任意数量的mcu,并且mcu的大小可以根据实现的变化而变化。然后,解码后的mcu502由jpeg分离器110拆分成四个4×4的解码块504a、504b、504c和504d。然后可以将这些4×4的解码块504a至504d中的每一个传输至etc2编码器112a至112d。这可以通过单个etc2编码器串行执行,或者可以通过如图所示的多个etc2编码器112a至112d并行执行。etc2编码器112a至112d中每一个的输出都是4×4的编码块506a至506d,然后,可以将其各自传输至gpu进行渲染或其他图形相关的处理。

应该注意的是,虽然本发明描述了用于将jpeg格式图像转码为etc2的方法和组件,但本领域普通技术人员应当知道,可以对所述方法和组件进行修改,从而将其他图像格式转码为其他类型的纹理压缩格式。

模块、组件和逻辑

这里将某些实施例描述为包括逻辑或多个组件、模块或机制。模块可以构成软件模块(例如,机器可读介质上体现的代码)或硬件模块。“硬件模块”是指能够执行某些操作并且可以以某种物理方式进行配置或设置的有形单元。在各种示例性实施例中,一个或多个计算机系统(例如,独立的计算机系统、客户端计算机系统或服务器计算机系统)或计算机系统的一个或多个硬件模块(例如,处理器或一组处理器)可以由执行这里所描述的某些操作的软件(例如,应用程序或应用程序部分)配置为硬件模块。

在一些实施例中,硬件模块可以机械地、电子地或其任一合适的组合得以实现。例如,硬件模块可以包括永久用于执行某些操作的专用电路或逻辑。例如,硬件模块可以是现场可编程门阵列(field-programmablegatearray,简称fpga)或专用集成电路(applicationspecificintegratedcircuit,简称asic)等专用处理器。硬件模块还可以包括由软件临时配置执行某些操作的可编程逻辑或电路。例如,硬件模块可以包括通用处理器或其他可编程处理器执行的软件。一旦由这样的软件进行配置,硬件模块就成为特定的机器(或机器的特定组件),只用于执行所配置的功能,不再是通用处理器。应该理解,是否在专用和永久配置的电路中或者在临时配置的电路中(例如,由软件配置)机械地实现硬件模块可以由成本和时间确定。因此,短语“硬件模块”应该理解为包含有形实体,应该是物理构造且永久配置(例如,硬连线)或临时配置(例如,编程)的实体,以某种方式运行或执行本文描述的某些操作。如这里所使用的,“硬件实现的模块”是指硬件模块。考虑到临时配置(例如,编程)硬件模块的实施例,不需要在任一时刻对每个硬件模块进行配置或实现。例如,在硬件模块包括由软件配置为通用处理器的通用处理器的情况下,可以在不同的时间将通用处理器配置为各自不同的专用处理器(例如,包括不同的硬件模块)。对应地,软件配置特定的一个或多个处理器,以在一个时刻构成一个特定的硬件模块,在不同的时刻构成不同的硬件模块。

硬件模块可以向其他硬件模块提供信息并从其他硬件模块接收信息。因此,所述硬件模块可以视为是通信耦合的。在同时存在多个硬件模块的情况下,可以通过两个或多个硬件模块之间的信号传输(例如,通过合适的电路和总线)实现通信。在不同时间对多个硬件模块进行配置或实现的实施例中,这些硬件模块之间的通信例如可以通过多个硬件模块可访问的存储器结构中的信息存储和检索得以实现。例如,一个硬件模块可以执行一个操作并将该操作的输出存储在其通信耦合的存储器设备中。然后,另一硬件模块可以稍后访问该存储设备,从而对存储的输出进行检索和处理。硬件模块也可以发起与输入或输出设备的通信,并且可以利用资源(例如,一组信息)进行操作。

本文所述的示例性方法的各种操作至少部分地可由一个或多个暂时配置(例如,通过软件)或永久配置的处理器执行,从而执行相关操作。无论是临时配置的还是永久配置的,这样的处理器都可以构成处理器实现的模块,其用于执行本文描述的一个或多个操作或功能。如这里所使用的,“处理器实现的模块”是指使用一个或多个处理器实现的硬件模块。

类似地,此处描述的方法至少部分地可以由处理器实现,其中,特定的一个或多个处理器是硬件的示例。例如,方法的至少一些操作可以由一个或多个处理器或由处理器实现的模块执行。此外,一个或多个处理器还可以用于执行“云计算”环境中的相关操作或作为“软件即服务”(saas)。例如,至少一些操作可以由一组计算机(作为包括处理器的机器示例)执行,其中,这些操作可以经由网络(例如,因特网)和一个或多个合适的接口(例如,应用程序接口(applicationprograminterface,简称api))实现。

某些操作的性能可以分布在处理器之间,不仅驻留在单个机器内,而且部署在多个机器上。在一些示例性实施例中,处理器或由处理器实现的模块可以位于单个地理位置中(例如,家庭环境、办公室环境或服务器场内)。在其他示例性实施例中,处理器或由处理器实现的模块可以分布在多个地理位置中。

机器和软件架构

在一些实施例中,结合图1至5描述的模块、方法、应用等在机器和相关软件架构的上下文中得以实现。下面的部分描述了适用于所公开实施例的代表性软件架构和机器(例如,硬件)架构。

软件架构与硬件架构结合使用,从而创建适合特定目的的设备和机器。例如,与特定软件架构耦合的特定硬件架构将创建诸如手机、平板设备等的移动设备。稍微不同的硬件和软件架构可能会产生用于“物联网”的智能设备,而另一组合则会产生在云计算架构内使用的服务器计算机。并非所有这些软件和硬件架构的组合都在本文中呈现,因为本领域技术人员可以很容易地理解如何在不同于本文所包含的公开内容的情况下实施本发明的主题。

软件架构

图6是可结合本文所述的各种硬件架构使用的代表性软件架构602的框图600。图6仅仅是软件架构602的非限制性示例。可以理解的是,可以实现许多其他的架构以促进本文所述的功能。软件架构602可以在诸如图7的机器700等的硬件上执行,其还包括处理器710、存储器/存储设备730、i/o组件750以及其他设备。示出了代表性硬件层604,其可以表示例如图7的机器700。代表性硬件层604包括具有相关的可执行指令608的一个或多个处理单元606。可执行指令608表示软件架构602的可执行指令,包括图1至5中方法、模块等的实现方式。硬件层604还包括也具有可执行指令608的存储器和/或存储模块610。硬件层604还可以包括表示硬件层604的任一其他硬件的其他硬件612,例如,作为机器700一部分的其他硬件。

在图6的示例性架构中,可以将软件架构602概念化为层栈,其中,每个层提供特定的功能。例如,软件架构602可以包括诸如操作系统614、库616、框架/中间件618、应用程序620和表现层644等的层。操作上,层内的应用程序620和/或其他组件可以通过软件栈调用应用程序接口(applicationprogramminginterface,简称api)指令624,接收响应于api调用624的消息626所示的响应、返回的值等。所述层本质上是代表性的,并不是所有软件架构都具有所有层。例如,一些移动或专用的操作系统可能不提供框架/中间件618,而另一些可能提供这样的层。其他的软件架构可能包括额外的或不同的层。

操作系统614可以管理硬件资源并提供公共服务。操作系统614可以包括例如内核628、服务630和驱动器632。内核628可以作为硬件和其他软件层之间的抽象层。例如,内核628可以负责存储器管理、处理器管理(例如,调度)、组件管理、组网、安全设置等。服务器630可以为其他软件层提供其他公共服务。驱动器632可以负责控制底层硬件或与其进行交互。例如,驱动器632可以包括显示驱动器、相机驱动器、蓝牙驱动器、闪存驱动器、串行通信驱动器(例如,通用串行总线(universalserialbus,简称usb)驱动器)、无线保真驱动器、音频驱动器、电源管理驱动器等。这具体取决于硬件配置。

库616可以提供可供应用程序620和/或其他组件和/或层使用的公共基础设施。相比较直接与底层操作系统614的功能(例如,内核628、服务器630和/或驱动程序632)进行交互,库616通常允许其他软件模块以更容易的方式执行任务。库616可以包括系统库634(例如,c标准库),其可以提供诸如存储器分配功能、字符串操作功能、数学功能等功能。另外,库616可以包括诸如媒体库(例如,支持诸如mpeg4、h.264、mp3、aac、amr、jpg、png等的各种媒体格式的呈现和操纵的库)等的api库636、图形库(例如,可用于对显示器上图形内容中的2d和3d进行渲染的opengl框架)、数据库(例如,可提供各种关系数据库功能的sqlite)、网络库(例如,可提供网络浏览功能的webkit)等。库616还可以包括各种各样的其他库638,从而向应用620和其他软件组件/模块提供许多其他的api。

框架/中间件618(有时也称为中间件)可以提供高等级的公共基础设施,其可以由应用程序620和/或其他软件组件/模块使用。例如,框架/中间件618可以提供各种图形用户界面(graphicuserinterface,简称gui)功能、高级资源管理、高级定位服务等。框架/中间件618可以提供较广范围的其他api,其可以由应用程序620和/或其他软件组件/模块使用。其中一些可以是针对特定操作系统或平台的。

应用程序620包括内置应用程序640和/或第三方应用程序642。代表性内置应用程序640的示例可以包括但不限于联系人应用程序、浏览器应用程序、图书阅读器应用程序、位置应用程序、媒体应用程序、消息收发应用程序和/或游戏应用程序。第三方应用程序642可以包括任一内置应用程序640和各种其他的应用程序。在具体示例中,第三方应用程序642(例如,特定平台供应商以外的实体使用androidtm或iostm软件开发包(softwaredevelopmentkit,简称sdk)开发的应用程序)可以是运行在诸如iostm、androidtmphone或其他移动操作系统等移动操作系统上的移动软件。在该示例中,第三方应用程序642可以调用由诸如操作系统614等移动操作系统提供的api调用624,从而实现本文描述的功能。

应用程序620可以利用内置操作系统功能(例如,内核628、服务器630和/或驱动程序632)、库(例如,系统库634、api库636和其他库638)、框架/中间件618创建用户界面,从而与系统的用户进行交互。可选地或另外地,在一些系统中,可以通过诸如表现层644等的表现层实现与用户之间的交互。在这些系统中,应用程序/模块“逻辑”可以与用户交互的应用程序/模块的各个方面分开。

一些软件架构会使用虚拟机。在图6的示例中,用虚拟机648进行说明。虚拟机创建软件环境,在该软件环境中,应用程序/模块像在硬件机器上运行一样(例如,图7的机器700)。虚拟机648由主机操作系统(图7中的操作系统614)运行,尽管不总是,但其通常具有虚拟机监视器646。虚拟机监视器646管理虚拟机648的操作以及与主机操作系统(即,操作系统614)的交互。软件架构在诸如操作系统650、库652、框架/中间件654、应用程序656和/或表现层658等的虚拟机648内运行。虚拟机648内运行的软件架构的这些层可能与先前描述的相应层相同,也可能不同。

示例性机器架构和机器可读介质

图7是根据一些示例实施例的能够从机器可读介质(例如,机器可读存储介质)读取指令716并执行本文所讨论的任意一个或多个方法的机器700的组件的框图。具体地,图7示出了计算机系统的示例性形式的机器700的图形表示,在该计算机系统内的指令716(例如,软件、程序、应用程序、小应用程序、应用或其他可执行代码)用于使得机器700执行本文所讨论的任意一种或多种方法。例如,指令716可以使得机器700执行图1至图5的流程图。另外或可选地,指令716可以实现图1至图5的模块等。指令716将通用的、未编程的机器700转换为用于以所描述的方式执行所描述功能的特定机器。在可选实施例中,机器700作为独立的设备运行或者可以耦合(例如,联网)到其他机器。在联网部署中,机器700在服务器-客户端网络环境中具有服务器机器或客户端机器的功能,或者作为对等(或分布式)网络环境中的对等机器运行。机器700可以包括但不限于服务器计算机、客户端计算机、个人计算机(personalcomputer,简称pc)、平板电脑、笔记本电脑、上网本、机顶盒(set-topbox,简称stb)、个人数字助理(personaldigitalassistant,简称pda)、娱乐媒体系统、蜂窝电话、智能电话、移动设备、可穿戴设备(例如,智能手表)、智能家居设备(例如,智能电器)、其他智能设备、网络设备、网络路由器、网络交换机、网络桥或能够执行指令716的任何机器,其顺序地或以其他方式指定要由机器700执行的动作。此外,尽管仅示出了单个机器700,但是术语“机器”还应理解为包括机器700的集合,其单独或联合执行指令716,从而能执行本文所讨论的任意一种或多种方法。

机器700可以包括处理器710、存储器/存储设备730和i/o组件750,他们可以通过总线702彼此通信。在一个示例性实施例中,处理器710(例如,中央处理器(centralprocessingunit,简称cpu)、精简指令集计算(reducedinstructionsetcomputing,简称risc)处理器、复杂指令集计算(complexinstructionsetcomputing,简称cisc)处理器、图形处理器(graphicsprocessingunit,简称gpu)、数字信号处理器(digitalsignalprocessor,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、射频集成电路(radio-frequencyintegratedcircuit,简称rfic)、其他处理器或其任一合适的组合)可以包括可以执行指令716的处理器712和处理器714。术语“处理器”旨在包括多核处理器712和714,其可以包括可以同时执行指令716的两个或更多独立处理器712和714(有时称为“核”)。虽然图7示出了多个处理器710,但是机器700可以包括单个单核处理器712和714、单个多核处理器712和714(例如,多核处理器712、714)、多个单核处理器712和714、多个多核处理器712和714,或其任一组合。

存储器/存储设备730可以包括诸如主存储器或其他存储设备等的存储器732以及存储单元736,处理器710可以通过总线702接入到这二者。存储单元736和存储器732中存储了体现本文描述的方法或功能中任意一个或多个指令716。当由机器700执行时,指令716还可以完全或部分地驻留在存储器732、存储单元736、至少一个处理器710(例如,处理器712、714的高速缓存内)或其任一合适的组合内。因此,存储器732、存储单元736和处理器710的存储器是机器可读介质的示例。

正如本文所使用的,“机器可读介质”是指能够暂时或永久地存储指令716以及数据的设备,可以包括但不限于随机存取存储器(random-accessmemory,简称ram)、只读存储器(read-onlymemory,简称rom)、缓冲存储器、闪存、光学介质、磁性介质、高速缓冲存储器、其他类型的存储设备(例如,可擦除可编程只读存储器(erasableprogrammableread-onlymemory,简称eeprom))和/或其任一合适的组合。术语“机器可读介质”应理解为包括能够存储指令716的单个介质或多个介质(例如,集中式或分布式数据库,或相关的高速缓存和服务器)。术语“机器可读介质”也应该理解为包括能够存储机器(例如,机器700)执行的指令(例如,指令716)的任一介质或多个介质的组合,使得当由机器700的一个或多个处理器(例如,处理器710)执行时,指令716使得机器700执行本文所描述的任意一个或多个方法。因此,“机器可读介质”是指单个存储装置或设备以及包括多个存储装置或设备的“基于云”的存储系统或存储网络。术语“机器可读介质”本身不包括信号。

i/o组件750可以包括各种组件,用于接收输入、提供输出、产生输出、传输信息、交换信息、获得测量值等。特定机器中包括的特定i/o组件750取决于机器700的类型。例如,手机等便携式机器可能包括触控输入设备或其他这种输入机制,而无头服务器机器可能不包括这种触控输入设备。可以理解的是,i/o组件750可以包括许多图7中未示出的其他组件。根据功能对i/o组件750进行分组仅仅是为了对下面的讨论进行简化,分组不会构成限制。在各种示例性实施例中,i/o组件750可以包括输出组件752和输入组件754。输出组件752可以包括可视组件(例如,离子显示面板(plasmadisplaypanel,简称pdp)、发光二极管(lightemittingdiode,简称led)显示器、液晶显示器(liquidcrystaldisplay,简称lcd)、投影仪或阴极射线管(cathoderaytube,简称crt)等的显示器)、声学组件(例如,扬声器)、触觉组件(例如,振动马达、阻力机制)、其他信号生成器等显示器)。输入组件754可以包括字母数字输入组件(例如,键盘、用于接收字母数字输入的触摸屏、光电键盘或其他字母数字输入组件)、基于点的输入组件(例如,鼠标、触摸板、轨迹球、操纵杆、动作感应器或其他指向工具)、触觉输入组件(例如,物理按钮、提供触摸或触摸手势的位置和/或力量的触摸屏,或其他触觉输入组件)、音频输入组件(例如,麦克风)等。

在另一示例性实施例中,i/o组件750可以包括各种其他组件中的生物学组件756、运动组件758、环境组件760或位置组件762。例如,生物学组件756可以包括各种组件,用于检测表情(例如,手部表情、面部表情、声音表情、身体姿势或眼睛追踪),测量生物信号(例如,血压、心率、体温、出汗或脑波),对人进行识别(例如,语音识别、视网膜识别、面部识别、指纹识别或基于脑电图的识别)等。运动组件758可以包括加速度传感器组件(例如,加速计)、重力传感器组件、旋转传感器组件(例如,陀螺仪)等。环境组件760例如可以包括亮度传感器组件(例如,光度计)、温度传感器组件(例如,检测环境温度的一个或多个温度计)、湿度传感器组件、压力传感器组件(例如,气压计)、声学传感器组件(例如,检测背景噪声的一个或多个麦克风)、接近传感器组件(例如,检测附近物体的红外传感器)、气体传感器(例如,气体检测传感器,用于检测危险气体的浓度以确保安全或测量大气中的污染物)或可以提供周围物理环境对应的指示、测量值或信号的其他组件。位置组件762可以包括位置传感器组件(例如,全球定位系统(globalpositionsystem,简称gps)接收器组件)、高度传感器组件(例如,检测形成高度的气压的高度计或气压计)、方位传感器组件(例如,磁力仪))等。

可以使用多种技术实现通信。i/o组件750可以包括通信组件764,其能够分别经由耦合件782和耦合件772将机器700耦合到网络780或设备770。例如,通信组件764可以包括网络接口组件或其他合适的设备,从而与网络780进行交互。在另一示例中,通信组件764可以包括有线通信组件、无线通信组件、蜂窝通信组件、近场通信(nearfieldcommunication,简称nfc)组件、蓝牙组件(例如,蓝牙低功耗)、无线保真组件以及其他通信组件,从而通过其他模式实现通信。设备770可以是另一机器或任一外围设备(例如,经由通用串行总线(universalserialbus,简称usb)耦合的外围设备)。

另外,通信组件764可以检测标识符或包括能够检测标识符的组件。例如,通信组件764可以包括射频识别(radiofrequencyidentification,简称rfid)标签阅读器组件、nfc智能标签检测组件、光学阅读器组件(例如,用于检测诸如通用产品代码(universalproductcode,简称upc)条形码等的一维条形码的光学传感器、诸如快速响应(quickresponse,简称qr)码、aztec码、数据矩阵、dataglyph、maxicode、pdf417、超码、uccrss-2d条形码以及其他光码等的多维条形码,或声学检测组件(例如,用于识别标记的音频信号的麦克风)。另外,可以经由通信组件764得到各种信息,例如,经由互联网协议(internetprotocol,简称ip)地理位置的位置、经由无线保真信号三角测量的位置、经由检测nfc信标信号的位置,其可以指示特定位置的等。

传输介质

在各种示例性实施例中,网络780的一个或多个部分可以是自组网、内联网、外联网、虚拟专用网(virtualprivatenetwork,简称vpn)、局域网(localareanetwork,简称lan)、无线lan(wirelesslan,简称wlan)、广域网(wideareanetwork,简称wan)、无线wan(wirelesswan,简称wwan)、城域网(metropolitanareanetwork,简称man)、因特网、互联网的一部分、公共交换电话网(publicswitchedtelephonenetwork,简称pstn)的一部分、传统电话业务(plainoldtelephoneservice,简称pots)网、蜂窝电话网、无线网、无线保真网、其他类型的网络,或两个或更多个这些网络的组合。例如,网络780或网络780的一部分可以包括无线网络或蜂窝网络,耦合件782可以是码分多址(codedivisionmultipleaccess,简称cdma)连接、全球移动通信系统(globalsystemformobilecommunications,简称gsm)连接或其他类型的蜂窝或无线耦合件。在该示例中,耦合件782可以实现各种类型的数据传输技术中的任意一种,例如,单载波无线传输技术(singlecarrierradiotransmissiontechnology,简称1xrtt)、演进数据优化(evolution-dataoptimized,简称evdo)技术、通用分组无线业务(generalpacketradioservice,简称gprs)技术、gsm演进增强数据速率(enhanceddataratesforgsmevolution,简称edge)技术、包括3g和第四代(4g)无线网络的第三代合作伙伴计划(thirdgenerationpartnershipproject,简称3gpp)、通用移动通讯系统(universalmobiletelecommunicationssystem,简称umts)、高速分组接入(highspeedpacketaccess,简称hspa)、全球微波接入互操作性(worldwideinteroperabilityformicrowaveaccess,简称wimax)、长期演进(longtermevolution,简称lte)标准、其他由各种标准设置组织定义的标准、其他远程协议或其他数据传输技术。

在网络780中,可以经由网络接口设备(例如,通信组件764中包括的网络接口组件)使用传输介质并利用多种公知传输协议中的任意一种(例如,超文本传输协议(hypertexttransferprotocol,简称http))对指令716进行发送和接收。类似地,可以使用传输介质经由耦合件772(例如,对等耦合件)接收指令716或将其发送至设备770。术语“传输介质”应被理解为包括任一无形介质,其能够存储、编码或携带机器700执行的指令716,并且包括数字或模拟通信信号或其它无形介质。从而实现这种软件的通信。

语言

在整个说明书中,多个实例可以实现作为单个实例的组件、操作或结构。尽管将一个或多个方法的单独操作描述为单独的操作,但是单个操作中的一个或多个可以同时执行,并且不要求以所示的顺序执行操作。示例性配置中作为独立组件呈现的结构和功能可以实现为组合的结构或组件。类似地,作为单个组件呈现的结构和功能可以实现为单独的组件。这些及其他变化、修改、添加和改进都落入本文主题的范围内。

虽然已经参考具体示例性实施例对发明主题进行了概述,但是可以对这些实施例进行各种修改和改变而不偏离本发明实施例的更广范围。本发明主题的这些实施例在这里可以单独或共同由术语“发明”引用,这仅仅是为了方便,不应将本申请的范围限制为揭露的任何单个公开或发明构思。

已经对本文所示的实施例进行了足够详细的描述,使得本领域技术人员能够实现所公开的实施例。也可以使用和得到其他的实施例,使得可以在不脱离本公开范围的情况下进行结构和逻辑的替换和改变。因此,具体描述不应构成限制,并且各实施例的范围仅由所附权利要求及其等同技术的全部范围进行限定。

正如本文所使用的,术语“或”可以解释为包含性或排他性意义。此外,对于本文描述的资源、操作或结构,多个实例可以提供为单个实例。另外,各种资源、操作、模块、引擎和数据存储之间的界限有些随意,在特定的说明性配置的上下文中示出了特定的操作。功能可以以其他方式进行分配,这样的分配可以落入本公开各种实施例的范围内。通常,示例性配置中作为单独资源呈现的结构和功能可以实现为组合的结构或资源。类似地,作为单个资源呈现的结构和功能可以实现为单独的资源。这些以及其他的变形、修改、添加和改进均落入所附权利要求表示的本公开实施例的范围内。因此,说明书和附图认为是说明性而非限制性的。

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