一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种图像处理方法和电子设备与流程

2022-12-13 19:57:48 来源:中国专利 TAG:
一种图像处理方法和电子设备1.本技术是分案申请,原申请的申请号是202110650009.7,原申请日是2021年6月10日,原申请的全部内容通过引用结合在本技术中。
技术领域
:2.本技术实施例涉及图像处理领域,尤其涉及一种图像处理方法和电子设备。
背景技术
::3.随着电子设备的发展,对电子设备显示图像的能力要求也越来越高。4.示例性的,以电子设备为手机为例。为了能够为用户提供更加清楚的图像显示,手机可以采用更高的分辨率向用户展示图像。而手机在渲染获取具有高分辨率的图像时,产生的功耗更高。因此就会导致算力开销过大,发热严重等问题。严重时还会出现手机运行卡顿。进而严重影响用户体验。技术实现要素:5.本技术实施例提供一种图像处理方法和电子设备,可以使用较小的分辨率执行主场景中的大量渲染操作,从而达到降低渲染功耗的效果。6.为了达到上述目的,本技术实施例采用如下技术方案:7.第一方面,提供一种图像处理方法,应用于电子设备对第一图像的渲染处理,该电子设备运行有应用程序,该电子设备对该第一图像执行渲染处理时调用一个或多个帧缓冲,该电子设备对该第一图像执行渲染处理的渲染操作由该应用程序下发。该方法包括:确定对该第一图像执行渲染处理过程中的第一主场景。该第一主场景是该电子设备对该第一图像的渲染处理过程中,执行渲染操作数量最多的帧缓冲。配置临时帧缓冲,该临时帧缓冲的分辨率小于该第一主场景的分辨率。在对该第一图像进行渲染处理时,在该临时帧缓冲上,执行第一渲染操作。该第一渲染操作是该应用程序指示的在该第一主场景上执行的渲染操作。8.基于该方案,提供了一种降低主场景下的渲染功耗的方案。在本示例中,电子设备可以为主场景(如执行渲染处理最大的帧缓冲)配置具有较小分辨率的临时帧缓冲。电子设备还可以在临时帧缓冲上执行原先需要在主场景上执行的渲染操作。这样,就可以实现采用较小的分辨率执行渲染操作的目的,从而节省由于高分辨率的大量渲染操作导致的渲染功耗过高的问题。可以理解的是,本示例中,配置临时帧缓冲,以及在临时帧缓冲上执行渲染操作的对象,均为主场景,即渲染操作最多的帧缓冲。在本技术的另一些实现中,电子设备还可以为其他具有较多渲染操作的帧缓冲配置对应的具有较小分辨率的临时帧缓冲,并该对应的临时帧缓冲上进行较低分辨率的渲染操作,从而使得采用较小分辨率执行的渲染操作数量得到提升,进一步降低渲染操作的功耗。9.在一种可能设计中,该确定对该第一图像的渲染处理过程中的第一主场景,包括:基于对第二图像的渲染处理过程中,执行渲染操作数量最多的帧缓冲,确定该第一主场景。该第二图像的渲染处理在该第一图像的渲染处理之前。对该第二图像执行渲染处理时调用该第一主场景。基于该方案,提供了一种第一主场景的确定方案。在本示例中,电子设备可以根据在当前帧图像(如第一图像)的渲染处理之前,对其他帧图像(如第二图像)进行的渲染处理的过程中,各个帧缓冲上的渲染操作的数量确定当前帧图像的主场景。可以理解的是,第二图像的渲染处理在第一图像之前,那么在执行第一图像的渲染时,第二图像的所有渲染操作已经完成,因此电子设备就可以知晓第二图像在渲染过程中,各个帧缓冲上执行渲染操作的数量。由于图像的连续性,因此一般情况,可以认为对第一图像而言,渲染操作最多的帧缓冲与第二图像保持一致。因此,在本示例中,可以将第二图像渲染处理过程中,执行渲染操作最多的帧缓冲,作为当前帧图像(即第一图像)的主场景。10.在一种可能设计中,在该确定对该第一图像执行渲染处理过程中的第一主场景之前,该方法还包括:在对该第二图像的渲染处理过程中,确定在每个帧缓冲上执行绘制调用(drawcall)的数量,将执行drawcall的数量最多的帧缓冲确定为该第一主场景。基于该方案,提供了一种具体的确定第一主场景的方案示例。在本示例中,可以通过drawcall的数量,来表示渲染操作的数量。比如,drawcall的数量越多,那么对应的渲染操作的数量就越多,反之亦然。由此,电子设备就可以通过确定第二图像的渲染过程中,各个帧缓冲上的drawcall的数量,确定具有最大drawcall数量的帧缓冲为第一主场景。可以理解的是,由于主场景上的drawcall最多,因此在主场景上的渲染处理最复杂,需要的功耗也就越高。因此,结合前述方案,在drawcall最多的帧缓冲(即主场景)上执行上述方案,能够达到较好的降低功耗的效果。11.在一种可能设计中,该第二图像是该第一图像的上一帧图像。基于该方案,提供了一种第二图像的具体选择方案。比如,第二图像可以是第一图像的上一帧图像。这样,由于第二图像与第一图像所要显示的图像非常接近,因此根据第二图像渲染过程中的drawcall数量确定的第一主场景也就越准确。12.在一种可能设计中,该电子设备配置有处理器和渲染处理模块。该在该临时帧缓冲上,执行第一渲染操作,包括:在该处理器接收来自该应用程序的对该第一图像的渲染命令的情况下,该处理器向该渲染处理模块下发第一渲染指令,该第一渲染指令包括该第一渲染操作,该第一渲染指令用于指示该渲染处理模块在该临时帧缓冲上执行该第一渲染操作。该渲染处理模块根据该第一渲染指令,在该临时帧缓冲上执行该第一渲染操作。基于该方案,提供了一种执行第一渲染操作的具体方案的示例。在本示例中,电子设备可以通过处理器和渲染处理模块配合,实现以较小的分辨率执行主场景的渲染操作的目的。比如,处理器可以向渲染处理模块下发渲染指令,指示渲染处理模块在具有较小分辨率的临时帧缓冲上执行本应在具有较大分辨率的主场景上执行的渲染操作。这样,渲染处理模块就可以根据渲染指令,在临时帧缓冲上执行对应的渲染操作,从而达到采用较小分辨率进行渲染的效果。13.在一种可能设计中,在该处理器向该渲染处理模块下发第一渲染指令之前,该方法还包括:该处理器判断当前执行的渲染命令是对该主场景的渲染命令的情况下,将当前执行的该渲染命令绑定的帧缓冲信息由第一帧缓冲信息替换为第二帧缓冲信息,以得到该第一渲染指令,该第一帧缓冲信息用于指示在该主场景上执行该第一渲染操作,该第二帧缓冲信息用于指示在该临时帧缓冲上执行该第一渲染操作。基于该方案,提供了一种处理器向渲染处理模块发送的第一渲染指令的确定逻辑。在该示例中,处理器可以在确定当前来自应用程序的渲染命令是针对主场景的渲染命令的情况下,执行后续的操作。比如,处理器可以根据当前渲染命令所绑定的帧缓冲的帧缓冲对象,与主场景的帧缓冲对象进行对比,当结果一致时,则处理器确定当前的渲染命令是针对主场景的。此后,处理器可以向渲染处理模块下发渲染指令,以指示渲染处理模块进行渲染操作。在本示例中,处理器可以将渲染指令中,本指向主场景的帧缓冲信息,替换为指向临时帧缓冲的帧缓冲信息,并下发给渲染处理模块。这样,渲染处理模块就可以根据该渲染指令,在该渲染指令指示的帧缓冲(如临时帧缓冲)上执行对应的渲染操作,由此实现在临时帧缓冲上执行本在主场景上执行的渲染操作。14.在一种可能设计中,该第一帧缓冲信息包括第一帧缓冲对象,该第一帧缓冲对象是该主场景对应的帧缓冲对象,该第二帧缓冲信息包括第二帧缓冲对象,该第二帧缓冲对象是该临时帧缓冲对应的帧缓冲对象。基于该方案,提供了一种帧缓冲信息的具体实现。比如,帧缓冲信息可以包括帧缓冲对象。以替换bindframebuffer()函数的帧缓冲信息为例。在主场景为fb1,临时帧缓冲为fb3的情况下,渲染命令中可以包括bindframebuffer(1)。对应的,在不替换帧缓冲信息的情况下,处理器可以向渲染处理模块下发包括bindframebuffer(1)的渲染指令,以指示渲染处理模块在fb1上执行渲染指令中的drawcall。在采用本技术所述的方案时,可以将fb1的帧缓冲信息替换为fb3的帧缓冲信息,那么,渲染命令中可以包括bindframebuffer(1)时,处理器可以将bindframebuffer(1)替换为bindframebuffer(3),并在渲染指令中携带该bindframebuffer(3),从而指示渲染处理模块在fb3上执行对应的渲染操作。15.在一种可能设计中,该渲染命令是该应用程序下发给该处理器的,该渲染命令包括该第一渲染操作,以及该第一帧缓冲信息。基于该方案,提供了一种渲染命令的基本组成示意。在该示例中,渲染命令可以是来自应用程序的,用于指示处理器在所指示的帧缓冲上执行第一渲染操作。16.在一种可能设计中,该处理器是中央处理器(cpu)。基于该方案,提供了一种处理器的具体实现。比如,该处理器可以是电子设备中的cpu。在另一些实现中,处理器的功能还可以通过其他具有处理功能的部件或者电路实现。17.在一种可能设计中,该渲染处理模块是图形处理器(gpu)。基于该方案,提供了一种渲染处理模块的具体实现。比如,该渲染处理模块可以是电子设备中的gpu。在另一些实现中国,渲染处理模块的功能还可通过其他具有图形渲染功能的部件或者电路实现。18.在一种可能设计中,该第一渲染指令还包括:对该第一渲染操作获取的图像执行多重采样。基于该方案,提供了一种在降低功耗的前提下提升图像显示质量的方案示例。在本示例中,电子设备可以对采用较低分辨率执行渲染操作获取的图像,采用多重采样技术,降低图像边缘的锯齿,提升图像的整体显示质量。19.第二方面,提供一种图像处理装置,应用于电子设备对第一图像的渲染处理,该电子设备运行有应用程序,该电子设备对该第一图像执行渲染处理时调用一个或多个帧缓冲,该电子设备对该第一图像执行渲染处理的渲染操作由该应用程序下发。该装置包括:确定单元,用于确定对该第一图像执行渲染处理过程中的第一主场景。该第一主场景是该电子设备对该第一图像的渲染处理过程中,执行渲染操作数量最多的帧缓冲。配置单元,用于配置临时帧缓冲,该临时帧缓冲的分辨率小于该第一主场景的分辨率。执行单元,用于在对该第一图像进行渲染处理时,在该临时帧缓冲上,执行第一渲染操作。该第一渲染操作是该应用程序指示的在该第一主场景上执行的渲染操作。20.在一种可能设计中,确定单元,具体用于基于对第二图像的渲染处理过程中,执行渲染操作数量最多的帧缓冲,确定该第一主场景。该第二图像的渲染处理在该第一图像的渲染处理之前。对该第二图像执行渲染处理时调用该第一主场景。21.在一种可能设计中,确定单元,还用于在对该第二图像的渲染处理过程中,确定在每个帧缓冲上执行绘制调用(drawcall)的数量,将执行drawcall的数量最多的帧缓冲确定为该第一主场景。22.在一种可能设计中,该第二图像是第一图像的上一帧图像。23.在一种可能设计中,该执行单元的功能可以通过处理器和渲染处理模块实现。示例性的,在该处理器用于在接收到来自该应用程序的对该第一图像的渲染命令的情况下,向该渲染处理模块下发第一渲染指令,该第一渲染指令包括该第一渲染操作,该第一渲染指令用于指示该渲染处理模块在该临时帧缓冲上执行该第一渲染操作。该渲染处理模块用于根据该第一渲染指令,在该临时帧缓冲上执行该第一渲染操作。24.在一种可能设计中,该处理器还用于,在该处理器向该渲染处理模块下发第一渲染指令之前,判断当前执行的渲染命令是对该主场景的渲染命令的情况下,将当前执行的该渲染命令绑定的帧缓冲信息由第一帧缓冲信息替换为第二帧缓冲信息,以得到该第一渲染指令,该第一帧缓冲信息用于指示在该主场景上执行该第一渲染操作,该第二帧缓冲信息用于指示在该临时帧缓冲上执行该第一渲染操作。25.在一种可能设计中,该第一帧缓冲信息包括第一帧缓冲对象,该第一帧缓冲对象是该主场景对应的帧缓冲对象,该第二帧缓冲信息包括第二帧缓冲对象,该第二帧缓冲对象是该临时帧缓冲对应的帧缓冲对象。26.在一种可能设计中,该渲染命令是该应用程序下发给该处理器的,该渲染命令包括该第一渲染操作,以及该第一帧缓冲信息。27.在一种可能设计中,该处理器是中央处理器(cpu)。28.在一种可能设计中,该渲染处理模块是图形处理器(gpu)。29.在一种可能设计中,该第一渲染指令还包括:对该第一渲染操作获取的图像执行多重采样。30.第三方面,提供一种电子设备,电子设备包括一个或多个处理器和一个或多个存储器;一个或多个存储器与一个或多个处理器耦合,一个或多个存储器存储有计算机指令;当一个或多个处理器执行计算机指令时,使得电子设备执行如上述第一方面以及各种可能的设计中任一种的图像处理方法。31.第四方面,提供一种芯片系统,芯片系统包括接口电路和处理器;接口电路和处理器通过线路互联;接口电路用于从存储器接收信号,并向处理器发送信号,信号包括存储器中存储的计算机指令;当处理器执行计算机指令时,芯片系统执行如上述第一方面以及各种可能的设计中任一种的图像处理方法。32.第五方面,提供一种计算机可读存储介质,计算机可读存储介质包括计算机指令,当计算机指令运行时,执行如上述第一方面以及各种可能的设计中任一种的图像处理方法。33.第六方面,提供一种计算机程序产品,计算机程序产品中包括指令,当计算机程序产品在计算机上运行时,使得计算机可以根据指令执行如上述第一方面以及各种可能的设计中任一种的图像处理方法。34.应当理解的是,上述第二方面,第三方面,第四方面,第五方面以及第六方面提供的技术方案,其技术特征均可对应到第一方面及其可能的设计中提供的图像处理方法,因此能够达到的有益效果类似,此处不再赘述。附图说明35.图1为一种视频流的组成示意图;36.图2为一种图像显示的示意图;37.图3为又一种图像显示的示意图;38.图4为本技术实施例提供的一种电子设备的组成示意图;39.图5为本技术实施例提供的一种电子设备的软件组成示意图;40.图6a为本技术实施例提供的一种渲染命令的下发示意图;41.图6b为本技术实施例提供的一种渲染命令的下发示意图;42.图6c为本技术实施例提供的一种图像渲染的示意图;43.图7a为本技术实施例提供的一种图像处理方法的流程示意图;44.图7b为本技术实施例提供的一种不同帧缓冲上drawcall数量的确定示意图;45.图7c为本技术实施例提供的一种不同帧缓冲上drawcall数量的确定示意图;46.图8为本技术实施例提供的一种渲染命令的下发示意图;47.图9为本技术实施例提供的一种图像处理方法的流程示意图;48.图10为本技术实施例提供的一种图像处理装置的组成示意图;49.图11为本技术实施例提供的一种电子设备的组成示意图;50.图12为本技术实施例提供的一种芯片系统的组成示意图。具体实施方式51.在用户使用电子设备的过程中,电子设备通过显示屏可以向用户展示多媒体流文件,以便于向用户提供丰富的视觉体验。52.以多媒体流为视频流为例。该视频流可以包括多个帧图像。示例性的,结合图1,该视频流可以包括n帧图像,如第1帧,第2帧,……第n帧。电子设备可以在展示该视频流时,分别在显示屏上显示第1帧,第2帧,……第n帧。在电子设备切换显示帧图像的频率高于人眼能够分辨的频率时,就可以实现用户对于不同帧图像的切换展示的不感知,从而获取观看连续的观看效果。53.想要播放视频流的应用程序,可以向电子设备发出针对不同帧图像的渲染命令。电子设备可以根据这些渲染命令,进行对各个帧图像的渲染,并基于渲染结果进行显示。54.在一些实现中,电子设备可以在显示当前帧图像时,根据应用程序下发的渲染命令,进行后续帧图像的渲染。以便于在需要显示后续帧图像时,可以将渲染完成的需要显示的帧图像替换当前显示的帧图像,展示给用户。55.示例性的,以当前显示的帧图像为第n-1帧为例。如图2所示,电子设备可以在需要显示第n-1帧图像时,控制显示屏从当前帧缓冲(如图2所示的当前帧缓冲)中读取第n-1帧图像的数据进行显示。其中,当前帧缓冲可以是电子设备在内存中为当前需要显示的帧图像配置的存储空间,该当前帧缓冲可以用于存储当前需要显示的帧图像的数据(如各个像素的颜色数据,深度数据等)。也就是说,在需要显示第n-1帧图像时,电子设备可以根据当前帧缓冲中存储的第n-1帧图像的数据,控制显示屏显示第n-1帧图像。56.在一些实现中,在电子设备显示第n-1帧图像时,可以根据应用程序下发的渲染命令,对后续将要显示的图像(如第n帧)进行渲染,从而获取用于显示第n帧图像的数据。57.请参考图3,电子设备在显示第n-1帧图像时,可以执行对第n帧的渲染。可以理解的是,电子设备在渲染帧图像的过程中,需要将渲染的结果存储起来以便后续使用。因此,在本示例中,电子设备可以在对第n帧图像进行渲染之前,在内存中配置帧缓冲。帧缓冲可以对应到内存中的存储空间。在电子设备进行渲染时,可以将渲染结果存储在对应的帧缓冲中。58.在一些实施例中,为了避免在一个帧缓冲上执行过多的操作,电子设备可以在执行1个帧图像的渲染时,调用多个帧缓冲。示例性的,电子设备可以在执行第n帧图像的渲染时,调用如图3所示的3个帧缓冲(如fb0,fb1,以及fb2)。这样,在执行对第n帧图像的渲染时,fb1可以用于存储第n帧图像的一部分元素的渲染结果(如称为渲染结果1),fb2可以用于存储第n帧图像的另一部分元素的渲染结果(如称为渲染结果2)。在分别获取渲染结果1和渲染结果2之后,电子设备可以将渲染结果1以及渲染结果2融合(或称为渲染)到fb0中。由此即可在fb0中获取第n帧图像的完整的渲染结果。59.电子设备可以在需要显示第n帧图像时,控制fb0中的数据交换(swap)到当前帧缓冲中,进而根据交换之后的当前帧缓冲中的数据(如第n帧的数据),控制显示屏显示第n帧图像。60.需要说明的是,为了能够对帧图像进行完整的渲染,电子设备可以在创建帧缓冲时,为帧缓冲配置对应的分辨率。分辨率越高,帧缓冲对应的存储空间就越大,这样就能够实现对较高分辨率的图像进行渲染。61.可以理解的是,随着电子设备的发展,用户对于电子设备提供的显示分辨率要求越来越高。各个帧图像的渲染都需要进行较高分辨率的渲染,这也对电子设备的图像处理能力提出了较高的要求。由此也会引入电子设备的功耗和发热的显著增加,从而影响用户体验。62.为了解决上述问题,本技术实施例提供一种图像处理方法,可以使得电子设备能够根据已经完成渲染的帧图像的渲染情况,灵活调整后续帧图像的渲染机制,比如调整后续帧图像渲染过程中使用的帧缓冲的分辨率,从而降低帧图像渲染过程中对内存和算力造成的较大压力,进而避免由此产生的电子设备的发热和功耗的上升。63.以下结合附图对本技术实施例提供的方案进行详细说明。64.需要说明的是,本技术实施例提供的图像处理方法,可以应用在用户的电子设备中。该电子设备可以是能够提供网络接入能够的设备。比如,该电子设备可以是手机、平板电脑、个人数字助理(personaldigitalassistant,pda)、增强现实(augmentedreality,ar)\虚拟现实(virtualreality,vr)设备、媒体播放器等具备拍摄功能的便携式移动设备,该电子设备也可以是智能手表等可穿戴电子设备。本技术实施例对该设备的具体形态不作特殊限制。在一些实施例中,该电子设备可以具有显示功能。比如,电子设备可以根据应用程序下发的渲染命令进行图像的渲染,并根据渲染获取的渲染结果向用户展示对应的图像。65.请参考图4,为本技术实施例提供的一种电子设备400的组成示意图。如图4所示,该电子设备400可以包括处理器410,外部存储器接口420,内部存储器421,通用串行总线(universalserialbus,usb)接口430,充电管理模块440,电源管理模块441,电池442,天线1,天线2,移动通信模块450,无线通信模块460,音频模块470,传感器模块480,按键490,马达491,指示器492,摄像头493,显示屏494,以及用户标识模块(subscriberidentificationmodule,sim)卡接口495等。其中,传感器模块480可以包括压力传感器,陀螺仪传感器,气压传感器,磁传感器,加速度传感器,距离传感器,接近光传感器,指纹传感器,温度传感器,触摸传感器,环境光传感器,骨传导传感器等。在一些实施例中,该电子设备400还可以包括扬声器,受话器,麦克风,耳机接口等器件用于实现电子设备的音频相关功能。66.可以理解的是,本实施例示意的结构并不构成对电子设备400的具体限定。在另一些实施例中,电子设备400可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。67.处理器410可以包括一个或多个处理单元,例如:处理器410可以包括中央处理器(centralprocessingunit/processor,cpu)应用处理器(applicationprocessor,ap),调制解调处理器,图形处理器(graphicsprocessingunit,gpu),图像信号处理器(imagesignalprocessor,isp),控制器,存储器,视频编解码器,数字信号处理器(digitalsignalprocessor,dsp),基带处理器,和/或神经网络处理器(neural-networkprocessingunit,npu)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。68.控制器可以是电子设备400的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。69.处理器410中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器410中的存储器为高速缓冲存储器。该存储器可以保存处理器410刚用过或循环使用的指令或数据。如果处理器410需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器410的等待时间,因而提高了系统的效率。70.在一些实施例中,处理器410可以包括一个或多个接口。接口可以包括集成电路(inter-integratedcircuit,i2c)接口,集成电路内置音频(inter-integratedcircuitsound,i2s)接口,脉冲编码调制(pulsecodemodulation,pcm)接口,通用异步收发传输器(universalasynchronousreceiver/transmitter,uart)接口,移动产业处理器接口(mobileindustryprocessorinterface,mipi),通用输入输出(general-purposeinput/output,gpio)接口,用户标识模块(subscriberidentitymodule,sim)接口,和/或通用串行总线(universalserialbus,usb)接口等。71.电子设备400可以通过isp,摄像头493,视频编解码器,gpu,显示屏494以及应用处理器410等实现拍摄功能。72.isp用于处理摄像头493反馈的数据。例如,拍照时,打开快门,光线通过镜头被传递到摄像头493感光元件上,光信号转换为电信号,摄像头493感光元件将所述电信号传递给isp处理,转化为肉眼可见的图像。isp还可以对图像的噪点,亮度,肤色进行算法优化。isp还可以对拍摄场景的曝光,色温等参数优化。在一些实施例中,isp可以设置在摄像头493中。73.摄像头493用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。感光元件可以是电荷耦合器件(chargecoupleddevice,ccd)或互补金属氧化物半导体(complementarymetal-oxide-semiconductor,cmos)光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给isp转换成数字图像信号。isp将数字图像信号输出到dsp加工处理。dsp将数字图像信号转换成标准的rgb,yuv等格式的图像信号。在一些实施例中,电子设备400可以包括1个或n个摄像头493,n为大于1的正整数。74.数字信号处理器410用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当电子设备400在频点选择时,数字信号处理器410用于对频点能量进行傅里叶变换等。75.视频编解码器用于对数字视频压缩或解压缩。电子设备400可以支持一种或多种视频编解码器。这样,电子设备400可以播放或录制多种编码格式的视频,例如:动态图像专家组(movingpictureexpertsgroup,mpeg)1,mpeg2,mpeg3,mpeg4等。76.npu为神经网络(neural-network,nn)计算处理器410,通过借鉴生物神经网络结构,例如借鉴人脑神经元之间传递模式,对输入信息快速处理,还可以不断的自学习。通过npu可以实现电子设备400的智能认知等应用,例如:图像识别,人脸识别,语音识别,文本理解等。77.充电管理模块440用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块440可以通过usb接口430接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块440可以通过电子设备400的无线充电线圈接收无线充电输入。充电管理模块440为电池442充电的同时,还可以通过电源管理模块441为电子设备400供电。电源管理模块441用于连接电池442,充电管理模块440与处理器410。电源管理模块441接收电池442和/或充电管理模块440的输入,为处理器410,内部存储器421,外部存储器,显示屏494,摄像头493,和无线通信模块460等供电。电源管理模块441还可以用于监测电池442容量,电池442循环次数,电池442健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块441也可以设置于处理器410中。在另一些实施例中,电源管理模块441和充电管理模块440也可以设置于同一个器件中。78.电子设备400的无线通信功能可以通过天线1,天线2,移动通信模块450,无线通信模块460,调制解调处理器以及基带处理器等实现。79.天线1和天线2用于发射和接收电磁波信号。电子设备400中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。80.移动通信模块450可以提供应用在电子设备400上的包括2g/3g/4g/5g等无线通信的解决方案。移动通信模块450可以包括至少一个滤波器,开关,功率放大器,低噪声放大器emittingdiodes,qled)等。在一些实施例中,电子设备400可以包括1个或n个显示屏494,n为大于1的正整数。86.外部存储器接口420可以用于连接外部存储卡,例如microsd卡,实现扩展电子设备400的存储能力。外部存储卡通过外部存储器接口420与处理器410通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。87.内部存储器421可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器410通过运行存储在内部存储器421的指令,从而执行电子设备400的各种功能应用以及数据处理。内部存储器421可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备400使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器421可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universalflashstorage,ufs)等。88.在本技术实施例中,内部存储器421也可以称为内存。在一些实施例中,处理器(如cpu)可以在内存中为不同的帧图像的渲染处理创建对应的帧缓冲。比如,结合图3,cpu可以在应用程序的命令的控制下,在内存中创建fbo,fb1以及fb2用于对第n帧图像的渲染操作。89.电子设备400可以通过音频模块470,扬声器,受话器,麦克风,耳机接口,以及应用处理器410等实现音频功能。例如音乐播放,录音等。90.音频模块470用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块470还可以用于对音频信号编码和解码。在一些实施例中,音频模块470可以设置于处理器410中,或将音频模块470的部分功能模块设置于处理器410中。扬声器,也称“喇叭”,用于将音频电信号转换为声音信号。电子设备400可以通过扬声器收听音乐,或收听免提通话。受话器,也称“听筒”,用于将音频电信号转换成声音信号。当电子设备400接听电话或语音信息时,可以通过将受话器靠近人耳接听语音。麦克风,也称“话筒”,“传声器”,用于将声音信号转换为电信号。当拨打电话或发送语音信息或需要通过语音助手触发电子设备400执行某些功能时,用户可以通过人嘴靠近麦克风发声,将声音信号输入到麦克风。电子设备400可以设置至少一个麦克风。在另一些实施例中,电子设备400可以设置两个麦克风,除了采集声音信号,还可以实现降噪功能。在另一些实施例中,电子设备400还可以设置三个,四个或更多麦克风,实现采集声音信号,降噪,还可以识别声音来源,实现定向录音功能等。耳机接口用于连接有线耳机。耳机接口可以是usb接口430,也可以是3.5mm的开放移动电子设备400平台(openmobileterminalplatform,omtp)标准接口,美国蜂窝电信工业协会(cellulartelecommunicationsindustryassociationoftheusa,ctia)标准接口。91.触摸传感器,也称“触控面板”。触摸传感器可以设置于显示屏494,由触摸传感器与显示屏494组成触摸屏,也称“触控屏”。触摸传感器用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器410,以确定触摸事件类型。在一些实施例中,可以通过显示屏494提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器也可以设置于电子设备400的表面,与显示屏494所处的位置不同。92.压力传感器用于感受压力信号,可以将压力信号转换成电信号。在一些实施例中,压力传感器可以设置于显示屏494。压力传感器的种类很多,如电阻式压力传感器,电感式压力传感器,电容式压力传感器等。电容式压力传感器可以是包括至少两个具有导电材料的平行板。当有力作用于压力传感器,电极之间的电容改变。电子设备400根据电容的变化确定压力的强度。当有触摸操作作用于显示屏494,电子设备400根据压力传感器检测所述触摸操作强度。电子设备400也可以根据压力传感器的检测信号计算触摸的位置。在一些实施例中,作用于相同触摸位置,但不同触摸操作强度的触摸操作,可以对应不同的操作指令。例如:当有触摸操作强度小于第一压力阈值的触摸操作作用于短消息应用图标时,执行查看短消息的指令。当有触摸操作强度大于或等于第一压力阈值的触摸操作作用于短消息应用图标时,执行新建短消息的指令。93.陀螺仪传感器可以用于确定电子设备400的运动姿态。在一些实施例中,可以通过陀螺仪传感器确定电子设备400围绕三个轴(即,x,y和z轴)的角速度。陀螺仪传感器可以用于拍摄防抖。示例性的,当按下快门,陀螺仪传感器检测电子设备400抖动的角度,根据角度计算出镜头模组需要补偿的距离,让镜头通过反向运动抵消电子设备400的抖动,实现防抖。陀螺仪传感器还可以用于导航,体感游戏场景。94.气压传感器用于测量气压。在一些实施例中,电子设备400通过气压传感器测得的气压值计算海拔高度,辅助定位和导航。95.磁传感器包括霍尔传感器。电子设备400可以利用磁传感器检测翻盖皮套的开合。在一些实施例中,当电子设备400是翻盖机时,电子设备400可以根据磁传感器检测翻盖的开合。进而根据检测到的皮套的开合状态或翻盖的开合状态,设置翻盖自动解锁等特性。96.加速度传感器可检测电子设备400在各个方向上(一般为三轴)加速度的大小。当电子设备400静止时可检测出重力的大小及方向。还可以用于识别电子设备400姿态,应用于横竖屏切换,计步器等应用。97.距离传感器,用于测量距离。电子设备400可以通过红外或激光测量距离。在一些实施例中,拍摄场景,电子设备400可以利用距离传感器测距以实现快速对焦。98.接近光传感器可以包括例如发光二极管(led)和光检测器,例如光电二极管。发光二极管可以是红外发光二极管。电子设备400通过发光二极管向外发射红外光。电子设备400使用光电二极管检测来自附近物体的红外反射光。当检测到充分的反射光时,可以确定电子设备400附近有物体。当检测到不充分的反射光时,电子设备400可以确定电子设备400附近没有物体。电子设备400可以利用接近光传感器检测用户手持电子设备400贴近耳朵通话,以便自动熄灭屏幕达到省电的目的。接近光传感器也可用于皮套模式,口袋模式自动解锁与锁屏。99.环境光传感器用于感知环境光亮度。电子设备400可以根据感知的环境光亮度自适应调节显示屏494亮度。环境光传感器也可用于拍照时自动调节白平衡。环境光传感器还可以与接近光传感器配合,检测电子设备400是否在口袋里,以防误触。100.指纹传感器用于采集指纹。电子设备400可以利用采集的指纹特性实现指纹解锁,访问应用锁,指纹拍照,指纹接听来电等。101.温度传感器用于检测温度。在一些实施例中,电子设备400利用温度传感器检测的温度,执行温度处理策略。例如,当温度传感器上报的温度超过阈值,电子设备400执行降低位于温度传感器附近的处理器410的性能,以便降低功耗实施热保护。在另一些实施例中,当温度低于另一阈值时,电子设备400对电池442加热,以避免低温导致电子设备400异常关机。在其他一些实施例中,当温度低于又一阈值时,电子设备400对电池442的输出电压执行升压,以避免低温导致的异常关机。102.骨传导传感器可以获取振动信号。在一些实施例中,骨传导传感器可以获取人体声部振动骨块的振动信号。骨传导传感器也可以接触人体脉搏,接收血压跳动信号。在一些实施例中,骨传导传感器也可以设置于耳机中,结合成骨传导耳机。音频模块470可以基于所述骨传导传感器获取的声部振动骨块的振动信号,解析出语音信号,实现语音功能。应用处理器410可以基于所述骨传导传感器获取的血压跳动信号解析心率信息,实现心率检测功能。103.按键490包括开机键,音量键等。按键490可以是机械按键490。也可以是触摸式按键490。电子设备400可以接收按键490输入,产生与电子设备400的用户设置以及功能控制有关的键信号输入。104.马达491可以产生振动提示。马达491可以用于来电振动提示,也可以用于触摸振动反馈。例如,作用于不同应用(例如拍照,音频播放等)的触摸操作,可以对应不同的振动反馈效果。作用于显示屏494不同区域的触摸操作,马达491也可对应不同的振动反馈效果。不同的应用场景(例如:时间提醒,接收信息,闹钟,游戏等)也可以对应不同的振动反馈效果。触摸振动反馈效果还可以支持自定义。105.指示器492可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。106.sim卡接口495用于连接sim卡。sim卡可以通过插入sim卡接口495,或从sim卡接口495拔出,实现和电子设备400的接触和分离。电子设备400可以支持1个或n个sim卡接口495,n为大于1的正整数。sim卡接口495可以支持nanosim卡,microsim卡,sim卡等。同一个sim卡接口495可以同时插入多张卡。所述多张卡的类型可以相同,也可以不同。sim卡接口495也可以兼容不同类型的sim卡。sim卡接口495也可以兼容外部存储卡。电子设备400通过sim卡和网络交互,实现通话以及数据通信等功能。在一些实施例中,电子设备400采用esim,即:嵌入式sim卡。esim卡可以嵌在电子设备400中,不能和电子设备400分离。107.应当理解的是,上述图4示出了电子设备中的一种硬件结构组成。本技术中,还可以从另一个角度对电子设备400进行划分。比如,参考图5,示出了电子设备400的另一种逻辑组成。108.示例性的,在如图5所示的示例中,电子设备400可以就有分层架构。在该示例中,分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,以电子设备运行有(android)操作系统为例。系统可以分为五层,从上至下分别为应用程序层,应用程序框架层,安卓运行时(androidruntime,art)和原生c/c 库,硬件抽象层(hardwareabstractlayer,hal)以及内核层。109.其中,应用程序层可以包括一系列应用程序包。如图5所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,wlan,蓝牙,音乐,视频,短信息等应用程序。110.在本技术的一些实施例中,应用程序层可以包括向用户提供多媒体流展示功能的应用程序。比如,应用程序层中可以包括各类游戏类应用(如等)。又如,应用程序层中还可以包括各类视频类应用(如等)。在这些应用程序运行时,可以下发出渲染命令,由此使得cpu可以根据该渲染命令,控制gpu进行对应的渲染,以获取各个帧图像的数据。111.应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramminginterface,api)和编程框架。应用程序框架层包括一些预先定义的函数。如图5所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,资源管理器,通知管理器,活动管理器,输入管理器等。窗口管理器提供窗口管理服务(windowmanagerservice,wms),wms可以用于窗口管理、窗口动画管理、surface管理以及作为输入系统的中转站。内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。该数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。活动管理器可以提供活动管理服务(activitymanagerservice,ams),ams可以用于系统组件(例如活动、服务、内容提供者、广播接收器)的启动、切换、调度以及应用进程的管理和调度工作。输入管理器可以提供输入管理服务(inputmanagerservice,ims),ims可以用于管理系统的输入,例如触摸屏输入、按键输入、传感器输入等。ims从输入设备节点取出事件,通过和wms的交互,将事件分配至合适的窗口。112.安卓运行时包括核心库和安卓运行时。安卓运行时负责将源代码转换为机器码。安卓运行时主要包括采用提前(aheadortime,aot)编译技术和及时(justintime,jit)编译技术。核心库主要用于提供基本的java类库的功能,例如基础数据结构、数学、输入输出(inputoutput,io)、工具、数据库、网络等库。核心库为用户进行安卓应用开发提供了api。113.原生c/c 库可以包括多个功能模块。例如:表面管理器(surfacemanager),媒体框架(mediaframework),标准c库(standardclibrary,libc),嵌入式系统的开放图形库(openglforembeddedsystems,opengles)、vulkan、sqlite、webkit等。114.其中,表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2d和3d图层的融合。媒体框架支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:动态图象专家组4(movingpicturesexpertsgroupmpeg4),h.264,动态影像专家压缩标准音频层面3(movingpictureexpertsgroupaudiolayer3,mp3),高级音频编码(advancedaudiocoding,aac),自适应多码解码(adaptivemulti-rate,amr),联合图像专家组(jointphotographicexpertsgroup,jpeg,或称为jpg),便携式网络图形(portablenetworkgraphics,png)等。opengles和/或vulkan提供应用程序中2d图形和3d图形的绘制和操作。sqlite为电子设备400的应用程序提供轻量级关系型数据库。115.硬件抽象层运行于用户空间(userspace),对内核层驱动进行封装,向上层提供调用接口。内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。116.以下结合图4和图5所示的组成,对图像渲染过程中,软件和硬件的处理机制进行示例性说明。其中以处理器410中包括cpu和gpu为例。在本技术实施例中,cpu可以用于接收来自应用程序的渲染命令,并根据该渲染命令,向gpu下发对应的渲染指令,以便于gpu根据渲染指令执行对应的渲染。作为一种示例,渲染命令中可以包括bindframebuffer()函数,以及一个或多个gldrawelement。对应的,渲染指令中也可以包括bindframebuffer()函数,以及一个或多个gldrawelement。其中,bindframebuffer()函数可以用于指示当前绑定的帧缓冲。如,bindframebuffer(1)可以指示当前绑定的帧缓冲为fb1,即在fb1上执行后续的gldrawelement。为了便于说明,以下示例中,将渲染命令/渲染指令中,gldrawelement的集合称为渲染操作。117.在应用程序层中的应用程序需要渲染某个图像(如第n帧图像)时,可以向下发起渲染命令。在该渲染命令中,可以包括渲染该第n帧图像所需要调用的帧缓冲,以及在各个帧缓冲中需要执行的渲染操作。在一些示例中,渲染命令可以通过bindframebuffer()函数,实现对应渲染操作与帧缓冲的绑定。比如,第n帧图像需要使用fb0,fb1以及fb2作为帧缓冲为例。结合图6a,为fb1对应的渲染命令的一种示例。应用程序下发的渲染命令中,可以包括bindframebuffer(1)函数,由此实现当前渲染操作与fb1的绑定。在绑定fb1之后,可以通过gldrawelement指令,实现在该fb1上的渲染操作指示。在本示例中,1个gldrawelement指令可以对应1个drawcall。在不同实现中,在fb1上执行的gldrawelement指令可以为多个,则对应的在fb1上执行的drawcall就可以是多个。例如,结合图6a,在该示例中,渲染命令中可以包括在fb1上执行的drawcall可以为a个,如gldrawelement1-gldrawelementa。118.类似的,对于需要使用fb2的渲染操作,在渲染指令中,可以通过bindframebuffer(2)函数绑定fb2。此后可以通过不同的gldrawelement指令,实现在该fb2上的渲染操作指示。119.在接收到上述命令之后,cpu可以根据bindframebuffer()函数所绑定的帧缓冲信息,以及对应的gldrawelement指令,向gpu下发对应的渲染指令。从而使得gpu可以进行对应的渲染操作,并将该渲染操作的结果存储在当前绑定的帧缓冲中。120.示例性的,cpu可以在接收到bindframebuffer(1)的指令时,确定激活(active)的帧缓冲为fb1。cpu可以向gpu下发在fb1上进行对应gldrawelement的渲染指令。比如,结合图6a,cpu可以向gpu下发包括执行gldrawelement1-1到gldrawelement1-a的渲染指令,以便于gpu执行gldrawelement1-1到gldrawelement1-a。在一些实施例中,cpu可以向gpu下发bindframebuffer(1),以便于gpu可以确定在fb1上执行上述渲染指令,并将结果保存在fb1中。121.类似的,结合图6b,cpu可以在接收到bindframebuffer(2)的命令时,确定激活(active)的帧缓冲为fb2。cpu可以向gpu下发在fb2上进行对应gldrawelement渲染指令,由此完成对fb2上相关数据的渲染。122.如此往复,即可完成对第n帧图像对应的各个帧缓冲的渲染。123.这样,电子设备可以将这些帧缓冲中的渲染结果渲染到fb0中,由此即可在fb0中获取第n帧图像对应的数据。比如,以第n帧图像的默认帧缓冲为fb0,第n帧图像在进行渲染处理过程中还调用fb1和fb2为例。结合图6a以及图6b的示例,参考图6c,在gpu完成fb1和fb2上的渲染处理之后,即可在fb1和fb2中分别存储对应的数据(如各个像素点的颜色数据和/或深度数据等)。这些数据(如fb1和fb2中的数据)可以分别对应第n帧图像的部分元素。那么,结合图6c,电子设备可以将fb1和fb2中的数据渲染到fb0上。这样,在fb0上就可以获取第n帧图像所有的数据。在电子设备需要显示第n帧图像时,结合图3所示的方案,cpu可以将第n帧图像对应的数据,通过swapbuffer的指令,从fb0中交换到当前帧缓冲中。进而使得显示屏可以根据当前帧缓冲中的第n帧图像的数据进行显示。124.需要说明的是,上述示例中,是以在fb0上只进行基于fb1和fb2的数据的渲染结果进行渲染获取第n帧图像的全量数据为例进行说明的。比如,以第n帧图像是根据游戏应用下发的渲染指令进行渲染的图像。在该第n帧图像中可以包括人物,树木等元素,还可以包括特效等元素,还可以包括用户界面(userinterface,ui)控件等元素。那么在一些实施例中,cpu可以根据游戏应用下发的渲染命令,控制gpu在fb1上执行人物,树木,ui控件等元素的渲染,并将结果存储在fb1。cpu还可以根据游戏应用下发的渲染命令,控制gpu在fb2上执行特效等元素的渲染,并将结果存储在fb2。接着就可以通过将fb1存储的数据和fb2存储的数据渲染到fb0上,即可获取第n帧图像的全量数据。125.在本技术的另一些实施例中,在fb0上执行的渲染操作,还可以包括基于fb1,fb2的数据之外的渲染指令执行的渲染操作。比如,继续结合上述示例,cpu可以根据游戏应用下发的渲染命令,控制gpu在fb1上执行人物,树木等元素的渲染,并将结果存储在fb1。cpu还可以根据游戏应用下发的渲染命令,控制gpu在fb2上执行特效等元素的渲染,并将结果存储在fb2。接着,cpu还可以根据游戏应用下发的渲染命令,控制gpu在fb0上执行ui控件的渲染,并结合fb1和fb2存储的数据,将所有渲染结果进行渲染融合,从而在fb0上获取第n帧图像的全量数据。126.可以理解的是,在对第n帧图像的渲染过程中,在不同的帧缓冲上执行的drawcall数量是不同。执行的drawcall数量越多,则表明在该帧缓冲上执行的渲染操作越多,那么在该帧缓冲的渲染操作过程中就会消耗更多的算力资源,也就会产生更高的功耗以及发热。127.本技术实施例提供的方案,能够使得电子设备可以自动识别当前需要渲染的帧图像的渲染过程中,消耗资源较高的帧缓冲(如称为主场景)。通过采用较低的分辨率,执行该主场景中的渲染操作,达到降低在主场景中的渲染操作消耗的算力资源的效果。128.示例性的,基于连续帧图像的相关性,电子设备可以通过第n-1帧图像的渲染过程,确定主场景。在一些实施例中,cpu可以根据已经完成渲染的帧图像(如第n-1帧)在处理过程中,在各个帧缓冲上执行的drawcall个数,确定在执行该第n-1帧图像在渲染过程中,需要执行渲染操作最多的帧缓冲(即主场景)。也就是说,在对当前帧图像(如第n帧)的渲染时,该主场景的渲染操作的数量也可能是最多的。在该示例中,cpu可以在对第n帧图像进行渲染处理时,为该主场景在内存中配置具有较小分辨率的临时帧缓冲。以便于在收到对主场景的渲染命令的情况下,cpu可以控制gpu在该临时帧缓冲中,以较小的分辨率执行主场景对应的渲染操作。由此就可以使得在对第n帧图像的渲染过程中,大量的渲染操作可以以较小的分辨率执行,从而减少渲染负载,降低渲染所需功耗。129.以下结合示例,对本技术实施例提供的方案进行详细说明。示例性的,请参考图7a,为本技术实施例提供的一种图像处理方法的流程示意图。如图所示,该方法可以包括:130.s701、确定上一帧图像渲染过程中的主场景。131.其中,主场景可以是渲染过程中,执行渲染操作数量最多的帧缓冲。132.可以理解的是,以电子设备播放视频流为例。组成视频流的连续帧图像的场景具有关联性。因此,电子设备的处理器(如cpu)可以根据上一帧图像的主场景确定当前帧图像的主场景。133.示例性的,以当前渲染的帧图像为第n帧图像为例。cpu可以根据上一帧(如第n-1帧图像)图像渲染过程中,在不同帧缓冲上执行drawcall的个数,确定第n-1帧图像的主场景。在一些实施例中,该第n帧图像也可以称为第一图像,第n帧图像的主场景也可以称为第一主场景。对应的,第n-1帧图像可以称为第二图像,第二图像的主场景可以与第一图像的主场景相同(如都是第一主场景)。134.作为一种可能的实现方式,以执行渲染帧图像的默认帧缓冲为fb0,第n-1帧图像的渲染过程中调用了fb1,fb2为例。为了便于说明,以下将应用程序下发的与fb1对应的渲染命令称为渲染命令1,将应用程序下发的与fb2对应的渲染命令称为渲染命令2。那么,渲染命令1中就可以包括glbindframebuffer(1)用于绑定fb1。渲染命令1中还可以包括一个或多个需要在fb1上执行的gldrawelement。比如,渲染命令1中可以包括a个gldrawelement,即a个drawcall。类似的,渲染命令2中就可以包括glbindframebuffer(2)用于绑定fb2。渲染命令2中还可以包括一个或多个需要在fb2上执行的gldrawelement。比如,渲染命令2中可以包括b个gldrawelement,即b个drawcall。135.在接收到对fb1和fb2的渲染命令时,cpu可以对对应的渲染命令中包括的drawcall数量进行计数,从而获取各个fb上执行的drawcall数量。136.结合图7b,以fb1为例。cpu可以在根据应用程序下发的渲染命令,执行glbindframebuffer(1)时,初始化计数器1。比如在内存中为fb1配置对应的计数帧位。通过初始化该计数器1,既可以将该帧位的值初始化为0。后续每在fb1上执行gldrawelement时,计数器1计数加1,如执行count1 。比如,在执行gldrawelement1-1后,cpu可以对计数器1执行count1 ,从而使得存储在fb1drawcall数量的帧位的数值由0变为1。也就是说,此时在fb1上执行的drawcall数量为1。以此类推。那么,cpu就可以确定在进行第n-1帧图像的渲染过程中,fb1上执行drawcall的数量为计数器1的当前计数(比如,该计数可以为a)。137.与fb1类似的,cpu还可以在根据应用程序下发的渲染命令,调用glbindframebuffer(2)时,初始化计数器2。如初始化count2=0。后续每在fb2上执行gldrawelement时,计数器2计数加1,如执行count2 。在完成fb2上图像的渲染处理之后,cpu就可以确定在进行第n-1帧图像的渲染过程中,fb2上执行drawcall的数量为计数器2的当前计数(比如,该计数可以为b)。如参考图7c。在完成fb1和fb2的渲染处理之后,内存中存储fb1drawcall数量的帧位的数值可以为a,存储fb2drawcall数量的帧位可以为b。138.在本示例中,cpu可以选取a和b中较大的计数对应的帧缓冲作为主场景。比如,在a大于b时,则cpu可以确定fb1上执行的drawcall个数更多,由此确定fb1为第n-1帧图像的主场景。相对的,在a小于b时,则cpu可以确定fb2上执行的drawcall个数更多,由此确定fb2为第n-1帧图像的主场景。139.在本技术的一些实施例中,该s701的执行过程,可以是cpu在进行第n-1帧图像的渲染处理的过程中执行的。140.s702、为主场景配置临时帧缓冲。141.根据上述s701中的说明,主场景是执行drawcall数量最多的帧缓冲。因此,在需要降低渲染处理对电子设备造成的压力时,可以对主场景下的渲染处理进行调整,从而获取相较于调整其他帧缓冲中的渲染处理机制更加显著的效果。142.在本技术实施例中,电子设备的cpu可以为主场景配置临时帧缓冲,该临时帧缓冲的分辨率可以小于主场景的分辨率。由此使得电子设备可以采用较小的分辨率,对主场景中的大量drawcall进行处理,从而降低高分辨率的渲染对电子设备造成的影响。143.示例性的,在一些实施例中,cpu可以在内存中为主场景配置临时帧缓冲之前,确定主场景的分辨率。144.作为一种可能的实现,cpu可以根据第n-1帧图像渲染时,使用的画布大小,确定该主场景的分辨率。可以理解的是,在应用程序向cpu下发渲染命令时,在渲染命令中可以通过bindframebuffer()函数绑定帧缓冲。以渲染命令通过bindframebuffer(1)绑定fb1为例。在该渲染命令中还可以通过glviewport(x,y)函数指定在fb1中执行渲染操作时的绘制大小。这样,cpu就可以控制gpu在该x*y的像素区域中执行后续的gldrawelement对应的渲染处理。在本示例中,cpu可以在获取主场景的分辨率时,根据该主场景在第n-1帧图像渲染过程中,glviewport(x,y)函数指定的像素区域,确定主场景的像素大小。比如,以fb1为主场景为例。cpu可以确定在执行第n-1帧图像的渲染时,绑定fb1(如接收到bindframebuffer(1)函数)后,接收到glviewport(2218,978)。那么cpu就可以确定在第n-1帧图像的渲染过程中,使用了fb1上2218×978的像素区域。由此,cpu就可以确定主场景(即fb1)的分辨率为2218×978。145.作为又一种可能的实现,cpu可以在接收到对第n帧图像的渲染命令后,通过对主场景执行glgetintegerv指令,确定主场景的分辨率。例如,以主场景为fb1,执行glgetintegerv(gl_viewport)指令获取分辨率为例。cpu可以在接收到第n帧图像中,绑定fb1(如接收到bindframebuffer(1)函数)后,执行glgetintegerv(gl_viewport)指令。从而根据获取的结果(如tex1(2118×978)),确定主场景(即fb1)的分辨率为2218×978。146.在本技术实施例中,cpu可以在确定主场景的分辨率的情况下,为主场景配置具有较小分辨率的临时帧缓冲。其中,该配置临时帧缓冲的操作,可以是cpu在执行第n-1帧图像的渲染过程中执行的。在另一些实现中,该配置临时帧缓冲的操作,还可以是cpu在执行完成第n-1帧图像的渲染,开始执行第n帧图像的渲染之前进行的。147.需要说明的是,在本技术的一些实施例中,在电子设备中可以配置有缩放参数。该缩放参数可以用于确定临时帧缓冲的分辨率。例如,cpu可以根据如下公式(1)确定临时帧缓冲的分辨率。148.临时帧缓冲的分辨率=主场景的分辨率×缩放参数……公式(1)。149.其中,缩放参数可以是小于1的正数。该缩放参数可以是用户配置的,也可以是电子设备中预置的,也可以是在需要时电子设备从云端获取的。150.在确定临时帧缓冲的分辨率之后,cpu就可以在内存中为该临时帧缓冲配置对应大小的存储空间。151.在本技术的一些实施例中,cpu可以在执行完成第n-1帧图像的渲染处理之后,确定主场景的分辨率。进而根据上述公式(1)即可确定临时帧缓冲的分辨率。基于此,cpu就可以在内存中完成对临时帧缓冲的配置。152.在一些实现中,cpu可以通过创建临时帧缓冲对象,并将该临时帧缓冲对象绑定到内存中配置的存储空间上,实现临时帧缓冲的配置。其中,临时帧缓冲对象可以是该临时帧缓冲的名称。153.作为一种示例,以下给出一种创建帧缓冲的典型指令流的示例:154.unsignedintfbo;//定义一个fb的id,变量名定义为fbo155.glgenframebuffers(1,&fbo);//创建一个fb,id值为fbo,驱动会为该fb分配id,比如fbo可以被赋值为3156.glbindframebuffer(gl_framebuffer,fbo);//绑定帧缓冲3157.unsignedinttexture;//定义一个纹理id,变量名定义为texture158.glgentextures(1,&texture);//创建一个纹理,id值为texture,驱动会为该fb分配texture,比如texture可以被赋值为11159.glbindtexture(gl_texture_2d,texture);//绑定纹理11,其中gl_texture_2d用于指示纹理目标为2d纹理160.glteximage2d(gl_texture_2d,0,gl_rgb,800,600,0,gl_rgb,gl_unsigned_byte,null);//给纹理分配一个800*600大小的内存空间;其中函数中的第2个因子(即0)可以用于指示纹理级别,函数中的第3个因子(即gl_rgb)可以用于指示目标纹理格式,函数中的第7个因子(即gl_rgb)可以用于指示入参的纹理格式,函数中的第8个因子(即gl_unsigned_byte)可以用于指示入参纹理数据类型161.glframebuffertexture2d(gl_framebuffer,gl_color_attachment0,gl_texture_2d,texture,0);//将创建出来的纹理texture附加到当前绑定的帧缓冲对象162.可以理解的是,以临时帧缓冲为fb3为例。由于该fb3的分辨率小于fb1的分辨率,因此fb3在内存中占用的存储空间小于fb1在内存中占用的存储空间。对应的,由于在fb3上执行的渲染操作的分辨率更低,也就是说在fb3上执行相同渲染处理时,需要处理的像素数量小于fb1,因此在fb3上执行渲染操作时相较于fb1上执行渲染操作所需功耗更低,发热更小。163.这样,在完成第n-1帧图像的渲染处理之后,执行第n帧图像的渲染处理之前,cpu就可以完成确定主场景,并为主场景配置对应的临时帧缓冲的动作。164.s703、在临时帧缓冲上执行主场景的渲染操作。165.在本技术实施例中,电子设备可以通过处理器,使用具有较小分辨率的帧缓冲进行主场景下的大量渲染处理的操作。166.示例性的,cpu可以在接收到来自应用程序的渲染命令之后,根据该渲染命令控制gpu在对应的帧缓冲上执行渲染操作。167.比如,请参考图8。以主场景为fb1,对应的临时帧缓冲为fb3,在执行第n帧图像的渲染的过程中,在fb1中包括的drawcall数量为2(如gldrawelement1,以及gldrawelement2)为例。168.cpu接收到来自应用程序的渲染命令包括如下指令为例:169.bindframebuffer(1);170.gldrawelement1;171.gldrawelement2。172.在本示例中,cpu可以将第n帧图像的渲染命令中,用于绑定主场景的标识(如fb1)替换为临时帧缓冲的标识(如fb3)。在一些实施例中,该fb1的帧缓冲对象也可以称为第一帧缓冲信息,该fb3的帧缓冲对象也可以称为第二帧缓冲信息。示例性的,cpu可以将bindframebuffer(1)替换为bindframebuffer(3)。那么,替换后的渲染命令可以为:173.bindframebuffer(3);174.gldrawelement1;175.gldrawelement2。176.也就是说,cpu可以将原先绑定主场景(如fb1)的渲染操作替换为绑定临时帧缓冲的渲染操作。进而使得cpu可以将该渲染指令(如称为第一渲染指令)下发给gpu,这样,gpu就可以在fb3上执行gldrawelement1以及gldrawelement2的渲染操作,并将结果存储在fb3上。在一些实施例中,在第n帧图像的渲染过程中,在主场景(或临时帧缓冲)上执行的渲染操作也可以称为第一渲染操作。177.可以理解的是,由于fb3的分辨率小于fb1,因此,在fb3上执行相同的drawcall(如gldrawelement1以及gldrawelement2),需要消耗的功耗功效,发热更少。178.需要说明的是,在一些实施例中,电子设备可以通过cpu对所有主场景的渲染操作执行上述方案,如采用更小分辨率的临时帧缓冲执行主场景的渲染操作。在另一些实施例中,电子设备还可以在需要进行功耗控制时,指向如图7a所示的方案。比如,作为一种可能的实现,电子设备可以在负载大于预设阈值的情况下,确定需要进行功耗控制。由此即可触发如图7a所示方案降低图像处理过程中的功耗。作为另一种可能的实现,电子设备可以结合主场景的分辨率执行上述方案。比如,电子设备可以在确定主场景的分辨率大于预设分辨率,和/或在主场景中执行的drawcall数量大于预设的渲染阈值的情况下,执行s702,即为主场景配置临时帧缓冲,进而在具有较小分辨率的临时帧缓冲中执行主场景的渲染操作。179.作为一种实现方式,结合图7a所示的方案,图9示出了本技术实施例提供的又一种图像处理方法的流程示意图。在一些实施例中,该方案可以有电子设备中的cpu执行,实现动态调整渲染操作的主场景对应的分辨率,进而降低功耗开销的效果。180.如图9所示,在如图7a所示方案的基础上,s703具体的可以通过s901-s903实现。181.s901、判断当前要执行的渲染命令是否是在主场景中的渲染命令。182.示例性的,cpu可以在根据接收到的渲染命令中,bindframebuffer()所指示的需要绑定的帧缓冲对象与s701中确定的主场景的帧缓冲对象是否相同,确定当前渲染命令是否需要在主场景中执行。183.例如,在当前执行的渲染命令为bindframebuffer(1),在s701中确定的主场景为fb1的情况下,电子设备就可以确定当前执行的渲染命令需要在主场景上执行。184.又如在当前执行的渲染命令为bindframebuffer(2),在s701中确定的主场景为fb1的情况下,电子设备就可以确定当前执行的渲染命令不需要在主场景上执行。185.在确定当前执行的渲染命令是在主场景中执行的情况下,电子设备的cpu可以继续执行以下s902。186.s902、将当前执行的渲染命令的帧缓冲信息替换为临时帧缓冲信息。187.其中,帧缓冲信息可以包括当前执行的命令需要绑定的帧缓冲对象。188.示例性的,结合前述对s703的说明,cpu可以将bindframebuffer(1)对应的fb1,替换为临时帧缓冲的帧缓冲对象(如fb3)。比如,替换之后的命令可以为:bindframebuffer(3)。189.s903、向gpu下发渲染指令,以便gpu在临时帧缓冲上执行主场景的渲染操作。190.在本示例中,gpu可以根据接收到的渲染指令执行对应的渲染操作。比如,gpu在接收到bindframebuffer(3),以及后续的drawcall时,就可以在fb3上执行这些drewcall的渲染操作,并在fb3上存储渲染结果。191.可以理解的是,由于fb3的分辨率小于fb1,因此gpu可以使用更少的算力资源完成相同数量的drawcall。而fb1中的drawcall可以是第n帧图像的渲染过程中,drawcall数量最多的。因此通过该方案(如图7a或图9)能够显著降低第n帧图像的渲染过程对算力的消耗。192.在一些实施例中,如图9所示,cpu还可以在执行s901的判断之后,根据判断结果执行s904。193.示例性的,在cpu确定当前要执行的渲染命令并非在主场景中的渲染命令的情况下,可以执行s904。其中,参考s901中的说明,cpu可以在当前要执行的渲染命令需要绑定的帧缓冲的帧缓冲对象不同于主场景的帧缓冲对象的情况下,确定当前要执行的渲染命令并非在主场景中的渲染命令。194.可以理解的是,由于当前要执行的渲染命令并非在主场景中进行,因此该渲染命令对算力的消耗并不是第n帧图像中的渲染操作过程中消耗最大的。那么cpu就可以直接控制gpu在该渲染命令所指定的帧缓冲上执行对应的drawcall。如执行s904:向gpu下发渲染指令,以便gpu在对应帧缓冲上执行渲染操作。195.如图9所示,以cpu当前执行对第n帧图像的渲染为例。在一些实施例中,cpu可以在第n-1帧图像的渲染处理完成之后,即完成s701-s702的处理。即确定的第n帧图像的主场景,并为该主场景配置了对应的临时帧缓存。比如,以下发渲染命令的应用程序为游戏应用为例。cpu可以在游戏刚开始时,执行s701-s702。比如,cpu可以被配置为从第6帧图像开始执行如图7a或图9所示的方案,那么,cpu就可以在游戏开始后,第5帧图像完成渲染处理后,根据第5帧图像的渲染情况,确定主场景,并为该主场景配置对应的临时帧缓存。从而使得cpu可以在第6帧图像的渲染处理过程中,使用该临时帧缓存执行主场景的drawcall,由此达到显著的降低渲染过程中功耗开销的效果。196.需要说明的是,上述示例中,是以应用程序下发的渲染命令中通过bindframebuffer()函数指向主场景为例,对主场景和临时帧缓冲的替换方法进行说明的。在本技术的另一些实现中,在应用程序下发的渲染命令中还包括其他函数指向主场景时,cpu还可以通过类似的方案,替换对应函数中指向的帧缓冲对象,比如由主场景替换为临时帧缓冲,从而使得对应的渲染操作能够在临时帧缓冲上执行。197.示例性的,cpu可以对当前帧缓冲的纹理中包括的附件的标识进行替换,从而使得gpu可以使用正确的附件在临时帧缓冲进行对应的渲染处理。比如,以主场景为fb1,临时帧缓冲为fb3为例。fb1的附件(如颜色附件,深度附件等)的标识可以是11。那么,在将fb1的标识替换为fb3之后,cpu可以将fb1的附件的标识也进行对应的替换。比如,将附件11替换为附件13(即fb3的附件标识),例如,将glbindtexture(gl_texture_2d,11)替换为glbindtexture(gl_texture_2d,13)。这样,在fb3上执行渲染处理时,就可以根据附件13上的信息,进行正确的渲染处理。198.通过上述方案说明,即可实现降低主场景渲染分辨率的效果。199.在本技术实施例的另一些实现中,电子设备可以在临时帧缓冲上执行主场景的渲染操作时,采用多重采样的技术,提升降低分辨率渲染获取的渲染结果的显示效果,进一步提升向用户展示的图像的质量。200.示例性的,cpu可以在向gpu下发在临时帧缓冲中执行渲染操作的渲染指令时,指示gpu使用更多的颜色,深度和/或模板信息对图元(如点,直线,多边形等元素)进行处理,从而达到虚化图像边缘的效果。这样,在该临时帧缓冲中进行渲染操作后获取的结果在显示时,其图像边缘就不会由于分辨率较低产生锯齿的观感。由此即可实现提升图像质量的目的。201.上述主要从电子设备的角度对本技术实施例提供的方案进行了介绍。为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本技术能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。202.本技术实施例可以根据上述方法示例对其中涉及的设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本技术实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。203.请参考图10,为本技术实施例提供的一种图像处理装置1000的组成示意图。该装置可以设置在电子设备中,用于实现本技术实施例提供的任一种可能的图像处理方法。204.示例性的,该装置可以应用于电子设备对第一图像的渲染处理,该电子设备运行有应用程序,该电子设备对该第一图像执行渲染处理时调用一个或多个帧缓冲,该电子设备对该第一图像执行渲染处理的渲染操作由该应用程序下发。205.如图10所示,该装置包括:确定单元1001,用于确定对该第一图像执行渲染处理过程中的第一主场景。该第一主场景是该电子设备对该第一图像的渲染处理过程中,执行渲染操作数量最多的帧缓冲。配置单元1002,用于配置临时帧缓冲,该临时帧缓冲的分辨率小于该第一主场景的分辨率。执行单元1003,用于在对该第一图像进行渲染处理时,在该临时帧缓冲上,执行第一渲染操作。该第一渲染操作是该应用程序指示的在该第一主场景上执行的渲染操作。206.在一种可能设计中,确定单元1001,具体用于基于对第二图像的渲染处理过程中,执行渲染操作数量最多的帧缓冲,确定该第一主场景。该第二图像的渲染处理在该第一图像的渲染处理之前。对该第二图像执行渲染处理时调用该第一主场景。207.在一种可能设计中,确定单元1001,还用于在对该第二图像的渲染处理过程中,确定在每个帧缓冲上执行绘制调用(drawcall)的数量,将执行drawcall的数量最多的帧缓冲确定为该第一主场景。208.在一种可能设计中,该第二图像是第一图像的上一帧图像。209.需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。210.在一种可能的实现中,如图10所示的各个单元的功能,可以通过如图4所示的硬件模块实现。比如,以如图10所示的执行单元1003为例。该执行单元1003的功能可以通过如图4所示的处理器以及渲染处理模块实现。其中,渲染处理模块可以是具有图形渲染功能的模块。在一些实施例中,该渲染处理模块可以是如图4所示的gpu。在一些实施例中,上述处理器可以是如图4所示的cpu。211.作为一种示例,对处理器配合渲染处理模块实现执行单元1003的功能进行说明。212.示例性的,在接收到来自该应用程序的对该第一图像的渲染命令的情况下,该处理器用于向该渲染处理模块下发第一渲染指令,该第一渲染指令包括该第一渲染操作,该第一渲染指令用于指示该渲染处理模块在该临时帧缓冲上执行该第一渲染操作。该渲染处理模块用于根据该第一渲染指令,在该临时帧缓冲上执行该第一渲染操作。213.在一种可能设计中,该处理器还用于在该处理器向该渲染处理模块下发第一渲染指令之前,判断当前执行的渲染命令是对该主场景的渲染命令的情况下,将当前执行的该渲染命令绑定的帧缓冲信息由第一帧缓冲信息替换为第二帧缓冲信息,以得到该第一渲染指令,该第一帧缓冲信息用于指示在该主场景上执行该第一渲染操作,该第二帧缓冲信息用于指示在该临时帧缓冲上执行该第一渲染操作。214.在一种可能设计中,该第一帧缓冲信息包括第一帧缓冲对象,该第一帧缓冲对象是该主场景对应的帧缓冲对象,该第二帧缓冲信息包括第二帧缓冲对象,该第二帧缓冲对象是该临时帧缓冲对应的帧缓冲对象。215.在一种可能设计中,该渲染命令是该应用程序下发给该处理器的,该渲染命令包括该第一渲染操作,以及该第一帧缓冲信息。216.在一种可能设计中,该第一渲染指令还包括:对该第一渲染操作获取的图像执行多重采样。217.图11示出了的一种电子设备1100的组成示意图。如图11所示,该电子设备1100可以包括:处理器1101和存储器1102。该存储器1102用于存储计算机执行指令。示例性的,在一些实施例中,当该处理器1101执行该存储器1102存储的指令时,可以使得该电子设备1100执行上述实施例中任一种所示的图像处理方法。218.需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。219.图12示出了的一种芯片系统1200的组成示意图。该芯片系统1200可以包括:处理器1201和通信接口1202,用于支持相关设备实现上述实施例中所涉及的功能。在一种可能的设计中,芯片系统还包括存储器,用于保存终端必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。需要说明的是,在本技术的一些实现方式中,该通信接口1202也可称为接口电路。220.需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。221.在上述实施例中的功能或动作或操作或步骤等,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digitalsubscriberline,dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包括一个或多个可以用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,dvd)、或者半导体介质(例如固态硬盘(solidstatedisk,ssd))等。222.尽管结合具体特征及其实施例对本技术进行了描述,显而易见的,在不脱离本技术的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本技术的示例性说明,且视为已覆盖本技术范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包括这些改动和变型在内。当前第1页12当前第1页12
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献