CN117729426A - 模式切换方法、电子设备及存储介质 - Google Patents

模式切换方法、电子设备及存储介质 Download PDF

Info

Publication number
CN117729426A
CN117729426A CN202310820628.5A CN202310820628A CN117729426A CN 117729426 A CN117729426 A CN 117729426A CN 202310820628 A CN202310820628 A CN 202310820628A CN 117729426 A CN117729426 A CN 117729426A
Authority
CN
China
Prior art keywords
thread
terminal
closed
blocking service
shooting mode
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310820628.5A
Other languages
English (en)
Inventor
沈涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Honor Device Co Ltd
Original Assignee
Honor Device Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Honor Device Co Ltd filed Critical Honor Device Co Ltd
Priority to CN202310820628.5A priority Critical patent/CN117729426A/zh
Publication of CN117729426A publication Critical patent/CN117729426A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Studio Devices (AREA)

Abstract

本申请公开了一种模式切换方法、电子设备及存储介质,涉及终端技术领域,用于提高拍摄模式的切换速度。该方法包括:显示相机应用的第一界面;响应于在第一时间点将第一拍摄模式切换为第二拍摄模式的操作,在第二时间点,显示相机应用的第二界面;其中,基于关闭线程关闭第一拍摄模式的时间段与基于多个启动线程启动第二拍摄模式的时间段存在重叠;在终端包括的所有镜头均未在执行关闭线程的情况下,启动配置流线程为第二拍摄模式配置资源;终端包括的所有镜头是否在执行关闭线程是基于线程堵塞服务实现的;线程堵塞服务在启动线程执行完成后被调用,且在线程堵塞服务被调用的过程中,不允许在其他启动线程执行完成后被调用。

Description

