Android5.0 Camera HAL3 源代码分析

27 篇文章 2 订阅
8 篇文章 0 订阅

Android5.0对camera framework层进行了较大的调整,使用了支持HAL3的Camera3Device架构。下面就分析一下这个架构的结构和主要代码逻辑。

HAL3的设计思想:

        

其实HAL的代码复杂但是理清楚他的设计思想后还是比较简单的。Camera应用端与CameraService的交互还是一模一样的,只是以前的CameraClient变成了Camera2Client。在Camera2Client,有六个Processor(StreamingProcessor,CallbackProcessor,FrameProcessor,CaptureProcessor,CaptureSequencer,ZslProcessor,JpegProcessor),分别处理不同的请求,比如StreamingProcessor对应的是预览,JpegProcessor对应的是jpeg拍照。跟HAL1一样,Camera2Client也有一个device对象Camera3Device,他与Hal层的camera3_device_t对应。每个操作比如拍,照录像都会交给其中的一个或多个Processor处理。每个Processor都有一个或多个Stream。Stream分为Camera3OutputStream和Camera3InputStream。每个Camera3OutputStream其实就是一个生产者消费者功能单元,每个Camera3OutputStream都有一个consumer,目前consumer有CPUConsumer和SurfaceFilnger两个类型。所有的操作请求通过一个或多个Processor构建一个或多个OutputStream和InputStream。然后将这些Stream汇总起来封装成一个个Request。目前的Request主要有mPreviewRequest,mCaptureRequest,mRecordingRequest三种Request。而所有的Request在发给HAL层前都统一转化为CaptureRequest。请求的内容封装完成后就会通知RequestThread通过mHal3Device->ops->process_capture_request()通知HAL去处理这个请求,比如拍照啊,截取数据帧啊。在发送的Request还携带了的各个OutputStream的buffer,这些buffer是调用Stream的Consumer的dequeueBuffer获取的,我的理解是HAL层在获取到数据后可以在HAL层直接填充这些buffer。

请求已经下发完成,接下来就是数据的回调,Camera3Devcie继承自camera3_callback_ops,这个类有两个重要的函数notify和process_capture_result。底层拍照或者截取数据流等成功和失败后会把对应的信息通过这两个函数回调上来,然后交给Camera3Device处理,进而遍历之前创建的每个Stream处理,Stream会把数据交给SurfaceFilinger和CpuComsumer。如此完成数据的获取或推送到渲染引擎。

其中总结起来,app的请求通过Processor创建各个Stream,其实就是产生一个数组,包括所有提供食物的人(数据),消费数据的人。然后封装成一个个Request,通知HAL处理这个类型的请求。完成后回调Device的接口,然后Device遍历他里面的所有的OutPutStream,数据已经准备好了,挨个给他们喂食就好了,然后大家吃饱了,事情就算结束了。

 主要函数调用:

设置previewTarget

Camera2Client::setPreviewTarget()àStreamingProcessor::setPreviewWindow()--->mPreviewWindow = window

数据回调:

camera3_callback_ops_t.process_capture_result()--->sProcessCaptureResult()--->Camera3Device.processCaptureResult()--->Camera3Device.returnOutputBuffers()--->Camera3Stream.returnBuffer()---> Camera3Stream.returnBufferLocked()


http://blog.csdn.net/luozirong/article/details/54343835
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android相机硬件抽象层(Camera HAL)是Android系统中的一个组件,它提供了一个标准的接口,使应用程序可以与不同类型的相机硬件进行通信。Camera HAL负责管理相机硬件的驱动程序,并将相机数据传递给应用程序。它还提供了一些功能,如自动对焦、曝光控制和图像处理。Camera HAL是Android相机架构中的重要组成部分,它使得开发人员可以轻松地开发出高质量的相机应用程序。 ### 回答2: Android Camera HAL(硬件抽象层)是一种软件层,它实现了操作系统和相机硬件之间的通信。它为相机硬件提供了一种标准的接口,并允许操作系统与硬件之间进行通信,使用户可以在操作系统的界面上控制相机硬件。HAL为开发人员提供了一种开发相机驱动的标准接口,使他们能够使用相同的API在多个设备上编写相机应用程序。 Android Camera HAL提供了一些常见的功能,例如设置相机参数(如曝光时间、焦距、白平衡等)、捕获图像、处理传感器数据和检测触发事件等。HAL将这些功能作为API提供给应用程序,允许应用程序使用这些功能进行自定义图像处理。 除了这些常见的功能,HAL还放宽了操作系统和硬件之间的联系,因为它提供了一个统一的接口。这意味着开发人员可以通过编写HAL来支持新的相机硬件,而不必修改操作系统的源代码。这种可扩展性使得HAL成为一个非常强大的工具,使开发人员能够轻松地集成新硬件和新功能。 总的来说,Android Camera HAL允许开发人员轻松访问和控制相机硬件,并通过使用标准API开发相机应用程序。HAL还促进了相机硬件的可扩展性和可配置性,因为它提供了一个单一的接口,使得不同的设备可以使用相同的API访问底层硬件。 ### 回答3: Android相机HAL(硬件抽象层)是一种旨在提高Android设备相机性能和兼容性的软件组件。HAL是指在底层(硬件、驱动程序、操作系统等)运行的一组软件接口,它们负责把应用程序的请求翻译成与底层硬件通信的命令。 Android相机HAL负责控制相机的硬件功能,例如焦距、曝光、闪光灯、白平衡和图像处理等。HAL相当于一个中间层,使应用程序能够从硬件细节中解放出来,并以一种统一的方式使用不同的摄像头硬件。 不同厂商的相机硬件有很多不同之处,例如像素密度、传感器类型、镜头质量等等。HAL的设计是为了让所有Android设备的应用程序在不同的相机硬件上都能很好地运行。 在HAL中,有两个主要组件:HAL模块和框架层。HAL模块是用于控制硬件的代码库,包括相机驱动程序、图像处理和传感器控制等。框架层按照HAL接口规范与HAL模块通信,并向应用程序提供相机服务。 与传统的相机API不同,Android相机HAL的架构是在原生级别上实现的。这意味着Android设备的各个供应商可以自由地为硬件开发HAL模块,以适应各自的需求。 总之,Android相机HAL的目的是提高相机性能和兼容性。HAL的设计使所有Android设备的应用程序都能使用不同的摄像头硬件,并简化了与底层硬件的通信。这种设计为各个供应商提供了灵活的发展空间,也推动了Android相机的发展和普及。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值