本讲是Android Camera Native Framework专题的第23讲,我们介绍Parcel对象相关的AIDL详解。
更多资源:
资源 | 描述 |
---|---|
在线课程 | 极客笔记在线课程 |
知识星球 | 星球名称:深入浅出Android Camera 星球ID: 17296815 |
极客笔记圈 |
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等信息 |