模式切换方法、电子设备及存储介质
技术领域
本申请涉及终端技术领域,尤其涉及一种模式切换方法、电子设备及存储介质。
背景技术
目前,终端上安装的相机应用可支持多种拍摄模式,例如拍照模式、录像模式、人像模式、夜景模式、多景录像模式(前后镜头同时拍摄)等,用户可以自由选择拍摄模式,从而感受不同的拍摄效果。
然而,在相机的模式切换过程中,很可能会因为受到系统资源供给状态的影响,而导致模式切换的速度较慢,从而影响用户的使用体验。
发明内容
本申请提供了一种模式切换方法、电子设备及存储介质,用于提高拍摄模式的切换速度。
为达到上述目的,本申请采用如下技术方案:
第一方面,提供了一种模式切换方法,该方法包括:
显示相机应用的第一界面;该第一界面是第一拍摄模式的界面,在该第一拍摄模式下采用单镜头实现图像数据的采集;
响应于在第一时间点将该第一拍摄模式切换为第二拍摄模式的操作,在第二时间点,显示该相机应用的第二界面;该第二界面是该第二拍摄模式的界面,在该第二拍摄模式下采用多镜头实现图像数据的采集;
其中,在该第一时间点和该第二时间点之间,第一时间段和第二时间段存在重叠;该第一时间段是基于关闭线程关闭该第一拍摄模式的时间段,该第二时间段是基于多个启动线程启动该第二拍摄模式的时间段,该多个启动线程与该多镜头一一对应;
在该第一时间点和该第二时间点之间还包括第三时间段,该第三时间段是在终端包括的所有镜头均未在执行关闭线程的情况下,启动配置流线程为该第二拍摄模式配置资源的时间段;该终端包括的所有镜头是否在执行关闭线程是基于线程堵塞服务实现的;该线程堵塞服务在该启动线程执行完成后被调用,且在该线程堵塞服务被调用的过程中,不允许在其他该启动线程执行完成后被调用。
在上述技术方案中,在将相机应用由第一拍摄模式切换至第二拍摄模式时,可以在基于关闭线程关闭第一拍摄模式的过程中,基于多个启动线程启动第二拍摄模式,使得第一拍摄模式的关闭流程与第二拍摄模式的启动流程可以同步进行。这样,减少了等待第一拍摄模式的关闭流程执行完成的时间,有利于提高拍摄模式的切换速度。进而,基于线程堵塞服务,检测终端包括的所有镜头是否在执行关闭线程。在终端包括的所有镜头均未在执行关闭线程的情况下,启动配置流线程为第二拍摄模式配置资源。其中,该线程堵塞服务被调用的过程中,不允许在其他该启动线程执行完成后被调用,如此,能够保证该线程堵塞服务在一次线程堵塞流程中仅被一个启动线程调用,能够避免因重复调用线程堵塞服务而出现异常的问题。
在第一方面的一种可能的实现方式中,该多个启动线程包括第一启动线程,该第一启动线程为该多个启动线程中的任一个;
该方法还包括:
在该第一启动线程执行完成后调用该线程堵塞服务时,对该线程堵塞服务加锁;
基于该线程堵塞服务,检测该终端包括的所有镜头是否在执行关闭线程;在该终端包括的所有镜头均未在执行关闭线程的情况下,对该线程堵塞服务解锁。
在该种可能的实现方式中,提供了一种基于锁机制来保障线程堵塞服务的方式。通过为线程堵塞服务加锁,能够保证该线程堵塞服务在一次线程堵塞流程中仅被一个启动线程调用,能够避免因重复调用线程堵塞服务而出现异常的问题。
在第一方面的另一种可能的实现方式中,该多个启动线程还包括第二启动线程,该第二启动线程在该第一启动线程之后调用该线程堵塞服务;
该方法还包括:
在该第二启动线程执行完成后调用该线程堵塞服务时,响应于该线程堵塞服务为加锁状态,等待该线程堵塞服务解锁;或,
在该第二启动线程执行完成后调用该线程堵塞服务时,响应于该线程堵塞服务为解锁状态,对该线程堵塞服务加锁;基于该线程堵塞服务,检测该终端包括的所有镜头是否在执行关闭线程;在该终端包括的所有镜头均未在执行关闭线程的情况下,对该线程堵塞服务解锁。
在该种可能的实现方式中,在该线程堵塞服务为加锁状态的情况下,等待其解锁后再进行后续检测流程。在该线程堵塞服务为解锁状态的情况下,则可以进行后续检测流程。如此,能够保证该线程堵塞服务在一次线程堵塞流程中仅被一个启动线程调用,能够避免因重复调用线程堵塞服务而出现异常的问题。
在第一方面的另一种可能的实现方式中,基于该线程堵塞服务,检测该终端包括的所有镜头是否在执行关闭线程之后,该方法还包括:
在该终端包括的所有镜头中任一个镜头在执行关闭线程的情况下,阻止该配置流线程执行,以等待该关闭线程完成。
在该种可能的实现方式中,在该终端包括的所有镜头中任一个镜头在执行关闭线程的情况下,阻止该配置流线程执行,确保在该终端包括的所有镜头均未执行关闭线程的情况下,再执行后续配置流线程为第二拍摄模式配置资源的过程,以便配置流线程正常配置第二拍摄模式的资源,避免配置流程出现异常。
在第一方面的另一种可能的实现方式中,基于该线程堵塞服务,检测该终端包括的所有镜头是否在执行关闭线程,包括:
基于该线程堵塞服务,轮询检测该终端包括的所有镜头是否在执行关闭线程。
在第一方面的另一种可能的实现方式中,基于该线程堵塞服务,轮询检测该终端包括的所有镜头是否在执行关闭线程,包括:
基于该线程堵塞服务,遍历该终端包括的所有镜头对应关闭线程的线程状态;
基于该终端包括的所有镜头对应关闭线程的线程状态,检测该终端包括的所有镜头是否在执行关闭线程。
在第一方面的另一种可能的实现方式中,基于该终端包括的所有镜头对应关闭线程的线程状态,检测该终端包括的所有镜头是否在执行关闭线程,包括:
对于该终端包括的所有镜头中任一个镜头对应的关闭线程,若该关闭线程的线程状态为终止状态,确定该镜头未执行该关闭线程;或,
对于该终端包括的所有镜头中任一个镜头对应的关闭线程,若该关闭线程的线程状态不是终止状态,确定该镜头执行该关闭线程。
在该种可能的实现方式中,提供了一种基于轮询检测来判断关闭线程是否完成的方式。通过遍历终端包括的所有镜头,确保终端包括的所有镜头均未执行关闭线程,从而保障后续配置流线程正常配置第二拍摄模式的资源。
在第一方面的另一种可能的实现方式中,响应于在第一时间点将该第一拍摄模式切换为第二拍摄模式的操作之后,该方法还包括:
在满足预设条件的情况下,创建该关闭线程;
该第一拍摄模式已配置相机服务资源;
该相机应用的应用标识属于预设应用标识;该预设应用标识为支持创建该关闭线程的应用标识;
创建该关闭线程的功能开关处于开启状态;
上一次模式切换过程中的关闭线程处于闲置状态;
该相机应用的目标模块初始化完成;该目标模块的初始化与该配置流线程相关。
在该种可能的实现方式中,通过设置预设条件,判断当前是否满足创建关闭线程的条件。进而,确保在满足创建关闭线程的条件的情况下,再执行创建关闭线程的过程,从而确保创建关闭线程的顺利进行。其中,提供了多种类型的预设条件,以确保在满足创建关闭线程的条件时,再执行创建关闭线程的过程,从而确保创建关闭线程的顺利进行。
在第一方面的另一种可能的实现方式中,该方法还包括下述至少一项:
将该关闭线程的线程属性设置为目标属性;
将该关闭线程的优先级设置为最高优先级。
在该种可能的实现方式中,通过设置关闭线程的线程属性和优先级中的至少一项,能够确保关闭线程获取足够的CPU性能,从而确保关闭线程正常工作。
在第一方面的另一种可能的实现方式中,该方法还包括:
响应于该关闭线程创建完成,触发关闭线程完成的通知消息;
基于该通知消息,调用该启动线程启动该第二拍摄模式。
在该种可能的实现方式中,在关闭线程创建完成时,无须等待第一拍摄模式的关闭流程结束,即可调用该启动线程启动该第二拍摄模式,使得第一拍摄模式的关闭流程与第二拍摄模式的启动流程可以同步进行。这样,减少了等待第一拍摄模式的关闭流程执行完成的时间,有利于提高拍摄模式的切换速度。
第二方面,本申请提供了一种电子设备,包括:处理器和存储器。存储器用于存储程序代码,处理器用于调用存储器存储的程序代码,从而实现第一方面提供的任意一种方法。
第三方面,提供了一种计算机可读存储介质,包括程序代码,程序代码在电子设备上运行时,使得电子设备执行第一方面提供的任意一种方法。
第四方面,提供了一种计算机程序产品,包括程序代码,当程序代码在电子设备上运行时,使得电子设备执行第一方面提供的任意一种方法。
需要说明的是,第二方面至第四方面中的任一种实现方式所带来的技术效果可参见第一方面中对应实现方式所带来的技术效果,此处不再赘述。
附图说明
图1为本申请实施例提供的一种模式切换方法的实施环境示意图;
图2为本申请实施例提供的一种电子设备的硬件结构示意图;
图3为本申请实施例提供的一种电子设备的软件结构示意图;
图4为本申请实施例提供的一种模式切换方法的流程示意图;
图5为本申请实施例提供的一种模式切换方法的流程示意图;
图6为本申请实施例提供的一种模式切换方法的程序代码示意图;
图7为本申请实施例提供的一种模式切换方法的架构流程示意图;
图8为本申请实施例提供的一种模式切换方法的程序调度示意图;
图9为本申请实施例提供的一种模式切换方法的层级交互示意图;
图10为本申请实施例提供的一种模式切换方法的流程示意图;
图11为本申请实施例提供的又一种模式切换方法的流程示意图;
图12为本申请实施例提供的一种模式切换装置的框架示意图。
具体实施方式
在本申请的描述中,除非另有说明,“/”表示“或”的意思,例如,A/B可以表示A或B。本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。此外,“至少一个”是指一个或多个,“多个”是指两个或两个以上。“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
需要说明的是,本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
本申请实施例提供的模式切换方法,可应用于终端技术领域中,具体可应用于相机应用的模式切换场景中。其中,模式切换是指将相机应用从一个拍摄模式切换至另一个拍摄模式。
目前,终端上安装的相机应用可支持多种拍摄模式,例如拍照模式、录像模式、人像模式、夜景模式、多景录像模式(前后镜头同时拍摄)等,用户可以自由选择拍摄模式,从而感受不同的拍摄效果。
然而,在相机的模式切换过程中,很可能会因为受到系统资源供给状态的影响,而导致模式切换的速度较慢,从而影响用户的使用体验。
应理解地,不同类型设备的中央处理器(central processing unit,CPU)资源和内存配置不同,在相机的模式切换过程中,并不是每时每刻都能获取到足够的CPU性能调度和内存资源供给,因而会极大地影响用户的使用体验。
鉴于此,本申请实施例提供了一种模式切换方法,在将相机应用由第一拍摄模式切换至第二拍摄模式时,可以在基于关闭线程关闭第一拍摄模式的过程中,基于多个启动线程启动第二拍摄模式,使得第一拍摄模式的关闭流程与第二拍摄模式的启动流程可以同步进行。这样,减少了等待第一拍摄模式的关闭流程执行完成的时间,有利于提高拍摄模式的切换速度。进而,基于线程堵塞服务,检测终端包括的所有镜头是否在执行关闭线程。在终端包括的所有镜头均未在执行关闭线程的情况下,启动配置流线程为第二拍摄模式配置资源。其中,该线程堵塞服务被调用的过程中,不允许在其他该启动线程执行完成后被调用,如此,能够保证该线程堵塞服务在一次线程堵塞流程中仅被一个启动线程调用,能够避免因重复调用线程堵塞服务而出现异常的问题。
在一种可能的实现方式中,本申请实施例提供的模式切换方法,可应用于如图1所示的电子设备100。示例性的,图1为本申请实施例提供的一种模式切换方法的实施环境示意图。
其中,电子设备100可以是终端设备,本申请实施例后续简称为终端。示例性的,电子设备100可以是智能手机、智能手表、智能电视、台式电脑、手提电脑、平板电脑、穿戴式设备、虚拟现实终端、增强现实终端、无线终端(如工业控制中的无线终端、无人驾驶中的无线终端、远程手术中的无线终端、智能电网中的无线终端、运输安全中的无线终端、智慧城市中的无线终端、智慧家庭中的无线终端等)及膝上型便携计算机等设备中的至少一种。
在一种可能的实现方式中,电子设备100中可以安装有不同类型的应用(application,APP),如相机、图库、日历、通话、地图、导航、音乐、视频、短信息等应用。
本申请实施例中,电子设备100提供有模式切换的功能。相应地,参见图1中A所示的界面,用户通过在电子设备100上对相机应用的图标实施点击操作,能够触发电子设备100显示相机应用的拍摄界面,如图1中B所示的界面。此时,该拍摄界面包括预览区域1001和拍摄模式选择区域1002。
其中,预览区域1001用于显示待拍摄物的预拍摄画面(或称作预览画面)。拍摄模式选择区域1002用于提供相机应用的多个拍摄模式的选项。参见图1,图1以当前选中的拍摄模式为拍照模式为例。例如,用户可以在拍摄模式选择区域1002点击某个拍摄模式以切换拍摄模式,或者,用户可以在拍摄模式选择区域1002左右滑动以切换拍摄模式。
进而,响应于用户在拍摄模式选择区域1002中的模式切换操作(如上述点击拍摄模式的操作或左右滑动的操作),能够触发电子设备100显示模式切换后的界面。如此,也就完成了相机应用的模式切换。
本申请实施例中,电子设备100用于显示相机应用的第一界面,响应于在第一时间点将第一拍摄模式切换为第二拍摄模式的操作,在第二时间点,显示相机应用的第二界面。其中,基于关闭线程关闭第一拍摄模式的时间段与基于多个启动线程启动第二拍摄模式的时间段存在重叠。且,在终端包括的所有镜头均未在执行关闭线程的情况下,启动配置流线程为第二拍摄模式配置资源。其中,终端包括的所有镜头是否在执行关闭线程是基于线程堵塞服务实现的。线程堵塞服务在启动线程执行完成后被调用,且在线程堵塞服务被调用的过程中,不允许在其他启动线程执行完成后被调用。
示例性的,图1中的电子设备100的结构示意图如图2所示。图2为本申请实施例提供的一种电子设备的硬件结构示意图。
参见图2,电子设备100可以包括处理器210、外部存储器接口220、内部存储器221、通用串行总线(universal serial bus,USB)接口230、充电管理模块240、天线1、天线2、移动通信模块250、无线通信模块260、音频模块270、传感器模块280、按键290、摄像头291、显示屏292等。其中传感器模块280可以包括压力传感器280A、陀螺仪传感器280B、气压传感器280C、磁传感器280D、加速度传感器280E、距离传感器280F、接近光传感器280G、指纹传感器280H、温度传感器280J、触摸传感器280K、环境光传感器280L、骨传导传感器280M等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器210可以包括一个或多个处理单元,例如:处理器210可以包括应用处理器(application processor,AP),调制解调处理器、图形处理器(graphics processingunit,GPU)、图像信号处理器(image signal processor,ISP)、控制器、存储器、视频编解码器、数字信号处理器(digital signal processor,DSP)、基带处理器、和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
其中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器210中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器210中的存储器为高速缓冲存储器。该存储器可以保存处理器210刚用过或循环使用的指令或数据。如果处理器210需要再次使用该指令或数据,可从该存储器中直接调用。避免了重复存取,减少了处理器210的等待时间,因而提高了系统的效率。
在一些实施例中,处理器210可以包括一个或多个接口。接口可以包括集成电路(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)。在一些实施例中,处理器210可以包含多组I2C总线。处理器210可以通过不同的I2C总线接口分别耦合触摸传感器280K、充电器、闪光灯、摄像头291等。
I2S接口可以用于音频通信。在一些实施例中,处理器210可以包含多组I2S总线。
PCM接口也可以用于音频通信,将模拟信号抽样,量化和编码。
UART接口是一种通用串行数据总线,用于异步通信。
MIPI接口可以被用于连接处理器210与摄像头291、显示屏292等外围器件。MIPI接口包括摄像头串行接口(camera serial interface,CSI)、显示屏串行接口(displayserial interface,DSI)等。在一些实施例中,处理器210和摄像头291通过CSI接口通信,实现电子设备100的拍摄功能。处理器210和显示屏292通过DSI接口通信,实现电子设备100的显示功能。
GPIO接口可以通过软件配置。GPIO接口可以被配置为控制信号,也可被配置为数据信号。在一些实施例中,GPIO接口可以用于连接处理器210与摄像头291、显示屏292、无线通信模块260、音频模块270、传感器模块280等。
USB接口230是符合USB标准规范的接口,具体可以是Mini USB接口,Micro USB接口,USB Type C接口等。
可以理解的是,本申请实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在本申请另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
充电管理模块240用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。
电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块250,无线通信模块260,调制解调处理器以及基带处理器等实现。
天线1和天线2用于发射和接收电磁波信号。电子设备100中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
移动通信模块250可以提供应用在电子设备100上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块250可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块250可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块250还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实施例中,移动通信模块250的至少部分功能模块可以被设置于处理器210中。在一些实施例中,移动通信模块250的至少部分功能模块可以与处理器210的至少部分模块被设置在同一个器件中。
调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备输出声音信号,或通过显示屏292显示图像或视频。在一些实施例中,调制解调处理器可以是独立的器件。在另一些实施例中,调制解调处理器可以独立于处理器210,与移动通信模块250或其他功能模块设置在同一个器件中。
无线通信模块260可以提供应用在电子设备100上的包括无线局域网(wirelesslocal area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络)、蓝牙(bluetoo2,BT)、全球导航卫星系统(global navigation satellite system,GNSS)、调频(frequency modulation,FM)、近距离无线通信技术(near field communication,NFC)、红外技术(infrared,IR)等无线通信的解决方案。无线通信模块260可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块260经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器210。无线通信模块260还可以从处理器210接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
在一些实施例中,电子设备100的天线1和移动通信模块250耦合,天线2和无线通信模块260耦合,使得电子设备100可以通过无线通信技术与网络以及其他设备通信。
电子设备100通过GPU、显示屏292以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏292和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器210可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏292用于显示图像,视频等。显示屏292包括显示面板。显示面板可以采用液晶显示屏(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个显示屏292,N为大于1的正整数。
电子设备100可以通过ISP、摄像头291、视频编解码器、GPU、显示屏292以及应用处理器等实现拍摄功能。
ISP用于处理摄像头291反馈的数据。例如,拍照时,打开快门,光线通过镜头被传递到摄像头感光元件上,光信号转换为电信号,摄像头感光元件将该电信号传递给ISP处理,转化为肉眼可见的图像。ISP还可以对图像的噪点,亮度,肤色进行算法优化。ISP还可以对拍摄场景的曝光,色温等参数优化。在一些实施例中,ISP可以设置在摄像头291中。
摄像头291用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。感光元件可以是电荷耦合器件(charge coupled device,CCD)或互补金属氧化物半导体(complementary metal-oxide-semiconductor,CMOS)光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给ISP转换成数字图像信号。ISP将数字图像信号输出到DSP加工处理。DSP将数字图像信号转换成标准的RGB,YUV等格式的图像信号。在一些实施例中,电子设备100可以包括1个或N个摄像头291,N为大于1的正整数。本申请实施例中,摄像头291可作为终端上安装的镜头。
数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当电子设备100在频点选择时,数字信号处理器用于对频点能量进行傅里叶变换等。
视频编解码器用于对数字视频压缩或解压缩。电子设备100可以支持一种或多种视频编解码器。
NPU为神经网络(neural-network,NN)计算处理器,通过借鉴生物神经网络结构,例如借鉴人脑神经元之间传递模式,对输入信息快速处理,还可以不断的自学习。
外部存储器接口220可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口220与处理器210通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器221可以用于存储计算机可执行程序代码,该可执行程序代码包括指令。处理器210通过运行存储在内部存储器221的指令,从而执行电子设备100的各种功能应用以及数据处理。内部存储器221可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器221可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。
音频模块270用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块270还可以用于对音频信号编码和解码。在一些实施例中,音频模块270可以设置于处理器210中,或将音频模块270的部分功能模块设置于处理器210中。
按键290包括开机键,音量键等。按键290可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信号输入。
需要指出的是,图2中示出的结构并不构成对该电子设备的限定,除图2所示部件之外,该电子设备还可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
电子设备的软件系统可以采用分层架构、事件驱动架构、微核架构、微服务架构或云架构。本申请实施例以分层架构的Android系统为例,示例性说明电子设备的软件结构。示例性的,图3为本申请实施例提供的一种电子设备的软件结构示意图。
分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,Android系统可以包括应用程序层(application,APP)、应用程序框架层(application framework)、硬件抽象层(hardware abstraction layer,HAL)、内核层(kernel)以及系统库。在一些实施例中,Android系统还包括安卓运行时(Android runtime)。
其中,应用程序层可以包括一系列应用程序包。
如图3所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,WLAN,蓝牙,音乐,视频,短信息等应用程序。
在一些实施例中,应用程序层通过调用应用程序框架层所提供的应用程序接口(application programming interface,API)来运行应用程序。
应用程序框架层为应用程序层的应用程序提供应用程序接口和编程框架。在一些实施例中,应用程序框架层包括一些预先定义的函数(可称作编程服务)。例如,在一些实施例中,应用程序框架层通过应用程序接口,可以将编程服务提供给应用程序层调用。
如图3所示,应用程序框架层可以包括相机服务模块、内容提供器、视图系统、电话管理器、资源管理器、通知管理器、窗口管理器等。
相机服务模块可以提供相机服务(camera service)。本申请实施例中,相机服务模块用于控制相机应用的相关流程,如模式切换流程。例如,在模式切换流程中,相机服务模块可用于触发执行第一拍摄模式的关闭流程、触发执行第二拍摄模式的启动流程、触发执行第二拍摄模式的配置流程以及触发请求图像数据等。
内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。该数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。
视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
电话管理器用于提供电子设备100的通信功能。例如通话状态的管理(包括接通,挂断等)。
资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。
通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。
窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。
硬件抽象层是位于内核层与硬件之间的接口层,可以用于将硬件抽象化。示例性的,如图3所示,硬件抽象层可以包括相机接口,如关闭接口、启动接口、配置流接口等等。本申请实施例中,硬件抽象层用于执行相机应用的模式切换流程。例如,在模式切换流程中,硬件抽象层可用于执行判断是否满足创建关闭线程的条件、创建关闭线程以及检测关闭线程是否完成等流程。
内核层是硬件和软件之间的层。上述内核层为手机的各种硬件提供了底层驱动。示例性的,如图3所示,内核层包括相机驱动模块、线程管理器、显示驱动,摄像头驱动、音频驱动、传感器驱动。
其中,线程管理器负责创建线程以及终止线程。应理解地,对于线程的底层支持是在内核层中提供的。在一些实施例中,线程管理器负责为CPU分配需要执行的线程,进而,触发CPU执行线程管理器分配的线程。
系统库可以包括多个功能模块。例如:表面管理器(surface manager)、媒体库(Media Libraries)、三维图形处理库(例如:OpenGL ES)、二维(2D)图形引擎(例如:SGL)等。
在一些实施例中,安卓运行时包括核心库和虚拟机。
下面结合拍摄场景,示例性说明电子设备100软件以及硬件的工作流程。
当触摸传感器180K接收到触摸操作,相应的硬件中断被发给内核层。内核层将触摸操作加工成原始输入事件(包括触摸坐标,触摸操作的时间戳等信息)。原始输入事件被存储在内核层。应用程序框架层从内核层获取原始输入事件,识别该输入事件所对应的控件。以该触摸操作是触摸单击操作,该单击操作所对应的控件为相机应用的图标为例,相机应用调用应用框架层的接口,启动相机应用,进而通过调用内核层启动摄像头驱动,通过摄像头291拍摄静态图像或视频。
图4为本申请实施例提供的一种模式切换方法的流程示意图。参见图4,该方法包括以下S401-S402:
S401、终端显示相机应用的第一界面。
其中,第一界面是第一拍摄模式的界面,在该第一拍摄模式下采用单镜头实现图像数据的采集。
S402、终端响应于在第一时间点将该第一拍摄模式切换为第二拍摄模式的操作,在第二时间点,显示该相机应用的第二界面。
其中,第二界面是该第二拍摄模式的界面,在该第二拍摄模式下采用多镜头实现图像数据的采集。
本申请实施例中,在该第一时间点和该第二时间点之间,第一时间段和第二时间段存在重叠;该第一时间段是基于关闭线程关闭该第一拍摄模式的时间段,该第二时间段是基于多个启动线程启动该第二拍摄模式的时间段,该多个启动线程与该多镜头一一对应。
在该第一时间点和该第二时间点之间还包括第三时间段,该第三时间段是在终端包括的所有镜头均未在执行关闭线程的情况下,启动配置流线程为该第二拍摄模式配置资源的时间段;该终端包括的所有镜头是否在执行关闭线程是基于线程堵塞服务实现的;该线程堵塞服务在该启动线程执行完成后被调用,且在该线程堵塞服务被调用的过程中,不允许在其他该启动线程执行完成后被调用。
本申请实施例提供的技术方案,在将相机应用由第一拍摄模式切换至第二拍摄模式时,可以在基于关闭线程关闭第一拍摄模式的过程中,基于多个启动线程启动第二拍摄模式,使得第一拍摄模式的关闭流程与第二拍摄模式的启动流程可以同步进行。这样,减少了等待第一拍摄模式的关闭流程执行完成的时间,有利于提高拍摄模式的切换速度。进而,基于线程堵塞服务,检测终端包括的所有镜头是否在执行关闭线程。在终端包括的所有镜头均未在执行关闭线程的情况下,启动配置流线程为第二拍摄模式配置资源。其中,该线程堵塞服务被调用的过程中,不允许在其他该启动线程执行完成后被调用,如此,能够保证该线程堵塞服务在一次线程堵塞流程中仅被一个启动线程调用,能够避免因重复调用线程堵塞服务而出现异常的问题。
图5为本申请实施例提供的一种模式切换方法的流程示意图。参见图5,该方法包括以下S501-S506:
S501、终端显示相机应用的第一界面。
其中,第一界面是第一拍摄模式的界面,在该第一拍摄模式下采用单镜头实现图像数据的采集。示例性的,第一拍摄模式可以是单摄模式,如拍照模式。本申请实施例中,第一拍摄模式可表示上一个拍摄模式,也即切换前的拍摄模式。
通常地,相机应用可支持多种拍摄模式,例如拍照模式、录像模式、人像模式、大光圈、夜景模式、多景录像模式等,用户可以自由选择拍摄模式,从而感受不同的拍摄效果。
S502、终端响应于将第一拍摄模式切换为第二拍摄模式的操作,在满足预设条件的情况下,创建关闭线程。
其中,在该第二拍摄模式下采用多镜头实现图像数据的采集。示例性的,第一拍摄模式可以是双摄模式(即采用主镜头和辅镜头拍摄),如人像模式。本申请实施例中,第二拍摄模式表示下一个拍摄模式,也即切换后的拍摄模式。
在一些实施例中,将第一拍摄模式切换为第二拍摄模式的操作,可以是点击操作、左右滑动操作或其他类型的操作。本申请实施例对此不作限定。
预设条件用于判定当前是否满足创建关闭线程的条件。应理解地,若当前满足预设条件,则表明当前满足创建关闭线程的条件。若当前不满足预设条件,则表明当前不满足创建关闭线程的条件。本申请实施例中,关闭线程可以是close线程(或称作异步close线程),用于关闭第一拍摄模式。
在一些实施例中,上述预设条件可以包括下述(1)至(5)中的至少一项:
(1)第一拍摄模式已配置相机服务资源。
其中,相机服务资源可以包括为拍摄模式建立的通道以及为拍摄模式申请的资源,例如子系统服务、内存资源和输入输出(input/output,I/O)资源等。
需要说明的是,后续关闭线程关闭第一拍摄模式的过程,也即是释放第一拍摄模式的相机服务资源的过程。应理解地,如若第一拍摄模式已配置相机服务资源,则需要创建关闭线程以执行后续释放资源的过程。如若第一拍摄模式未配置相机服务资源,则无需创建关闭线程来执行后续释放资源的过程。
(2)相机应用的应用标识属于预设应用标识。
其中,应用标识可以采用应用包名、应用编号或应用ID(identity document,身份标识号码)来表示。预设应用标识为预先设置的支持创建该关闭线程的应用标识。在一些实施例中,预设应用标识的数量可以为一个或多个。
应理解地,若相机应用的应用标识属于预设应用标识,则表明相机应用支持创建该关闭线程。若相机应用的应用标识不属于预设应用标识,则表明相机应用不支持创建该关闭线程。
(3)创建该关闭线程的功能开关处于开启状态。
应理解地,若关闭线程的功能开关处于开启状态,则表明后续允许创建关闭线程并基于关闭线程执行后续流程。若关闭线程的功能开关处于关闭状态,则表明后续不允许创建关闭线程并基于关闭线程执行后续流程。
针对上述(2)与(3)所示的条件,可利用第一预设函数,来分别判断应用标识是否属于预设应用标识、关闭线程的功能开关是否打开,以判断当前是否满足创建关闭线程的条件。
举例来说,第一预设函数可以是IsSupportAsyncCloseProcessApp函数。
在一些实施例中,利用该IsSupportAsyncCloseProcessApp函数,通过检查product.xml(产品化)文件中的配置参数,来分别判断应用标识是否属于预设应用标识、关闭线程的功能开关是否打开,以判断当前是否满足创建关闭线程的条件。
其中,配置参数可以包括功能开关的状态参数以及支持创建关闭线程的应用包名(即预设应用标识)等。需要说明的是,在实施本方案之前,可以在product.xml(产品化)文件中配置功能开关的状态参数、支持创建关闭线程的应用包名等信息。
例如,在product.xml文件中,可采用isAvailable参数作为功能开关(或称作总开关)的状态参数,来指代关闭线程的功能开关的状态。当isAvailable参数配置为0时,表示关闭线程的功能开关未打开,当isAvailable参数配置为1时,表示关闭线程的功能开关已打开。
又如,在product.xml文件中,可采用supportAppNameList参数作为预设应用标识,来指代预先设置的可支持创建关闭线程的应用包名。当supportAppNameList参数所指示的应用包名与当前相机应用的应用包名一致时,表示应用标识属于预设应用标识,当supportAppNameList参数所指示的应用包名与当前相机应用的应用包名不一致时,表示应用标识不属于预设应用标识。
在上述实施例中,通过设置第一预设函数,能够快速判断应用标识是否属于预设应用标识、关闭线程的功能开关是否打开,从而快速判断当前是否满足创建关闭线程的条件,提高了针对预设条件的判断效率,从而提高了模式切换的效率。
(4)上一次模式切换过程中的该关闭线程处于闲置状态。
应理解地,若上一次模式切换过程中的该关闭线程处于闲置状态,表示上一次模式切换过程中的该关闭线程已完成,此时可允许进行本次模式切换。若上一次模式切换过程中的该关闭线程不处于闲置状态,表示上一次模式切换过程中的该关闭线程未完成(仍在进行),此时不允许进行本次模式切换。其中,关闭线程已完成表示基于关闭线程关闭第一拍摄模式的流程已完成。关闭线程未完成表示基于关闭线程关闭第一拍摄模式的流程未完成。
在一些实施例中,可基于上一次模式切换过程中的该关闭线程的状态变量,来判断上一次模式切换过程中的关闭线程是否处于闲置状态,以判断当前是否满足创建关闭线程的条件。
举例来说,关闭线程的状态变量可以是g_hAsyncCloseProcessthreadHandle变量。
在一些实施例中,可以通过判断上一次模式切换过程中的该关闭线程的状态变量是否为空,来判断关闭线程是否处于闲置状态。若上一次模式切换过程中的关闭线程的状态变量为空,表示上一次模式切换过程中的关闭线程处于闲置状态。若上一次模式切换过程中的关闭线程的状态变量不为空,表示上一次模式切换过程中的关闭线程不处于闲置状态。
需要说明的是,如果上一次模式切换过程中的关闭线程未完成就开始本次模式切换过程,使得两个关闭线程可能存在同时操作一个数据结构或全局变量的情况,很可能导致数据出现混乱,从而产生线程安全问题。因此,通过判断上一次模式切换过程中的关闭线程是否处于闲置状态,能够有效避免出现数据混乱的问题,从而提高本次模式切换过程的关闭线程的安全性。
(5)相机应用的目标模块初始化完成。
其中,目标模块可以是CHI模块。
本申请实施例中,目标模块的初始化与配置流线程相关。举例来说,若目标模块初始化完成,则表明终端的配置流线程可正常运行。若目标模块未初始化完成,则表明终端的配置流线程无法正常运行。
在一些实施例中,可利用第二预设函数,通过检测目标模块的初始化状态,来判断该目标模块是否初始化完成。
举例来说,第二预设函数可以是IsCHIModuleInitialized函数。
示例性的,在该IsCHIModuleInitialized函数中,可以设置一个标记位以指示CHI模块的初始化状态。例如,以该标记位为真(true),表示CHI模块初始化完成,以该标记位为假(false),表示CHI模块初始化未完成。
在上述实施例中,通过设置预设条件,判断当前是否满足创建关闭线程的条件。进而,确保在满足创建关闭线程的条件的情况下,再执行创建关闭线程的过程,从而确保创建关闭线程的顺利进行。其中,提供了多种类型的预设条件,以确保在满足创建关闭线程的条件时,再执行创建关闭线程的过程,从而确保创建关闭线程的顺利进行。
基于上述(1)至(5)所示条件中的一项、两项或多项条件,在判定当前满足创建关闭线程的条件时,创建关闭线程。
在一些实施例中,硬件抽象层可维护有camxhal3.cpp文件,该camxhal3.cpp文件提供有关闭接口(即close接口)。进而,可利用camxhal3.cpp文件中的关闭接口,调用第三预设函数,来创建关闭线程。
举例来说,第三预设函数可以是ThreadCreate函数。例如,可利用ThreadCreate函数创建一个异步线程,以承载后续第一拍摄模式的关闭流程,也即关闭第一拍摄模式的流程。
在一些实施例中,终端创建关闭线程的过程,可以由硬件抽象层与内核层配合完成。相应过程可以是:硬件抽象层在内核层的线程管理器提供的接口内,写入创建关闭线程所需的参数,进而,内核层的线程管理器根据接口内写入的创建关闭线程所需的参数,创建关闭线程。其中,内核层的线程管理器提供的接口也即是硬件抽象层与内核层之间进行信息传输所用的接口。
在一些实施例中,在创建关闭线程时,还可以为关闭线程执行如下设置中的至少一项:将该关闭线程的线程属性(policy)设置为目标属性;将该关闭线程的优先级(priority)设置为最高优先级。
其中,目标属性可以是常规(Normal)属性(或称作默认属性)。应理解地,常规属性的线程通常能够覆盖大部分的线程功能。如此,通过设置关闭线程的线程属性和优先级中的至少一项,能够确保关闭线程获取足够的CPU性能,从而确保关闭线程正常工作。
需要说明的是,上述判断当前是否满足创建关闭线程的条件、创建异步线程以及设置线程属性和优先级的过程,可以采用CreateAsyncCloseProcess函数来综合执行。也即是,CreateAsyncCloseProcess函数可提供上述第一预设函数、第二预设函数、第三预设函数、关闭线程的状态变量以及设置线程属性和优先级的功能。
在一些实施例中,响应于对相机应用的模式切换操作,在创建关闭线程之前,相机应用还会先清理(flush)相机的用例(usecase)资源。
S503、终端基于关闭线程关闭第一拍摄模式,以及,基于多个启动线程启动第二拍摄模式。
其中,该多个启动线程与第二拍摄模式对应的多镜头一一对应。
本申请实施例中,基于关闭线程关闭第一拍摄模式的时间段与基于多个启动线程启动第二拍摄模式的时间段存在重叠。也即是,基于关闭线程关闭第一拍摄模式的流程,与基于多个启动线程启动第二拍摄模式的流程,在时间上存在重叠。例如,基于多个启动线程启动第二拍摄模式的流程,可以在基于关闭线程关闭第一拍摄模式的流程中执行。
在基于上述S502中的内核层创建得到关闭线程之后,内核层的线程管理器可启动该关闭线程,来关闭第一拍摄模式,也即是释放第一拍摄模式的相机服务资源。可选地,内核层的线程管理器启动关闭线程的过程可以是:内核层的线程管理器将关闭线程分配给CPU,由CPU启动关闭线程释放第一拍摄模式的相机服务资源。
在一些实施例中,可利用第四预设函数,来执行上述关闭第一拍摄模式的过程。
举例来说,第四预设函数可以是AsyncCloseProcess函数。例如,第四预设函数包括pHALDevice->Close()函数,该pHALDevice->Close()函数用于执行释放第一拍摄模式的相机服务资源的过程。
进一步地,在一些实施例中,在释放第一拍摄模式的相机服务资源之后,还释放该相机服务资源所占用的内存。例如,释放camera3_device_t和HALDevice类占用的内存。
在上述关闭线程的运行过程中,pOfflineLoggerASCII和pOfflineLoggerBinary离线log机制的NotifyCameraClose通知,均需要在关闭线程的运行过程中完成,以避免与后续开启线程的运行过程中的NotifyCameraOpen发生冲突,从而出错。
在一些实施例中,响应于该关闭线程创建完成,触发该关闭线程完成的通知消息。基于该通知消息,调用该启动线程启动该第二拍摄模式。
其中,启动线程可以是open线程,用于启动第二拍摄模式。在该实施例中,在关闭线程创建完成时,即可触发该关闭线程完成的通知消息。以便及时调用该启动线程启动该第二拍摄模式,使得第一拍摄模式的关闭流程与第二拍摄模式的启动流程可以同步进行。这样,减少了等待第一拍摄模式的关闭流程执行完成的时间,有利于提高拍摄模式的切换速度。
在一些实施例中,内核层的线程管理器可启动该启动线程,来启动第二拍摄模式,也即是获取第二拍摄模式的相机参数和基础资源。可选地,内核层的线程管理器启动该启动线程的过程可以是:内核层的线程管理器将该启动线程分配给CPU,由CPU开始执行第二拍摄模式的启动流程。其中,相机参数可以是模式标识(如ID)、状态机等,基础资源可以是硬件抽象层的操作符等。
在一些实施例中,在基于上述S502中的内核层创建得到关闭线程时,内核层向硬件抽象层发送关闭线程的创建结果,该创建结果指示关闭线程已创建完成。进而,硬件抽象层接收来自内核层的创建结果,无须等待第一拍摄模式的关闭流程结束,在较快时间(1-2ms)内,即可响应于该关闭线程创建完成,触发该关闭线程完成的通知消息。进而,通过应用程序框架层向相机应用返回关闭线程完成的通知消息,以便相机应用无需等待关闭流程结束,就可以开始执行第二拍摄模式的启动流程。例如,参见图5所示的S503,第一拍摄模式的关闭流程与第二拍摄模式的启动流程可以同步进行。应理解的是,硬件抽象层在返回关闭完成的通知时,实际上用于关闭第一拍摄模式的关闭线程还在进行。
S504、终端在该多个启动线程中任一个启动线程执行完成后,基于线程堵塞服务,检测终端包括的所有镜头是否在执行关闭线程。
其中,线程堵塞服务在该启动线程执行完成后被调用,且在该线程堵塞服务被调用的过程中,不允许在其他该启动线程执行完成后被调用。
在一些实施例中,该多个启动线程包括第一启动线程,该第一启动线程为该多个启动线程中的任一个。相应地,在该第一启动线程执行完成后调用该线程堵塞服务时,对该线程堵塞服务加锁。基于该线程堵塞服务,检测该终端包括的所有镜头是否在执行关闭线程。在该终端包括的所有镜头均未在执行关闭线程的情况下,对该线程堵塞服务解锁。
进一步地,在一些实施例中,该多个启动线程还包括第二启动线程,该第二启动线程在该第一启动线程之后调用该线程堵塞服务。相应地,在该第二启动线程执行完成后调用该线程堵塞服务时,响应于该线程堵塞服务为加锁状态,等待该线程堵塞服务解锁。或,在该第二启动线程执行完成后调用该线程堵塞服务时,响应于该线程堵塞服务为解锁状态,对该线程堵塞服务加锁。基于该线程堵塞服务,检测该终端包括的所有镜头是否在执行关闭线程。在该终端包括的所有镜头均未在执行关闭线程的情况下,对该线程堵塞服务解锁。
如此,在该线程堵塞服务为加锁状态的情况下,等待其解锁后再进行后续检测流程。在该线程堵塞服务为解锁状态的情况下,则可以进行后续检测流程。如此,能够保证该线程堵塞服务在一次线程堵塞流程中仅被一个启动线程调用,能够避免因重复调用线程堵塞服务而出现异常的问题。
可理解地,线程堵塞服务在一次线程堵塞流程中,仅为一个启动线程对应的镜头(镜头标识,如镜头ID)提供服务。例如,以第二拍摄模式为人像模式(包含前置摄像头的主镜头和后置摄像头的辅镜头,也即包含两个镜头)为例,线程堵塞服务可以在一次线程堵塞流程中为该第二拍摄模式中的一个镜头提供服务,在下一次线程堵塞流程中为该第二拍摄模式中的另一个镜头提供服务。
在一个示例中,以第二拍摄模式为人像模式为例,在该第二拍摄模式中的一个镜头完成启动后,可以将该镜头的镜头标识(如镜头ID)输入线程堵塞服务,并对该线程堵塞服务加锁,以保证本次线程堵塞流程中仅为这一个镜头提供服务。进而,检测该终端包括的所有镜头是否在执行关闭线程,在该终端包括的所有镜头均未在执行关闭线程的情况下,对该线程堵塞服务解锁。如此,也就完成了第一次线程堵塞流程,此时,线程堵塞服务为未加锁的状态。进而,如若该第二拍摄模式中的另一个镜头也完成启动,则可以将该另一个镜头输入线程堵塞服务,并对线程堵塞服务再次加锁。检测该终端包括的所有镜头是否在执行关闭线程,在该终端包括的所有镜头均未在执行关闭线程的情况下,对该线程堵塞服务再次解锁。需要说明的是,如若上述另一个镜头完成启动,而线程堵塞服务处于已加锁的状态,则该镜头需要等待线程堵塞服务解锁之后,再执行后续检测流程。
在上述实施例中,提供了一种基于锁机制来保障线程堵塞服务的方式。通过为线程堵塞服务加锁,能够保证该线程堵塞服务在一次线程堵塞流程中仅被一个启动线程调用,能够避免因重复调用线程堵塞服务而出现异常的问题。
其中,上述检测关闭线程是否完成的过程可以是:基于该线程堵塞服务,轮询检测终端包括的所有镜头是否在执行关闭线程。
在一些实施例中,可以基于该线程堵塞服务,遍历该终端包括的所有镜头对应关闭线程的线程状态。基于该终端包括的所有镜头对应关闭线程的线程状态,检测该终端包括的所有镜头是否在执行关闭线程。
其中,对于该终端包括的所有镜头中任一个镜头对应的关闭线程,若该关闭线程的线程状态为终止状态,确定该镜头未执行该关闭线程;或,对于该终端包括的所有镜头中任一个镜头对应的关闭线程,若该关闭线程的线程状态不是终止状态,确定该镜头执行该关闭线程。
在该实施例中,提供了一种基于轮询检测来判断关闭线程是否完成的方式。通过遍历终端包括的所有镜头,确保终端包括的所有镜头均未执行关闭线程,从而保障后续配置流线程正常配置第二拍摄模式的资源。
上述实施例以该终端包括的所有镜头均未在执行关闭线程的情况为例,对方案进行说明。在另一些实施例中,在该终端包括的所有镜头中任一个镜头在执行关闭线程的情况下,阻止该配置流线程执行,以等待该关闭线程完成。
如此,在该终端包括的所有镜头中任一个镜头在执行关闭线程的情况下,阻止该配置流线程执行,确保在该终端包括的所有镜头均未执行关闭线程的情况下,再执行后续配置流线程为第二拍摄模式配置资源的过程,以便配置流线程正常配置第二拍摄模式的资源,避免配置流程出现异常。
在一些实施例中,线程堵塞服务可以是配置流线程中提供的基于threadwait函数的一段程序代码,用于在满足运行条件的情况下触发配置流线程正常运行,而在不满足运行条件的情况下阻止配置流线程运行。本申请实施例中,运行条件可以是关闭线程完成。应理解地,关闭线程完成表示满足运行条件,此时可控制线程正常运行。关闭线程未完成表示不满足运行条件,此时可阻止线程运行。
其中,配置流线程可以是configure_streams线程。
在一些实施例中,在该多个启动线程中任一个启动线程完成后,需要检测关闭线程是否完成。响应于该关闭线程未完成,可以主动堵塞configure_streams线程,等待关闭线程完成之后,再重新拉起configure_streams线程。
例如,在一些实施例中,硬件抽象层维护的camxhal3.cpp文件还提供有配置流接口(即configure_streams接口)。进而,在camxhal3.cpp文件中,当configure_streams接口被调用时,可以检测关闭线程是否完成,如果没有则需要等待关闭线程完成后再被调用。
需要说明的是,配置流线程与关闭线程在相关服务上的创建及内存申请等方面均存在耦合。因而,在基于配置流线程执行后续配置流程时必须要等待关闭线程完成。例如,两者申请的是同一个内存空间,那么为第二拍摄模式申请的内存空间可能会被关闭线程释放,导致相机应用为第二拍摄模式配置的相机服务资源出现异常。因此,在启动配置流线程之前,需要先检测关闭线程是否结束,在关闭线程结束的情况下再启动配置流线程,这样有利于相机应用正常配置第二拍摄模式的相机服务资源,避免相机流程出现异常。
示例性的,在代码逻辑中,硬件抽象层可以为配置流线程配置线程堵塞服务。如果关闭线程还未完成,但是相机应用已经调度到配置流线程,那么在配置流线程的执行过程中,硬件抽象层检测关闭线程是否完成。若没有完成,硬件抽象层指示线程管理器不要将配置流线程分配给CPU,等待关闭线程完成之后硬件抽象层再指示线程管理器向CPU分配配置流线程,由CPU执行配置相机服务资源的流程。若已经完成,硬件抽象层指示内核层启动配置流线程。
示例性的,图6为本申请实施例提供的一种模式切换方法的程序代码示意图。参见图6,图6中的代码段601中的第一行代码,用于轮询检测终端上安装的镜头是否存在上述关闭线程执行的流程,若存在,则控制第二拍摄模式中的镜头等待该关闭线程完成。图6中的代码段601中的后两行代码,用于保证第一拍摄模式的关闭线程和第二拍摄模式的配置流线程的流程时序,确保在该关闭线程完成之后,再执行配置流线程的配置流程。
图6中的代码段602,用于判断终端上安装的镜头是否存在上述关闭线程执行的流程,也即判断当前cameraId是否有关闭线程在工作,如果有,则加锁保证时序。
图6中的代码段603,用于判断终端上安装的镜头是否存在上述关闭线程执行的流程,也即判断当前cameraId是否完成关闭,如果完成,则解锁。
S505、在终端包括的所有镜头均未在执行关闭线程的情况下,启动配置流线程为该第二拍摄模式配置资源。
在一些实施例中,基于该配置流线程,为该第二拍摄模式配置平台session、pipeline和node,以完成第二拍摄模式的通道创建,并初始化硬件(如镜头),以配置需要显示的资源流(启流)。
S506、终端显示该相机应用的第二界面。
其中,第二界面是该第二拍摄模式的界面,在该第二拍摄模式下采用多镜头实现图像数据的采集。
在一些实施例中,相机应用向硬件抽象层请求图像数据,则硬件抽象层向相机应用返回图像数据,进而,相机应用根据图像数据,在相机应用的第二界面中显示预拍摄画面。需要说明的是,针对图像数据中的每一帧图像,均需要发送一次获取图像的请求。
如此,通过获取该第二拍摄模式下的图像数据,进而呈现该第二拍摄模式下的预拍摄画面,提升了相机应用的使用体验。
示例性的,图7为本申请实施例提供的一种模式切换方法的架构流程示意图。参见图7,响应于对相机应用的模式切换操作,相机应用首先清理相机应用的用例资源。判断相机应用的用例资源是否清理完成。在相机应用的用例资源清理完成后,在满足预设条件的情况下,创建关闭线程。其中,判断是否满足预设条件的过程包括:先检查product.xml文件中的配置参数,以判断应用标识是否属于预设应用标识、关闭线程的功能开关是否打开,再检查相机应用的CHI模块的初始化状态,以判断CHI模块是否初始化完成。
在一种可能的情况下,在应用标识属于预设应用标识、关闭线程的功能开关打开以及CHI模块初始化完成的情况下,此时满足预设条件,则可以采用基于异步的方式执行模式切换流程。其中,基于异步的方式执行模式切换流程的过程可以是:创建关闭线程并设置关闭线程的线程属性和优先级。在关闭线程创建完成时,可快速返回创建完成的消息给相机应用,以触发相机应用调用启动线程。进而,基于所创建的关闭线程执行第一拍摄模式的关闭流程,以及,调用启动线程执行第二拍摄模式的启动流程。在启动线程完成第二拍摄模式的启动流程之后,需要先基于配置流线程内的线程堵塞服务,检测关闭线程是否完成第一拍摄模式的关闭流程。在关闭线程完成第一拍摄模式的关闭流程的情况下,调用配置流线程为第二拍摄模式配置相机服务资源。
在又一种可能的情况下,在应用标识不属于预设应用标识、关闭线程的功能开关关闭以及CHI模块未初始化完成的情况下,此时不满足预设条件,则可以采用基于非异步的方式执行模式切换。其中,基于非异步的方式执行模式切换流程的过程可以是:调用已建立的关闭线程,执行第一拍摄模式的关闭流程。在关闭线程完成第一拍摄模式的关闭流程之后,调用启动线程执行第二拍摄模式的启动流程。在启动线程完成第二拍摄模式的启动流程之后,调用配置流线程为第二拍摄模式配置相机服务资源。
示例性的,图8为本申请实施例提供的一种模式切换方法的程序调度示意图。参见图8,首先,利用camxhal3.cpp文件中的close接口,调用CreateAsyncCloseProcess函数,来创建关闭线程。
其中,在创建关闭线程之前,在camxhal3.cpp文件的camxhwenvironment子文件中,利用IsSupportAsyncCloseProcessApp函数,判断应用标识是否属于预设应用标识、关闭线程的功能开关是否打开。在应用标识属于预设应用标识、关闭线程的功能开关打开的情况下,在camxhal3.cpp文件的camxhaldevice中,利用IsCHIModuleInitialized函数,检测CHI模块的初始化状态,判断该CHI模块是否初始化完成。在该CHI模块初始化完成的情况下,通过上一次模式切换过程中的该关闭线程的g_hAsyncCloseProcessthreadHandle变量,来判断上一次模式切换过程中的关闭线程是否处于闲置状态。在上一次模式切换过程中的关闭线程处于闲置状态的情况下,创建关闭线程。
进而,基于所创建的关闭线程执行第一拍摄模式的关闭流程,以及,调用启动线程执行第二拍摄模式的启动流程。在启动线程完成第二拍摄模式的启动流程之后,需要先基于配置流线程内的线程堵塞服务(threadwait函数),检测关闭线程是否完成第一拍摄模式的关闭流程(pHALDevice->Close()函数)。在关闭线程完成第一拍摄模式的关闭流程的情况下,调用配置流线程为第二拍摄模式配置相机服务资源。
基于图3所描述的电子设备的软件架构,以及图5所描述的模式切换方法的流程,示出了如图9所示的模式切换方法的层级交互示意图。下面结合图9,以相机应用、应用程序框架层、硬件抽象层及内核层之间的交互为例,对模式切换方法进行说明。其中,采用close线程来指代关闭线程,采用open线程来指代启动线程,采用configure_streams线程来指代配置流线程,该方法包括S901至S930:
S901、响应于对相机应用的模式切换操作,相机应用向应用程序框架层发送模式切换指令。
其中,模式切换指令用于指示将相机应用由第一拍摄模式切换至第二拍摄模式。
在一些实施例中,相机应用的com.hihonor.camera进程,通过调用应用程序框架层的close接口,向应用程序框架层的camera server进程发送该模式切换指令。
S902、应用程序框架层向硬件抽象层发送该模式切换指令。
在一些实施例中,应用程序框架层通过close接口,将该模式切换指令发送给硬件抽象层的android.hardware.camera.provider@2.4-server_64进程(可简称为provider进程)。
经过上述S901和S902,相机应用通过调用应用程序框架层的close接口,可以将该模式切换指令传递给硬件抽象层,以此来调用硬件抽象层的close线程执行close流程。需要说明的是,本申请实施例中的close流程,是指基于close线程关闭第一拍摄模式的过程,当然,这一流程也可以称作异步close流程。
S903、硬件抽象层判断是否满足创建close线程的条件。若是,执行S904。
S904、硬件抽象层向内核层发送创建close线程的指令。
S905、内核层创建close线程。
S906、内核层启动close线程以执行第一拍摄模式的close流程。
S907、内核层向硬件抽象层发送创建结果,以指示close线程创建完成。
S908、硬件抽象层响应于close线程创建完成,向应用程序框架层返回第一反馈结果(即关闭线程完成的通知消息),以指示第一拍摄模式的close流程已完成。
应理解地,硬件抽象层是基于close线程的创建完成,向应用程序框架层返回第一反馈结果的,实际上用于关闭第一拍摄模式的close线程还在进行。
S909、应用程序框架层向相机应用返回第一反馈结果。
经过上述S908和S909,硬件抽象层通过调用应用程序框架层的close接口可以将第一反馈结果传递给相机应用。
在接收第一反馈结果之后,相机应用可以执行S910,使得open流程无需等待close流程结束,如此,能够实现close线程和open线程同步执行。需要说明的是,本申请实施例中的open流程,是指基于open线程启动第二拍摄模式的过程。
S910、相机应用向应用程序框架层发送执行open流程的指令,以指示启动第二拍摄模式的open线程。
在一些实施例中,相机应用的com.hihonor.camera进程,通过调用应用程序框架层的open接口,向应用程序框架层的camera server进程发送该执行open流程的指令。
S911、应用程序框架层向硬件抽象层发送该执行open流程的指令。
在一些实施例中,应用程序框架层通过open接口,可以将该执行open流程的指令发送给硬件抽象层的provider进程。
经过上述S910和S911,相机应用通过调用应用程序框架层的open接口,可以将该执行open流程的指令传递给硬件抽象层,以此来启动硬件抽象层的open线程执行第二拍摄模式的open流程。
S912、硬件抽象层向内核层发送执行open流程的指令,以指示内核层启动open线程来执行第二拍摄模式的open流程。
S913、内核层启动open线程以执行第二拍摄模式的open流程。
S914、在第二拍摄模式的open流程结束之后,内核层向硬件抽象层发送第二反馈结果,以指示第二拍摄模式的open流程已结束。
S915、硬件抽象层向应用程序框架层发送该第二反馈结果。
S916、应用程序框架层向相机应用发送该第二反馈结果。
S917、相机应用向应用程序框架层发送执行configure_streams流程的指令,以指示启动第二拍摄模式的configure_streams线程。
需要说明的是,本申请实施例中的configure_streams流程是指基于configure_streams线程为第二拍摄模式配置相机服务资源的过程。
S918、应用程序框架层向硬件抽象层发送该执行configure_streams流程的指令。
可选地,应用程序框架层通过configure_streams接口,将该执行configure_streams流程的指令发送给硬件抽象层的provider进程。
经过上述S917和S918,相机应用通过调用应用程序框架层的configure_streams接口,可以将该执行configure_streams流程的指令传递给硬件抽象层,以此来启动硬件抽象层的configure_streams线程执行第二拍摄模式的configure_streams流程。
S919、硬件抽象层检测close线程是否结束。
在一些实施例中,硬件抽象层在接收到来自应用程序框架层的执行configure_streams流程的指令之后,先基于线程堵塞服务,检测close线程是否结束,即检测基于close线程释放资源是否完成。在确定close线程结束之后,硬件抽象层再指示内核层启动configure_streams线程。
S920、在close线程结束的情况下,硬件抽象层向内核层发送执行configure_streams流程的指令,以指示内核层启动configure_streams线程来执行第二拍摄模式的configure_streams流程。
S921、内核层启动configure_streams线程以执行第二拍摄模式的configure_streams流程。
S922、在第二拍摄模式的configure_streams流程结束之后,内核层向硬件抽象层发送第三反馈结果,以指示第二拍摄模式的configure_streams流程已结束。
S923、内核层向硬件抽象层发送图像数据。
在configure_streams流程执行的过程中,当镜头创建好之后,硬件抽象层会向内核层发送硬件初始化指令,内核层接收到硬件初始化指令之后开始初始化镜头。硬件初始化完成之后,镜头开始采集图像数据,并通过内核层向硬件抽象层返回图像数据。
S924、硬件抽象层向应用程序框架层发送该第三反馈结果。
S925、应用程序框架层向相机应用发送该第三反馈结果。
S926、相机应用向应用程序框架层发送启动(start)指令,以指示请求获取图像数据。
应理解地,该图像数据也即是如S923所描述的是由镜头采集的图像数据。
S927、应用程序框架层向硬件抽象层发送重复(repeating)指令,该重复指令用于指示硬件抽象层一帧一帧的返回图像数据,并指示图像数据的存储空间。
S928、硬件抽象层向应用程序框架层发送图像数据。
在一些实施例中,硬件抽象层可以将每一帧图像数据写入存储空间(轮转buffer)中进行传输。
S929、应用程序框架层向相机应用发送图像数据。
S930、相机应用基于所接收的图像数据,显示预拍摄画面。
在图9所描述的实施例中,各层或各模块之间的发送,实际上是通过函数调用的方式实现的。在上述实施例中,由于在模式切换时,相机应用的close流程和open流程是没有耦合的,因而在执行第一拍摄模式的close流程时,可以调用硬件抽象层的open线程以执行第二拍摄模式的open流程。并且,从第二拍摄模式的open流程结束到第二拍摄模式的configure_streams流程开始之间存在空闲时间,通常这段空闲时间的时长可满足执行第一拍摄模式的close流程所需的时长。这样,终端可以充分利用设备的硬件资源(CPU和内存),通过软件并行处理方式充分调度空闲的CPU去处理close线程,不会给终端带来额外的成本负担,并且有效提高了模式切换的速度。
示例性的,图10为本申请实施例提供的一种模式切换方法的流程示意图。参见图10,相机应用首先调用硬件抽象层的close流程以关闭第一拍摄模式,硬件抽象层创建close线程以承载第一拍摄模式的关闭流程。在关闭流程进行的过程中,相机应用调用硬件抽象层的open流程以启动相机应用的第二拍摄模式。在启动流程结束之后,相机应用调用硬件抽象层的configure_streams线程配置平台session、pipeline和node,并初始化硬件,配置需要显示的资源流。之后,相机应用向硬件抽象层发送重复(repeating)指令以请求镜头采集的图像数据,硬件抽象层向相机应用返回多帧图像,相机应用根据多帧图像在预览区域显示预拍摄画面。需要说明的是,图10所示的模式切换的流程耗时大致为700ms。
在图10所示实施例中,提供了一种基于异步关闭流程来实现模式切换的方案。下面基于图11,还提供了一种相关技术中基于非异步关闭流程来实现模式切换的方案。
参见图11,在相机应用由第一拍摄模式切换至第二拍摄模式的过程中,相机应用首先调用硬件抽象层的close流程以关闭第一拍摄模式。在第一拍摄模式关闭之后,相机应用调用硬件抽象层的open流程以启动相机应用的第二拍摄模式。在启动流程结束之后,相机应用调用硬件抽象层的configure_streams线程配置平台session、pipeline和node,并初始化硬件,配置需要显示的资源流。之后,相机应用向硬件抽象层发送重复(repeating)指令以请求镜头采集的图像数据,硬件抽象层向相机应用返回多帧图像,相机应用根据多帧图像在预览区域显示预拍摄画面。需要说明的是,图11所示的模式切换的流程耗时大致为810ms。
在上述相关技术中模式切换的过程中,在第一拍摄模式的关闭流程完成之后,相机应用再调用open流程以启动第二拍摄模式。在第二拍摄模式的启动流程完成之后,相机应用再调用configure_streams流程以配置平台session、pipeline和node。可见,第一拍摄模式的close流程和第二拍摄模式的open流程是串行执行的,换言之,只有在第一拍摄模式的关闭流程结束之后,相机应用才会调用open流程以启动第二拍摄模式。对于一些性能较差的终端而言,在关闭相机应用的第一拍摄模式时,内存释放、线程调度、数据处理等操作无法及时获取到CPU资源,这样会导致关闭第一拍摄模式的时间较长,降低拍摄模式的切换速度,从而影响用户的使用体验。
比较图10和图11可知,由于第一拍摄模式的关闭流程在close线程中承载,相机应用无需等待第一拍摄模式的关闭流程结束即可快速调用第二拍摄模式的启动流程,第一拍摄模式的关闭流程和第二拍摄模式的启动流程可以同步执行,提高了模式切换的速度。
需要说明的是,在另一些实施例中,若当前不满足创建关闭线程的条件,则终端可以执行如图11所描述的模式切换流程,也即,不创建关闭线程,通过调用已建立的关闭线程执行第一拍摄模式的关闭流程,在第一拍摄模式的关闭流程结束之后,再执行第二拍摄模式的启动流程。进而,在第二拍摄模式的启动流程完成之后,相机应用再调用配置流线程为第二拍摄模式配置相机服务资源。
本申请实施例提供的技术方案,在将相机应用由第一拍摄模式切换至第二拍摄模式时,可以在基于关闭线程关闭第一拍摄模式的过程中,基于多个启动线程启动第二拍摄模式,使得第一拍摄模式的关闭流程与第二拍摄模式的启动流程可以同步进行。这样,减少了等待第一拍摄模式的关闭流程执行完成的时间,有利于提高拍摄模式的切换速度。进而,基于线程堵塞服务,检测终端包括的所有镜头是否在执行关闭线程。在终端包括的所有镜头均未在执行关闭线程的情况下,启动配置流线程为第二拍摄模式配置资源。其中,该线程堵塞服务被调用的过程中,不允许在其他该启动线程执行完成后被调用,如此,能够保证该线程堵塞服务在一次线程堵塞流程中仅被一个启动线程调用,能够避免因重复调用线程堵塞服务而出现异常的问题。
图12为本申请实施例提供的一种模式切换装置的框架示意图。参见图12,该模式切换装置包括显示模块1201与切换模块1202。
显示模块1201,用于显示相机应用的第一界面;该第一界面是第一拍摄模式的界面,在该第一拍摄模式下采用单镜头实现图像数据的采集;
切换模块1202,用于响应于在第一时间点将该第一拍摄模式切换为第二拍摄模式的操作,在第二时间点,显示该相机应用的第二界面;该第二界面是该第二拍摄模式的界面,在该第二拍摄模式下采用多镜头实现图像数据的采集;
其中,在该第一时间点和该第二时间点之间,第一时间段和第二时间段存在重叠;该第一时间段是基于关闭线程关闭该第一拍摄模式的时间段,该第二时间段是基于多个启动线程启动该第二拍摄模式的时间段,该多个启动线程与该多镜头一一对应;
在该第一时间点和该第二时间点之间还包括第三时间段,该第三时间段是在终端包括的所有镜头均未在执行关闭线程的情况下,启动配置流线程为该第二拍摄模式配置资源的时间段;该终端包括的所有镜头是否在执行关闭线程是基于线程堵塞服务实现的;该线程堵塞服务在该启动线程执行完成后被调用,且在该线程堵塞服务被调用的过程中,不允许在其他该启动线程执行完成后被调用。
本申请实施例提供的技术方案,在将相机应用由第一拍摄模式切换至第二拍摄模式时,可以在基于关闭线程关闭第一拍摄模式的过程中,基于多个启动线程启动第二拍摄模式,使得第一拍摄模式的关闭流程与第二拍摄模式的启动流程可以同步进行。这样,减少了等待第一拍摄模式的关闭流程执行完成的时间,有利于提高拍摄模式的切换速度。进而,基于线程堵塞服务,检测终端包括的所有镜头是否在执行关闭线程。在终端包括的所有镜头均未在执行关闭线程的情况下,启动配置流线程为第二拍摄模式配置资源。其中,该线程堵塞服务被调用的过程中,不允许在其他该启动线程执行完成后被调用,如此,能够保证该线程堵塞服务在一次线程堵塞流程中仅被一个启动线程调用,能够避免因重复调用线程堵塞服务而出现异常的问题。
在一些实施例中,该多个启动线程包括第一启动线程,该第一启动线程为该多个启动线程中的任一个;
该方法还包括:
在该第一启动线程执行完成后调用该线程堵塞服务时,对该线程堵塞服务加锁;
基于该线程堵塞服务,检测该终端包括的所有镜头是否在执行关闭线程;在该终端包括的所有镜头均未在执行关闭线程的情况下,对该线程堵塞服务解锁。
在一些实施例中,该多个启动线程还包括第二启动线程,该第二启动线程在该第一启动线程之后调用该线程堵塞服务;
该方法还包括:
在该第二启动线程执行完成后调用该线程堵塞服务时,响应于该线程堵塞服务为加锁状态,等待该线程堵塞服务解锁;或,
在该第二启动线程执行完成后调用该线程堵塞服务时,响应于该线程堵塞服务为解锁状态,对该线程堵塞服务加锁;基于该线程堵塞服务,检测该终端包括的所有镜头是否在执行关闭线程;在该终端包括的所有镜头均未在执行关闭线程的情况下,对该线程堵塞服务解锁。
在一些实施例中,基于该线程堵塞服务,检测该终端包括的所有镜头是否在执行关闭线程之后,该方法还包括:
在该终端包括的所有镜头中任一个镜头在执行关闭线程的情况下,阻止该配置流线程执行,以等待该关闭线程完成。
在一些实施例中,基于该线程堵塞服务,检测该终端包括的所有镜头是否在执行关闭线程,包括:
基于该线程堵塞服务,轮询检测该终端包括的所有镜头是否在执行关闭线程。
在一些实施例中,基于该线程堵塞服务,轮询检测该终端包括的所有镜头是否在执行关闭线程,包括:
基于该线程堵塞服务,遍历该终端包括的所有镜头对应关闭线程的线程状态;
基于该终端包括的所有镜头对应关闭线程的线程状态,检测该终端包括的所有镜头是否在执行关闭线程。
在一些实施例中,基于该终端包括的所有镜头对应关闭线程的线程状态,检测该终端包括的所有镜头是否在执行关闭线程,包括:
对于该终端包括的所有镜头中任一个镜头对应的关闭线程,若该关闭线程的线程状态为终止状态,确定该镜头未执行该关闭线程;或,
对于该终端包括的所有镜头中任一个镜头对应的关闭线程,若该关闭线程的线程状态不是终止状态,确定该镜头执行该关闭线程。
在一些实施例中,响应于在第一时间点将该第一拍摄模式切换为第二拍摄模式的操作之后,该方法还包括:
在满足预设条件的情况下,创建该关闭线程;
该预设条件包括下述至少一项:
该第一拍摄模式已配置相机服务资源;
该相机应用的应用标识属于预设应用标识;该预设应用标识为支持创建该关闭线程的应用标识;
创建该关闭线程的功能开关处于开启状态;
上一次模式切换过程中的关闭线程处于闲置状态;
该相机应用的目标模块初始化完成;该目标模块的初始化与该配置流线程相关。
在一些实施例中,该方法还包括下述至少一项:
将该关闭线程的线程属性设置为目标属性;
将该关闭线程的优先级设置为最高优先级。
在一些实施例中,该方法还包括:
响应于该关闭线程创建完成,触发关闭线程完成的通知消息;
基于该通知消息,调用该启动线程启动该第二拍摄模式。
可以理解的是,本申请实施例中的电子设备(如终端)为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请实施例能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请实施例的范围。
本申请实施例还提供了一种电子设备,包括:处理器和存储器。处理器与存储器连接,存储器用于存储程序代码,处理器执行存储器存储的程序代码,从而实现本申请实施例提供的模式切换方法。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有程序代码,当该程序代码在电子设备上运行时,使得该电子设备执行上述方法实施例中电子设备执行的各个功能或者步骤。
本申请实施例还提供了一种计算机程序产品,包括程序代码,当该程序代码在电子设备上运行时,使得电子设备执行上述方法实施例中电子设备执行的各个功能或者步骤。
其中,本申请实施例提供的电子设备、计算机可读存储介质或者计算机程序产品均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置(如电子设备)的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置(如电子设备)和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置(如电子设备)和方法,可以通过其它的方式实现。例如,以上所描述的装置(如电子设备)实施例仅仅是示意性的,例如,该模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本申请各个实施例该方法的全部或部分步骤。而前述的存储介质包括:快闪存储器、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以该权利要求的保护范围为准。

Claims (12)

1.一种模式切换方法,其特征在于,包括:
显示相机应用的第一界面;所述第一界面是第一拍摄模式的界面,在所述第一拍摄模式下采用单镜头实现图像数据的采集;
响应于在第一时间点将所述第一拍摄模式切换为第二拍摄模式的操作,在第二时间点,显示所述相机应用的第二界面;所述第二界面是所述第二拍摄模式的界面,在所述第二拍摄模式下采用多镜头实现图像数据的采集;
其中,在所述第一时间点和所述第二时间点之间,第一时间段和第二时间段存在重叠;所述第一时间段是基于关闭线程关闭所述第一拍摄模式的时间段,所述第二时间段是基于多个启动线程启动所述第二拍摄模式的时间段,所述多个启动线程与所述多镜头一一对应;
在所述第一时间点和所述第二时间点之间还包括第三时间段,所述第三时间段是在终端包括的所有镜头均未在执行关闭线程的情况下,启动配置流线程为所述第二拍摄模式配置资源的时间段;所述终端包括的所有镜头是否在执行关闭线程是基于线程堵塞服务实现的;所述线程堵塞服务在所述启动线程执行完成后被调用,且在所述线程堵塞服务被调用的过程中,不允许在其他所述启动线程执行完成后被调用。
2.根据权利要求1所述的方法,其特征在于,所述多个启动线程包括第一启动线程,所述第一启动线程为所述多个启动线程中的任一个;
所述方法还包括:
在所述第一启动线程执行完成后调用所述线程堵塞服务时,对所述线程堵塞服务加锁;
基于所述线程堵塞服务,检测所述终端包括的所有镜头是否在执行关闭线程;在所述终端包括的所有镜头均未在执行关闭线程的情况下,对所述线程堵塞服务解锁。
3.根据权利要求2所述的方法,其特征在于,所述多个启动线程还包括第二启动线程,所述第二启动线程在所述第一启动线程之后调用所述线程堵塞服务;
所述方法还包括:
在所述第二启动线程执行完成后调用所述线程堵塞服务时,响应于所述线程堵塞服务为加锁状态,等待所述线程堵塞服务解锁;或,
在所述第二启动线程执行完成后调用所述线程堵塞服务时,响应于所述线程堵塞服务为解锁状态,对所述线程堵塞服务加锁;基于所述线程堵塞服务,检测所述终端包括的所有镜头是否在执行关闭线程;在所述终端包括的所有镜头均未在执行关闭线程的情况下,对所述线程堵塞服务解锁。
4.根据权利要求2或3所述的方法,其特征在于,所述基于所述线程堵塞服务,检测所述终端包括的所有镜头是否在执行关闭线程之后,所述方法还包括:
在所述终端包括的所有镜头中任一个镜头在执行关闭线程的情况下,阻止所述配置流线程执行,以等待所述关闭线程完成。
5.根据权利要求2-4任一项所述的方法,其特征在于,所述基于所述线程堵塞服务,检测所述终端包括的所有镜头是否在执行关闭线程,包括:
基于所述线程堵塞服务,轮询检测所述终端包括的所有镜头是否在执行关闭线程。
6.根据权利要求5所述的方法,其特征在于,所述基于所述线程堵塞服务,轮询检测所述终端包括的所有镜头是否在执行关闭线程,包括:
基于所述线程堵塞服务,遍历所述终端包括的所有镜头对应关闭线程的线程状态;
基于所述终端包括的所有镜头对应关闭线程的线程状态,检测所述终端包括的所有镜头是否在执行关闭线程。
7.根据权利要求6所述的方法,其特征在于,所述基于所述终端包括的所有镜头对应关闭线程的线程状态,检测所述终端包括的所有镜头是否在执行关闭线程,包括:
对于所述终端包括的所有镜头中任一个镜头对应的关闭线程,若所述关闭线程的线程状态为终止状态,确定所述镜头未执行所述关闭线程;或,
对于所述终端包括的所有镜头中任一个镜头对应的关闭线程,若所述关闭线程的线程状态不是终止状态,确定所述镜头执行所述关闭线程。
8.根据权利要求1所述的方法,其特征在于,所述响应于在第一时间点将所述第一拍摄模式切换为第二拍摄模式的操作之后,所述方法还包括:
在满足预设条件的情况下,创建所述关闭线程;
所述预设条件包括下述至少一项:
所述第一拍摄模式已配置相机服务资源;
所述相机应用的应用标识属于预设应用标识;所述预设应用标识为支持创建所述关闭线程的应用标识;
创建所述关闭线程的功能开关处于开启状态;
上一次模式切换过程中的关闭线程处于闲置状态;
所述相机应用的目标模块初始化完成;所述目标模块的初始化与所述配置流线程相关。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括下述至少一项:
将所述关闭线程的线程属性设置为目标属性;
将所述关闭线程的优先级设置为最高优先级。
10.根据权利要求8所述的方法,其特征在于,所述方法还包括:
响应于所述关闭线程创建完成,触发所述关闭线程完成的通知消息;
基于所述通知消息,调用所述启动线程启动所述第二拍摄模式。
11.一种电子设备,其特征在于,包括存储器和处理器;所述存储器用于存储程序代码;所述处理器用于调用所述程序代码,以执行如权利要求1-10任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,包括程序代码,所述程序代码在电子设备上运行时,使得所述电子设备执行如权利要求1-10任一项所述的方法。
CN202310820628.5A 2023-07-05 2023-07-05 模式切换方法、电子设备及存储介质 Pending CN117729426A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310820628.5A CN117729426A (zh) 2023-07-05 2023-07-05 模式切换方法、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310820628.5A CN117729426A (zh) 2023-07-05 2023-07-05 模式切换方法、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN117729426A true CN117729426A (zh) 2024-03-19

Family

ID=90207518

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310820628.5A Pending CN117729426A (zh) 2023-07-05 2023-07-05 模式切换方法、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN117729426A (zh)

Similar Documents

Publication Publication Date Title
CN113553014B (zh) 多窗口投屏场景下的应用界面显示方法及电子设备
WO2021129253A1 (zh) 显示多窗口的方法、电子设备和系统
CN112527174B (zh) 一种信息处理方法及电子设备
CN112527222A (zh) 一种信息处理方法及电子设备
CN114237779A (zh) 一种显示窗口的方法、切换窗口的方法、电子设备和系统
CN115348350B (zh) 一种信息显示方法及电子设备
WO2023130921A1 (zh) 一种适配多设备的页面布局的方法及电子设备
CN114442969A (zh) 一种设备间屏幕协同方法及设备
CN117729426A (zh) 模式切换方法、电子设备及存储介质
CN116974496A (zh) 一种多屏交互方法及电子设备
CN114500732B (zh) 一种界面显示的方法和电子设备、存储介质
CN113950033B (zh) 数据传输方法和设备
CN111159734A (zh) 通信终端及多应用数据互访处理方法
CN116744106B (zh) 相机应用的控制方法和终端设备
CN116672707B (zh) 生成游戏预测帧的方法和电子设备
CN113179362B (zh) 电子设备及其图像显示方法
CN116723382B (zh) 一种拍摄方法及相关设备
CN115016628B (zh) 一种电子设备的控制方法及电子设备
CN116737291A (zh) 桌面应用的处理方法和电子设备
CN116048829B (zh) 接口调用方法、设备及存储介质
CN116737292B (zh) 一种显示模式的切换方法、电子设备及可读存储介质
WO2024078337A1 (zh) 一种显示屏选择方法及电子设备
WO2022247664A1 (zh) 图形界面显示方法、电子设备、介质以及程序产品
CN115665313A (zh) 设备控制方法及电子设备
CN117995137A (zh) 一种调节显示屏色温的方法、电子设备及相关介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination