第23讲 Parcel对象相关的AIDL详解

本讲是Android Camera Native Framework专题的第23讲,我们介绍Parcel对象相关的AIDL详解。

更多资源:

资源 描述
在线课程 极客笔记在线课程
知识星球 星球名称:深入浅出Android Camera 星球ID: 17296815
Wechat 极客笔记圈

Camera2 Java FW AIDL有哪些自定义的Parcel对象

在AIDL的客户端和服务端通信的过程中,除了方法调用外,我们还需要传递一些数据,这些数据的类型都必须是parcelable的(需要实现writeToParcel & readFromParcel )

有哪些Parcel对象

  • CaptureRequest

  • impl

    • CameraMetadataNative

    • CaptureResultExtras

    • PhysicalCaptureResultInfo

  • params

    • OutputConfiguration
    • SessionConfiguration
    • VendorTagDescriptor
    • VendorTagDescriptorCache
  • utils
    • CameraIdAndSessionConfiguration
    • ConcurrentCameraIdCombination
    • SubmitInfo

Camera2 Java FW不会生成中间文件的AIDL文件说明

如果一个AIDL文件没有被放在android.bp文件中,而仅仅是被其他AIDL文件import引用的话,在编译时不会生成对应的源代码(Java/C++)。

因为在Android编译系统中,只有在使用aidl规则,直接处理某个AIDL文件时才会生成相应的代码,当一个AIDL文件被import引用时,并不会单独处理该文件,而是一起处理引用它的AIDL文件。因此,即使在被引用的AIDL文件中定义了parcelable或interface关键字,也不会单独生成对应的源代码(Java/C++)。

Camera2 Java FW Parcel AIDL详解

AIDL Java C++
impl/CameraMetadataNative.aidl CameraMetadataNative.java CameraMetadata.cpp
impl/CaptureResultExtras.aidl CaptureResultExtras.java CaptureResult.cpp
impl/PhysicalCaptureResultInfo.aidl PhysicalCaptureResultInfo.java CaptureResult.cpp
params/OutputConfiguration.aidl OutputConfiguration.java OutputConfiguration.cpp
params/SessionConfiguration.aidl SessionConfiguration.java SessionConfiguration.cpp
params/VendorTagDescriptor.aidl VendorTagDescriptor.java VendorTagDescriptor.cpp
params/VendorTagDescriptorCache.aidl VendorTagDescriptorCache.java VendorTagDescriptor.cpp
utils/CameraIdAndSessionConfiguration.aidl CameraIdAndSessionConfiguration.java ConcurrentCamera.cpp
utils/ConcurrentCameraIdCombination.aidl ConcurrentCameraIdCombination.java ConcurrentCamera.cpp
utils/SubmitInfo.aidl SubmitInfo.java SubmitInfo.cpp
CaptureRequest.aidl CaptureRequest.java CaptureRequest.cpp

为什么要自己写Parcel对象的Java/C++端代码

  • writeToParcel & readFromParcel 逻辑复杂,无法通过代码生成

  • 在Java/C++端,对应的Parcel对象中还定义了一些非Binder通信调用的方法

Parcel对象 说明
CameraMetadataNative 本质上是CameraMetadata,是对camera_metadata_t的封装,提供了一系列方法来操作camera_metadata_t
CaptureResultExtras 存放CaptureResult里面的各种索引信息(如partialResultCount, requestId等),只在Framework使用
PhysicalCaptureResultInfo 包括Physical Camera和Physical CameraMetadata
OutputConfiguration 描述一个Output Stream的配置信息(比如宽/高/是否shared等)
SessionConfiguration Session配置信息
VendorTagDescriptor VendorTag的描述信息,目前Java端的没有使用
VendorTagDescriptorCache 按Vendor ID存放VendorTagDescriptor,目前Java端的没有使用
CameraIdAndSessionConfiguration 描述可以并行Configure Session的ID和SessionConfiguration
ConcurrentCameraIdCombination 描述可以并行Configure Session的ID
SubmitInfo 包括RequestId和LastFrameNumber,描述submitRequestList的返回信息
CaptureRequest 描述一次CaptureRequest,包括mPhysicalCameraSettings和mSurfaceList等信息

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Android Camera Native Framework