CN113766120A - 拍摄模式的切换方法及电子设备 - Google Patents

拍摄模式的切换方法及电子设备 Download PDF

Info

Publication number
CN113766120A
CN113766120A CN202110910375.1A CN202110910375A CN113766120A CN 113766120 A CN113766120 A CN 113766120A CN 202110910375 A CN202110910375 A CN 202110910375A CN 113766120 A CN113766120 A CN 113766120A
Authority
CN
China
Prior art keywords
preview
stream
camera
memory block
frame
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.)
Granted
Application number
CN202110910375.1A
Other languages
English (en)
Other versions
CN113766120B (zh
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 CN202110910375.1A priority Critical patent/CN113766120B/zh
Publication of CN113766120A publication Critical patent/CN113766120A/zh
Application granted granted Critical
Publication of CN113766120B publication Critical patent/CN113766120B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N23/00Cameras or camera modules comprising electronic image sensors; Control thereof
    • H04N23/60Control of cameras or camera modules
    • H04N23/665Control of cameras or camera modules involving internal camera communication with the image sensor, e.g. synchronising or multiplexing SSIS control signals
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N23/00Cameras or camera modules comprising electronic image sensors; Control thereof
    • H04N23/60Control of cameras or camera modules
    • H04N23/63Control of cameras or camera modules by using electronic viewfinders
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N23/00Cameras or camera modules comprising electronic image sensors; Control thereof
    • H04N23/60Control of cameras or camera modules
    • H04N23/667Camera operation mode switching, e.g. between still and video, sport and normal or high- and low-resolution modes

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Studio Devices (AREA)

Abstract

本申请实施例提供了一种拍摄模式的切换方法及电子设备,该切换方法通过采用按行拷贝预览流内存块中每一行的图像数据到模糊帧内存块的拷贝方式,从而实现了拍摄模式的切换过程中,模糊帧的拷贝能够不受芯片型号限制,进而保证了一套模糊帧的拷贝接口便能从缓冲不同内存对齐格式的预览流的预览流内存块中拷贝到需要进行模糊处理的图像数据,既降低了开发成本和维护难度,又能够保证模糊帧拷贝的顺利进行,从而保证拍摄模式的切换过程,始终能够有一帧模糊帧作为转场动画来进行过渡。

Description

拍摄模式的切换方法及电子设备
技术领域
本申请实施例涉及终端领域,尤其涉及一种拍摄模式的切换方法及电子设备。
背景技术
随着通信技术的发展,电子设备的计算能力和硬件能力的提高,电子设备的摄像功能也越来越强大,比如现在具备摄像头的电子设备的摄像头应用(相机应用),通常提供了拍摄照片和录制视频两种拍摄模式。进一步地,拍摄照片的模式,又细化了美颜模式、延时模式、闪光灯模式、实时模式等。
目前,电子设备在切换摄像头的拍摄模式时,会使用一帧模糊帧作为转场动画来进行过渡。但是,目前获取模糊帧的操作是在摄像头框架层,从缓冲视频帧数据的内存中以数据块的方式进行拷贝。而随着不同通信平台的迅速崛起,目前的电子设备会根据实际需求,接入到不同的平台,由于不同平台底层实现的差异以及参数的不同,因而往往同一套接口无法直接在多个平台使用,因此想要保证电子设备在切换摄像头的拍摄模式时,能够获取到一帧模糊帧作为转场动态来进行过渡,就需要为不同的平台编译不同的代码,提供不同的接口,如果使用同一套接口,在不同平台进行模糊帧拷贝时,就会出现视频帧数据拷贝异常,进而导致模式切换出现异常,如黑屏、卡顿等,而使用多套接口,又会增加开发成本和维护难度。
发明内容
为了解决上述技术问题,本申请提出了一种拍摄模式的切换方法及电子设备。在该法中,通过采用按行拷贝预览流内存块中每一行的图像数据到模糊帧内存块的拷贝方式,从而实现了拍摄模式的切换过程中,模糊帧的拷贝能够不受芯片型号限制,进而保证了一套模糊帧的拷贝接口便能从缓冲不同内存对齐格式的预览流的预览流内存块中拷贝到需要进行模糊处理的图像数据,既降低了开发成本和维护难度,又能够保证模糊帧拷贝的顺利进行,从而保证拍摄模式的切换过程,始终能够有一帧模糊帧作为转场动画来进行过渡。
第一方面,提供一种拍摄模式的切换方法。该方法应用于电子设备,所述电子设备的应用程序层安装有摄像头应用,应用程序框架层包括摄像头框架,HAL层包括摄像头硬件抽象层,所述摄像头框架分别与所述摄像头应用和所述摄像头硬件抽象层进行数据交互,包括:所述应用程序层监测到对所述摄像头应用的选中操作时,从所述摄像头框架获取缓冲了第一预览流的第一预览流内存块,根据所述第一预览流内存块中缓冲的所述第一预览流生成第一预览画面,并在显示界面显示所述第一预览画面,所述第一预览流由所述摄像头硬件抽象层上传,所述第一预览流的内存对齐格式为第一内存对齐格式;所述应用程序层监测到对所述摄像头应用中的任意一拍摄模式的切换操作时,向所述摄像头框架发送携带了预置画布信息的模糊帧请求,所述预置画布信息包括第二内存对齐格式;所述摄像头框架根据所述预置画布信息分配第二内存对齐格式的模糊帧内存块,采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块,并在完成拷贝后将所述模糊帧内存块发送至所述摄像头应用;在拍摄模式的切换过程中,所述摄像头应用对所述模糊帧内存块中的图像数据进行模糊处理,得到第二预览画面,并采用所述第二预览画面替换所述显示界面中显示的第一预览画面。这样,通过采用按行拷贝预览流内存块中每一行的图像数据到模糊帧内存块的拷贝方式,从而实现了拍摄模式的切换过程中,模糊帧的拷贝能够不受芯片型号限制,进而保证了一套模糊帧的拷贝接口便能从缓冲不同内存对齐格式的预览流的预览流内存块中拷贝到需要进行模糊处理的图像数据,既降低了开发成本和维护难度,又能够保证模糊帧拷贝的顺利进行,从而保证拍摄模式的切换过程,始终能够有一帧模糊帧作为转场动画来进行过渡。
示例性的,第一内存对齐格式与第二内存对齐格式不同。
示例性的,第一内存对齐格式与第二内存对齐格式相同。
示例性的,第一内存对齐格式包括但不限于64位、128位、512位中的一种。
示例性的,第二内存对齐格式包括但不限于64位、128位、512位中的一种。
根据第一方面,所述应用程序层监测到对所述摄像头应用的选中操作时,从所述摄像头框架获取缓冲了第一预览流的第一预览流内存块,包括:所述应用程序层监测到对所述摄像头应用的选中操作时,向所述摄像头框架发送打开摄像头的请求;所述摄像头框架根据所述打开摄像头的请求,向所述摄像头硬件抽象层发送配置流;所述摄像头硬件抽象层根据所述配置流打开所述摄像头,并向所述摄像头框架上传所述第一内存对齐格式的所述第一预览流;所述摄像头框架根据所述第一内存对齐格式,为所述第一预览流分配所述第一内存对齐格式的所述第一预览流内存块,将所述第一预览流缓冲到所述第一预览流内存块,并将缓冲了所述第一预览流的所述第一预览流内存块发送至所述摄像头应用。这样,实现了摄像头的开启,并且在触发显示界面的任意功能按钮之前,可以持续像摄像头应用上传第一内存对齐格式的第一预览流,使得摄像头应用能够根据不同时刻获取到的第一预览流生成对应的第一预览画面,从而实现显示界面中第一预览画面的实时变化。
根据第一方面,或者以上第一方面的任意一种实现方式,所述应用程序层监测到对所述摄像头应用的选中操作时,从所述摄像头框架获取缓冲了第一预览流的第一预览流内存块,根据所述第一预览流内存块中缓冲的所述第一预览流生成第一预览画面,并在显示界面显示所述第一预览画面之后,所述方法还包括:所述摄像头应用将取出所述第一预览流后的所述第一预览流内存块回传给所述摄像头框架,供所述摄像头框架在接收到所述摄像头硬件抽象层上传的第二预览流后,将所述第二预览流缓冲到所述第一预览流内存块。这样,摄像头应用在从第一预览流内存块中取出第一预览流后,通过将空的第一预览流内存块回传给摄像头框架,从而使得摄像头框架在接收到摄像头硬件抽象层上传的下一时刻的预览流时,无需在分配新的预览流内存块,直接复用第一预览流内存块,从而有效避免了内存冗余。
根据第一方面,或者以上第一方面的任意一种实现方式,所述在拍摄模式的切换过程中,所述摄像头应用对所述模糊帧内存块中的图像数据进行模糊处理,得到第二预览画面,并采用所述第二预览画面替换所述显示界面中显示的第一预览画面之后,所述方法还包括:在切换到选中的拍摄模式后,所述摄像头应用从所述摄像头框架中获取缓冲了第二预览流的第二预览流内存块,根据所述第二预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面,所述第二预览流为切换到选中的拍摄模式后,所述摄像头硬件抽象层上传,所述第二预览流的内存对齐格式为所述第一内存对齐格式。这样,在切换到选中的拍摄模式之后,并且获取到摄像头硬件抽象层上传到摄像头框架中第二预览流内存块的第二预览流时,采用拍摄模式切换后上传的第二预览流生成第三预览画面来替代显示界面显示的第二预览画面,既实现了拍摄模式切换过程中,界面显示的预览画面的平滑过渡,又能够在拍摄模式切换成功后,及时将显示界面切换到最新的预览画面。
根据第一方面,或者以上第一方面的任意一种实现方式,在切换到选中的拍摄模式后,所述方法还包括:所述摄像头框架接收到所述摄像头硬件抽象层上传的所述第一内存对齐格式的所述第二预览流时,检测是否存在可复用的所述第一预览流内存块;在存在可复用的所述第一预览流内存块时,所述摄像头框架将所述第二预览流缓冲到所述第一预览流内存块,并将缓冲了所述第二预览流的所述第一预览流内存块发送至所述摄像头应用,供所述摄像头应用根据所述第一预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面;在不存在可复用的所述第一预览流内存块时,所述摄像头框架根据所述第一内存对齐格式,为所述第二预览流分配所述第一内存对齐格式的所述第二预览流内存块,将所述第二预览流缓冲到所述第二预览流内存块,并将缓冲了所述第二预览流的所述第二预览流内存块发送至所述摄像头应用,供所述摄像头应用根据所述第二预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面。这样,在缓冲摄像头硬件抽象层上传的第二预览流时,摄像头框架先检测当前是否有可复用的第一预览流内存块,即是否接收到了摄像头应用回传的第一预览流内存块,若存在,则将第二预览流直接缓冲到第一预览流内存块,即直接复用第一预览流内存块,只有在当前时刻没有可复用的第一预览流内存块时,才分配第一内存对齐格式的第二预览流内存块,从而尽可能避免了内存冗余的发生。
根据第一方面,或者以上第一方面的任意一种实现方式,所述摄像头框架采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块之前,所述方法还包括:所述摄像头框架将所述第一内存对齐格式与所述第二内存对齐格式进行比较;在所述第一内存对齐格式与所述第二内存对齐格式不同时,执行所述摄像头框架采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块的步骤;在所述第一内存对齐格式与所述第二内存对齐格式相同时,所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览流内存块中的内容整体拷贝到所述模糊帧内存块。这样,摄像头框架采用按行拷贝的方式进行模糊帧拷贝前,先判断第一预览流内存块与模糊帧内存块的内存对齐格式是否一致,在一致时,直接以第一预览流内存块为单位,对第一预览流内存块中的内存整体拷贝,从而提升了拷贝效率;在不一致时,才采用按行拷贝的方式,从而保证了内存对齐格式不同的情况下,依旧可以实现模糊帧处理,即无论哪种情况,始终能够有一帧模糊帧作为转场动画来进行过渡,避免黑屏现象的发生。
根据第一方面,或者以上第一方面的任意一种实现方式,所述第一预览流内存块中的内容包括所述图像数据和与所述图像数据拼接在一起的扩展内容,所述图像数据为生成所述第二预览画面的像素点,所述扩展内容用于占位;所述摄像头框架采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块,包括:所述摄像头框架基于YUV颜色编码方法,将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点拷贝到所述模糊帧内存块对应行中对应的位置。由于实际应用中,相同分辨率情况下,第一预览流内存块中的图像数据和模糊帧内存块中用来缓冲图像数据的内存空间的宽度是相同的,这样在用来显示预览画面的显示界面的分辨率相同的情况,只需拷贝第一预览流内存块中用于生成第二预览画面的像素点到模糊帧内存块中,便可以保证摄像头应用能够根据模糊帧内存块中的图像数据生成第二预览画面。
根据第一方面,或者以上第一方面的任意一种实现方式,所述摄像头框架基于YUV颜色编码方法,将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点拷贝到所述模糊帧内存块对应行中对应的位置,包括:所述摄像头框架基于YUV颜色编码方法,确定所述第一预览流内存块中每一行每一位置对应的Y、U和V这三个通道的数值;所述摄像头框架根据Y、U和V这三个通道的数值的变化,将每一行用于生成所述第二预览画面的所述像素点的图像数据与用于占位的所述扩展内容区分开;所述摄像头框架将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点一一拷贝到所述模糊帧内存块对应行中对应的位置。由于实际应用中,扩展内容对画面的显示不会造成影响,仅仅是用来占位,以实现内存对齐,从而便于整体拷贝,这样基于YUV颜色编码方法,将有实际内容的像素点和每一内容的扩展内容区分开,便可以将每一行用于生成第二预览画面的所述像素点拷贝到所述模糊帧内存块对应行中对应的位置,从而保证拍摄模式切换过程中,始终能够有一帧模糊帧作为转场动画来进行过渡。
根据第一方面,或者以上第一方面的任意一种实现方式,所述第一预览流内存块中的内容包括所述图像数据和与所述图像数据拼接在一起的扩展内容,所述图像数据为生成所述第二预览画面的像素点,所述扩展内容用于占位;所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览流内存块中的内容整体拷贝到所述模糊帧内存块,包括:所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览流内存块中的所述图像数据和与所述图像数据拼接在一起的所述扩展内容一起拷贝到所述模糊帧内存块。这样,在第一预览流内存块和模糊帧内存块的内存对齐时,即内存对齐格式相同时,直接以数据块为单位进行整体拷贝,大大提高了拷贝效率。
根据第一方面,或者以上第一方面的任意一种实现方式,所述摄像头框架将所述第一内存对齐格式与所述第二内存对齐格式进行比较之前,所述方法还包括:所述摄像头框架检测所述第一预览流内存块中缓冲的所述第一预览流是否为预设流格式;在所述第一预览流内存块中缓冲的所述第一预览流是所述预设流格式时,执行所述摄像头框架将所述第一内存对齐格式与所述第二内存对齐格式进行比较的步骤;在所述第一预览流内存块中缓冲的所述第一预览流不是所述预设流格式时,向所述摄像头应用回调模糊帧拷贝失败。这样,在执行模糊帧拷贝操作之前,先确定第一预览流内存块中是否存在预设流格式的第一预览流,在存在预设流格式的第一预览流时才执行上述模糊帧的拷贝方法,避免无效流程的执行,此外在不存在预设流格式的第一预览流时,直接向摄像头应用回调模糊帧拷贝失败,从而使得摄像头应用能够根据预设处理方式,如利用当前显示的第一预览画面进行模糊处理,避免黑屏出现,或者缩短黑屏时间,从而提升用户体验。
第二方面,提供一种电子设备。该电子设备的应用程序层安装有摄像头应用,应用程序框架层包括摄像头框架,HAL层包括摄像头硬件抽象层,所述摄像头框架分别与所述摄像头应用和所述摄像头硬件抽象层进行数据交互,该电子设备还包括:一个或多个处理器;存储器;以及一个或多个计算机程序,其中所述一个或多个计算机程序存储在所述存储器上,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:所述应用程序层监测到对所述摄像头应用的选中操作时,从所述摄像头框架获取缓冲了第一预览流的第一预览流内存块,根据所述第一预览流内存块中缓冲的所述第一预览流生成第一预览画面,并在显示界面显示所述第一预览画面,所述第一预览流由所述摄像头硬件抽象层上传,所述第一预览流的内存对齐格式为第一内存对齐格式;所述应用程序层监测到对所述摄像头应用中的任意一拍摄模式的切换操作时,向所述摄像头框架发送携带了预置画布信息的模糊帧请求,所述预置画布信息包括第二内存对齐格式;所述摄像头框架根据所述预置画布信息分配第二内存对齐格式的模糊帧内存块,采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块,并在完成拷贝后将所述模糊帧内存块发送至所述摄像头应用;在拍摄模式的切换过程中,所述摄像头应用对所述模糊帧内存块中的图像数据进行模糊处理,得到第二预览画面,并采用所述第二预览画面替换所述显示界面中显示的第一预览画面。
根据第二方面,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:所述应用程序层监测到对所述摄像头应用的选中操作时,向所述摄像头框架发送打开摄像头的请求;所述摄像头框架根据所述打开摄像头的请求,向所述摄像头硬件抽象层发送配置流;所述摄像头硬件抽象层根据所述配置流打开所述摄像头,并向所述摄像头框架上传所述第一内存对齐格式的所述第一预览流;所述摄像头框架根据所述第一内存对齐格式,为所述第一预览流分配所述第一内存对齐格式的所述第一预览流内存块,将所述第一预览流缓冲到所述第一预览流内存块,并将缓冲了所述第一预览流的所述第一预览流内存块发送至所述摄像头应用。
根据第二方面,或者以上第二方面的任意一种实现方式,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:所述摄像头应用将取出所述第一预览流后的所述第一预览流内存块回传给所述摄像头框架,供所述摄像头框架在接收到所述摄像头硬件抽象层上传的第二预览流后,将所述第二预览流缓冲到所述第一预览流内存块。
根据第二方面,或者以上第二方面的任意一种实现方式,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:在切换到选中的拍摄模式后,所述摄像头应用从所述摄像头框架中获取缓冲了第二预览流的第二预览流内存块,根据所述第二预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面,所述第二预览流为切换到选中的拍摄模式后,所述摄像头硬件抽象层上传,所述第二预览流的内存对齐格式为所述第一内存对齐格式。
根据第二方面,或者以上第二方面的任意一种实现方式,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:所述摄像头框架接收到所述摄像头硬件抽象层上传的所述第一内存对齐格式的所述第二预览流时,检测是否存在可复用的所述第一预览流内存块;在存在可复用的所述第一预览流内存块时,所述摄像头框架将所述第二预览流缓冲到所述第一预览流内存块,并将缓冲了所述第二预览流的所述第一预览流内存块发送至所述摄像头应用,供所述摄像头应用根据所述第一预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面;在不存在可复用的所述第一预览流内存块时,所述摄像头框架根据所述第一内存对齐格式,为所述第二预览流分配所述第一内存对齐格式的所述第二预览流内存块,将所述第二预览流缓冲到所述第二预览流内存块,并将缓冲了所述第二预览流的所述第二预览流内存块发送至所述摄像头应用,供所述摄像头应用根据所述第二预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面。
根据第二方面,或者以上第二方面的任意一种实现方式,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:所述摄像头框架将所述第一内存对齐格式与所述第二内存对齐格式进行比较;在所述第一内存对齐格式与所述第二内存对齐格式不同时,执行所述摄像头框架采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块的步骤;在所述第一内存对齐格式与所述第二内存对齐格式相同时,所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览流内存块中的内容整体拷贝到所述模糊帧内存块。
根据第二方面,或者以上第二方面的任意一种实现方式,所述第一预览流内存块中的内容包括所述图像数据和与所述图像数据拼接在一起的扩展内容,所述图像数据为生成所述第二预览画面的像素点,所述扩展内容用于占位;当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:所述摄像头框架基于YUV颜色编码方法,将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点拷贝到所述模糊帧内存块对应行中对应的位置。
根据第二方面,或者以上第二方面的任意一种实现方式,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:所述摄像头框架基于YUV颜色编码方法,确定所述第一预览流内存块中每一行每一位置对应的Y、U和V这三个通道的数值;所述摄像头框架根据Y、U和V这三个通道的数值的变化,将每一行用于生成所述第二预览画面的所述像素点的图像数据与用于占位的所述扩展内容区分开;所述摄像头框架将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点一一拷贝到所述模糊帧内存块对应行中对应的位置。
根据第二方面,或者以上第二方面的任意一种实现方式,所述第一预览流内存块中的内容包括所述图像数据和与所述图像数据拼接在一起的扩展内容,所述图像数据为生成所述第二预览画面的像素点,所述扩展内容用于占位;当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览流内存块中的所述图像数据和与所述图像数据拼接在一起的所述扩展内容一起拷贝到所述模糊帧内存块。
根据第二方面,或者以上第二方面的任意一种实现方式,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:所述摄像头框架检测所述第一预览流内存块中缓冲的所述第一预览流是否为预设流格式;在所述第一预览流内存块中缓冲的所述第一预览流是所述预设流格式时,执行所述摄像头框架将所述第一内存对齐格式与所述第二内存对齐格式进行比较的步骤;在所述第一预览流内存块中缓冲的所述第一预览流不是所述预设流格式时,向所述摄像头应用回调模糊帧拷贝失败。
第二方面以及第二方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第二方面以及第二方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
第三方面,提供一种计算机可读存储介质。该介质包括计算机程序,当计算机程序在电子设备上运行时,使得电子设备执行第一方面以及第一方面中任意一项中的拍摄模式的切换方法。
示例性的,电子设备可以为采用第一芯片的电子设备或采用第二芯片的电子设备。
示例性的,第一芯片提供的预览流的内存对齐格式与第二芯片提供的预览流的内存对齐格式不相同。
示例性的,第一芯片提供的预览流的内存对齐格式与第二芯片提供的预览流的内存对齐格式相同。
第三方面以及第三方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第三方面以及第三方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
第四方面,本申请实施例提供了一种计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的指令。
第四方面以及第四方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第四方面以及第四方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
第五方面,本申请实施例提供了一种芯片,该芯片包括处理电路、收发管脚。其中,该收发管脚、和该处理电路通过内部连接通路互相通信,该处理电路执行第一方面或第一方面的任一种可能的实现方式中的方法,以控制接收管脚接收信号,以控制发送管脚发送信号。示例性的,芯片可以为电子设备的芯片。
第五方面以及第五方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第五方面以及第五方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
第六方面,本申请实施例提供了一种电子设备的摄像头的装配方法,该方法包括:当电子设备采用的芯片为提供第一内存对齐格式的预览流的第一芯片时,摄像头框架分配的用于缓冲预览流的预览流内存块的内存对齐格式为所述第一内存对齐格式,并在监测到触发切换所述摄像头的拍摄模式时,使所述电子设备执行第一方面或第一方面的任一种可能的实现方式中的方法;当所述电子设备采用的芯片为提供第二内存对齐格式的预览流的第二芯片时,摄像头框架分配的用于缓冲预览流的预览流内存块的内存对齐格式为所述第二内存对齐格式,并在监测到触发切换所述摄像头的拍摄模式时,使所述电子设备执行第一方面或第一方面的任一种可能的实现方式中的方法;其中,所述第一内存对齐格式与所述第二内存对齐格式不同。
第六方面以及第六方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第六方面以及第六方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
附图说明
图1是示例性示出的现有采用同一套接口导致拍摄模式的切换过程出现异常的场景示意图;
图2是示例性示出的现有获取模糊帧的方式应用于的软件***架构图;
图3是示例性示出的现有获取模糊帧的时序图;
图4是示例性示出的缓冲器中一个数据块的步长与触发拍摄模式的切换操作时携带的用于拷贝模糊帧的画布的步长一致时,复制缓冲器数据的示意图;
图5是示例性示出的缓冲器中一个数据块的步长与触发拍摄模式的切换操作时携带的用于拷贝模糊帧的画布的步长不一致的示意图;
图6是示例性示出的手机的结构示意图;
图7是示例性示出的手机的软件结构示意图;
图8是示例性示出的本申请实施例提供的多平台共用一套模糊帧拷贝接口***的应用场景示意图;
图9是示例性示出的本申请实施例提供的拍摄模式的切换方法适用于的软件***架构图;
图10是示例性示出的本申请实施例提供的拍摄模式的切换方法适用于的又一软件***架构图;
图11是示例性示出的本申请实施例提供的拍摄模式的切换方法的流程示意图;
图12是示例性示出的本申请实施例提供的拍摄模式的切换方法从开启摄像头应用到拍摄模式切换成功过程中摄像头应用、摄像头框架和摄像头硬件抽象层之间进行数据交互的时序图;
图13是示例性示出的缓冲器中一个数据块的步长与触发拍摄模式的切换操作时携带的用于拷贝模糊帧的画布的步长不一致时,复制缓冲器数据的示意图;
图14是示例性示出的缓冲器中每行存储的图像数据以及行末添加的扩展内容的位置分布示意图;
图15是示例性示出的用于拷贝模糊帧的画布中每行用来存储图像数据以及行末添加的扩展内容的位置分布示意图;
图16a是示例性示出的从步长不一致的缓冲器中拷贝第一行的图像数据到画布的第一行后,画布中数据的分布示意图;
图16b是示例性示出的从步长不一致的缓冲器中拷贝第一行、第二行的图像数据分布到画布的第一行、第二行后,画布中数据的分布示意图;
图16c是示例性示出的将步长不一致的缓冲器中一个数据块内全部的图像数据拷贝到画布后,画布中数据的分布示意图;
图17是示例性示出的基于本申请实施例提供的拍摄模式的切换方法,采用同一套接口进行拍摄模式的切换时的场景示意图;
图18是示例性示出的本申请实施例提供的一种装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
本申请实施例的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一目标对象和第二目标对象等是用于区别不同的目标对象,而不是用于描述目标对象的特定顺序。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
在本申请实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。例如,多个处理单元是指两个或两个以上的处理单元;多个***是指两个或两个以上的***。
在对本申请实施例的技术方案说明之前,首先结合图1至图5对现有采用同一套模糊帧处理接口,在多个平台进行模糊帧拷贝的方案进行说明。
参见图1,假设手机主页面10中的相机应用10-1打开后的默认状态是启用后置摄像头,并处于拍照模式,当用户A需要使用相机应用10-1对用户B进行拍摄时,若用户A点击了相机应用10-1,并用后置摄像头对准了用户B,则相机应用10-1启动后,手机显示界面的20区域会呈现用户B的图像。
示例性的,在实际的应用场景中,手机显示界面除了在20区域显示用户B的图像,通常还会在20区域的顶部和底部显示一系列可供用户操作的功能按钮。比如,在区域20的顶部显示的进行前后摄像头模式切换的功能按钮20-1、开启实时拍摄模式的功能按钮20-2、开启美颜模式的功能按钮20-3、开启闪光灯模式的功能按钮20-4,以及位于区域20底部显示的开启摄像模式的功能按钮20-5、开启拍照模式的功能按钮20-6和进入图库的功能按钮20-7。
示例性的,若用户A想要从当前的拍照模式切换为摄像模式,只需点击显示界面中的功能按钮20-5即可。
相应地,当用户A点击了开启摄像模式的功能按钮20-5后,便会由现有支持模糊帧拷贝的***进行模糊帧拷贝,以使手机显示界面的20区域能够使用一帧模糊帧作为转场动画来进行过渡。
关于现有调用模糊帧的拷贝接口获取模糊帧的操作所适应于的软件***架构,如图2所示。
参见图2,位于手机***的应用程序层的摄像头应用,即用户A点击图1中的相机应用10-1后,手机***监测到用户A的点击操作后,会向位于应用程序框架层的摄像头框架下发打开摄像头的操作指令/请求,由摄像头框架调用相应的摄像头接口,并向硬件抽象层(Hardware Abstraction Layer,HAL层)的摄像头硬件抽象层下发配置流,从而开启摄像头应用。
相应地,当摄像头应用被开启后,当用户A并未点击显示界面的任意功能按钮时,摄像头硬件抽象层会持续的上报预览流。
可理解的,在实际的应用场景中,摄像头硬件抽象层中采用的芯片的类型、提供芯片的平台不同,上传的预览流存储到位于摄像头框架中的缓冲器中所占的内存不同,另外目前为了实现从缓冲器中高效、快速的拷贝预览流,通常会对预览流对应的图像数据进行内存对齐的操作,即在每一行图像数据的行末自动添加扩展内容(padding),从而实现内存对齐。
此外,需要说明的是,上述所说的图像数据即为需要在应用程序层的摄像头应用对应的显示界面的20区域显示的真实图像,如图1中显示界面的20区域显示的用户B的图像的每一个像素点;而行末自动添加的扩展内容,实质是没有任何内容的,仅仅是用来占位缓冲器的内存空间,对图像的显示不构成影响。
为了便于说明,图2给出了一种手机采用512位的芯片,因此由摄像头硬件抽象层上传到摄像头框架的预览流就是内存对齐格式为512位的预览流。
相应地,摄像头框架分配的用于缓冲该格式的内存块的内存对齐格式便是512位的。为了便于说明,以下将缓冲预览流的预览流内存块称为预览流Buffer。
可理解的,由于预览流的内存对齐格式是512位的,因此预览流Buffer中每行像素所占的步长(真实的图像数据的宽度+padding)即为512位。
应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。在实际应用中,由于摄像头硬件抽象层中芯片类型的不同,以及提供芯片的平台不同,上传的预览流的内存对齐格式也可能是64,或者128位。相应地,缓冲预览流的预览流Buffer的内存对齐格式可能是64位,也可能是128位,即与预览流的内存对齐格式一致,此处不再一一列举。
相应地,当用户A在默认的拍照模式下,点击了图1中的功能按钮20-6,摄像头硬件抽象层便会上报拍照流。
相应地,当用户在摄像模式下,点击了图1中的功能按钮20-5,摄像头硬件抽象层便会上报录像流。
需要说明的,关于视频流和录像流的上报过程图2中未详细示出,但在实际的应用过程中,视频流和录像流的上报过程与预览流类似,均是先从摄像头硬件抽象层上传至摄像头框架中的缓冲器,然后再从缓冲器取出上传至摄像头应用。
在摄像头应用开启后,位于手机***的应用程序层的摄像头应用,即用户A点击的图1中的相机应用10-1监测到用户A触发了模式切换功能,此时会向位于应用程序框架层的摄像头框架下发携带了预置画布(surface)信息的模糊帧请求。用于拷贝模糊帧的预置画布(surface)信息的模糊帧请求。
可理解的,由于现有模糊帧的拷贝,采用的是数据块的方式,进行整体拷贝,因而携带的预置surface信息为该预置surface对应的模糊帧Buffer需要的内存对齐格式。
关于上述所说的内存对齐格式,在实际的应用中也可以说成是在内存中每行真实图像数据和扩展内容所占的空间,即步长stride。
需要说明的是,图像处理中的stride是指在内存中每行像素所占的空间。正常情况下,stride值的计算方式为:stride=每个像素点占用的字节数(也就是像素位数/8)*图片宽度Width(公式1)。但是涉及到字节对齐的问题,就需要保证stride值是4的整数倍(因为内存对齐是按照4字节对齐),因此,在stride值不是4的整数倍时,stride值的计算方式为:stride=stride+(4-stride mod 4)(公式2)。
为了更好的理解,以下结合实例进行说明。
比如,对于预览流对应的图片是24位(像素位数)RGB格式的,图片宽度是20,,将上述数值带入公式1,计算出的结果为24/8*20=60,由于60是4的整数倍,因此stride值为60位。
还比如,对于预览流对应的图片是24位(像素位数)RGB格式的,图片宽度是21,将上述数值带入公式1,计算出的结果为24/8*21=63,由于63不是4的整数倍,将63带入公式2,计算出的结果为63+(4-63mod 4)=64,由于64是4的整数倍,因此stride值为64位。
应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。
由此,通过这种内存对齐方式,在拷贝图像数据时,便可以以预览流Buffer这一数据块为单位,将内存对齐的预览流从预览流Buffer中整体拷贝到模糊帧Buffer中。
为了更好的理解基于图2所示的软件***结构,如果在不同的平台(手机采用了不同的芯片)的手机中,采用同一套模糊帧接口获取模糊帧的方案,在按照上述图2的现有方案运行时,会面临问题,以下结合图3示出的流程图为例,进行说明。参见图3,从开启摄像头到触发模式切换获取模式帧的过程,包括:
步骤101,向摄像头框架发送打开摄像头的请求。
仍以图1所说的用户A打开手机主页面10上的相机应用10-1(摄像头应用),采用后置摄像头拍摄用户B为例。结合图2可知,步骤101具体是在位于应用程序层的摄像头应用监测到用户A的触发/点击操作后,向位于应用程序框架层的摄像头框架发起的请求。
步骤102,向摄像头硬件抽象层发送配置流。
具体的说,位于应用程序框架层的摄像头框架接收到来自应用程序层的摄像头应用下发的打开摄像头的请求后,便会调用预设的功能接口启动摄像头应用默认状态下需要开启的摄像头,并向位于HAL层的摄像头硬件抽象层下发调用对应摄像头所需的配置流。
步骤103,上传内存对齐为512位的预览流S1。
具体的说,位于HAL层的摄像头硬件抽象层,根据应用程序框架层中的摄像头框架下发的配置流程,完成对摄像头的配置后,在用户A没有触发/点击显示界面中的任意功能按钮时,便会持续向位于摄像头框架中的缓冲器上传当前采集到的预览流。
例如,在T1时刻,上传的是关于用户B的预览流S1,在T2时刻,上传的是关于用户B的预览流S2。
步骤104,为预览流S1分配内存对齐为512位的预览流Buffer,并缓冲预览流S1。
为了便于说明,仍以预览流进行内存对齐后为512位为例进行说明,则位于应用程序框架层的摄像头框架中的缓冲该预览流的预览流Buffer的内存对齐格式就需要是512位的,即预览流缓冲到预览流Buffer后,预览流Buffer中每行像素所占空间的步长为512位。
步骤105,上传预览流S1。
具体的说,如果摄像头硬件抽象层上传的T1时刻的预览流S1到达摄像头框架中的缓冲器后,用户A依旧没有触发/点击显示界面中的任意功能按钮,摄像头框架会将当期缓冲了预览流S1的预览流Buffer整个传输给摄像应用,供摄像头应用根据预览流Buffer中的预览流生成对应的预览画面,从而在图1所示的显示界面的区域20中显示生成的预览画面。
步骤106,触发切换模式。
具体的说,若摄像头应用监测到用户A触发/点击了显示界面中的任意功能按钮,比如用户A点击了图1中显示界面中的功能按钮20-5,即要从拍照模式切换到摄像模式,并确定触发了切换模式,需要在摄像头框架中执行模糊帧的拷贝操作。
步骤107,向摄像头框架发送携带了surface信息的模糊帧请求。
具体的说,摄像头应用在监测到用户A触发了模式切换后,便会向位于应用程序框架层的摄像头框架下发携带了预置surface信息的模糊帧请求。
示例性的,下发的携带了预置surface信息的模糊帧请求中,预置surface信息可以是内存对齐格式为64位,即摄像头框架根据该内存对齐格式分配的模糊帧Buffer中每行像素所占空间的步长为64位。
步骤108,根据surface信息分配内存对齐为64为的模糊帧Buffer。
步骤109,确定预览流Buffer与模糊帧Buffer的内存是否对齐。
具体的说,若二者的内存不对齐,即内存对齐格式不相同,则执行步骤109;若二者的内存对齐,即内存对齐格式相同,则执行步骤111。
参见图3,在预览流Buffer的内存对齐格式是512位,模糊帧Buffer的内存对齐格式是64位的情况下,二者的内存显然无法对齐,因此执行步骤110,回调失败,即无法进行模糊帧拷贝操作。
步骤110,回调失败。
可理解的,如果回调失败,则摄像头应用没有获取到模糊帧,因而模式切换过程中的转场动画没有办法使用模糊帧来进行过渡,因而画面切换比较生硬、突兀,甚至会出现跳变、黑屏现象。
步骤111,以预览流Buffer为单位,将预览流Buffer中的预览流S1整体拷贝到模糊帧Buffer。
具体的说,在以预览流Buffer为单位,将预览流Buffer中的预览流S1整体拷贝到模糊帧Buffer的过程中,实质是将预览流Buffer中所有的内容(真实的图像数据+padding)全部拷贝到模糊帧Buffer中。
为了更好的理解步骤111的操作,以下结合图4和图5进行说明。
参见图4,假设预览流Buffer中每行像素所占的空间中,真实的像素点,即图像数据a的宽度为X,每行末尾添加的扩展内容为Padding_1,预览流Buffer中每行像素所占的空间的步长为X+Padding_1=64位。
同样,假设模糊帧Buffer中每行像素所占的空间中,用于显示图像数据的宽度同样为X,每行末尾添加的扩展内容为Padding_2,模糊帧Buffer中每行像素所占的空间的步长为X+Padding_2=64位。
对于图4所示的情况,预览流Buffer的内存对齐格式和模糊帧Buffer的内存对齐格式是相同的,或者说步长是一致的,因此可以将预览流Buffer看做一个数据块,然后以该数据块为单位,整体拷贝到模糊帧Buffer中,从而使得完成数据拷贝操作后,模糊帧Buffer中显示的直接是图像数据a+Padding_1的内容。
对于预览流Buffer中每行像素所占空间的步长与模糊帧Buffer中每行像素所占空间的步长不一致的情况,如图5所示,假设X+Padding_1是512位,X+Padding_2是64位,显然二则步长不一致,如果将预览流Buffer当前缓冲的数据看做一个数据块复制到模糊帧Buffer中,必然会出现部分数据丢失,从而影响最终的显示结果,因此不能拷贝,所以这种情况下只能执行步骤110,向摄像头应用回调失败。
相应地,由于模糊帧拷贝操作失败,没有办法获取到模糊帧作为转场的动画实现过渡,因而显示界面的20区域会出现图1所示的黑屏现象,在切换模式切换完成后,收到摄像头硬件抽象层上报的录像流(图1是从拍摄模式切换到摄像模式)后,显示界面的20区域才会显示出用户B的图像。
步骤112,返回模糊帧Buffer。
具体的说,在拷贝成功后,将携带有拷贝的图像数据的模糊帧Buffer返回给摄像头应用,以供摄像头应用对模糊帧Buffer中的图像数据进行模糊处理。
步骤113,对模糊帧Buffer中的图像帧进行模糊处理,并显示。
具体的说,摄像头应用接收到携带有拷贝的图像数据的模糊帧Buffer后,基于预设的模糊算法对模糊帧Buffer中的图像数据进行模糊处理,并将模糊处理后的模糊帧显示在预置surface中,使用预设surface作为转场的动画,从而利用模糊帧实现模式切换过程中画面的过渡,避免显示界面的20区域出现黑屏现象。
步骤114,显示切换成功后的画面。
具体的说,在显示模糊帧画面后,如果监测到摄像头应用已经从用户A触发模式切换操作前的拍照模式切换为了摄像模式,并且接收到了摄像头硬件抽象层上传的录像流,则将显示界面的20区域中显示的模糊帧画面替换为切换成功后的画面,从而实现平滑过渡。
应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。
通过上述描述可以发现,由于摄像头硬件抽象层中采用的芯片类型的不同,以及提供芯片的平台的不同,缓冲摄像头硬件抽象层上传的预览流的预览流Buffer中每行像素所占的空间的步长会存在不同,比如可能是64位,可能是128位,还可能是512位等,而预置surface信息不同,会导致摄像头框架分配的模糊帧Buffer的步长,可能会与当前预览流Buffer对应的步长一致,也可能是不同的,因此如果采用统一套模糊帧的拷贝接口,即在采用不同平台提供的芯片的手机等具备摄像头的电子设备中均安装图2所示的软件***(摄像框架层中,以数据块为单位对缓冲器数据进行拷贝),显然无法适用。想要使每个平台的电子设备,在拍摄模式的切换时,都能获取到模糊帧作为转场动画进行过渡,就需要根据具体情况,对模糊帧拷贝接口或配置进行更改,而更改和重新配置的工作量会大大增加,并且不利于后期维护。
基于上述描述的现有采用同一套接口,在不同平台会导致拍摄模式的切换过程出现异常的技术问题,提出了本申请实施例提供的拍摄模式的切换方法及电子设备,以实现一套模糊帧拷贝接口,便可以适应于不同平台。
为了更好的描述本申请实施例提供的拍摄模式的切换方法及电子设备,以电子设备为手机为例,分别结合图6和图7对手机的硬件结构和软件结构进行描述。
参见图6,图6为本申请实施例示出的一种手机的结构示意图。图6虽然以手机为例说电子设备的结构,但本领域技术人员明了,图6中的手机的结构也适用于其他具备摄像头,并支持模式切换的电子设备。如图6所示,手机100可以包括处理器110,外部存储器接口120,内部存储器121,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的等待时间,因而提高了***的效率。
USB接口130是符合USB标准规范的接口,具体可以是Mini USB接口,Micro USB接口,USB Type C接口等,可支持USB1.0、USB2.0、USB3.0和USB4.0或者更高标准USB规范在内的各种USB规范。示例性的,USB接口130可以包括一个或多个USB接口。
此外,处理器110还用于从存储器中获取实现本申请实施例提供的拍摄模式的切换方法的指令,以根据获取到的指令按照本申请实施例提供的拍摄模式的切换方法,在预览流Buffer中每一行像素的空间的步长与模糊帧Buffer中每一行像素的空间的步长不一致时,实现模糊帧的拷贝。
此外,可以理解的是,本申请实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对手机100的结构限定。在本申请另一些实施例中,手机100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
充电管理模块140用于从充电器接收充电输入。电源管理模块141用于连接电池142,充电管理模块140与处理器110。手机100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
天线1和天线2用于发射和接收电磁波信号。手机100中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
移动通信模块150可以提供应用在手机100上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(lownoise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实施例中,移动通信模块150的至少部分功能模块可以被设置于处理器110中。在一些实施例中,移动通信模块150的至少部分功能模块可以与处理器110的至少部分模块被设置在同一个器件中。
无线通信模块160可以提供应用在手机100上的包括无线局域网(wireless localarea networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星***(global navigation satellite system,GNSS),调频(frequencymodulation,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),码分多址接入(code divisionmultiple access,CDMA),宽带码分多址(wideband code division multiple access,WCDMA),时分码分多址(time-division code division multiple access,TD-SCDMA),长期演进(long term evolution,LTE),BT,GNSS,WLAN,NFC,FM,和/或IR技术等。所述GNSS可以包括全球卫星定位***(global positioning system,GPS),全球导航卫星***(globalnavigation satellite system,GLONASS),北斗卫星导航***(beidou navigationsatellite system,BDS),准天顶卫星***(quasi-zenith satellite system,QZSS)和/或星基增强***(satellite based augmentation systems,SBAS)。
手机100可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展手机100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
手机100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
参见图7,图7为本申请实施例的手机100的软件结构框图。分层架构将软件分成若干层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android***分为五层,从上至下分别为应用程序层,***框架层,***库与运行时层(图7中将运行时层“安卓运行时”合在了***库中)和内核层。
应用程序层可以包括相机,图库,日历,运动健康,WLAN,音乐,视频等应用程序。需要说明的是,图7中示出的应用程序层所包括的应用程序仅为示例性说明,本申请对此不作限定。可以理解的是,应用程序层包括的应用并不构成对手机100的具体限定。在本申请另一些实施例中,相较于图7所示应用程序层包含的应用,手机100可包括更多或更少的应用,手机100也可包括完全不同的应用。
***框架层为应用程序层的应用程序提供应用编程接口(ApplicationProgramming Interface,API)和编程框架,包括各种组件和服务来支持开发者的安卓开发。***框架层包括一些预先定义的函数。如图7所示,***框架层可包括视图***、窗口管理器、资源管理器、内容提供器等。视图***包括可视控件,例如显示文字的控件,显示图片的控件等。视图***可用于构建应用程序。显示界面可以由一个或多个视图组成的。窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可包括视频,图像,音频等。
***库与运行时层包括***库和安卓运行时(Android Runtime)。***库可以包括多个功能模块。例如:浏览器内核,3D图形库(例如:OpenGL ES),字体库等。浏览器内核负责对网页语法的解释(如标准通用标记语言下的一个应用HTML、JavaScript)并渲染(显示)网页。3D图形库用于实现三维图形绘图,图像渲染,合成和图层处理等。字体库用于实现不同字体的输入。安卓运行时包括核心库和虚拟机。安卓运行时负责安卓***的调度和管理。核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
可以理解的是,图7示出的***框架层、***库与运行时层包含的部件,并不构成对手机100的具体限定。在本申请另一些实施例中,手机100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。
内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。
此外,可理解的是,本申请实施例的描述中,是以手机为例进行说明,在其他实施例中,本申请同样适用于具备摄像头的大屏、膝上型计算机、桌上型计算机、掌上型计算机(如平板电脑、智能手机等)等电子设备与具备摄像头的智能穿戴设备(如智能手表)等涉及启动摄像头应用后进行拍摄模式切换的场景。
为了更好的理解本申请实施例提供的拍摄模式的切法方法,以下结合图9对本申请实施例提供的拍摄模式的切换方法的应用场景进行说明。
参见图8,本申请实施例提供的拍摄模式的切换方法能够适用于不同平台的电子设备。前提是需要在每个平台提供的具体摄像头的电子设备中均安装本申请提供的能够适用于不同平台的电子设备进行模糊帧拷贝的***。
如图8所示,安装了本申请实施例提供的能够适用于不同平台的电子设备进行模糊帧拷贝的***的手机采用的是平台1提供的芯片(后续称为芯片1),假设位于摄像头硬件抽象层的芯片1处理后上传至摄像头框架中的预览流Buffer的内存对齐后的步长为64位的,并且在实际的缓冲过程中,该64位内存对齐的预览流Buffer中缓冲的需要显示的图像数据,如每行显示用户B的像素点的宽度为X,安装了本申请实施例提供的能够适用于不同平台的电子设备进行模糊帧拷贝的***的平板电脑采用的是平台2提供的芯片(后续称为芯片2),假设位于摄像头硬件抽象层的芯片2处理后上传至摄像头框架中的预览流Buffer的内存对齐后的步长为512位的,但在实际的缓冲过程中,该512位内存对齐的预览流Buffer中缓冲的需要显示的用户图像,如每行显示用户B的像素点的宽度同样为X。对于这两种平台提供的电子设备,若安装在手机中的相机应用和安装在平板电脑中的相机应用启动后,触发模式切换时下发的模糊帧请求中携带的预置surface信息的内存对齐均为64位,即手机的摄像头框架中分配的模糊帧Buffer的步长和平板电脑的摄像头框架中分配的模糊帧Buffer的步长均为64位,并且64位的模糊帧Buffer中用于显示图像数据的宽度为X(显示真实的图像数据的像素点的宽度)。那么基于本申请实施例提供的***,不论是内存对齐的手机,还是内存不对齐的平板电脑,均可以采用同一套模糊帧拷贝接口,实现拍摄模式切换过程中,转场画面的模糊过渡,而不会出现黑屏的现象。
关于本申请实施例提供的能够适用于不同平台的***的架构,以及在实现模糊帧拷贝时的具体流程,参见图9。
如图9所示,位于手机***的应用程序层的摄像头应用,如用户A点击图1中的相机应用10-1后,手机***监测到用户A的点击操作后,会向位于应用程序框架层的摄像头框架下发打开摄像头的操作指令,由摄像头框架调用相应的摄像头接口,并向硬件抽象层(HAL层)的摄像头硬件抽象层下发配置流,从而开启摄像头应用。
相应地,当摄像头应用被开启后,当用户A并未点击显示界面的任意功能按钮时,摄像头硬件抽象层会持续的上报预览流。
可理解的,在实际的应用场景中,摄像头硬件抽象层中采用的芯片类型、提供芯片的平台不同,上传的预览流存储到位于摄像头框架中的预览流Buffer所占的内存空间不同,另外目前为了实现从缓冲器中高效、快速的拷贝预览流,通常会对预览流对应的图像数据进行内存对齐的操作,即在每一行图像数据的行末自动添加扩展内容(padding),从而实现内存对齐。
此外,需要说明的是,上述所说的图像数据即为需要在应用程序层的摄像头应用对应的显示界面的20区域显示的真实图像,如图1中显示界面的20区域显示的用户B的图像的每一个像素点;而行末自动添加的扩展内容,实质是没有任何内容的,仅仅是用来占位缓冲器的内存空间,对图像的显示不构成影响。
结合图9可知,在摄像头应用开启后,位于手机***的应用程序层的摄像头应用,即用户A点击的图1中的相机应用10-1监测到用户A触发了模式切换功能,此时会向位于应用程序框架层的摄像头框架下发携带了用于预置surface信息的模糊帧请求。
关于模糊帧请求中携带的预置surface信息,图9仍以内存对齐为64位为例。
示例性的,当携带了上述信息的模糊帧请求到达摄像头框架后,摄像头框架便会根据预置surface信息分配模糊帧Buffer。
相应地,摄像头框架在分配了内存对齐为64为的模糊帧Buffer后,便会按行拷贝预览流Buffer中的图像数据,并在将预览流Buffer中的图像数据拷贝完后,将模糊帧Buffer返回个摄像头应用,以便摄像头应用根据模糊帧Buffer中的图像数据进行模糊处理,进而得到拍摄模式切换过程中,用于进行模糊过渡的转场画面。
此外,需要说明的是,由于本申请实施例提供的拍摄模糊的切换方法,能够适用于采用不同芯片的电子设备,即能够实现对不同内存对齐格式的预览流的拷贝,以下结合图10进行说明。
参见图10,分别示出了两种实现场景,其中HAL层中实线框示出的内容表示当前的电子设备(如手机)采用的是芯片1,假设由芯片1提供的预览流的内存对齐格式为512位,则在应用程序框架层的摄像头框架中,摄像头框架需要根据芯片1提供的预览流的内存对齐格式分配用于缓冲预览流的预览流Buffer。
可理解的,由于芯片1提供的预览流的内存对齐格式为512位的,摄像头框架中分配的预览流Buffer就需要是实线框示出的内存对齐为512位的预览流Buffer。
示例性的,如果电子设备(如手机)采用的是图10中HAL层中虚线框示出的芯片2,假设由芯片2提供的预览流的内存对齐格式为64位,则在应用程序框架层的摄像头框架中,摄像头框架需要根据芯片2提供的预览流的内存对齐格式分配用于缓冲预览流的预览流Buffer。
可理解的,由于芯片2提供的预览流的内存对齐格式为64位的,摄像头框架中分配的预览流Buffer就需要是虚线框示出的内存对齐为64位的预览流Buffer。
但是,不论使用的芯片是由哪个平台提供的,不论其内存对齐是哪种格式,在确定需要进行模糊帧拷贝时,基于本申请实施例提供的***架构的电子设备均是采用按行拷贝预览流Buffer中的如下数据的操作,如图10中的步骤7和步骤7’。因此,只要模糊帧Buffer中用于显示图像数据的宽度与预览流Buffer中存储的需要显示的图像数据的宽度一致(分辨率一样的情况下为一致),均可采用本***中提供的按行拷贝缓冲器中每一行的图像数据的方式来实现模糊帧的拷贝。
基于上述硬件结构和软件结构的电子设备,提出本申请实施例提供的拍摄模式的切换方法。
参见图11,关于本实施例提供的拍摄模式的切换方法的具体实现流程,具体包括:
步骤201,所述应用程序层监测到对所述摄像头应用的选中操作时,从所述摄像头框架获取缓冲了第一预览流的第一预览流内存块,根据所述第一预览流内存块中缓冲的所述第一预览流生成第一预览画面,并在显示界面显示所述第一预览画面。
具体的说,所述第一预览流由所述摄像头硬件抽象层上传,所述第一预览流的内存对齐格式为第一内存对齐格式,所述第二预览流内存块的内存对齐格式为第一内存对齐格式。
示例性的,在实际的应用场景中,所述应用程序层监测到对所述摄像头应用的选中操作时,从所述摄像头框架获取缓冲了第一预览流的第一预览内存块具体为:
所述摄像头框架根据所述打开摄像头的请求,向所述摄像头硬件抽象层发送配置流;
所述摄像头硬件抽象层根据所述配置流打开所述摄像头,并向所述摄像头框架上传所述第一内存对齐格式的所述第一预览流;
所述摄像头框架根据所述第一内存对齐格式,为所述第一预览流分配所述第一内存对齐格式的所述第一预览流内存块,将所述第一预览流缓冲到所述第一预览流内存块,并将缓冲了所述第一预览流的所述第一预览流内存块发送至所述摄像头应用。
此外,在实际的应用场景中,为了避免在内存中重复分配用于缓冲预览流的内存块,所述摄像头应用将取出所述第一预览流后的所述第一预览流内存块回传给所述摄像头框架,供所述摄像头框架在接收到所述摄像头硬件抽象层上传的第二预览流后,将所述第二预览流缓冲到所述第一预览流内存块,从而避免内存冗余。
步骤202,所述应用程序层监测到对所述摄像头应用中的任意一拍摄模式的切换操作时,向所述摄像头框架发送携带了预置画布信息的模糊帧请求,所述预置画布信息包括第二内存对齐格式。
可理解的,此处所说的预置画布信息,即预置surface信息,在一个例子中,预置surface信息可以是内存对齐格式为64位。
步骤203,所述摄像头框架根据所述预置画布信息分配第二内存对齐格式的模糊帧内存块,采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块,并在完成拷贝后将所述模糊帧内存块发送至所述摄像头应用。
示例性的,所述摄像头框架采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块之前,所述摄像头框架可以先将所述第一内存对齐格式与所述第二内存对齐格式进行比较。
相应地,在所述第一内存对齐格式与所述第二内存对齐格式不同时,执行所述摄像头框架采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块的步骤;在所述第一内存对齐格式与所述第二内存对齐格式相同时,所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览内存块中的内容整体拷贝到所述模糊帧内存块。
可理解的,由于进行了内存对齐的预览流包括图像数据和扩展内容两部分,因而所述第一预览流内存块中的内容包括所述图像数据和与所述图像数据拼接在一起的扩展内容,其中所述图像数据为生成所述第二预览画面的像素点,所述扩展内容padding用于占位,即所述扩展内容padding不影响画面的显示。
故而,所述摄像头框架采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块,具体是:所述摄像头框架基于YUV颜色编码方法,将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点拷贝到所述模糊帧内存块对应行中对应的位置。
示例性的,所述摄像头框架基于YUV颜色编码方法,将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点拷贝到所述模糊帧内存块对应行中对应的位置,具体为:
所述摄像头框架基于YUV颜色编码方法,确定所述第一预览流内存块中每一行每一位置对应的Y、U和V这三个通道的数值;
所述摄像头框架根据Y、U和V这三个通道的数值的变化,将每一行用于生成所述第二预览画面的所述像素点的图像数据与用于占位的所述扩展内容区分开;
所述摄像头框架将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点一一拷贝到所述模糊帧内存块对应行中对应的位置。
由此,实现了基于YUV颜色编码方法按行拷贝。
此外,关于所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览内存块中的内容整体拷贝到所述模糊帧内存块的操作,具体为:所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览内存块中的所述图像数据和与所述图像数据拼接在一起的所述扩展内容一起拷贝到所述模糊帧内存块。这样便实现了模糊帧的快速拷贝。
此外,在实际的应用场景中,从预览流Buffer中拷贝到模糊帧Buffer的图像数据,需要与摄像头应用根据模糊帧Buffer生成用来进行转场动画的surface能够显示的帧格式匹配,因此在进行模糊帧拷贝前,所述摄像头框架检测所述第一预览流内存块中缓冲的所述第一预览流是否为预设流格式,比如对于surface显示的是出0×23单帧格式的图像帧时,与之匹配的预设流格式便是0×11格式、0×22格式,即这六种流格式的预览流能解析出0×23单帧格式的图像帧。
相应地,在所述第一预览流内存块中缓冲的所述第一预览流是所述预设流格式时,执行所述摄像头框架将所述第一内存对齐格式与所述第二内存对齐格式进行比较的步骤;在所述第一预览流内存块中缓冲的所述第一预览流不是所述预设流格式时,向所述摄像头应用回调模糊帧拷贝失败。
示例性的,在实际的应用场景中,摄像头应用在收到回调失败的信息时,可以直接对当前显示界面中显示的第一预览画面进行模糊处理,避免出现黑屏。
应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。
步骤204,在拍摄模式的切换过程中,所述摄像头应用对所述模糊帧内存块中的图像数据进行模糊处理,得到第二预览画面,并采用所述第二预览画面替换所述显示界面中显示的第一预览画面。
进一步地,在切换到选中的拍摄模式后,所述摄像头应用还用于从所述摄像头框架中获取缓冲了第二预览流的第二预览流内存块,根据所述第二预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面,所述第二预览流为切换到选中的拍摄模式后,所述摄像头硬件抽象层上传,所述第二预览流的内存对齐格式为所述第一内存对齐格式,所述第二预览流内存块的内存对齐格式为所述第一内存对齐格式。
此外,由于摄像头应用在从第一预览流内存块取出第一预览流后,会将空的第一预览流内存块回传给摄像头框架,因此摄像头框架接收到所述摄像头硬件抽象层上传的所述第一内存对齐格式的所述第二预览流时,可以先检测是否存在可复用的所述第一预览流内存块。
相应地,在存在可复用的所述第一预览流内存块时,所述摄像头框架将所述第二预览流缓冲到所述第一预览流内存块,并将缓冲了所述第二预览流的所述第一预览流内存块发送至所述摄像头应用,供所述摄像头应用根据所述第一预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面;在不存在可复用的所述第一预览流内存块时,所述摄像头框架根据所述第一内存对齐格式,为所述第二预览流分配所述第一内存对齐格式的所述第二预览流内存块,将所述第二预览流缓冲到所述第二预览流内存块,并将缓冲了所述第二预览流的所述第二预览流内存块发送至所述摄像头应用,供所述摄像头应用根据所述第二预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面。
由此,实现了摄像头应用从开启到,到触发模式切换,到进行模糊帧拷贝,到实现模糊帧画面过渡,到拍摄模式切换完成切换到正常画面的一系列操作。为了更好的理解本实施例提供的拍摄模式的切换方法,以下结合图12对本申请实施例提供的拍摄模式的切换方法从开启摄像头应用到拍摄模式切换成功过程中摄像头应用、摄像头框架和摄像头硬件抽象层之间进行数据交互的时序图,对拍摄模糊的切换过程进行说明:
步骤301,向摄像头框架发送打开摄像头的请求。
步骤302,向摄像头硬件抽象层发送配置流。
步骤303,上传内存对齐为512位的预览流S2。
步骤304,为预览流S2分配内存对齐为512位的预览流Buffer,并缓冲预览流S2。
步骤305,上传预览流Buffer。
步骤306,触发模式切换。
步骤307,向摄像头框架发送携带了surface信息的模糊帧请求。
具体的说,由于本申请实施例提供的拍摄模式的切换方法,主要是针对触发模式切换后执行的模糊帧拷贝流程的改进,对于摄像头应用的打开,以及摄像头应用打开后,在用户未触发/点击显示界面中的任何功能按钮时,摄像头硬件抽象层持续上传预览流到摄像头框架中的缓冲器,并从缓冲器上传至摄像头应用,进行显示的过程,与现有方案类似,此处不再赘述。本实施例直接以位于应用程序层的摄像头应用监测到用户触发了模式切换操作,向位于应用程序框架层的摄像头框架下发模糊帧请求为起点。
可理解的,由于需要获取的模糊帧最终是要在预置surface中展示,因而在实际的应用场景中,摄像头应用向摄像头框架下发的模糊帧请求,需要携带预置surface信息。
进一步地,为了保证能够从预览流Buffer中获取到能够与预置surface需要显示的单帧格式匹配的流格式的预览流,模糊帧请求中还可以包括预置surface对应的单帧格式。
为了便于说明,本实施例以携带的预置surface信息具体为内存对齐(内存空间的步长(存储真实的像素点+扩展内容padding))为64位,单帧格式为0×23为例。
步骤308,根据surface信息分配内存对齐为64位的模糊帧Buffer。
步骤309,按行拷贝预览流Buffer中的图像数据到模糊帧Buffer。
具体的说,摄像头框架在接收到来自摄像头应用下发的携带了预置surface信息和单帧格式的模糊帧请求后,可以先从预览流Buffer中取出一帧预览流S2,然后检测预览流Buffer中是否有预设流格式的预览流S2。会从缓冲器中取出最新缓冲到缓判断取出的这一帧预览流是否为与0×23的单帧格式匹配的预设流格式。
示例性的,在实际的应用场景中,由于目前可以对预览流进行解析,并能够解析出0×23格式的图像帧的预览流的流格式通常为0×11、0×22。因此,在预置surface为0×23的单帧格式时,上述所说的与0×23的单帧格式匹配的预览流的预设流格式便为0×11、0×22。故而,此处判断的具体是预览流Buffer中是否缓冲了0×11、0×22格式的预览流。
应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。在实际的应用中,surface的单帧格式可以为其他类型,相应地与之匹配的预览流的格式即为能够解析出设置的单帧格式的预览流。
相应地,如果没有,则确定预览流Buffer中没有可以进行模糊帧处理的预览流,此时需要向位于应用程序层的摄像头应用回调模糊帧拷贝失败的回调信息;反之,如果有,则确定预览流Buffer中存在可以进行模糊帧处理的预览流,此时便可以进入步骤309,执行步骤309中的操作。
进一步地,在执行步骤309之前,可以先判断预览流Buffer和模糊帧Buffer的内存对齐格式是否相同。
相应地,若二者的内存对格式相同,即步长一致,这种情况下,可以锁住预览流Buffer,将当期预览流Buffer看作为一个数据块,然后以数据块为单位,将预览流Buffer中的内容(图像数据+padding)整体拷贝到模糊帧Buffer中,具体的拷贝过程,可以参加图4。
相应地,若二者的内存格式不相同,即步长不一致,这种情况下,便可以执行步骤309的操作。
具体的,在执行步骤309时,可以先锁住预览流Buffer,避免摄像头硬件抽象层向预览流Buffer中上传新的预览流,对模糊帧拷贝的过程造成影响;然后,由摄像头框架基于YUV颜色编码方法,将预览流Buffer中每一行用于生成第二预览画面(后续模糊操作后得到的模糊帧画面)的像素点拷贝到模糊帧Buffer对应行中对应的位置。
当然,在实际的应用场景中,不增加判断预览流Buffer和模糊帧Buffer二者内存对齐的逻辑也可以,这种情况下,不考虑内存是否对齐,预览流Buffer中缓冲的需要显示的图像数据的宽度与模糊帧Buffer中用于显示图像数据的宽度一致的情况下,直接按行拷贝预览流Buffer中每一行的图像数据到模糊帧Buffer中对应行即可。
关于上述所说的YUV颜色编码方法采用的是明亮度和色度来指定像素的颜色,而色度又定义了颜色的色调和饱和度两个方面。YUV颜色编码中的Y具体标示明亮度(Luminance、Luma),U和V表示色度(Chrominance、Chroma)。在实际的应用中,U,V分别是蓝色通道和红色通道,并且Y通道数值越高,图片越亮,U通道数值越高,颜色就越接近蓝色,V通道数值越高,颜色就越接近红色。
因此,基于YUV颜色编码的这一特性,在确定预览流Buffer中每行像素所占的空间的步长与模糊帧Buffer中每行像素所占的空间的步长不一致,即二者的内存不对齐时,为了解决现有直接回调失败,导致模糊帧拷贝失败,图1所示的显示界面的20区域出现黑屏现象,本申请实施例提供的拍摄模式的切换方法,改复制缓冲器中的数据块,为遍历每行的真实图像的像素点的方式,进行一一拷贝。具体的,先基于YUV颜色编码方法,识别预览流Buffer中每一行每一位置对应的Y、U和V这三个通道的数值,根据Y、U和V这三个通道的数值的变化,将每一行真实图像数据的像素点与没有内容的padding区分开,然后将每一行识别出的真实图像数据的像素点依次拷贝到模糊帧Buffer中对应行中对应的位置。
可理解的,在实际的应用场景中,添加在每行真实图像数据行末的padding,通常为空白的,因此这些padding对应的Y、U和V这三个通道的数值与真实图像数据的像素点对应的对应的Y、U和V这三个通道的数值会有明显的不同,基于这一特性便可以将缓冲器中每一行真实图像数据的像素点与行末添加的padding区分开。
为了更好的理解,本申请实施例提供的拍摄模式的切换方法在二者的内存不对齐时的模糊帧拷贝操作,以下结合图13进行说明。
参见图13,假设预览流Buffer中每行像素所占的空间的步长(X+Padding_1)为512位,而模糊帧Buffer中每行像素所占的空间的步长(X+Padding_2)为64位,则对预览流Buffer中图像数据a的拷贝过程具体是:从预览流Buffer的头部开始,按照分辨率找出真实的图像数据a,然后将每一行的真实图像数据分别拷贝至模糊帧Buffer中对应的行中。
可理解的,在实际的应用场景中,为了方便拷贝,图像数据a的每一行的末尾都会包含部分扩展内容(Padding_1),以保证内存对齐,但实际上这些扩展内容并不会影响图像数据a的显示。因而无论是64位、128位,还是512位的对齐方式,只要图像数据的分辨率相同,那么图像数据中所存储的真实的YUV显示数据的宽度X就是相同的,因此只要将用于显示的图像数据拷贝成功,就不用关心实际的存储的图像数据X+扩展内容Padding_1的大小。
因此,基于YUV颜色编码的这一特性,逐一识别预览流Buffer中每一行每一位置对应的Y、U和V这三个通道的数值,根据Y、U和V这三个通道的数值的变化,将每一行的图像数据a(需要显示的真实图像数据)的像素点与没有内容的padding区分开,然后将每一行识别出的真实图像数据的像素点依次拷贝到模糊帧Buffer中对应行中对应的位置。
关于拷贝过程,如图13所示,在开始数据拷贝前,模糊帧Buffer中可用于显示图像数据的区域是空的,即没有内容,在图像数据a的拷贝过程中,预览流Buffer中的图像数据a会逐行拷贝到模糊帧Buffer中,直到预览流Buffer中所有的图像数据a全部被拷贝到模糊帧Buffer中,即完成数据拷贝后的模糊帧Buffer的内容包括图像数据a和Padding_2。
为了更好的理解本申请实施例提供的在预览流Buffer中每行像素所占的空间的步长与模糊帧Buffer中每行像素所占的空间的步长不一致,即二者内存不对齐的情况下,如何按行拷贝预览流Buffer中每一行的图像数据到模糊帧Buffer中,以保证模糊帧拷贝的顺利进行,以下结合图14至图16c进行说明。
参见图14,预览流Buffer中每行像素所占的空间的步长=需要显示的图像数据a的宽度X+每行的行末添加的用于占位的扩展内容Padding_1=512位。其中,需要显示的图像数据a是由第一行“0”~“4”这5个像素点、第二行“8”~“12”这5个像素点,以及第三行“16”~“20”这5个像素点组成的。但是,在每一行的行末,均添加了宽度为Padding_1的扩展内容,如第一行像素点“4”后添加了“5”~“7”这3个用于占位的扩展内容,第二行像素点“12”后添加了“13”~“15”这3个用于占位的扩展内容,第三行像素点“16”后添加了“21”~“23”这3个用于占位的扩展内容。
参见图15,根据模糊帧请求中携带的预置surface信息分配的模糊帧Buffer中每行像素所占的空间的步长=用于显示图像数据的宽度X+每行的行末添加的用于占位的扩展内容Padding_2=64位。其中,用于显示图像数据位置分别第一行“0’”~“4’”这5个位置、第二行“7’”~“11’”这5个位置,以及第三行“14’”~“18’”这5个位置。但是,在每一行的行末,均添加了宽度为Padding_2的扩展内容,如第一行“4’”后添加了“5’”、“6’”这2个用于占位的扩展内容,第二行“11’”后添加了“12’”、“13’”这2个用于占位的扩展内容,第三行“18’”后添加了“19’”~“20’”这2个用于占位的扩展内容。
相应地,在确定预览流Buffer中每行像素所占的空间的步长(512位)与模糊帧Buffer中每行像素所占的空间的步长(64位)不一致时,锁住预览流Buffer,基于YUV颜色编码方法,先识别出第一行中图像数据a的像素点,如图14中第一行“0”~“4”这5个像素点,然后分别将这5个像素点拷贝到图15中第一行“0’”~“4’”这5个空的位置,具体是“0”到“0’”,“1”到“1’”,“2”到“2’”,“3”到“3’”,“4”到“4’”,在完成这5个像素点的拷贝后,模糊帧Buffer的数据分布便会如图16a所示。
接着,按照上述按行顺序拷贝需要显示的图像数据a的像素点的方式,拷贝图14所示的预览流Buffer中第二行的数据到图16a所示的模糊帧Buffer中,在完成图14中第二行“8”~“12”这5个像素点的拷贝后,模糊帧Buffer的数据分布便会如图16b所示。
接着,按照上述按行顺序拷贝需要显示的图像数据a的像素点的方式,拷贝图14所示的预览流Buffer中第三行的数据到图16b所示的模糊帧Buffer中,在完成图14中第三行“16”~“20”这5个像素点的拷贝后,模糊帧Buffer的数据分布便会如图16c所示,由此完成了对预览流Buffer中全部需要显示的图像数据a的拷贝。
此外,通过上述描述可以发现,本申请实施例提供的按行拷贝预览流Buffer中每一行图像数据到模糊帧Buffer中的方法,拷贝过程中预览流Buffer中图像数据a每一行末尾的Padding_1没有被拷贝到模糊帧Buffer中,模糊帧Buffer中存储了从预览流Buffer中拷贝的图像数据a,扩展内容依旧是模糊帧Buffer原本的Padding_2。
也就是说,在预览流Buffer中每一行像素所占的空间的步长与模糊帧Buffer中每一行像素所占的空间的步长不一致时,通过本申请实施例提供的模糊帧拷贝方式,当用户A点击主页面10中的相机应用10-1,采用默认的后置摄像头对用户B进行拍照时,如果监测到用户A点击了显示界面中开启摄像模式的功能按钮20-5,在摄像头应用和摄像头框架之间便会执行本申请实施例提供的拍摄模式的切换方法,进而无论预览流Buffer和模糊帧Buffer的内存是否对齐,均可以获取到模糊帧,从而在显示界面的20区域显示模糊处理后的用户B的图像(如图17中右下角用户B轮廓模糊的效果),并在显示模糊画面,且从拍照模式切换到拍摄模式,摄像头应用收到摄像头硬件抽象层上传的录像流时,显示模式切换成功后的图像。
应当理解的是,上述说明仅是为了更好的理解本实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。
步骤310上传模糊帧Buffer。
步骤311,对模糊帧Buffer中的图像帧进行模糊处理,并显示。
步骤312,显示切换成功后的画面。
由此,采用本申请实施例提供的拍摄模式的切换方法,在多平台、多场景下,能够在预览流Buffer轮巡,即复用时,针对预览流Buffer中每一行像素所占空间的步长与模糊帧Buffer中每一行像素所占空间的步长不一致时,顺利完成模糊帧的拷贝出来,从而在不许更改配置的情况下,能够适用于多平台技术的适配,实现了对非对齐格式的兼容。
进一步地,基于本申请实施例提供的拍摄模式的切换方法,无需根据每一个芯片平台进行单独适配图像步长格式,在提升多平台与多场景适配性的同时也减少了后续开发和维护的流程。
此外,在实际的应用中,本申请实施例提供的拍摄模式的切换方法,在多平台、多场景中,不仅适用于从缓冲器中的预览流提取出模糊帧,还适用于从拍照流或者录像流等数据流中提取出模糊帧,比如在多平台场景下,通过在预览过程中多次获取缓冲器中缓冲的数据帧,然后将多帧数据做成图形交互格式(Graphics Interchange Format,GIF)的图像或视频大纲。
此外,可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件和/或软件模块。结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以结合实施例对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本实施例可以根据上述方法示例对电子设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块可以采用硬件的形式实现。需要说明的是,本实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
示例性的,图18示出了本申请实施例的一种装置400的示意性框图。装置400可包括:处理器401和收发器/收发管脚402,可选地,还包括存储器403。
装置400的各个组件通过总线404耦合在一起,其中,总线404除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图中将各种总线都称为总线404。
可选地,存储器403可以用于前述方法实施例中的指令。该处理器401可用于执行存储器303中的指令,并控制接收管脚接收信号,以及控制发送管脚发送信号。
装置400可以是具备摄像头,并支持不同拍摄模式的电子设备,如上述方法实施例中提到的手机。
示例性的,在所述装置为电子设备时,所述电子设备的应用程序层安装有摄像头应用,应用程序框架层包括摄像头框架,HAL层包括摄像头硬件抽象层,所述摄像头框架分别与所述摄像头应用和所述摄像头硬件抽象层进行数据交互,所述电子设备还包括:一个或多个处理器;存储器;以及一个或多个计算机程序,其中所述一个或多个计算机程序存储在所述存储器上,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述应用程序层监测到对所述摄像头应用的选中操作时,从所述摄像头框架获取缓冲了第一预览流的第一预览流内存块,根据所述第一预览流内存块中缓冲的所述第一预览流生成第一预览画面,并在显示界面显示所述第一预览画面,所述第一预览流由所述摄像头硬件抽象层上传,所述第一预览流的内存对齐格式为第一内存对齐格式;
所述应用程序层监测到对所述摄像头应用中的任意一拍摄模式的切换操作时,向所述摄像头框架发送携带了预置画布信息的模糊帧请求,所述预置画布信息包括第二内存对齐格式;
所述摄像头框架根据所述预置画布信息分配第二内存对齐格式的模糊帧内存块,采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块,并在完成拷贝后将所述模糊帧内存块发送至所述摄像头应用;
在拍摄模式的切换过程中,所述摄像头应用对所述模糊帧内存块中的图像数据进行模糊处理,得到第二预览画面,并采用所述第二预览画面替换所述显示界面中显示的第一预览画面。
示例性的,在另外一个例子中,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述应用程序层监测到对所述摄像头应用的选中操作时,向所述摄像头框架发送打开摄像头的请求;
所述摄像头框架根据所述打开摄像头的请求,向所述摄像头硬件抽象层发送配置流;
所述摄像头硬件抽象层根据所述配置流打开所述摄像头,并向所述摄像头框架上传所述第一内存对齐格式的所述第一预览流;
所述摄像头框架根据所述第一内存对齐格式,为所述第一预览流分配所述第一内存对齐格式的所述第一预览流内存块,将所述第一预览流缓冲到所述第一预览流内存块,并将缓冲了所述第一预览流的所述第一预览流内存块发送至所述摄像头应用。
示例性的,在另外一个例子中,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述摄像头应用将取出所述第一预览流后的所述第一预览流内存块回传给所述摄像头框架,供所述摄像头框架在接收到所述摄像头硬件抽象层上传的第二预览流后,将所述第二预览流缓冲到所述第一预览流内存块。
示例性的,在另外一个例子中,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
在切换到选中的拍摄模式后,所述摄像头应用从所述摄像头框架中获取缓冲了第二预览流的第二预览流内存块,根据所述第二预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面,所述第二预览流为切换到选中的拍摄模式后,所述摄像头硬件抽象层上传,所述第二预览流的内存对齐格式为所述第一内存对齐格式。
示例性的,在另外一个例子中,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述摄像头框架接收到所述摄像头硬件抽象层上传的所述第一内存对齐格式的所述第二预览流时,检测是否存在可复用的所述第一预览流内存块;
在存在可复用的所述第一预览流内存块时,所述摄像头框架将所述第二预览流缓冲到所述第一预览流内存块,并将缓冲了所述第二预览流的所述第一预览流内存块发送至所述摄像头应用,供所述摄像头应用根据所述第一预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面;
在不存在可复用的所述第一预览流内存块时,所述摄像头框架根据所述第一内存对齐格式,为所述第二预览流分配所述第一内存对齐格式的所述第二预览流内存块,将所述第二预览流缓冲到所述第二预览流内存块,并将缓冲了所述第二预览流的所述第二预览流内存块发送至所述摄像头应用,供所述摄像头应用根据所述第二预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面。
示例性的,在另外一个例子中,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述摄像头框架将所述第一内存对齐格式与所述第二内存对齐格式进行比较;
在所述第一内存对齐格式与所述第二内存对齐格式不同时,执行所述摄像头框架采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块的步骤;
在所述第一内存对齐格式与所述第二内存对齐格式相同时,所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览流内存块中的内容整体拷贝到所述模糊帧内存块。
示例性的,在另外一个例子中,所述第一预览流内存块中的内容包括所述图像数据和与所述图像数据拼接在一起的扩展内容,所述图像数据为生成所述第二预览画面的像素点,所述扩展内容用于占位;
当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述摄像头框架基于YUV颜色编码方法,将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点拷贝到所述模糊帧内存块对应行中对应的位置。
示例性的,在另外一个例子中,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述摄像头框架基于YUV颜色编码方法,确定所述第一预览流内存块中每一行每一位置对应的Y、U和V这三个通道的数值;
所述摄像头框架根据Y、U和V这三个通道的数值的变化,将每一行用于生成所述第二预览画面的所述像素点的图像数据与用于占位的所述扩展内容区分开;
所述摄像头框架将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点一一拷贝到所述模糊帧内存块对应行中对应的位置。
示例性的,在另外一个例子中,所述第一预览流内存块中的内容包括所述图像数据和与所述图像数据拼接在一起的扩展内容,所述图像数据为生成所述第二预览画面的像素点,所述扩展内容用于占位;
当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览流内存块中的所述图像数据和与所述图像数据拼接在一起的所述扩展内容一起拷贝到所述模糊帧内存块。
示例性的,在另外一个例子中,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述摄像头框架检测所述第一预览流内存块中缓冲的所述第一预览流是否为预设流格式;
在所述第一预览流内存块中缓冲的所述第一预览流是所述预设流格式时,执行所述摄像头框架将所述第一内存对齐格式与所述第二内存对齐格式进行比较的步骤;
在所述第一预览流内存块中缓冲的所述第一预览流不是所述预设流格式时,向所述摄像头应用回调模糊帧拷贝失败。
其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
本申请实施例还提供了一种电子设备的摄像头的装配方法,具体的:当电子设备采用的芯片为提供第一内存对齐格式的预览流的第一芯片时,摄像头框架分配的用于缓冲预览流的预览流内存块的内存对齐格式为所述第一内存对齐格式,并在监测到触发切换所述摄像头的拍摄模式时,使所述电子设备执行上述相关方法步骤实现上述实施例中的拍摄模式的切换方法;
当所述电子设备采用的芯片为提供第二内存对齐格式的预览流的第二芯片时,摄像头框架分配的用于缓冲预览流的预览流内存块的内存对齐格式为所述第二内存对齐格式,并在监测到触发切换所述摄像头的拍摄模式时,使所述电子设备执行上述相关方法步骤实现上述实施例中的拍摄模式的切换方法。
本申请实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在电子设备/网络设备(例如OTA服务器、CABE服务器)上运行时,使得电子设备/网络设备执行上述相关方法步骤实现上述实施例中的拍摄模式的切换方法。
本申请实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的拍摄模式的切换方法。
另外,本申请的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的拍摄模式的切换方法。
其中,本实施例提供的电子设备、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
通过以上实施方式的描述,所属领域的技术人员可以了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
本申请各个实施例的任意内容,以及同一实施例的任意内容,均可以自由组合。对上述内容的任意组合均在本申请的范围之内。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。

Claims (23)

1.一种拍摄模式的切换方法,其特征在于,应用于电子设备,所述电子设备的应用程序层安装有摄像头应用,应用程序框架层包括摄像头框架,HAL层包括摄像头硬件抽象层,所述摄像头框架分别与所述摄像头应用和所述摄像头硬件抽象层进行数据交互,所述方法包括:
所述应用程序层监测到对所述摄像头应用的选中操作时,从所述摄像头框架获取缓冲了第一预览流的第一预览流内存块,根据所述第一预览流内存块中缓冲的所述第一预览流生成第一预览画面,并在显示界面显示所述第一预览画面,所述第一预览流由所述摄像头硬件抽象层上传,所述第一预览流的内存对齐格式为第一内存对齐格式;
所述应用程序层监测到对所述摄像头应用中的任一拍摄模式的切换操作时,向所述摄像头框架发送携带了预置画布信息的模糊帧请求,所述预置画布信息包括第二内存对齐格式;
所述摄像头框架根据所述预置画布信息分配第二内存对齐格式的模糊帧内存块,采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块,并在完成拷贝后将所述模糊帧内存块发送至所述摄像头应用;
在拍摄模式的切换过程中,所述摄像头应用对所述模糊帧内存块中的图像数据进行模糊处理,得到第二预览画面,并采用所述第二预览画面替换所述显示界面中显示的第一预览画面。
2.根据权利要求1所述的方法,其特征在于,所述应用程序层监测到对所述摄像头应用的选中操作时,从所述摄像头框架获取缓冲了第一预览流的第一预览流内存块,包括:
所述应用程序层监测到对所述摄像头应用的选中操作时,向所述摄像头框架发送打开摄像头的请求;
所述摄像头框架根据所述打开摄像头的请求,向所述摄像头硬件抽象层发送配置流;
所述摄像头硬件抽象层根据所述配置流打开所述摄像头,并向所述摄像头框架上传所述第一内存对齐格式的所述第一预览流;
所述摄像头框架根据所述第一内存对齐格式,为所述第一预览流分配所述第一内存对齐格式的所述第一预览流内存块,将所述第一预览流缓冲到所述第一预览流内存块,并将缓冲了所述第一预览流的所述第一预览流内存块发送至所述摄像头应用。
3.根据权利要求1所述的方法,其特征在于,所述应用程序层监测到对所述摄像头应用的选中操作时,从所述摄像头框架获取缓冲了第一预览流的第一预览流内存块,根据所述第一预览流内存块中缓冲的所述第一预览流生成第一预览画面,并在显示界面显示所述第一预览画面之后,所述方法还包括:
所述摄像头应用将取出所述第一预览流后的所述第一预览流内存块回传给所述摄像头框架,供所述摄像头框架在接收到所述摄像头硬件抽象层上传的第二预览流后,将所述第二预览流缓冲到所述第一预览流内存块。
4.根据权利要求3所述的方法,其特征在于,所述在拍摄模式的切换过程中,所述摄像头应用对所述模糊帧内存块中的图像数据进行模糊处理,得到第二预览画面,并采用所述第二预览画面替换所述显示界面中显示的第一预览画面之后,所述方法还包括:
在切换到选中的拍摄模式后,所述摄像头应用从所述摄像头框架中获取缓冲了第二预览流的第二预览流内存块,根据所述第二预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面,所述第二预览流为切换到选中的拍摄模式后,所述摄像头硬件抽象层上传,所述第二预览流的内存对齐格式为所述第一内存对齐格式。
5.根据权利要求4所述的方法,其特征在于,在切换到选中的拍摄模式后,所述方法还包括:
所述摄像头框架接收到所述摄像头硬件抽象层上传的所述第一内存对齐格式的所述第二预览流时,检测是否存在可复用的所述第一预览流内存块;
在存在可复用的所述第一预览流内存块时,所述摄像头框架将所述第二预览流缓冲到所述第一预览流内存块,并将缓冲了所述第二预览流的所述第一预览流内存块发送至所述摄像头应用,供所述摄像头应用根据所述第一预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面;
在不存在可复用的所述第一预览流内存块时,所述摄像头框架根据所述第一内存对齐格式,为所述第二预览流分配所述第一内存对齐格式的所述第二预览流内存块,将所述第二预览流缓冲到所述第二预览流内存块,并将缓冲了所述第二预览流的所述第二预览流内存块发送至所述摄像头应用,供所述摄像头应用根据所述第二预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述摄像头框架采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块之前,所述方法还包括:
所述摄像头框架将所述第一内存对齐格式与所述第二内存对齐格式进行比较;
在所述第一内存对齐格式与所述第二内存对齐格式不同时,执行所述摄像头框架采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块的步骤;
在所述第一内存对齐格式与所述第二内存对齐格式相同时,所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览流内存块中的内容整体拷贝到所述模糊帧内存块。
7.根据权利要求6所述的方法,其特征在于,所述第一预览流内存块中的内容包括所述图像数据和与所述图像数据拼接在一起的扩展内容,所述图像数据为生成所述第二预览画面的像素点,所述扩展内容用于占位;
所述摄像头框架采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块,包括:
所述摄像头框架基于YUV颜色编码方法,将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点拷贝到所述模糊帧内存块对应行中对应的位置。
8.根据权利要求7所述的方法,其特征在于,所述摄像头框架基于YUV颜色编码方法,将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点拷贝到所述模糊帧内存块对应行中对应的位置,包括:
所述摄像头框架基于YUV颜色编码方法,确定所述第一预览流内存块中每一行每一位置对应的Y、U和V这三个通道的数值;
所述摄像头框架根据Y、U和V这三个通道的数值的变化,将每一行用于生成所述第二预览画面的所述像素点的图像数据与用于占位的所述扩展内容区分开;
所述摄像头框架将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点一一拷贝到所述模糊帧内存块对应行中对应的位置。
9.根据权利要求8所述的方法,其特征在于,所述第一预览流内存块中的内容包括所述图像数据和与所述图像数据拼接在一起的扩展内容,所述图像数据为生成所述第二预览画面的像素点,所述扩展内容用于占位;
所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览流内存块中的内容整体拷贝到所述模糊帧内存块,包括:
所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览流内存块中的所述图像数据和与所述图像数据拼接在一起的所述扩展内容一起拷贝到所述模糊帧内存块。
10.根据权利要求6所述的方法,其特征在于,所述摄像头框架将所述第一内存对齐格式与所述第二内存对齐格式进行比较之前,所述方法还包括:
所述摄像头框架检测所述第一预览流内存块中缓冲的所述第一预览流是否为预设流格式;
在所述第一预览流内存块中缓冲的所述第一预览流是所述预设流格式时,执行所述摄像头框架将所述第一内存对齐格式与所述第二内存对齐格式进行比较的步骤;
在所述第一预览流内存块中缓冲的所述第一预览流不是所述预设流格式时,向所述摄像头应用回调模糊帧拷贝失败。
11.一种电子设备,其特征在于,所述电子设备的应用程序层安装有摄像头应用,应用程序框架层包括摄像头框架,HAL层包括摄像头硬件抽象层,所述摄像头框架分别与所述摄像头应用和所述摄像头硬件抽象层进行数据交互,所述电子设备还包括:
一个或多个处理器;
存储器;
以及一个或多个计算机程序,其中所述一个或多个计算机程序存储在所述存储器上,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述应用程序层监测到对所述摄像头应用的选中操作时,从所述摄像头框架获取缓冲了第一预览流的第一预览流内存块,根据所述第一预览流内存块中缓冲的所述第一预览流生成第一预览画面,并在显示界面显示所述第一预览画面,所述第一预览流由所述摄像头硬件抽象层上传,所述第一预览流的内存对齐格式为第一内存对齐格式;
所述应用程序层监测到对所述摄像头应用中的任意一拍摄模式的切换操作时,向所述摄像头框架发送携带了预置画布信息的模糊帧请求,所述预置画布信息包括第二内存对齐格式;
所述摄像头框架根据所述预置画布信息分配第二内存对齐格式的模糊帧内存块,采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块,并在完成拷贝后将所述模糊帧内存块发送至所述摄像头应用;
在拍摄模式的切换过程中,所述摄像头应用对所述模糊帧内存块中的图像数据进行模糊处理,得到第二预览画面,并采用所述第二预览画面替换所述显示界面中显示的第一预览画面。
12.根据权利要求11所述的电子设备,其特征在于,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述应用程序层监测到对所述摄像头应用的选中操作时,向所述摄像头框架发送打开摄像头的请求;
所述摄像头框架根据所述打开摄像头的请求,向所述摄像头硬件抽象层发送配置流;
所述摄像头硬件抽象层根据所述配置流打开所述摄像头,并向所述摄像头框架上传所述第一内存对齐格式的所述第一预览流;
所述摄像头框架根据所述第一内存对齐格式,为所述第一预览流分配所述第一内存对齐格式的所述第一预览流内存块,将所述第一预览流缓冲到所述第一预览流内存块,并将缓冲了所述第一预览流的所述第一预览流内存块发送至所述摄像头应用。
13.根据权利要求11所述的电子设备,其特征在于,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述摄像头应用将取出所述第一预览流后的所述第一预览流内存块回传给所述摄像头框架,供所述摄像头框架在接收到所述摄像头硬件抽象层上传的第二预览流后,将所述第二预览流缓冲到所述第一预览流内存块。
14.根据权利要求13所述的电子设备,其特征在于,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
在切换到选中的拍摄模式后,所述摄像头应用从所述摄像头框架中获取缓冲了第二预览流的第二预览流内存块,根据所述第二预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面,所述第二预览流为切换到选中的拍摄模式后,所述摄像头硬件抽象层上传,所述第二预览流的内存对齐格式为所述第一内存对齐格式。
15.根据权利要求14所述的电子设备,其特征在于,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述摄像头框架接收到所述摄像头硬件抽象层上传的所述第一内存对齐格式的所述第二预览流时,检测是否存在可复用的所述第一预览流内存块;
在存在可复用的所述第一预览流内存块时,所述摄像头框架将所述第二预览流缓冲到所述第一预览流内存块,并将缓冲了所述第二预览流的所述第一预览流内存块发送至所述摄像头应用,供所述摄像头应用根据所述第一预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面;
在不存在可复用的所述第一预览流内存块时,所述摄像头框架根据所述第一内存对齐格式,为所述第二预览流分配所述第一内存对齐格式的所述第二预览流内存块,将所述第二预览流缓冲到所述第二预览流内存块,并将缓冲了所述第二预览流的所述第二预览流内存块发送至所述摄像头应用,供所述摄像头应用根据所述第二预览流内存块中缓冲的所述第二预览流生成第三预览画面,并采用所述第三预览画面替换所述显示界面中显示的第二预览画面。
16.根据权利要求11至15任一项所述的电子设备,其特征在于,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述摄像头框架将所述第一内存对齐格式与所述第二内存对齐格式进行比较;
在所述第一内存对齐格式与所述第二内存对齐格式不同时,执行所述摄像头框架采用按行拷贝的方式,将所述第一预览流内存块中的图像数据按行拷贝到所述模糊帧内存块的步骤;
在所述第一内存对齐格式与所述第二内存对齐格式相同时,所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览流内存块中的内容整体拷贝到所述模糊帧内存块。
17.根据权利要求16所述的电子设备,其特征在于,所述第一预览流内存块中的内容包括所述图像数据和与所述图像数据拼接在一起的扩展内容,所述图像数据为生成所述第二预览画面的像素点,所述扩展内容用于占位;
当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述摄像头框架基于YUV颜色编码方法,将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点拷贝到所述模糊帧内存块对应行中对应的位置。
18.根据权利要求17所述的电子设备,其特征在于,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述摄像头框架基于YUV颜色编码方法,确定所述第一预览流内存块中每一行每一位置对应的Y、U和V这三个通道的数值;
所述摄像头框架根据Y、U和V这三个通道的数值的变化,将每一行用于生成所述第二预览画面的所述像素点的图像数据与用于占位的所述扩展内容区分开;
所述摄像头框架将所述第一预览流内存块中每一行用于生成所述第二预览画面的所述像素点拷贝一一到所述模糊帧内存块对应行中对应的位置。
19.根据权利要求18所述的电子设备,其特征在于,所述第一预览流内存块中的内容包括所述图像数据和与所述图像数据拼接在一起的扩展内容,所述图像数据为生成所述第二预览画面的像素点,所述扩展内容用于占位;
当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述摄像头框架以所述第一预览流内存块为单位,将所述第一预览流内存块中的所述图像数据和与所述图像数据拼接在一起的所述扩展内容一起拷贝到所述模糊帧内存块。
20.根据权利要求16所述的电子设备,其特征在于,当所述计算机程序被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
所述摄像头框架检测所述第一预览流内存块中缓冲的所述第一预览流是否为预设流格式;
在所述第一预览流内存块中缓冲的所述第一预览流是所述预设流格式时,执行所述摄像头框架将所述第一内存对齐格式与所述第二内存对齐格式进行比较的步骤;
在所述第一预览流内存块中缓冲的所述第一预览流不是所述预设流格式时,向所述摄像头应用回调模糊帧拷贝失败。
21.一种电子设备的摄像头的装配方法,其特征在于,包括:
当电子设备采用的芯片为提供第一内存对齐格式的预览流的第一芯片时,摄像头框架分配的用于缓冲预览流的预览流内存块的内存对齐格式为所述第一内存对齐格式,并在监测到触发切换所述摄像头的拍摄模式时,使所述电子设备执行权利要求1至10任一项所述的拍摄模式的切换方法;
当所述电子设备采用的芯片为提供第二内存对齐格式的预览流的第二芯片时,摄像头框架分配的用于缓冲预览流的预览流内存块的内存对齐格式为所述第二内存对齐格式,并在监测到触发切换所述摄像头的拍摄模式时,使所述电子设备执行权利要求1至10任一项所述的拍摄模式的切换方法;
其中,所述第一内存对齐格式与所述第二内存对齐格式不同。
22.一种芯片,其特征在于,包括:一个或多个接口电路和一个或多个处理器;所述接口电路用于从电子设备的存储器接收信号,并向所述处理器发送所述信号,所述信号包括存储器中存储的计算机指令;当所述处理器执行所述计算机指令时,使得所述电子设备执行权利要求1至10任一项所述的拍摄模式的切换方法。
23.一种计算机可读存储介质,包括计算机程序,其特征在于,当所述计算机程序在电子设备上运行时,使得所述电子设备执行如权利要求1至10任一项所述的拍摄模式的切换方法。
CN202110910375.1A 2021-08-09 2021-08-09 拍摄模式的切换方法及电子设备 Active CN113766120B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110910375.1A CN113766120B (zh) 2021-08-09 2021-08-09 拍摄模式的切换方法及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110910375.1A CN113766120B (zh) 2021-08-09 2021-08-09 拍摄模式的切换方法及电子设备

Publications (2)

Publication Number Publication Date
CN113766120A true CN113766120A (zh) 2021-12-07
CN113766120B CN113766120B (zh) 2022-08-09

Family

ID=78788837

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110910375.1A Active CN113766120B (zh) 2021-08-09 2021-08-09 拍摄模式的切换方法及电子设备

Country Status (1)

Country Link
CN (1) CN113766120B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116680001A (zh) * 2022-12-20 2023-09-01 荣耀终端有限公司 一种相机应用的启动方法、可读存储介质和电子设备
CN116723416A (zh) * 2022-10-21 2023-09-08 荣耀终端有限公司 图像处理方法及电子设备
CN117135259A (zh) * 2023-04-11 2023-11-28 荣耀终端有限公司 摄像头的切换方法及电子设备
WO2024109213A1 (zh) * 2022-11-22 2024-05-30 荣耀终端有限公司 拍摄模式切换方法及相关装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103716535A (zh) * 2013-12-12 2014-04-09 乐视致新电子科技(天津)有限公司 一种切换拍摄模式方法和电子设备
CN107465875A (zh) * 2017-09-13 2017-12-12 北京元心科技有限公司 相机预览数据缓存方法及装置
CN107534774A (zh) * 2015-05-01 2018-01-02 高途乐公司 相机模式控制
WO2019071548A1 (zh) * 2017-10-13 2019-04-18 深圳传音通讯有限公司 终端拍照控制方法、移动终端及可读储存介质
CN110113526A (zh) * 2019-04-22 2019-08-09 联想(北京)有限公司 处理方法、处理装置和电子设备
WO2021047567A1 (zh) * 2019-09-12 2021-03-18 华为技术有限公司 一种回调流的处理方法及设备

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103716535A (zh) * 2013-12-12 2014-04-09 乐视致新电子科技(天津)有限公司 一种切换拍摄模式方法和电子设备
CN107534774A (zh) * 2015-05-01 2018-01-02 高途乐公司 相机模式控制
CN107465875A (zh) * 2017-09-13 2017-12-12 北京元心科技有限公司 相机预览数据缓存方法及装置
WO2019071548A1 (zh) * 2017-10-13 2019-04-18 深圳传音通讯有限公司 终端拍照控制方法、移动终端及可读储存介质
CN110113526A (zh) * 2019-04-22 2019-08-09 联想(北京)有限公司 处理方法、处理装置和电子设备
WO2021047567A1 (zh) * 2019-09-12 2021-03-18 华为技术有限公司 一种回调流的处理方法及设备

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116723416A (zh) * 2022-10-21 2023-09-08 荣耀终端有限公司 图像处理方法及电子设备
CN116723416B (zh) * 2022-10-21 2024-04-02 荣耀终端有限公司 图像处理方法及电子设备
WO2024109213A1 (zh) * 2022-11-22 2024-05-30 荣耀终端有限公司 拍摄模式切换方法及相关装置
CN116680001A (zh) * 2022-12-20 2023-09-01 荣耀终端有限公司 一种相机应用的启动方法、可读存储介质和电子设备
CN117135259A (zh) * 2023-04-11 2023-11-28 荣耀终端有限公司 摄像头的切换方法及电子设备
CN117135259B (zh) * 2023-04-11 2024-06-07 荣耀终端有限公司 摄像头的切换方法、电子设备、芯片***及可读存储介质

Also Published As

Publication number Publication date
CN113766120B (zh) 2022-08-09

Similar Documents

Publication Publication Date Title
CN113766120B (zh) 拍摄模式的切换方法及电子设备
KR102149187B1 (ko) 전자 장치와, 그의 제어 방법
CN114071197B (zh) 投屏数据处理方法和装置
CN114461375B (zh) 内存资源管理方法及电子设备
CN115526787B (zh) 视频处理方法和装置
CN116389884B (zh) 缩略图显示方法及终端设备
CN116048323B (zh) 图像处理方法及电子设备
CN115564659B (zh) 视频处理方法和装置
EP4246961A1 (en) Display synchronization method, electronic device, and readable storage medium
CN116418994A (zh) 一种图像编码方法以及装置
CN117651221A (zh) 视频处理的方法及电子设备
CN110365962B (zh) 色域转换处理方法、装置以及电子设备
CN110378973B (zh) 图像信息处理方法、装置以及电子设备
CN108881999B (zh) 一种截屏处理方法及***
EP3826294A1 (en) Systems and methods for image processing
CN110602359A (zh) 图像处理方法、图像处理器、拍摄装置和电子设备
CN117082295B (zh) 图像流处理方法、设备及存储介质
CN116723264B (zh) 确定目标位置信息的方法、设备及存储介质
CN115802144B (zh) 视频拍摄方法及相关设备
CN116028383B (zh) 缓存管理方法及电子设备
CN117278864B (zh) 图像拍摄方法、电子设备及存储介质
CN116347217B (zh) 图像处理方法、设备及存储介质
CN117076284B (zh) 页面加载时长的检测方法、设备及存储介质
CN115460343B (zh) 图像处理方法、设备及存储介质
CN117135468A (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
GR01 Patent grant
GR01 Patent grant