第18讲 Camera Java Framework AIDL概述

本讲是Android Camera Native Framework专题的第18讲,我们介绍Camera Java Framework AIDL概述。

更多资源:

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

Camera Java Framework AIDL文件路径

路径:/frameworks/av/camera/aidl/android/hardware/

Android 13 ICameraService.aidl代码如下:

/*
 * Copyright (C) 2013 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.hardware;

import android.hardware.ICamera;
import android.hardware.ICameraClient;
import android.hardware.camera2.ICameraDeviceUser;
import android.hardware.camera2.ICameraDeviceCallbacks;
import android.hardware.camera2.ICameraInjectionCallback;
import android.hardware.camera2.ICameraInjectionSession;
import android.hardware.camera2.params.VendorTagDescriptor;
import android.hardware.camera2.params.VendorTagDescriptorCache;
import android.hardware.camera2.utils.ConcurrentCameraIdCombination;
import android.hardware.camera2.utils.CameraIdAndSessionConfiguration;
import android.hardware.camera2.impl.CameraMetadataNative;
import android.hardware.ICameraServiceListener;
import android.hardware.CameraInfo;
import android.hardware.CameraStatus;

/**

  • Binder interface for the native camera service running in mediaserver.

  • @hide
    /
    interface ICameraService
    {
    /
    *

    • All camera service and device Binder calls may return a
    • ServiceSpecificException with the following error codes
      */
      const int ERROR_PERMISSION_DENIED = 1;
      const int ERROR_ALREADY_EXISTS = 2;
      const int ERROR_ILLEGAL_ARGUMENT = 3;
      const int ERROR_DISCONNECTED = 4;
      const int ERROR_TIMED_OUT = 5;
      const int ERROR_DISABLED = 6;
      const int ERROR_CAMERA_IN_USE = 7;
      const int ERROR_MAX_CAMERAS_IN_USE = 8;
      const int ERROR_DEPRECATED_HAL = 9;
      const int ERROR_INVALID_OPERATION = 10;

    /**

    • Types for getNumberOfCameras
      */
      const int CAMERA_TYPE_BACKWARD_COMPATIBLE = 0;
      const int CAMERA_TYPE_ALL = 1;

    /**

    • Return the number of camera devices available in the system
      */
      int getNumberOfCameras(int type);

    /**

    • Fetch basic camera information for a camera device
      */
      CameraInfo getCameraInfo(int cameraId);

    /**

    • Default UID/PID values for non-privileged callers of
    • connect() and connectDevice()
      */
      const int USE_CALLING_UID = -1;
      const int USE_CALLING_PID = -1;

    /**

    • Open a camera device through the old camera API
      */
      ICamera connect(ICameraClient client,
      int cameraId,
      String opPackageName,
      int clientUid, int clientPid,
      int targetSdkVersion);

    /**

    • Open a camera device through the new camera API
    • Only supported for device HAL versions >= 3.2
      */
      ICameraDeviceUser connectDevice(ICameraDeviceCallbacks callbacks,
      String cameraId,
      String opPackageName,
      @nullable String featureId,
      int clientUid, int oomScoreOffset,
      int targetSdkVersion);

    /**

    • Add listener for changes to camera device and flashlight state.
    • Also returns the set of currently-known camera IDs and state of each device.
    • Adding a listener will trigger the torch status listener to fire for all
    • devices that have a flash unit.
      */
      CameraStatus addListener(ICameraServiceListener listener);

    /**

    • Get a list of combinations of camera ids which support concurrent streaming.

    */
    ConcurrentCameraIdCombination getConcurrentCameraIds();

    /**

    • Check whether a particular set of session configurations are concurrently supported by the
    • corresponding camera ids.
    • @param sessions the set of camera id and session configuration pairs to be queried.
    • @param targetSdkVersion the target sdk level of the application calling this function.
    • @return true - the set of concurrent camera id and stream combinations is supported.
    •     false - the set of concurrent camera id and stream combinations is not supported
      
    •             OR the method was called with a set of camera ids not returned by
      
    •             getConcurrentCameraIds().
      

    */
    boolean isConcurrentSessionConfigurationSupported(
    in CameraIdAndSessionConfiguration sessions,
    int targetSdkVersion);

    /**

    • Remove listener for changes to camera device and flashlight state.
      */
      void removeListener(ICameraServiceListener listener);

    /**

    • Read the static camera metadata for a camera device.
    • Only supported for device HAL versions >= 3.2
      */
      CameraMetadataNative getCameraCharacteristics(String cameraId, int targetSdkVersion);

    /**

    • Read in the vendor tag descriptors from the camera module HAL.
    • Intended to be used by the native code of CameraMetadataNative to correctly
    • interpret camera metadata with vendor tags.
      */
      VendorTagDescriptor getCameraVendorTagDescriptor();

    /**

    • Retrieve the vendor tag descriptor cache which can have multiple vendor
    • providers.
    • Intended to be used by the native code of CameraMetadataNative to correctly
    • interpret camera metadata with vendor tags.
      */
      VendorTagDescriptorCache getCameraVendorTagCache();

    /**

    • Read the legacy camera1 parameters into a String
      */
      String getLegacyParameters(int cameraId);

    /**

    • apiVersion constants for supportsCameraApi
      */
      const int API_VERSION_1 = 1;
      const int API_VERSION_2 = 2;

    // Determines if a particular API version is supported directly for a cameraId.
    boolean supportsCameraApi(String cameraId, int apiVersion);
    // Determines if a cameraId is a hidden physical camera of a logical multi-camera.
    boolean isHiddenPhysicalCamera(String cameraId);
    // Inject the external camera to replace the internal camera session.
    ICameraInjectionSession injectCamera(String packageName, String internalCamId,
    String externalCamId, in ICameraInjectionCallback CameraInjectionCallback);

    void setTorchMode(String cameraId, boolean enabled, IBinder clientBinder);

    // Change the brightness level of the flash unit associated with cameraId to strengthLevel.
    // If the torch is in OFF state and strengthLevel > 0 then the torch will also be turned ON.
    void turnOnTorchWithStrengthLevel(String cameraId, int strengthLevel, IBinder clientBinder);

    // Get the brightness level of the flash unit associated with cameraId.
    int getTorchStrengthLevel(String cameraId);

    /**

    • Notify the camera service of a system event. Should only be called from system_server.
    • Callers require the android.permission.CAMERA_SEND_SYSTEM_EVENTS permission.
      */
      const int EVENT_NONE = 0;
      const int EVENT_USER_SWITCHED = 1; // The argument is the set of new foreground user IDs.
      const int EVENT_USB_DEVICE_ATTACHED = 2; // The argument is the deviceId and vendorId
      const int EVENT_USB_DEVICE_DETACHED = 3; // The argument is the deviceId and vendorId
      oneway void notifySystemEvent(int eventId, in int args);

    /**

    • Notify the camera service of a display configuration change.
    • Callers require the android.permission.CAMERA_SEND_SYSTEM_EVENTS permission.
      */
      oneway void notifyDisplayConfigurationChange();

    /**

    • Notify the camera service of a device physical status change. May only be called from
    • a privileged process.
    • newState is a bitfield consisting of DEVICE_STATE_* values combined together. Valid state
    • combinations are device-specific. At device startup, the camera service will assume the device
    • state is NORMAL until otherwise notified.
    • Callers require the android.permission.CAMERA_SEND_SYSTEM_EVENTS permission.
      */
      oneway void notifyDeviceStateChange(long newState);

    // Bitfield constants for notifyDeviceStateChange
    // All bits >= 32 are for custom vendor states
    // Written as ints since AIDL does not support long constants.
    const int DEVICE_STATE_NORMAL = 0;
    const int DEVICE_STATE_BACK_COVERED = 1;
    const int DEVICE_STATE_FRONT_COVERED = 2;
    const int DEVICE_STATE_FOLDED = 4;
    const int DEVICE_STATE_LAST_FRAMEWORK_BIT = 0x80000000; // 1 << 31;

}

Camera Java Framework AIDL产生的库/文件

AIDL产生的Java源文件:

  • out\soong\.intermediates\frameworks\base\framework-minus-apex\android_common\gen\aidl\ aidl36.srcjar

AIDL产生的C++源文件:

  • out\soong\.intermediates\frameworks\av\camera\libcamera_client\android_arm64_armv8-a_cortex-a55_shared_cfi\gen\aidl\android\hardware

Camera Java Framework AIDL核心类

Class Description
ICameraService.aidl Cameraserver进程对外提供的入口接口
ICameraServiceListener.aidl ICameraService的回调类,通知CameraService相关状态
ICameraDeviceUser.aidl 用于操作某一颗Camera Device
ICameraDeviceCallbacks.aidl Camera Device的回调类

Camera Java Framework AIDL核心类之间的调用关系如下图所示: