camera概览

Android 的相机硬件抽象层 (HAL) 可将 Camera 2 中较高层级的相机框架 API 连接到底层的相机驱动程序和硬件。相机子系统包括相机管道组件的实现,而相机 HAL 可提供用于实现您的这些组件版本的接口。

架构
图 1. 相机架构
应用框架
应用代码位于应用框架级别,它使用 Camera 2 API 与相机硬件进行交互。在内部,这些代码会调用相应的 Binder 接口,以访问与相机互动的原生代码。
AIDL
与 CameraService 关联的 Binder 接口可在 frameworks/av/camera/aidl/android/hardware 中找到。生成的代码会调用较低级别的原生代码以获取对实体相机的访问权限,并返回用于在框架级别创建 CameraDevice 并最终创建 CameraCaptureSession 对象的数据。
原生框架
此框架位于 frameworks/av/ 中,并提供相当于 CameraDevice 和 CameraCaptureSession 类的原生类。另请参阅 NDK camera2 参考。
Binder IPC 接口
IPC binder 接口用于实现跨越进程边界的通信。调用相机服务的若干个相机 Binder 类位于 frameworks/av/camera/camera/aidl/android/hardware 目录中。 ICameraService 是相机服务的接口;ICameraDeviceUser 是已打开的特定相机设备的接口;ICameraServiceListener 和 ICameraDeviceCallbacks 分别是对应用框架的 CameraService 和 CameraDevice 回调。
相机服务
位于 frameworks/av/services/camera/libcameraservice/CameraService.cpp 下的相机服务是与 HAL 进行互动的实际代码。
HAL
硬件抽象层定义了由相机服务调用、且您必须实现以确保相机硬件正常运行的标准接口。

实现 HAL
HAL 位于相机驱动程序和更高级别的 Android 框架之间,它定义您必须实现的接口,以便应用可以正确地操作相机硬件。相机 HAL 的 HIDL 接口在 hardware/interfaces/camera 中定义。

典型的绑定式 HAL 必须实现以下 HIDL 接口:

ICameraProvider:用于枚举单个设备并管理其状态。
ICameraDevice:相机设备接口。
ICameraDeviceSession:活跃的相机设备会话接口。
参考 HIDL 实现适用于CameraProvider.cpp、CameraDevice.cpp 和 CameraDeviceSession.cpp。该实现封装了仍使用旧版 API 的旧 HAL。从 Android 8.0 开始,相机 HAL 实现必须使用 HIDL API;不支持使用旧版接口。

配置共享库
设置 Android 编译系统,以将 HAL 实现正确打包到共享库中,并通过创建 Android.mk 文件将其复制到相应位置:

创建一个 device/<company_name>/<device_name>/camera 目录以包含您库的源文件。
创建一个 Android.mk 文件来编译共享库。确保 makefile 包含以下行:
LOCAL_MODULE := camera.<device_name>
LOCAL_MODULE_RELATIVE_PATH := hw

您的库必须命名为 camera.<device_name>(自动附加 .so),以便 Android 可以正确加载库。例如,请参阅 hardware/ti/omap4xxx/Android.mk 中的 Galaxy Nexus 相机的 makefile。

使用您设备的 makefile 复制 frameworks/native/data/etc 目录中的必要功能 XML 文件,以指定您的设备具有相机功能。例如,要指定您的设备具有相机闪光灯并可自动对焦,请在您设备的 /<company_name>/<device_name>/device.mk makefile 中添加以下行:
PRODUCT_COPY_FILES := \ …

PRODUCT_COPY_FILES +=
frameworks/native/data/etc/android.hardware.camera.flash-autofocus.xml:system/etc/permissions/android.hardware.camera.flash-autofocus.xml \

有关设备 makefile 的示例,请参阅 device/samsung/tuna/device.mk。

在 device/<company_name>/<device_name>/media_profiles.xml 和 device/<company_name>/<device_name>/media_codecs.xml XML 文件中声明您相机的媒体编解码器、格式和分辨率功能。如需了解详情,请参阅将编解码器展示给框架。
在您设备的 device/<company_name>/<device_name>/device.mk makefile 中添加以下行,以将 media_profiles.xml 和 media_codecs.xml 文件复制到相应位置:

media config xml file

PRODUCT_COPY_FILES +=
///media_profiles.xml:system/etc/media_profiles.xml

media codec config xml file

PRODUCT_COPY_FILES +=
///media_codecs.xml:system/etc/media_codecs.xml

要将相机应用包含在设备的系统映像中,请在设备的 device///device.mk makefile 中的 PRODUCT_PACKAGES 变量中指定该应用:
PRODUCT_PACKAGES :=
Gallery2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值