Loading camera/Android.bp +2 −1 Original line number Diff line number Diff line Loading @@ -142,14 +142,15 @@ cc_library_host_static { filegroup { name: "libcamera_client_aidl", srcs: [ "aidl/android/hardware/CameraExtensionSessionStats.aidl", "aidl/android/hardware/ICameraService.aidl", "aidl/android/hardware/ICameraServiceListener.aidl", "aidl/android/hardware/ICameraServiceProxy.aidl", "aidl/android/hardware/camera2/ICameraDeviceCallbacks.aidl", "aidl/android/hardware/camera2/ICameraDeviceUser.aidl", "aidl/android/hardware/camera2/ICameraOfflineSession.aidl", "aidl/android/hardware/camera2/ICameraInjectionCallback.aidl", "aidl/android/hardware/camera2/ICameraInjectionSession.aidl", "aidl/android/hardware/camera2/ICameraOfflineSession.aidl", ], path: "aidl", } Loading camera/CameraSessionStats.cpp +16 −2 Original line number Diff line number Diff line Loading @@ -279,7 +279,8 @@ CameraSessionStats::CameraSessionStats() : mResultErrorCount(0), mDeviceError(false), mVideoStabilizationMode(-1), mSessionIndex(0) {} mSessionIndex(0), mCameraExtensionSessionStats() {} CameraSessionStats::CameraSessionStats(const String16& cameraId, int facing, int newCameraState, const String16& clientName, Loading @@ -299,7 +300,8 @@ CameraSessionStats::CameraSessionStats(const String16& cameraId, mResultErrorCount(0), mDeviceError(0), mVideoStabilizationMode(-1), mSessionIndex(0) {} mSessionIndex(0), mCameraExtensionSessionStats() {} status_t CameraSessionStats::readFromParcel(const android::Parcel* parcel) { if (parcel == NULL) { Loading Loading @@ -417,6 +419,12 @@ status_t CameraSessionStats::readFromParcel(const android::Parcel* parcel) { return err; } CameraExtensionSessionStats extStats{}; if ((err = extStats.readFromParcel(parcel)) != OK) { ALOGE("%s: Failed to read extension session stats from parcel", __FUNCTION__); return err; } mCameraId = id; mFacing = facing; mNewCameraState = newCameraState; Loading @@ -435,6 +443,7 @@ status_t CameraSessionStats::readFromParcel(const android::Parcel* parcel) { mUserTag = userTag; mVideoStabilizationMode = videoStabilizationMode; mSessionIndex = sessionIdx; mCameraExtensionSessionStats = extStats; return OK; } Loading Loading @@ -537,6 +546,11 @@ status_t CameraSessionStats::writeToParcel(android::Parcel* parcel) const { return err; } if ((err = mCameraExtensionSessionStats.writeToParcel(parcel)) != OK) { ALOGE("%s: Failed to write extension sessions stats!", __FUNCTION__); return err; } return OK; } Loading camera/aidl/android/hardware/CameraExtensionSessionStats.aidl 0 → 100644 +69 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 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; /** * Metrics specific to Extension Sessions (see CameraExtensionSession) for logging. * * Each Extension Session is mapped to one camera session internally, and will be sent to * CameraServiceProxy with IDLE/CLOSE calls. * @hide */ parcelable CameraExtensionSessionStats { /** * Value should match {@code CameraExtensionCharacteristics#EXTENSION_*} */ @Backing(type="int") enum Type { EXTENSION_NONE = -1, EXTENSION_AUTOMATIC = 0, EXTENSION_FACE_RETOUCH = 1, EXTENSION_BOKEH = 2, EXTENSION_HDR = 3, EXTENSION_NIGHT = 4 } /** * Key to uniquely identify the session this stat is associated with. The first call to * 'ICameraService.reportExtensionSessionStats' should set this to an empty string. * 'ICameraService.reportExtensionSessionStats' will return the key which should be used with * the next calls. */ String key; /** * Camera ID for which the stats is being reported. */ String cameraId; /** * Package name of the client using the camera */ String clientName; /** * Type of extension session requested by the app. Note that EXTENSION_AUTOMATIC is reported * as such. */ Type type = Type.EXTENSION_NONE; /** * true if advanced extensions are being used, false otherwise */ boolean isAdvanced = false; } No newline at end of file camera/aidl/android/hardware/ICameraService.aidl +21 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.hardware.camera2.impl.CameraMetadataNative; import android.hardware.ICameraServiceListener; import android.hardware.CameraInfo; import android.hardware.CameraStatus; import android.hardware.CameraExtensionSessionStats; /** * Binder interface for the native camera service running in mediaserver. Loading Loading @@ -214,6 +215,26 @@ interface ICameraService */ oneway void notifyDeviceStateChange(long newState); /** * Report Extension specific metrics to camera service for logging. This should only be called * by CameraExtensionSession to log extension metrics. All calls after the first must set * CameraExtensionSessionStats.key to the value returned by this function. * * Each subsequent call fully overwrites the existing CameraExtensionSessionStats for the * current session, so the caller is responsible for keeping the stats complete. * * Due to cameraservice and cameraservice_proxy architecture, there is no guarantee that * {@code stats} will be logged immediately (or at all). CameraService will log whatever * extension stats it has at the time of camera session closing which may be before the app * process receives a session/device closed callback; so CameraExtensionSession * should send metrics to the cameraservice preriodically, and cameraservice must handle calls * to this function from sessions that have not been logged yet and from sessions that have * already been closed. * * @return the key that must be used to report updates to previously reported stats. */ String reportExtensionSessionStats(in CameraExtensionSessionStats stats); // Bitfield constants for notifyDeviceStateChange // All bits >= 32 are for custom vendor states // Written as ints since AIDL does not support long constants. Loading camera/aidl/android/hardware/ICameraServiceProxy.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.hardware; import android.hardware.CameraSessionStats; import android.hardware.CameraExtensionSessionStats; /** * Binder interface for the camera service proxy running in system_server. Loading Loading
camera/Android.bp +2 −1 Original line number Diff line number Diff line Loading @@ -142,14 +142,15 @@ cc_library_host_static { filegroup { name: "libcamera_client_aidl", srcs: [ "aidl/android/hardware/CameraExtensionSessionStats.aidl", "aidl/android/hardware/ICameraService.aidl", "aidl/android/hardware/ICameraServiceListener.aidl", "aidl/android/hardware/ICameraServiceProxy.aidl", "aidl/android/hardware/camera2/ICameraDeviceCallbacks.aidl", "aidl/android/hardware/camera2/ICameraDeviceUser.aidl", "aidl/android/hardware/camera2/ICameraOfflineSession.aidl", "aidl/android/hardware/camera2/ICameraInjectionCallback.aidl", "aidl/android/hardware/camera2/ICameraInjectionSession.aidl", "aidl/android/hardware/camera2/ICameraOfflineSession.aidl", ], path: "aidl", } Loading
camera/CameraSessionStats.cpp +16 −2 Original line number Diff line number Diff line Loading @@ -279,7 +279,8 @@ CameraSessionStats::CameraSessionStats() : mResultErrorCount(0), mDeviceError(false), mVideoStabilizationMode(-1), mSessionIndex(0) {} mSessionIndex(0), mCameraExtensionSessionStats() {} CameraSessionStats::CameraSessionStats(const String16& cameraId, int facing, int newCameraState, const String16& clientName, Loading @@ -299,7 +300,8 @@ CameraSessionStats::CameraSessionStats(const String16& cameraId, mResultErrorCount(0), mDeviceError(0), mVideoStabilizationMode(-1), mSessionIndex(0) {} mSessionIndex(0), mCameraExtensionSessionStats() {} status_t CameraSessionStats::readFromParcel(const android::Parcel* parcel) { if (parcel == NULL) { Loading Loading @@ -417,6 +419,12 @@ status_t CameraSessionStats::readFromParcel(const android::Parcel* parcel) { return err; } CameraExtensionSessionStats extStats{}; if ((err = extStats.readFromParcel(parcel)) != OK) { ALOGE("%s: Failed to read extension session stats from parcel", __FUNCTION__); return err; } mCameraId = id; mFacing = facing; mNewCameraState = newCameraState; Loading @@ -435,6 +443,7 @@ status_t CameraSessionStats::readFromParcel(const android::Parcel* parcel) { mUserTag = userTag; mVideoStabilizationMode = videoStabilizationMode; mSessionIndex = sessionIdx; mCameraExtensionSessionStats = extStats; return OK; } Loading Loading @@ -537,6 +546,11 @@ status_t CameraSessionStats::writeToParcel(android::Parcel* parcel) const { return err; } if ((err = mCameraExtensionSessionStats.writeToParcel(parcel)) != OK) { ALOGE("%s: Failed to write extension sessions stats!", __FUNCTION__); return err; } return OK; } Loading
camera/aidl/android/hardware/CameraExtensionSessionStats.aidl 0 → 100644 +69 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 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; /** * Metrics specific to Extension Sessions (see CameraExtensionSession) for logging. * * Each Extension Session is mapped to one camera session internally, and will be sent to * CameraServiceProxy with IDLE/CLOSE calls. * @hide */ parcelable CameraExtensionSessionStats { /** * Value should match {@code CameraExtensionCharacteristics#EXTENSION_*} */ @Backing(type="int") enum Type { EXTENSION_NONE = -1, EXTENSION_AUTOMATIC = 0, EXTENSION_FACE_RETOUCH = 1, EXTENSION_BOKEH = 2, EXTENSION_HDR = 3, EXTENSION_NIGHT = 4 } /** * Key to uniquely identify the session this stat is associated with. The first call to * 'ICameraService.reportExtensionSessionStats' should set this to an empty string. * 'ICameraService.reportExtensionSessionStats' will return the key which should be used with * the next calls. */ String key; /** * Camera ID for which the stats is being reported. */ String cameraId; /** * Package name of the client using the camera */ String clientName; /** * Type of extension session requested by the app. Note that EXTENSION_AUTOMATIC is reported * as such. */ Type type = Type.EXTENSION_NONE; /** * true if advanced extensions are being used, false otherwise */ boolean isAdvanced = false; } No newline at end of file
camera/aidl/android/hardware/ICameraService.aidl +21 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.hardware.camera2.impl.CameraMetadataNative; import android.hardware.ICameraServiceListener; import android.hardware.CameraInfo; import android.hardware.CameraStatus; import android.hardware.CameraExtensionSessionStats; /** * Binder interface for the native camera service running in mediaserver. Loading Loading @@ -214,6 +215,26 @@ interface ICameraService */ oneway void notifyDeviceStateChange(long newState); /** * Report Extension specific metrics to camera service for logging. This should only be called * by CameraExtensionSession to log extension metrics. All calls after the first must set * CameraExtensionSessionStats.key to the value returned by this function. * * Each subsequent call fully overwrites the existing CameraExtensionSessionStats for the * current session, so the caller is responsible for keeping the stats complete. * * Due to cameraservice and cameraservice_proxy architecture, there is no guarantee that * {@code stats} will be logged immediately (or at all). CameraService will log whatever * extension stats it has at the time of camera session closing which may be before the app * process receives a session/device closed callback; so CameraExtensionSession * should send metrics to the cameraservice preriodically, and cameraservice must handle calls * to this function from sessions that have not been logged yet and from sessions that have * already been closed. * * @return the key that must be used to report updates to previously reported stats. */ String reportExtensionSessionStats(in CameraExtensionSessionStats stats); // Bitfield constants for notifyDeviceStateChange // All bits >= 32 are for custom vendor states // Written as ints since AIDL does not support long constants. Loading
camera/aidl/android/hardware/ICameraServiceProxy.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package android.hardware; import android.hardware.CameraSessionStats; import android.hardware.CameraExtensionSessionStats; /** * Binder interface for the camera service proxy running in system_server. Loading