发明内容
为了解决上述技术问题,第一方面,本申请提供了一种图像的预测方法,应用于电子设备,包括:
获取第一图像帧的绘制指令流;示例性地,该第一图像帧可以为附图2和5所示的真实帧N。
基于第一图像帧的绘制指令流中的第一类绘制指令,获取第一图像帧的一个或多个第一对象,第一类绘制指令为场景绘制指令;该第一对象可以为真实帧N中所示的对象502、对象504、对象506以及对象508等。
基于第一图像帧的绘制指令流中的第二类绘制指令,获取第一图像帧中的一个或多个第二对象,第二类绘制指令为控件绘制指令。控件绘制指令也被称为UI绘制指令,第二对象可以为控件、血量条等,第二对象在图像帧中的位置一般固定;
获取第二图像帧中的一个或多个第三对象;示例性地,第二图像帧可以为附图2和5所示的真实帧N-2,一个或多个第三对象可以为真实帧N-2中的对象502、对象504、对象506以及对象508;
计算一个或多个第一对象,和一个或多个第三对象之间的第一运动向量,一个或多个第三对象与一个或多个第一对象相匹配,第二图像帧为第一图像帧之前的一帧图像帧;示例性地,真实帧N-2中的对象502与真实帧N中所示的对象502相匹配,真实帧N-2中的对象504与真实帧N中所示的对象504相匹配,第一运动向量可以包括真实帧N-2中的对象502与真实帧N中的对象502之间的运动向量,以及真实帧N-2中的对象504与真实帧N中的对象504之间的运动向量;
获取第二运动向量,第二运动向量为一个或多个第三对象,和第三图像帧中的一个或多个第四对象之间的运动向量,一个或多个第三对象与一个或多个第四对象相匹配,第三图像帧为第二图像帧之前的一帧图像帧;示例性地第三图像帧可以为附图2和5所示的真实帧N-4,一个或多个第四对象可以为真实帧N-4中的对象502、对象504、对象506以及对象508。第二运动向量可以包括真实帧N-4中的对象502与真实帧N-2中的对象502之间的运动向量,以及真实帧N-4中的对象504与真实帧N-2中的对象504之间的运动向量。
基于第一运动向量和第二运动向量,计算第三运动向量,示例性地,第三运动向量可以为第一运动向量与第二运动向量的差值的一半。
基于第一运动向量、第三运动向量和一个或多个第一对象,获得第一预测图像帧,第一预测图像帧为附图2所示的真实帧N+1对应的预测场景图像;
将第一预测图像帧与一个或多个第二对象合并,以获得第二预测图像帧,二预测图像帧可以指示预测帧N+1。具体地,第二对象的位置一般在图像帧中的位置固定,所以可以直接将第二对象添加到第一预测图像帧的固定位置,从而获得预测帧N+1。
在本身的一个实施例中,获取第一图像帧的绘制指令流之前,包括:替换指针列表中的第一指针为第二指针,第一指针指向第一函数,第二指针指向第二函数,其中第一函数用于绘制第一图像帧,第二函数用于对第一图像帧的绘制指令流的绘制指令进行识别。示例性地,第一指针可以为图形库中原始函数指针P1(其中指针P1指向图像库中原始函数对应的实现函数)第二指针可以为拦截函数指针P2(其中指针P2可指向识别模块中原始函数对应的实现函数)。
在本申请的一个实施例中,基于绘制指令流中的第一类绘制指令,获取第一图像帧中的一个或多个第一对象之前,还包括:基于第二函数,对第一图像帧的绘制指令流的绘制指令进行识别,以确定第一图像帧的绘制指令流中的第一类绘制指令、第二类绘制指令和第三类绘制指令。
在本申请的一个实施例中,获取第二图像帧中的一个或多个第三对象之前,还包括:获取第二图像帧的绘制指令流;基于第二图像帧的绘制指令流中的第一类绘制指令,获取第二图像帧中的一个或多个第三对象;存储一个或多个第三对象。
在本申请的一个实施例中,获取第二图像帧中的一个或多个第三对象,包括:基于第一图像帧的绘制指令流的绘制指令中的第三类绘制指令,获取一个或多个第三对象,其中,第三类绘制指令为图像送显指令。示例性地,可在电子设备识别到真实帧N的的绘制指令流的中的图像送显指令时,获取真实帧N-2中的一个或多个第三对象。
在本申请的一个实施例中,一个或多个第一对象包括第五对象,一个或多个第三对象包括第六对象,一个或多个第四对象包括第七对象,一个或多个第一对象与一个或多个第三对象相匹配为第五对象和六对象的标识相同,一个或多个第三对象与一个或多个第四对象相匹配为第五对象和第七对象的标识相同。示例性地,第五对象可以为真实帧N中的对象502,第六对象可以为真实帧N-2中的对象502,第七对象可以为真实帧N-4中的对象502,其中一个或多个第一对象与一个或多个第三对象相匹配为真实帧N中的对象502和真实帧N-2中的对象502的标识相同,一个或多个第三对象与一个或多个第四对象相匹配为真实帧N-2中的对象502和真实帧N-4中的对象502的标识相同。
在本申请的一个实施例中,第一图像帧和第二图像帧之间间隔P帧图像帧,第二图像帧和第三图像帧之间间隔Q帧图像帧,P、Q为正整数,其中P、Q可以相同,也可以不同。
在本申请的一个实施例中,一个或多个第一对象包括第五对象和第八对象,一个或多个第三对象包括第六对象和第九对象,第五对象和第六对象的标识相同,第八对象和第九对象的标识相同,示例性地,第八对象可以为真实帧N中的对象504,第九对象可以为真实帧N-2中的对象504,获取第一图像帧中的一个或多个第一对象之后,还包括:
基于第五对象的标识,获取第六对象的顶点信息。示例性地通过真实帧N中的对象502的标识,获取真实帧N-2中的对象502的顶点信息。示例性地,可通过真实帧N中的对象502的标识,即人的标识,获取真实帧N-2中对应的人的顶点信息;
基于第五对象的顶点信息和第六对象的顶点信息不同,确定第五对象为动态对象,通过比较真实帧N中的对象502的顶点信息和真实帧N-2中的对象502的顶点信息,如果顶点信息不同,则真实帧N中的对象502为动态对象;
基于第八对象的标识,获取第九对象的顶点信息;上文已经示出,第八对象可以为真实帧N中对象504,第九对象可以为真实帧N-2中对象504,例如,对象504具体为树。通过真实帧N中对象504,即树的标识,可以获取真实帧N-2中对象504顶点信息。示例性地,可以从缓存中获取真实帧N-2中对象504顶点信息。
基于第八对象的顶点信息和第九对象的顶点信息相同,确定第八对象为静态对象,示例性地,基于真实帧N中对象504和真实帧N-2中对象504顶点信息一致,则真实帧N中对象504为静态对象;
记录第五对象为动态对象;记录第八对象为静态对象。
在本申请的一个实施例中,计算一个或多个第一对象,和一个或多个第三对象之间的第一运动向量,包括:
基于第五对象与第六对象的坐标,计算第一运动向量的第一运动分量;示例性地,可以基于真实帧N中对象502的坐标,真实帧N-2中的对象502的坐标,计算真实帧N中对象502和真实帧N-2中的对象502的第一运动分量;
基于第八对象和第九对象的坐标,计算第一运动向量的第二运动分量;示例性地,可以基于真实帧N中对象504的坐标,真实帧N-2中的对象504的坐标,计算真实帧N中对象504和真实帧N-2中的对象504的第二运动分量。
在本申请的一个实施例中,获取第二运动向量之前,包括
获取第三图像帧的绘制指令流;基于第三图像帧的绘制指令流中的第一类绘制指令,获取第三图像帧中的一个或多个第四对象;示例性地,基于真实帧N-4的绘制指令流中的场景绘制指令,可以获取真实帧N-4中的对象502、对象504、508等。
存储一个或多个第四对象;
获取第二图像帧中的一个或多个第三对象之后,还包括:计算一个或多个第三对象,和一个或多个第四对象之间的第二运动向量;示例性地,上文已经示出第二运动向量可以包括真实帧N-4中的对象502与真实帧N-2中的对象502之间的运动向量,以及真实帧N-4中的对象508与真实帧N-2中的对象508之间的运动向量,以及真实帧N-4中的对象504与真实帧N-2中的对象504之间的运动向量;
存储第二运动向量。
在本申请的一个实施例中,一个或多个第四对象包括第七对象和第十对象,第六对象和第七对象的标识相同,第九对象和第十对象的标识相同,示例性地,上文已经示出,第七对象可以为真实帧N-4中的对象502,第六对象可以为真实帧N-2中的对象502,第九对象可以为真实帧N-2中对象504,第十对象可以为真实帧N-4中的对象504;
计算一个或多个第三对象,和一个或多个第四对象之间的第二运动向量,包括:
基于第六对象与第七对象的坐标,计算第二运动向量的第一运动分量;示例性地,可以基于真实帧N-2中对象502的坐标,真实帧N-4中的对象502的坐标,可以计算真实帧N-4中的对象502与真实帧N-2中的对象502之间的第一运动分量;
基于第九对象和第十对象的坐标,计算第二运动向量的第二运动分量;示例性地,可以基于真实帧N-2中对象504的坐标,真实帧N-4中的对象504的坐标,可以计算真实帧N-4中的对象504与真实帧N-2中的对象504之间的第二运动分量。
在本申请的一个实施例中,基于第一运动向量和第二运动向量,计算第三运动向量,包括:
将第二运动向量和第一运动向量的差值的一半,作为第三运动向量。示例性地,第三运动向量可以包括:真实帧N-4中的对象502与真实帧N-2中的对象502之间的第一运动分量与真实帧N-2中的对象502与真实帧N中的对象502之间的第一运动分量的差值的一半。第三运动向量还可以包括:真实帧N-4中的对象504与真实帧N-2中的对象504之间的第二运动分量与真实帧N-2中的对象504与真实帧N中的对象504之间的第二运动分量的差值的一半。
在本申请的一个实施例中,基于第一运动向量、第三运动向量和一个或多个第一对象,获得第一预测图像帧,包括:
基于第一运动向量的第一运动分量的一半、第三运动向量的第一运动分量和第五对象的坐标之和,得到第五对象的预测坐标基于第一运动向量的第二运动分量的一半、第三运动向量的第二运动分量和第八对象的坐标之和,得到第八对象的预测坐标;
基于第五对象的预测坐标和第八对象的预测坐标,得到第一预测图像帧。
在本申请的一个实施例中,还包括:
丢弃第一图像帧第二图像帧之间的图像帧的绘制指令流;
丢弃第二图像帧第三图像帧之间的图像帧的绘制指令流。
在本申请的一个实施例中,还包括:
对第一图像帧的绘制指令流进行绘制。
在本申请的一个实施例中,还包括:
在第一图像帧送显完成后,将第二预测图像帧送显。
第二方面,本申请提供了一种图像的预测方法,应用于电子设备,电子设备包括识别模块316、匹配模块322、计算模块324、估计模块326和合并模块330,方法包括:
识别模块316获取第一图像帧的绘制指令流;
识别模块316获取基于第一图像帧的绘制指令流中的第一类绘制指令,获取第一图像帧的一个或多个第一对象,第一类绘制指令为场景绘制指令;
识别模块316获取基于绘制指令流中的第二类绘制指令,获取第一图像帧中的一个或多个第二对象,第二类绘制指令为控件绘制指令;
匹配模块322获取第二图像帧中的一个或多个第三对象;
计算模块324计算一个或多个第一对象,和一个或多个第三对象之间的第一运动向量,一个或多个第三对象与一个或多个第一对象相匹配,第二图像帧为第一图像帧之前的一帧图像帧;
计算模块324获取第二运动向量,第二运动向量为一个或多个第三对象,和第三图像帧中的一个或多个第四对象之间的运动向量,一个或多个第三对象与一个或多个第四对象相匹配,第三图像帧为第二图像帧之前的一帧图像帧;
计算模块324基于第一运动向量和第二运动向量,计算第三运动向量;
估计模块326基于第一运动向量、第三运动向量和一个或多个第一对象,获得第一预测图像帧;
合并模块330将第一预测图像帧与一个或多个第二对象合并,以获得第二预测图像帧。
在本申请的一个实施例中,电子设备还包括拦截模块314,在识别模块316获取第一图像帧的绘制指令流之前,拦截模块314替换指针列表中的第一指针为第二指针,第一指针指向第一函数,第二指针指向第二函数,其中第一函数用于绘制第一图像帧,第二函数用于识别模块对第一图像帧的绘制指令流的绘制指令进行识别。
在本申请的一个实施例中,识别模块316基于绘制指令流中的第一类绘制指令,获取第一图像帧中的一个或多个第一对象之前,识别模块基于第二函数,对第一图像帧的绘制指令流的绘制指令进行识别,以确定第一图像帧的绘制指令流中的第一类绘制指令、第二类绘制指令和第三类绘制指令。
在本申请的一个实施例中,匹配模块322获取第二图像帧中的一个或多个第三对象之前,识别模块还获取第二图像帧的绘制指令流,基于第二图像帧的绘制指令流中的第一类绘制指令,获取第二图像帧中的一个或多个第三对象,识别模块将一个或多个第三对象存储电子设备的缓存。
在本申请的一个实施例中,电子设备还包括分离模块318,一个或多个第一对象包括第五对象和第八对象,一个或多个第三对象包括第六对象和第九对象,第五对象和第六对象的标识相同,第八对象和第九对象的标识相同,识别模块获取第一图像帧中的一个或多个第一对象之后,分离模块基于第五对象的标识,获取第六对象的顶点信息;分离模块基于第五对象的顶点信息和第六对象的顶点信息不同,确定第五对象为动态对象;分离模块基于第八对象的标识,获取第九对象的顶点信息;分离模块基于第八对象的顶点信息和第九对象的顶点信息相同,确定第八对象为静态对象;分离模块记录第五对象为动态对象;记录第八对象为静态对象。
在本申请的一个实施例中,计算模块324计算一个或多个第一对象,和一个或多个第三对象之间的第一运动向量,包括:计算模块324基于第五对象与第六对象的坐标,计算第一运动向量的第一运动分量;计算模块基于第八对象和第九对象的坐标,计算第一运动向量的第二运动分量。
在本申请的一个实施例中,计算模块324获取第二运动向量之前,包括
计算模块获取第三图像帧的绘制指令流;
计算模块基于第三图像帧的绘制指令流中的第一类绘制指令,获取第三图像帧中的一个或多个第四对象;
计算模块通过电子设备的缓存,存储一个或多个第四对象;
计算模块获取第二图像帧中的一个或多个第三对象之后,还包括:
计算模块计算一个或多个第三对象,和一个或多个第四对象之间的第二运动向量;
计算模块将第二运动向量存储到电子设备的缓存。
在本申请的一个实施例中,一个或多个第四对象包括第七对象和第十对象,第六对象和第七对象的标识相同,第九对象和第十对象的标识相同,计算模块计算一个或多个第三对象,和一个或多个第四对象之间的第二运动向量,包括:
计算模块基于第六对象与第七对象的坐标,计算第二运动向量的第一运动分量;
计算模块基于第九对象和第十对象的坐标,计算第二运动向量的第二运动分量。
在本申请的一个实施例中,计算模块基于第一运动向量和第二运动向量,计算第三运动向量,包括:
计算模块将第二运动向量和第一运动向量的差值的一半,作为第三运动向量。
在本申请的一个实施例中,估计模块326基于第一运动向量、第三运动向量和一个或多个第一对象,获得第一预测图像帧,包括:
估计模块基于第一运动向量的第一运动分量的一半、第三运动向量的第一运动分量和第五对象的坐标之和,得到第五对象的预测坐标;
估计模块基于第一运动向量的第二运动分量的一半、第三运动向量的第二运动分量和第八对象的坐标之和,得到第八对象的预测坐标;
估计模块基于第五对象的预测坐标和第八对象的预测坐标,得到第一预测图像帧。
在本申请的一个实施例中,电子设备还包括丢弃模块,丢弃模块丢弃第一图像帧第二图像帧之间的图像帧的绘制指令流,丢弃模块还丢弃第二图像帧第三图像帧之间的图像帧的绘制指令流。
在本申请的一个实施例中,电子设备还包括送显模块332,送显模块在第一图像帧送显完成后,将第二预测图像帧送显。
第三方面,本申请提供了一种电子设备,其特征在于,包括处理器和存储设备,所述存储设备存有程序指令,所述程序指令由所述处理器运行时,使得所述电子设备执行如第一方面所述的预测方法。
第四方面,本申请提供了一种电子设备,其特征在于,包括处理器和存储设备,所述存储设备存有程序指令,所述程序指令由所述处理器运行时,使得所述电子设备执行如第二方面所述的预测方法。
第五方面,本申请提供了一种计算机可读存储介质,其特征在于,包括计算机指令,当所述计算机指令在所述电子设备上运行时,使得所述电子设备执行如第一方面所述的预测方法。
第六方面,本申请提供了一种计算机可读存储介质,其特征在于,包括计算机指令,当所述计算机指令在所述电子设备上运行时,使得所述电子设备执行如第二方面所述的预测方法。
通过本申请所示的预测方法可以可以减少GPU和GPU执行绘制指令时的资源消耗,也就减小了电子设备的负载。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本申请实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
参见图1,具体地示出了电子设备100的结构示意图,本申请提供的方法可应用于电子设备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可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器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)接口等。
I2C接口是一种双向同步串行总线,包括一根串行数据线(serial data line,SDA)和一根串行时钟线(derail clock line,SCL)。在一些实施例中,处理器110可以包含多组I2C总线。处理器110可以通过不同的I2C总线接口分别耦合触摸传感器180K,充电器,闪光灯,摄像头193等。例如:处理器110可以通过I2C接口耦合触摸传感器180K,使处理器110与触摸传感器180K通过I2C总线接口通信,实现电子设备100的触摸功能。
I2S接口可以用于音频通信。在一些实施例中,处理器110可以包含多组I2S总线。处理器110可以通过I2S总线与音频模块170耦合,实现处理器110与音频模块170之间的通信。在一些实施例中,音频模块170可以通过I2S接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功能。
PCM接口也可以用于音频通信,将模拟信号抽样,量化和编码。在一些实施例中,音频模块170与无线通信模块160可以通过PCM总线接口耦合。在一些实施例中,音频模块170也可以通过PCM接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功能。所述I2S接口和所述PCM接口都可以用于音频通信。
UART接口是一种通用串行数据总线,用于异步通信。该总线可以为双向通信总线。它将要传输的数据在串行通信与并行通信之间转换。在一些实施例中,UART接口通常被用于连接处理器110与无线通信模块160。例如:处理器110通过UART接口与无线通信模块160中的蓝牙模块通信,实现蓝牙功能。在一些实施例中,音频模块170可以通过UART接口向无线通信模块160传递音频信号,实现通过蓝牙耳机播放音乐的功能。
MIPI接口可以被用于连接处理器110与显示屏194,摄像头193等外围器件。MIPI接口包括摄像头串行接口(camera serial interface,CSI),显示屏串行接口(displayserial interface,DSI)等。在一些实施例中,处理器110和摄像头193通过CSI接口通信,实现电子设备100的拍摄功能。处理器110和显示屏194通过DSI接口通信,实现电子设备100的显示功能。
GPIO接口可以通过软件配置。GPIO接口可以被配置为控制信号,也可被配置为数据信号。在一些实施例中,GPIO接口可以用于连接处理器110与摄像头193,显示屏194,无线通信模块160,音频模块170,传感器模块180等。GPIO接口还可以被配置为I2C接口,I2S接口,UART接口,MIPI接口等。
USB接口130是符合USB标准规范的接口,具体可以是Mini USB接口,Micro USB接口,USB Type C接口等。USB接口130可以用于连接充电器为电子设备100充电,也可以用于电子设备100与外围设备之间传输数据。也可以用于连接耳机,通过耳机播放音频。该接口还可以用于连接其他电子设备,例如AR设备等。
可以理解的是,本发明实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在本申请另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块140可以通过USB接口130接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块140可以通过电子设备100的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,显示屏194,摄像头193,和无线通信模块160等供电。电源管理模块141还可以用于监测电池容量,电池循环次数,电池健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块141也可以设置于处理器110中。在另一些实施例中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
天线1和天线2用于发射和接收电磁波信号。电子设备100中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
移动通信模块150可以提供应用在电子设备100上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实施例中,移动通信模块150的至少部分功能模块可以被设置于处理器110中。在一些实施例中,移动通信模块150的至少部分功能模块可以与处理器110的至少部分模块被设置在同一个器件中。
调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(不限于扬声器170A,受话器170B等)输出声音信号,或通过显示屏194显示图像或视频。在一些实施例中,调制解调处理器可以是独立的器件。在另一些实施例中,调制解调处理器可以独立于处理器110,与移动通信模块150或其他功能模块设置在同一个器件中。
无线通信模块160可以提供应用在电子设备100上的包括无线局域网(wirelesslocal area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器110。无线通信模块160还可以从处理器110接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
在一些实施例中,电子设备100的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得电子设备100可以通过无线通信技术与网络以及其他设备通信。所述无线通信技术可以包括全球移动通讯系统(global system for mobile communications,GSM),通用分组无线服务(general packet radio service,GPRS),码分多址接入(codedivision multiple access,CDMA),宽带码分多址(wideband code division multipleaccess,WCDMA),时分码分多址(time-division code division multiple access,TD-SCDMA),长期演进(long term evolution,LTE),BT,GNSS,WLAN,NFC ,FM,和/或IR技术等。所述GNSS可以包括全球卫星定位系统(global positioning system ,GPS),全球导航卫星系统(global navigation satellite system,GLONASS),北斗卫星导航系统(beidounavigation satellite system,BDS),准天顶卫星系统(quasi-zenith satellitesystem,QZSS)和/或星基增强系统(satellite based augmentation systems,SBAS)。
电子设备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的正整数。
电子设备100可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
ISP 用于处理摄像头193反馈的数据。例如,拍照时,打开快门,光线通过镜头被传递到摄像头感光元件上,光信号转换为电信号,摄像头感光元件将所述电信号传递给ISP处理,转化为肉眼可见的图像。ISP还可以对图像的噪点,亮度,肤色进行算法优化。ISP还可以对拍摄场景的曝光,色温等参数优化。在一些实施例中,ISP可以设置在摄像头193中。
摄像头193用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。感光元件可以是电荷耦合器件(charge coupled device,CCD)或互补金属氧化物半导体(complementary metal-oxide-semiconductor,CMOS)光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给ISP转换成数字图像信号。ISP将数字图像信号输出到DSP加工处理。DSP将数字图像信号转换成标准的RGB,YUV等格式的图像信号。在一些实施例中,电子设备100可以包括1个或N个摄像头193,N为大于1的正整数。
数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当电子设备100在频点选择时,数字信号处理器用于对频点能量进行傅里叶变换等。
视频编解码器用于对数字视频压缩或解压缩。电子设备100可以支持一种或多种视频编解码器。这样,电子设备100可以播放或录制多种编码格式的视频,例如:动态图像专家组(moving picture experts group,MPEG)1,MPEG2,MPEG3,MPEG4等。
NPU为神经网络(neural-network ,NN)计算处理器,通过借鉴生物神经网络结构,例如借鉴人脑神经元之间传递模式,对输入信息快速处理,还可以不断的自学习。通过NPU可以实现电子设备100的智能认知等应用,例如:图像识别,人脸识别,语音识别,文本理解等。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。处理器110通过运行存储在内部存储器121的指令,和/或存储在设置于处理器中的存储器的指令,执行电子设备100的各种功能应用以及数据处理。
电子设备100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块170还可以用于对音频信号编码和解码。在一些实施例中,音频模块170可以设置于处理器110中,或将音频模块170的部分功能模块设置于处理器110中。
扬声器170A,也称“喇叭”,用于将音频电信号转换为声音信号。电子设备100可以通过扬声器170A收听音乐,或收听免提通话。
受话器170B,也称“听筒”,用于将音频电信号转换成声音信号。当电子设备100接听电话或语音信息时,可以通过将受话器170B靠近人耳接听语音。
麦克风170C,也称“话筒”,“传声器”,用于将声音信号转换为电信号。当拨打电话或发送语音信息时,用户可以通过人嘴靠近麦克风170C发声,将声音信号输入到麦克风170C。电子设备100可以设置至少一个麦克风170C。在另一些实施例中,电子设备100可以设置两个麦克风170C,除了采集声音信号,还可以实现降噪功能。在另一些实施例中,电子设备100还可以设置三个,四个或更多麦克风170C,实现采集声音信号,降噪,还可以识别声音来源,实现定向录音功能等。
耳机接口170D用于连接有线耳机。耳机接口170D可以是USB接口130,也可以是3.5mm的开放移动电子设备平台(open mobile terminal platform,OMTP)标准接口,美国蜂窝电信工业协会(cellular telecommunications industry association of the USA,CTIA)标准接口。
压力传感器180A用于感受压力信号,可以将压力信号转换成电信号。在一些实施例中,压力传感器180A可以设置于显示屏194。压力传感器180A的种类很多,如电阻式压力传感器,电感式压力传感器,电容式压力传感器等。电容式压力传感器可以是包括至少两个具有导电材料的平行板。当有力作用于压力传感器180A,电极之间的电容改变。电子设备100根据电容的变化确定压力的强度。当有触摸操作作用于显示屏194,电子设备100根据压力传感器180A检测所述触摸操作强度。电子设备100也可以根据压力传感器180A的检测信号计算触摸的位置。在一些实施例中,作用于相同触摸位置,但不同触摸操作强度的触摸操作,可以对应不同的操作指令。例如:当有触摸操作强度小于第一压力阈值的触摸操作作用于短消息应用图标时,执行查看短消息的指令。当有触摸操作强度大于或等于第一压力阈值的触摸操作作用于短消息应用图标时,执行新建短消息的指令。
陀螺仪传感器180B可以用于确定电子设备100的运动姿态。在一些实施例中,可以通过陀螺仪传感器180B确定电子设备100围绕三个轴(即,x,y和z轴)的角速度。陀螺仪传感器180B可以用于拍摄防抖。示例性的,当按下快门,陀螺仪传感器180B检测电子设备100抖动的角度,根据角度计算出镜头模组需要补偿的距离,让镜头通过反向运动抵消电子设备100的抖动,实现防抖。陀螺仪传感器180B还可以用于导航,体感游戏场景。
气压传感器180C用于测量气压。在一些实施例中,电子设备100通过气压传感器180C测得的气压值计算海拔高度,辅助定位和导航。
磁传感器180D包括霍尔传感器。电子设备100可以利用磁传感器180D检测翻盖皮套的开合。在一些实施例中,当电子设备100是翻盖机时,电子设备100可以根据磁传感器180D检测翻盖的开合。进而根据检测到的皮套的开合状态或翻盖的开合状态,设置翻盖自动解锁等特性。
加速度传感器180E可检测电子设备100在各个方向上(一般为三轴)加速度的大小。当电子设备100静止时可检测出重力的大小及方向。还可以用于识别电子设备姿态,应用于横竖屏切换,计步器等应用。
距离传感器180F,用于测量距离。电子设备100可以通过红外或激光测量距离。在一些实施例中,拍摄场景,电子设备100可以利用距离传感器180F测距以实现快速对焦。
接近光传感器180G可以包括例如发光二极管(LED)和光检测器,例如光电二极管。发光二极管可以是红外发光二极管。电子设备100通过发光二极管向外发射红外光。电子设备100使用光电二极管检测来自附近物体的红外反射光。当检测到充分的反射光时,可以确定电子设备100附近有物体。当检测到不充分的反射光时,电子设备100可以确定电子设备100附近没有物体。电子设备100可以利用接近光传感器180G检测用户手持电子设备100贴近耳朵通话,以便自动熄灭屏幕达到省电的目的。接近光传感器180G也可用于皮套模式,口袋模式自动解锁与锁屏。
环境光传感器180L用于感知环境光亮度。电子设备100可以根据感知的环境光亮度自适应调节显示屏194亮度。环境光传感器180L也可用于拍照时自动调节白平衡。环境光传感器180L还可以与接近光传感器180G配合,检测电子设备100是否在口袋里,以防误触。
指纹传感器180H用于采集指纹。电子设备100可以利用采集的指纹特性实现指纹解锁,访问应用锁,指纹拍照,指纹接听来电等。
温度传感器180J用于检测温度。在一些实施例中,电子设备100利用温度传感器180J检测的温度,执行温度处理策略。例如,当温度传感器180J上报的温度超过阈值,电子设备100执行降低位于温度传感器180J附近的处理器的性能,以便降低功耗实施热保护。在另一些实施例中,当温度低于另一阈值时,电子设备100对电池142加热,以避免低温导致电子设备100异常关机。在其他一些实施例中,当温度低于又一阈值时,电子设备100对电池142的输出电压执行升压,以避免低温导致的异常关机。
触摸传感器180K,也称“触控器件”。触摸传感器180K可以设置于显示屏194,由触摸传感器180K与显示屏194组成触摸屏,也称“触控屏”。触摸传感器180K用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。可以通过显示屏194提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器180K也可以设置于电子设备100的表面,与显示屏194所处的位置不同。
骨传导传感器180M可以获取振动信号。在一些实施例中,骨传导传感器180M可以获取人体声部振动骨块的振动信号。骨传导传感器180M也可以接触人体脉搏,接收血压跳动信号。在一些实施例中,骨传导传感器180M也可以设置于耳机中,结合成骨传导耳机。音频模块170可以基于所述骨传导传感器180M获取的声部振动骨块的振动信号,解析出语音信号,实现语音功能。应用处理器可以基于所述骨传导传感器180M获取的血压跳动信号解析心率信息,实现心率检测功能。
按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信号输入。
马达191可以产生振动提示。马达191可以用于来电振动提示,也可以用于触摸振动反馈。例如,作用于不同应用(例如拍照,音频播放等)的触摸操作,可以对应不同的振动反馈效果。作用于显示屏194不同区域的触摸操作,马达191也可对应不同的振动反馈效果。不同的应用场景(例如:时间提醒,接收信息,闹钟,游戏等)也可以对应不同的振动反馈效果。触摸振动反馈效果还可以支持自定义。
指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。
SIM卡接口195用于连接SIM卡。SIM卡可以通过插入SIM卡接口195,或从SIM卡接口195拔出,实现和电子设备100的接触和分离。电子设备100可以支持1个或N个SIM卡接口,N为大于1的正整数。SIM卡接口195可以支持Nano SIM卡,Micro SIM卡,SIM卡等。同一个SIM卡接口195可以同时插入多张卡。所述多张卡的类型可以相同,也可以不同。SIM卡接口195也可以兼容不同类型的SIM卡。SIM卡接口195也可以兼容外部存储卡。电子设备100通过SIM卡和网络交互,实现通话以及数据通信等功能。在一些实施例中,电子设备100采用eSIM,即:嵌入式SIM卡。eSIM卡可以嵌在电子设备100中,不能和电子设备100分离。
下面结合附图对本申请所示的图像帧的预测方法的原理进行解释和说明。
为了方便理解,下面对本申请方案中的一些专业技术术语进行解释和说明:
关于图形库
图形库也称为绘图库,图形库用于定义跨编程语言、跨平台的应用程序编程接口(Application Programming Interface,API),其中包含许多对图形进行处理的函数,以OpenGL(Open Graphics Library,开放式图形库)为例,OpenGL定义的API中包括用于绘制二维图像或三维图像的接口(该接口包括绘制函数,例如绘制函数glDrawElements( )),还包括将绘制函数绘制的图像呈现到显示界面上的接口(该接口包括呈现函数,例如函数eglSwapBuffers( ))等,本申请实施例在此不进行一一举例。其中,OpenGL中的函数可以通过指令调用,例如,通过绘制指令可以调用绘制函数,以绘制二维图像或三维图像。该绘制指令是在游戏应用开发时开发人员根据图形库内的函数编写的命令,用于调用与绘制指令对应的图形库的接口。
关于游戏图像帧:
上文中所示,绘制指令调用绘制函数所绘制的二维图像或三维图像可以包括游戏图像帧,还包括其他类型的图像帧。具体地,游戏应用在运行过程中,是通过对一帧帧图像进行连续渲染和快速播放显示的。一帧图像帧是游戏应用所显示的一帧静态图像。每一帧静态图像可以由场景图像和UI图像等组成。示例性地,场景图像可以包括游戏内风景、游戏人物、背景物体、特效、技能等,UI图像可以包括渲染控制按钮、小地图、悬浮文字等图像,有的游戏里人物血量条也包含在UI图像内。需要说明的是,不论是场景图像中游戏人物等,还是UI图像中的渲染控制按钮都可以认为是游戏图像帧中的对象,可以理解为,每个游戏图像帧是由一个个对象组成的。
关于绘制指令:
游戏图像帧中的每个对象都是通过电子设备特定软件或者硬件执行绘制指令绘制获得的。一个对象可以由一条或者多条绘制指令绘制获得,一般情况下,一个对象与绘制指令一一对应。需要说明的是,每条绘制指令还包括其携带的特定参数,例如顶点信息等。在电子设备执行该绘制指令时,基于其特定参数绘制该绘制指令对应的对象。需要说明的是,对于不同帧中的同一对象所对应的绘制指令是一致的,例如,游戏画面连续的多个游戏图像帧中显示的某棵大树是电子设备硬件基于相同的绘制指令绘制获得的。但是本申请并不限制这种“相同”是毫无差别的,在一些实施例中相同也可以是“近似”或“相似”。
关于绘制指令流:
绘制指令流是由一条或者多条绘制指令组成的指令流,一个绘制指令流一般用于绘制一帧图像,具体地,GPU可以通过运行绘制指令流中的一条或者多条绘制指令,调用图形库的一个或多个接口,来实现对图像帧中一个或多个对象进行绘制。需要说明的是,绘制指令所绘制的每个对象可以通过存储在内存中的数据表示。示例性地,根据该绘制指令流生成的绘制对象的集合可以组成对应游戏图像帧的显示数据。
参见附图2,具体涉及本申请中图像帧的预测方法的原理图。
如图2所示,真实帧N-4、真实帧N-3、真实帧N-2、真实帧N-1、真实帧N、真实帧N+1以及真实帧N+2为游戏应用按着时间顺序进行显示的图像帧,真实帧是相对预测帧而言,基于真实帧可预测获得预测帧。具体地,每个真实帧都包括一个或多个对象,每一真实帧的对象都可通过GPU执行绘制指令流中与对象相对应的绘制指令绘制获得。示例性地,真实帧N包括四个对象,分别是对象502、对象504、对象506和对象508,对象502、对象504、对象506和对象508可分别由绘制指令01、绘制指令11、绘制指令21以及绘制指令31绘制获得。真实帧N-2包括四个对象,分别是对象502、对象504、对象506和对象508,对象502、对象504、对象506和对象508也分别由绘制指令01、绘制指令11、绘制指令21以及绘制指令31绘制获得。
由于真实帧N-4、真实帧N-3、真实帧N-2、真实帧N-1、真实帧N、真实帧N+1以及真实帧N+2为游戏应用中连续的图像帧,在一定帧率下,例如60fps,一秒可以显示60帧游戏应用的图像帧。可以理解,相邻的一帧或多帧之间一般都包括相同的对象。示例性地,真实帧N-2和真实帧N包括四个相同的对象(对象502、对象504、对象506和对象508)。由于相同的对象一般由相同的绘制指令绘制得到,因此相邻帧间的对象的运动轨迹是有迹可循的,是可以预测的。具体地,本申请通过对每个图像帧的绘制指令流中的绘制指令进行识别,并对图像帧内的对象进行分类和标记,从而对相邻帧之间的一个或者多个对象的运动轨迹进行预测,以形成预测帧。预测帧由预测获得,减少了GPU和GPU执行绘制指令时的资源消耗,也就减小了增加电子设备的负载。
继续参见图2,在电子设备100对游戏应用的图像帧进行显示过程中,可以先对真实帧N-3、真实帧N-1、真实帧N+1等真实帧对应的绘制指令流进行丢弃,需要说明的是,丢弃绘制指令流可以理解为不执行该绘制指令流。由于真实帧N-3、真实帧N-1、真实帧N+1对应的绘制指令流已经丢弃,也就不会对其进行处理,从而可以减少GPU执行绘制指令时的资源消耗,也就减小了增加电子设备的负载。需要说明的是,本申请实施例并不限于隔1帧丢弃1一帧真实帧,还可以以更多的方式对真实帧的绘制指令流进行丢弃,对此本申请不进行限定。
继续参见图2,电子设备100可基于真实帧N-4、真实帧N-2以及真实帧N中的所包括的相同对象的运动轨迹,对真实帧N+1内的对象的位置进行预测,从而形成预测帧N+1,该预测帧在真实帧N帧后显示。在一个实施例中,预测帧的数量与丢弃帧的数量可以相一致,这样,可以在降低电子设备负载的前提下,保证游戏图像帧的显示帧率。参见图2,真实帧N-3、真实帧N-1、真实帧N+1丢弃后,电子设备100在所丢弃的真实帧的位置,分别生成相对应的预测帧。可以理解,图2所示的实施例中,电子设备的帧流显示顺序依次为真实帧N-4、预测帧N-3、真实帧N-2、预测帧N-1、真实帧N、预测帧N+1以及真实帧N+2。
需要说明的是,本申请所示的图像帧的预测方法与传统视频帧的预测方法并不等同,本申请主要应用于游戏图像帧的显示,而游戏图像帧与传统视频帧并不相同。具体地,游戏图像帧对实时性要求高,只能用前帧预测后帧,也就不可以前后插帧。而视频画面实时性要求并不高,可以用前帧和后帧预测中间帧,并可以在前帧和后帧插入该中间帧。此外,视频帧是基于视频帧中的像素数据计算获得,而游戏图像帧是终端设备可以基于游戏的渲染指令和与渲染指令对应的参数计算获得,这些与渲染指令对应的参数可以包括顶点信息等等,而视频帧中并不包含顶点信息。
参见图3,具体涉及本申请实施例提供的电子设备100执行图像帧的预测方法的软件层和硬件层的框架图。下面结合图2和图3和图5A-5D,对本申请所示方法进行进一步地解释和说明。其中图5A为本申请一个实施例中提供的真实帧N-4的场景图像的示例图。图5B为本申请一个实施例中提供的真实帧N-2的场景图像的示例图。图5C为本申请一个实施例中提供的真实帧N的场景图像的示例图。图5D为本申请一个实施例中提供的真实帧N-4、真实帧N-2以及真实帧N之间对象间的运动向量图。
参见图3,电子设备100的软件层包括应用层302、系统框架层304,硬件层306包括GPU、CPU、缓存320等。
应用层302包括一个或多个可在电子设备100上运行的应用,例如游戏应用308等。为了方便理解,下文将以游戏应用308为例,对本申请所示方法进行解释和说明。
游戏应用308包括游戏引擎310,游戏引擎310可通过图形库接口,调用图形库312内的绘制函数对游戏应用的图像进行绘制。
系统框架层304可包括各种图形库312,例如嵌入式开放图形库(open graphicslibrary for embedded system,OpenGL ES)、EGL等。
相关技术中,用户打开游戏应用308时,电子设备100响应于用户打开游戏的操作,启动游戏应用308。游戏引擎310基于游戏应用下发的图像帧的绘制指令流,通过图形库接口,调用图形库内的绘制函数来绘制该图像帧。图形库生成图形帧的图像数据后,调用送显接口(如eglSwapBuffers( )),将图像数据发送给surfacefinger缓存队列。图形库基于用于送显的周期性信号,将缓存队列中的图像数据发送给硬件(如CPU)进行合成,最后将合成后的图像数据发送到电子设备100的显示屏送显。
在本申请的一个实施例中,图形库312中包括拦截模块314,图形库312允许修改图形库内函数指针列表,拦截模块314通过替换图形库内函数指针列表中的指针,使得替换后的函数指针指向图形库外的识别模块316中的函数。这样,游戏引擎通过游戏应用下发图像帧的绘制指令流,在调用图形库内的函数时,将先被送到识别模块316,进行指令识别。也就是说,拦截模块314通过替换图形库内函数指针列表中的指针,可拦截图像帧的绘制指令流。
在本申请的一个实施例中,拦截模块314当前所拦截的绘制指令流为真实帧N的绘制指令流。识别模块316可对游戏应用下发的真实帧N的绘制指令流中的每个绘制指令进行指令识别。
绘制指令流中一般包括三种绘制指令,如场景绘制指令、UI绘制指令以及图像送显指令等。场景绘制指令用于绘制游戏内风景、人物、特效、技能等图像等,UI绘制指令用于绘制控制按钮、小地图、悬浮文字等图像,有的游戏里人物血量条也是由UI绘制指令绘制,需要说明的是,UI绘制指令也可以称为控件绘制指令。图像送显指令用于将绘制完成的图像数据放入系统指定位置(如在安卓系统里是framebuffer0),以便完成实际显示。
绘制指令流中的图像送显指令一般是一个图像帧的绘制指令流中的最后一条指令,识别模块316可以通过判断绘制指令是否调用送显接口,确定该绘制指令是否为图像送显指令。示例性地,识别模块316若判断绘制指令用于调用swapbuffer接口,则确定该绘制指令为图像送显指令。
UI图像一般位于一个图像帧的最上层,如UI图像中的操作轮盘、按钮、小地图边框等是半透明的,图形库在绘制UI图像时,需要保证绘制的UI图像在整个画面的最上层。具体地,游戏应用可通过多种方式,使得UI图像位于图像帧的最上层。一种方式为游戏应用可通过关闭深度检测(depth test)功能,并开启混合检测(blend test)功能,使得UI图像位于图像帧的最上层。因此,识别模块316可以通过检测深度检测关闭和混合检测开启,来判断所识别的绘制指令是否是UI绘制指令。具体地,当识别模块316识别到绘制指令流中包含有混合使能命令和深度检测关闭命令时,识别模块316可以确定此后拦截模块314所拦截的指令均为UI绘制指令,直到接收到图像送显指令。示例性的,混合使能命令可以为glEnable(GL_BLEND),深度检测关闭指令可以是glDisable(GL_DEPTH_TEST)。一些游戏中,除了关闭深度检测和开启混合检测功能外,还可通过其他方式保证UI图像位于图像帧的最上层。示例性地,游戏应用可以通过将UI图像中的对象的深度值赋值为最大值,使得UI图像位于图像帧的最上层。因此,识别模块316识别到用于将对象的深度值设置为最大值的指令和混合使能命令后,可以确定此后拦截模块314所拦截的指令均为UI绘制指令,直到接收到图像送显指令。具体地,用于将对象的深度值设置为最大值的指令和混合使能命令的先后顺序不与限定。
识别模块316识别出绘制指令为UI绘制指令时,将UI绘制指令绘制的UI图像数据存储到缓存320,以便与预测的场景图像进行合并,具体可参见下文。
在一个实施例中,绘制指令流中除UI绘制指令和图像送显指令之外的绘制指令可视为场景绘制指令。具体地,一般情况下,一帧图像帧的绘制指令流按着场景绘制指令、UI绘制指令和图像送显指令的顺序下发。识别模块可将上述混合使能命令和深度检测关闭命令前的绘制指令,皆视为是场景绘制指令。示例性地,混合使能命令和深度检测关闭命令是具有先后顺序的,例如混合使能命令在深度检测关闭命令之前。当识别模块316识别出混合使能命令时,识别模块316会记录已收到混合使能命令的标记1。后续,当识别模块识别出深度检测关闭命令,识别模块316记录已收到深度检测命令的标记2。此时,识别模块通过确定已记录有标记1和标记2,则说明识别模块已收到混合使能命令和深度检测关闭命令,识别模块316可确定深度检测关闭命令之后的指令为UI绘制指令,混合使能命令之前的绘制指令为场景绘制指令。进一步地,识别模块316中可以设置一个全局变量,初始值可以设置为0,若识别模块判断全局变量的值为0,则识别模块316确认识别的绘制指令是场景绘制指令。当满足预设条件,识别模块将全局变量的值设置为1,后续识别模块判断全局变量的值为1时,识别模块316确认识别的绘制指令为UI绘制指令。具体地,识别模块316中可以基于上述标记1和标记2确定是否满足满足上述预设条件,例如,识别模块316可以在确定已记录有标记1和标记2时,将全局变量赋值为1,这样,识别模块316在按着场景绘制指令、UI绘制指令和图像送显指令的顺序向识别模块发送绘制指令时,识别模块316可以基于全局变量的值,对场景绘制指令和UI绘制指令进行识别。需要说明的是,上述示例中,识别模块316并不限于通过检测已接收到混合使能命令和深度检测关闭命令的标记来对全局变量进行赋值,还可以通过检测接收到混合使能命令、深度检测关闭命令以及清除深度缓存命令的标记,对全局变量进行赋值。
系统框架层304中还包括分离模块318,分离模块318用于对场景绘制指令对应的场景图像中的对象进行分离。识别模块316在识别到绘制指令为场景绘制指令时,识别模块316可调用分离模块318,使得分离模块318对场景绘制指令对应的场景图像中的动态对象和静态对象进行分离,动态对象是指相邻帧之间形态、位置或者大小发生变化的对象,静态对象是指相邻帧之间形态、位置或者大小未发生变化的对象。
分离模块318可基于场景绘制指令所携带的参数以及每个对象的标识,分离动态对象和静态对象,并将分离后的场景图像中的动态对象和动态对象的数据存储到缓存320。
绘制指令所绘制的每个对象都包括唯一的、用于表征该对象的标识。绘制指令所携带的参数可包括对象的顶点信息,顶点信息的格式可以如下所示:
float vertices[]={0.5f,0.5f, 0.0f,//右上角0.5f,-0.5f,0.0f,//右下角-0.5f,-0.5f,0.0f,//左下角-0.5f,0.5f,0.0f //左上角};顶点坐标;
unsigned int indices[]= {//注意索引从0开始!0,1,3,//第一个三角形1,2,3//第二个三角形};顶点的连线;
在一个示例中,拦截模块314拦截真实帧N场景绘制指令时,分离模块318可基于真实帧N中一个对象的标识,从缓存320中获取真实帧N-2的对象数据,并确定真实帧N-2中是否也包括该对象。假设真实帧N-2不包括该对象,分离模块318可将真实帧N中该对象进行标记,标记真实帧N中该对象为动态物体。进一步地,如果真实帧N-2包括该对象,则分离模块318获取该对象在真实帧N-2中的顶点信息,并将该对象分别在真实帧N-2与真实帧N的顶点信息是否一致,如果不一致,则将真实帧N中该对象的顶点信息加入记录当中,并标记此对象为动态对象,如果一致,则标记此对象为静态物体。在一个实施例中,标记动态、静态对象的标记位可设置在对象的stencil区域(对象数据结构的一个部分),如静态对象标记为0,动态对象标记为1。这样,分离模块318在分离真实帧N的对象时,可从缓存320中读取真实帧N-2的对象数据,若真实帧N-2包括该对象,可以直接读取真实帧N-2中该对象的stencil区域数据,来确定对象是静态对象还是动态对象。
在一个示例中,当拦截模块314拦截的图像帧为游戏应用的第一帧时,可以将该第一帧中的每个对象皆标记为动态对象。
示例性地,参见图5B和图5C,分离模块318在分离真实帧N的对象502时,基于对象502的标识,可以直接从缓存320获取真实帧N-2中对象502的stencil区域数据,若stencil区域数据为1,则确定真实帧N的对象502为动态对象,若stencil区域数据为0,则确定真实帧N的对象502为静态对象。可选地,为了保证分离结果的准确性,分离模块318基于真实帧N-2中对象502的stencil区域数据,确定对象502为静态对象或动态对象后,可以进一步地校验真实帧N的对象502的顶点信息和真实帧N-2的对象502的顶点信息是否一致,若一致,即使真实帧N-2的stencil区域数据为1,分离模块也确定真实帧N中的对象502是静态对象。
在一个示例中,与一个对象相关的指令可以有多条,一般与对象顶点相关的指令为一条。由于绘制指令基于顶点信息绘制相应的对象,因此,识别模块316可仅将包括顶点信息的场景绘制指令发送给分离模块318,使分离模块318基于场景绘制指令携带的顶点信息,对动态对象和静态对象进行分离。在另一个示例中,识别模块316可将不包括顶点信息的绘制指令回调给图形库,使得图形库继续基于回调的绘制指令,调用相关绘制函数,或者,识别模块316基于不携带顶点信息的绘制指令,进行场景识别。
在一个示例中,当拦截模块314拦截真实帧N的绘制指令流时,缓存320可以存储有真实帧N-2的场景图像中动态对象和静态对象的数据。可以理解,真实帧N-2的场景图像中动态对象和静态对象的数据,是电子设备100在显示真实帧N-2时,由分离模块318对真实帧N-2进行分离,并存储到缓存320。
系统框架层304还包括匹配模块322,当识别模块316识别的绘制指令为真实帧N的图像送显指令时,识别模块316调用匹配模块322,匹配模块322从缓存320中获取真实帧N以及真实帧N-2的场景图像中的对象数据,并对真实帧N以及真实帧N-2之间的对象进行匹配。示例性地,匹配模块322可以基于对象标识和/或对象顶点信息,进行匹配。其中真实帧N以及真实帧N-2之间的对象进行匹配是指,将真实帧N中的动态对象与真实帧N-2中动态对象进行匹配,以及将真实帧N中的静态对象与真实帧N-2中静态对象进行匹配。示例性地,参见图5B和图5C,真实帧N对象502为动态对象,对象506为静态对象,真实帧N-2中对象502为动态对象,对象506为静态对象,则匹配模块322可基于对象502的标识将真实帧N以及真实帧N-2之间动态对象502进行匹配,以及基于对象506的标识将真实帧N以及真实帧N-2之间静态对象506进行匹配。在一个示例中,匹配模块可将真实帧N以及真实帧N-2之间的匹配的对象发送给计算模块324。可以理解,真实帧N以及真实帧N-2之间的匹配的对象包括匹配的动态对象和静态对象,例如,对象502可为真实帧N以及真实帧N-2之间的匹配的动态对象,对象506可为真实帧N以及真实帧N-2之间的匹配的静态对象。
计算模块324用于计算真实帧N以及真实帧N-2匹配的对象之间的运动向量,以获得真实帧N与真实帧N-2之间的运动向量图Y2,其中,真实帧N与真实帧N-2之间的运动向量图可以视为真实帧N与真实帧N-2中各匹配对象之间的运动向量的集合。示例性地,运动向量图Y2也可称为第一运动向量,第一运动向量包括一个或多个运动分量,该第一运动向量中的第一运动分量可以为真实帧N以及真实帧N-2中对象502之间的运动向量,该第一运动向量中的第二运动分量可以为真实帧N以及真实帧N-2中对象506之间的运动向量。
计算模块324还用于计算真实帧N-2与真实帧N-4中相匹配的对象之间的运动向量,以形成真实帧N-2与真实帧N-4之间的运动向量图Y1。具体地,真实帧N-2与真实帧N-4中相匹配的对象之间的运动向量以及运动向量图Y1,在电子设备100显示真实帧N-2时由计算模块324计算获得。示例性地,运动向量图Y1也可称为第二运动向量,第二运动向量包括一个或多个运动分量,如第一运动分量和第二运动分量,该第二运动向量中的第一运动分量可以为真实帧N-2以及真实帧N-4中对象502之间的运动向量,该第二运动向量中的第二运动分量可以为真实帧N-2以及真实帧N-4中对象506之间的运动向量。
示例性地,第一运动向量和第二运动向量的差值的一半,定义为第三运动向量。可以理解,第三运动向量也包括第一运动分量和第二运动分量,示例性地,第三运动向量的第一运动分量为第一运动向量的第一运动分量和第二运动向量的第一运动分量的差值的一半,第三运动向量的第二运动分量为第一运动向量的第二运动分量和第二运动向量的第二运动分量的差值的一半。
计算模块324可将真实帧N与真实帧N-2之间的运动向量图Y1存储到缓存320。计算模块324还可以基于真实帧N与真实帧N-2之间的运动向量图Y2、真实帧N-2与真实帧N-4之间的运动向量图Y1,计算真实帧N与真实帧N+1的估计运动向量图Y3。计算模块324可以将该估计运动向量图Y3存储到缓存320。在一个示例中,计算模块324计算出估计运动向量图Y3后,可将估计运动向量图Y3发送给估计模块326,以对真实帧N中场景图像中的对象进行运动估计。
下面参见图5A-图5D,对计算模块324计算估计运动向量图进行进一步地说明。
图5A-图5C中皆包括对象502、504、506和508。图5A、图5B和图5C分别对应于真实帧N-4、真实帧N-2和真实帧N。电子设备显示真实帧N-2时,上述分离模块可从缓存320中获取的真实帧N-4的对象数据,并读取对象502、对象508、对象504和506的对象数据结构的特定区域的值,如stencil区域,可确定对象502和对象508为动态对象,对象504和506为静态图像。电子设备显示真实帧N-2时,可确定从真实帧N-4到真实帧N-2,对象502向方向510运动,对象508向方向512运动,场景图像中的其他静态图像整体向方向514运动。电子设备显示真实帧N时,可确定从真实帧N-2到真实帧N,对象502向方向510运动,对象508向方向512运动,场景图像中的其他静态图像整体向方向514运动。
参见图5D,匹配模块322对真实帧N-4和真实帧N-2中的对象502、对象508匹配后,计算模块324可计算真实帧N-4和真实帧N-2间的对象502的运动向量y1(N-4,N-2),以及真实帧N-4和真实帧N-2之间对象508的运动向量y2(N-4,N-2)。由于真实帧N-4和真实帧N-2间匹配的静态对象之间的运动向量与整个场景运动向量相等,计算模块324可计算真实帧N-4和真实帧N-2间任意一个匹配的静态对象(如对象504)的运动向量y3(N-4,N-2),从而确定真实帧N-4和真实帧N-2间的所有匹配的静态对象的运动向量y3(N-4,N-2)。计算模块324所计算的真实帧N-4和真实帧N-2中的所有匹配对象之间的运动向量的集合Y1{ y1(N-4,N-2),y2(N-4,N-2),y3(N-4,N-2)},为真实帧N-4和真实帧N-2间的运动向量图。参见图5D中,运动向量图Y1即为真实帧N-4和真实帧N-2间运动向量图。
基于相同原理,匹配模块将真实帧N-2和真实帧N中的对象502、对象508匹配后,计算模块324可计算真实帧N-2和真实帧N之间的对象502的运动向量y1(N-2,N),以及真实帧N-2和真实帧N中的对象508之间的运动向量y2(N-2,N),计算模块324还可计算真实帧N-2和真实帧N间任意一个匹配的静态对象(如对象504)的运动向量y3(N-2,N),以确定整个真实帧N-2和真实帧N间的静态对象的运动向量y3(N-2,N)。计算模块324所计算的真实帧N-2和真实帧N中的所有匹配对象之间的运动向量的集合Y2{ y1(N-2,N),y2(N-2,N),y3(N-2,N)},即为真实帧N-2和真实帧N间的运动向量图。参见图5D中,运动向量图Y2即为真实帧N-2和真实帧N间运动向量图。
计算模块324还可以基于运动向量图Y1和运动向量图Y2,计算模块324可以计算出真实帧N与真实帧N+1之间估计运动向量图Y3。示例性地,假设每个对象做匀加速运动。计算模块324可以通过运动向量图Y1和运动向量图Y2,计算出真实帧N和真实帧N+1之间对象的运动加速度,例如,在真实帧N-4、真实帧N-2和真实帧N中均包括的对象502,即对象502为真实帧N-4和真实帧N-2之间相匹配的对象,也为真实帧N-2和真实帧N之间相匹配的对象。计算模块324可通过对象502在真实帧N-4和真实帧N-2之间的运动向量y1(N-4,N-2)、对象502在真实帧N-2和真实帧N之间的运动向量y1(N-2,N),计算出对象502在真实帧N和真实帧N+1之间的运动向量y1(N,N+1),示例性地,y1(N,N+1)= y1(N-2,N)/2+(y1(N-2,N)-y1(N-4,N-2))/2。基于相同原理,可以计算出对象508在真实帧N和真实帧N+1之间的运动向量y2(N,N+1),示例性地,y2(N,N+1)= y2(N-2,N)/2+(y2(N-2,N)-y2(N-4,N-2))/2。基于相同原理,可以计算出所有静态对象在真实帧N和真实帧N+1之间的运动向量y3(N,N+1),从而形成真实帧N和真实帧N+1之间的估计运动向量图Y3{y1(N,N+1),y2(N,N+1),y3(N,N+1)}。
系统框架层还包括估计模块326,估计模块326可通过计算模块324计算的估计运动向量图Y3和真实帧N的场景图像数据以及真实帧N和真实帧-2之间的运动向量图Y2,对真实帧N的对象做运动估计。
示例性地,估计模块326根据Y3中对象502的估计运动向量y1(N,N+1),对真实帧N中对象502的运动轨迹进行运动估计。具体地,对象502在预测帧N+1的坐标=对象502在真实帧N中的坐标+ y1(N,N+1)。基于相同原理,估计模块326根据Y3中对象508的估计运动向量y2(N,N+1),和Y2中对象508的运动向量y2(N-2,N),对对象508的运动轨迹进行运动估计。具体地,对象508在预测帧N+1的坐标=对象508在真实帧N中的坐标+y2(N,N+1)。基于相同原理,还可以对真实帧中的其他对象的位置进行估计。
也就是说,估计模块326通过对象在真实帧N的坐标,以及对象在估计运动向量图Y3中的向量,对各个动态、静态对象位移,得到预测帧N+1的预测场景图像。在一个示例中,估计模块326可将预测场景图像的数据存储到缓存320。
估计模块326在得到预测帧N+1的预测场景图像后,调用系统框架层中的检验模块328对预测场景图进行校验。
估计模块所估计获得的预测场景图像中,可能存在前真实帧N、真实帧N-2、以及真实帧N-4中都没有出现过的某些像素点或者像素块,这是由于场景图像中对象之间存在相互遮挡、画面移动显示新的图像等原因造成。因此,需要对预测的场景图像进行校验。具体地,可以通过多种方法对场景图像进行校验,示例性地,可通过计算新出现的像素在整个场景图像中占的大小。然后将新出现的像素与预设校验阈值进行比较,超过该阈值则丢弃此预测帧。
在一个实施例中,对于通过校验的预测帧N+1,可对预测的场景图像进行模糊处理。
检验模块328对预测场景图像进行校验后,调用合并模块330,合并模块330用于将预测场景图像与UI图像进行合并。
检验模块328对预测场景图像进行校验后,调用合并模块330以将UI图像与预测场景图像合并,形成最终的预测图像帧N+1。具体地,合并模块330可从缓存320获取预测场景图像数据和UI图像数据。UI图像在整个图像帧的位置一般是固定的,因此,可以将UI图像合并到预测场景图像中,形成最终的预测图像帧N+1。在合并模块得到最终的预测图像帧后,缓存可清除掉不需要的数据,例如,无效的运动向量图和真实帧的对象数据。示例性地,在上述实施例中,在预测获得预测帧N+1后,真实帧N-4与真实帧N-2间的运动向量图不会再用于预测真实帧N+3,真实帧N-4与真实帧N-2间的运动向量图即是无效的运动向量图。同理,真实帧N-4在缓存中的对象数据,也为无效的对象数据,为了节省缓存320,可以对无效的运动运动向量图和无效的场景图像的对象数据进行清除。
下面结合图2-图6对缓存320中存储的数据变化进行说明,图6为本申请一个实施例中提供的缓存320中存储的运动向量图和真实帧场景图像中的对象数据的变化示意图。
在电子设备显示真实帧N时,缓存320中存储有真实帧N的场景图像中的对象数据,还存储有真实帧N-4和真实帧N-2之间的运动向量图Y1、真实帧N-2和真实帧N之间的运动向量图Y2。在电子设备显示预测帧N+1时,清除缓存中的真实帧N-4和真实帧N-2之间的运动向量图Y1。在电子设备显示真实帧N+2时,在计算出真实帧N和真实帧N+2之间的运动向量图后,即可清除真实帧N的场景图像的数据,此时,缓存320中存储有真实帧N+2的场景图像中的对象数据、真实帧N-2和真实帧N之间的运动向量图Y2、真实帧N和真实帧N+2之间的运动向量图Y4。在电子设备显示预测帧N+3时,清除缓存中的真实帧N-2和真实帧N之间的运动向量图Y2。
也就是说,当电子设备100显示真实帧N时,缓存中缓存有真实帧N的场景图像数据以及真实帧N-4和真实帧N-2之间、真实帧N-2和真实帧N之间的运动向量图。当显示预测帧N+1时,缓存中存储有该真实帧N的场景图像数据以及真实帧N-2和真实帧N之间的运动向量图。这样,可以更好节省内存的存储区域。
系统框架层还包括送显模块332,送显模块用于真实帧N显示完成后,将预测图像帧N+1进行送显。
在本申请的一个实施例中,系统框架层还包括回调模块334。回调模块334用于在分离模块318将真实帧N的场景图像的动态对象和静态对象的数据存储到缓存320后,回调模块334将场景绘制指令回调,使得图形库对真实帧N的场景图像进行绘制。回调模块334还用于在识别模块316将UI绘制指令绘制的UI图像数据存储到缓存后,回调模块334将UI绘制指令回调,使得图形库对真实帧N的UI图像进行绘制。回调模块334还用于在识别模块316识别到图像送显指令时,回调模块334将图像送显指令回调,使得图形库对真实帧N的图像进行送显。图形库在对真实帧N绘制完成并送显后,送显模块332将预测图像帧N+1进行送显。
具体地,在拦截模块314替换图形库函数列表指针时,回调模块334可以备份图形库中原始函数指针P1(其中指针P1指向图像库中原始函数对应的实现函数)、拦截函数指针P2(其中指针P2可指向识别模块中原始函数对应的实现函数)以及回调函数指针P3(其中P3=P1,即P3也指向图像库该原始函数对应的实现函数)。示例性地,拦截模块可通过拦截函数指针P2替换指针P1,以拦截真实帧的绘制指令流。回调模块334可以通过回调函数指针P3,将图像帧的绘制指令流回调给图形库,以使得图形库对该图像帧进行绘制。示例性地,回调模块334在识别模块316识别出场景图像指令时,通过指针P3,将场景绘制指令回调,或者回调模块334在识别模块316将对象数据存储到缓存后,通过指针P3,将场景图像指令回调。或者,回调模块334在识别模块316识别出UI绘制指令时,通过指针P3,将UI绘制指令回调,或者回调模块334在识别模块316将UI绘制图像存储到缓存后,通过指针P3,将场景图像指令回调。或者,回调模块334在识别模块316识别出图像送显指令时,通过指针P3,将图像送显指令回调。
在一个示例中,回调模块334还可以在合并模块形成预测图像帧后,将图像送显指令回调。
下面结合图2、图3和图4,对本申请所示预测方法进行进一步地解释和说明,其中图4为图3中系统框架层各模块的交互示意图。
下面具体以图形库内拦截模块314拦截的图像帧的绘制指令流为真实帧N的绘制指令流中为例,对本申请中所示预测方法进行说明。
步骤A1,图形库312中拦截模块314调用识别模块316,使得识别模块316对拦截模块314拦截的真实帧N的绘制指令流中的绘制指令进行识别。
上文已经示出,绘制指令流中一般包括三种绘制指令,如场景绘制指令、UI绘制指令以及图像送显指令等。
步骤A2,当识别模块316识别的绘制指令为场景绘制指令,识别模块316可调用分离模块318(步骤A3),使得分离模块318对场景图像中的动态对象和静态对象进行分离。
步骤A4,分离模块318对场景绘制指令对应的场景图像中的动态对象和静态对象进行分离,然后将分离后的动态对象和静态对象存储到缓存320(步骤A5)。
步骤A6,分离模块318将分离后的动态对象和静态对象存储到缓存320后,可以调用回调模块334,回调模块334将场景绘制指令进行回调(步骤A7),使得图形库对真实帧N的场景图像进行绘制。
步骤A8,当识别模块316识别的绘制指令为UI绘制指令,识别模块316将UI绘制指令对应的UI图像进行缓存(步骤A9)。
步骤A10,识别模块316在将UI绘制指令对应的UI图像进行缓存,然后调用回调模块334,回调模块334将UI绘制指令进行回调(步骤A11),使得图形库对真实帧N的UI图像进行绘制。
步骤A12,当识别模块316识别的绘制指令为图像送显指令,识别模块316调用回调模块334(步骤A13),回调模块334将图像送显指令进行回调(步骤A14),使得图形库将绘制的真实帧N的图像进行送显。
步骤B1,识别模块316识别的绘制指令为图像送显指令时,可调用匹配模块322,匹配模块322对真实帧N中的对象和真实帧N-2中的对象进行匹配(步骤B2)。
步骤B2,匹配模块322对真实帧N中的对象和真实帧N-2中的对象进行匹配后,可以将匹配的对象的数据进行缓存。
步骤B3,匹配模块322对真实帧N中的对象和真实帧N-2的对象进行匹配后,调用计算模块324,计算模块324计算真实帧N和真实帧N-2间匹配的对象的运动向量,以形成真实帧N和真实帧N-2间的运动向量图,并基于真实帧N和真实帧N-2间的运动向量图、真实帧N-2和真实帧N-4间的运动向量图,计算真实帧N和真实帧N+1之间的估计运动向量图(步骤B5)。
步骤B6,计算模块324将估计运动向量图存储到缓存320。
步骤B7,计算模块324估计运动向量图存储到缓存320后,调用估计模块326,估计模块326基于估计运动向量图和真实帧N的场景图像数据,对真实帧N的对象做运动估计,以获得预测帧N+1的预测场景图像(步骤B8)。
步骤B9,估计模块326获取预测帧N+1的预测场景图像后,调用检验模块328, 检验模块328对预测场景图进行校验(步骤B10)。
步骤B11,检验模块328对预测场景图像进行校验后,调用合并模块330,合并模块330从缓存中获取预测场景图像(步骤B12),合并模块330将预测场景图像与UI图像进行合并,以获得预测图像帧N+1(步骤B13)。
步骤B14,合并模块330将预测图像帧N+1发送给送显模块332,送显模块332在真实帧N完成显示后,将预测图像帧送显。
通过上述实施例所示的预测方法,通过显示预测帧,可以减少GPU执行绘制指令时的资源消耗,也就减小了增加电子设备的负载。
参见图7,具体涉及本申请一个实施例提供的一种图像帧的预测方法,可应用于上述电子设备100,该方法具体包括:
步骤702,获取第一图像帧的绘制指令流;
步骤704,基于所述第一图像帧的绘制指令流中的第一类绘制指令,获取所述第一图像帧的一个或多个第一对象,所述第一类绘制指令为场景绘制指令;
步骤706,基于所述第一图像帧的绘制指令流中的第二类绘制指令,获取所述第一图像帧中的一个或多个第二对象,所述第二类绘制指令为控件绘制指令;
步骤708,获取第二图像帧中的一个或多个第三对象;
步骤710,计算所述一个或多个第一对象,和所述一个或多个第三对象之间的第一运动向量,所述一个或多个第三对象与所述一个或多个第一对象相匹配,所述第二图像帧为所述第一图像帧之前的一帧图像帧;
步骤712,获取第二运动向量,所述第二运动向量为所述一个或多个第三对象,和第三图像帧中的一个或多个第四对象之间的运动向量,所述一个或多个第三对象与所述一个或多个第四对象相匹配,所述第三图像帧为所述第二图像帧之前的一帧图像帧;
步骤714,基于所述第一运动向量和所述第二运动向量,计算第三运动向量;
步骤716,基于所述第一运动向量、所述第三运动向量和所述一个或多个第一对象,获得第一预测图像帧;
步骤720,将所述第一预测图像帧与所述一个或多个第二对象合并,以获得第二预测图像帧。
参见图8,本申请一实施例提供的电子设备100执行图像帧的校准方法的软件层和硬件层的框架图。可以理解,图8所示的框架图也可用于实现上述实施例所示的预测方法。
在上述实施例所示的预测方法中,真实帧与预测帧交替显示,预测帧由真实帧预测形成。游戏对画面显示实时性要求很高,显示滞后会对游戏显示效果造成很大影响,所以预测帧只能通过该预测帧之前的真实帧预测获得,但这也使得游戏应用缺少后帧反馈修正机制。例如,预测帧N+1由真实帧N、真实帧N-2以及真实帧N-4预测获得,因为无法根据后续的真实帧N+2对已生成的预测帧N+1画面进行修正,在运动估计过程中使用的估计运动向量可能与实际运动向量有较大偏差,这使得在预测帧的显示过程中,可能会出现画面的劣化问题,影响用户在终端设备上的游戏体验。
基于此,本申请还提出了另一种图像帧的校准方法。
在上文一个实施例中,电子设备100在基于真实帧N、真实帧N-2以及真实帧N-4形成预测帧N+1时,计算模块324可通过真实帧N与真实帧N-2之间对象的运动向量图Y1{ y1(N-4,N-2),y2(N-4,N-2),y3(N-4,N-2)},和真实帧N-4与真实帧N-2之间对象运动向量图Y2{ y1(N-2,N),y2(N-2,N),y3(N-2,N)},获得估计运动向量图Y3{y1(N,N+1),y2(N,N+1),y3(N,N+1)}。电子设备可基于估计运动向量图中的向量,对真实帧N中的对象进行位移,以获得预测帧N+1。
在本申请的一个实施例中,计算模块324在计算出估计运动向量图Y3{y1(N,N+1),y2(N,N+1),y3(N,N+1)}后,可以将估计运动向量图Y3存储到缓存320。当拦截模块314所拦截的绘制指令流为真实帧N+2的绘制指令流时,识别模块316对真实帧N+2绘制指令流进行识别,分离模块318基于真实帧N+2的绘制指令流中的场景绘制指令,对真实帧N+2的场景图像中的静态对象和动态对象分离,并存储到缓存。识别模块316基于绘制指令流中的UI绘制指令,将UI图像数据存储到缓存。
进一步地,匹配模块322将真实帧N+2和真实帧N间的动态对象进行匹配,以及将真实帧N+2和真实帧N间的静态对象进行匹配。计算模块324可以计算真实帧N+2和真实帧N间对象的的运动向量图Y4{ y1(N,N+2),y2(N,N+2),y3(N,N+2)}。
可以理解,基于上文所示的实施例中,计算模块324基于真实帧N与真实帧N-2之间对象的运动向量图Y1,和真实帧N+2和真实帧N间对象的的运动向量图Y4,计算模块可以计算真实帧N+2与预测帧N+3之间的估计运动向量图Y5。但是上文已经示出,这样可能出现画面的劣化。在本申请的一个实施例中,在计算估计运动向量图Y5之前,可以先确定预测帧N+1的预测结果是否有较大误差,若有较大误差差,可以在预测真实帧N+2与预测帧N+3之间的估计运动向量图时,提前进行校验,以防止形成劣质的预测帧N+3。
在一个实施例中,计算模块324可计算预测帧N+1和真实帧N之间的各对象间的运动向量图X1,然后基于真实帧N+2和真实帧N间对象的的运动向量图Y4,确定预测帧N+1的预测结果是否存在较大误差。示例性地,计算模块324可以计算运动向量图X1和运动向量图Y4各对应向量的第一差值,将第一差值与运动向量图Y4的各对应向量的一半进行比较,例如作减法,得到第二差值,若第二差值的绝对值越大,则说明预测结果不准确。因此,在计算真实帧N+2与预测帧N+3之间的估计运动向量图时,可以将第二差值作为参数,以参与计算真实帧N+2与预测帧N+3之间的估计运动向量图。
参见图2和参见图9对上述图像帧的校准方法进行说明,图9为本申请实施例校准方法中的对象轨迹变化的示例图。
图9中圆圈代表连续显示的真实帧中所包含的的同一对象,位置1、位置2、位置3是对象在三个连续的真实帧中位置,例如位置1、2、3分别是真实帧N-4、真实帧N-2以及真实帧N中的位置。虚箭头表示实际运动方向,4是该对象在预测帧N+1中位置,通过上述校准方法,计算模块324可以计算运动向量图X1和运动向量图Y4各对应向量的第一差值,将第一该差值与运动向量图Y4的各对应向量的一半作减法,得到第二差值,通过第二差值大小确定,确定位置4与对象实际运动位置偏差过大。计算模块324将第二差值作为校准参数,参与计算真实帧N+2与预测帧N+3之间的估计运动向量图,从而对对象在预测帧N+3的位置,进行第一次校准。示例性地,5表示一个真实帧N+2的对象位置,6表示根据上述实施例一种预测方法预测对象6在预测N+3中所在位置,7表示经过真实帧N+2的数据校准后,位置7在预测N+3的位置,即7经过第一次校准后的位置。
由于用户的操作会对图像帧内对象的位置产生影响,例如用户对控件操作的频繁次数或操作位置,会影响图像帧内各对象变化的角度和速度等。因此,上述校准方法还可以基于用户的触摸位置与UI图像(如游戏轮盘)之间的位置关系,对生成的预测帧进行进一步地校准。
继续参见图8,系统框架层还包括触摸模块336。触摸模块336可以在电子设备显示真实帧N时,获取用户触摸电子设备显示屏的位置信息,位置信息还可包括用户的触摸位置与预设UI图像(如游戏轮盘)的距离。触摸模块336获取位置信息后,将位置信息发送给计算模块。计算模块336可以基于位置信息以及上述第二差值,在对预测帧N+3进行进一步地校准。示例性地,计算模块324可以基于第二差值和上述位置信息,参与计算真实帧N+2与预测帧N+3之间的估计运动向量图,以对对象的预测位置进行校验。
基于上述校准方法,可以进一步地提高预测帧的准确性。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质包括计算机指令,当所述计算机指令在所述电子设备上运行时,使得上述电子设备执行如本申请提供的预测方法。
在本申请实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:快闪存储器、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。