https://deepinout.com/android-camera-native-framework/camera-java-fw-aidl-parcel-related-aidl-details.html
跨binder通信必须先将数据写到parcel里面
1 Camera2 Java FW AIDL有哪些自定义的Parcel对象
在AIDL的客户端和服务端通信的过程中,除了方法调用外,我们还需要传递一些数据,这些数据的类型都必须是parcelable的(需要实现 writeToParcel & readFromParcel )
1.1 有哪些Parcel对象
frameworks/av/camera/aidl/android/hardware/camera2/impl/CameraMetadataNative.aidl
/** @hide */
parcelable CameraMetadataNative cpp_header "camera/CameraMetadata.h";
//定义一个 parcelable对象 名字叫做 CameraMetadataNative,编译成c++代码的时候需要引用头文件
针对 parcelable 对象一定要实现其 读写方法
frameworks/av/camera/aidl/android/hardware/camera2/impl/CaptureResultExtras.aidl
parcelable CaptureResultExtras cpp_header "camera/CaptureResult.h";
frameworks/av/camera/aidl/android/hardware/camera2/params/OutputConfiguration.aidl
parcelable OutputConfiguration cpp_header "camera/camera2/OutputConfiguration.h";
CaptureRequest
impl
CameraMetadataNative
CaptureResultExtras
PhysicalCaptureResultInfo
params
OutputConfiguration
SessionConfiguration
VendorTagDescriptor
VendorTagDescriptorCache
utils
CameraIdAndSessionConfiguration
ConcurrentCameraIdCombination
SubmitInfo
2 Camera2 Java FW不会生成中间文件的AIDL文件说明
- 如果一个AIDL文件没有被放在android.bp文件中,而仅仅是被其他AIDL文件import引用的话,在编译时不会生成对应的源代码(Java/C++)。
- 因为在Android编译系统中,只有在使用aidl规则,直接处理某个AIDL文件时才会生成相应的代码,当一个AIDL文件被import引用时,并不会单独处理该文件,而是一起处理引用它的AIDL文件。因此,即使在被引用的AIDL文件中定义了parcelable或interface关键字,也不会单独生成对应的源代码(Java/C++)。
3 Camera2 Java FW Parcel AIDL详解