1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package android.hardware; 17 import android.os.Parcel; 18 import android.os.Parcelable; 19 20 import java.util.ArrayList; 21 import java.util.List; 22 /** 23 * The camera action state used for passing camera usage information from 24 * camera service to camera service proxy . 25 * 26 * Include camera id, facing, state, client apk name, apiLevel, isNdk, 27 * and session/stream statistics. 28 * 29 * @hide 30 */ 31 public class CameraSessionStats implements Parcelable { 32 public static final int CAMERA_STATE_OPEN = 0; 33 public static final int CAMERA_STATE_ACTIVE = 1; 34 public static final int CAMERA_STATE_IDLE = 2; 35 public static final int CAMERA_STATE_CLOSED = 3; 36 37 /** 38 * Values for notifyCameraState facing 39 */ 40 public static final int CAMERA_FACING_BACK = 0; 41 public static final int CAMERA_FACING_FRONT = 1; 42 public static final int CAMERA_FACING_EXTERNAL = 2; 43 44 /** 45 * Values for notifyCameraState api level 46 */ 47 public static final int CAMERA_API_LEVEL_1 = 1; 48 public static final int CAMERA_API_LEVEL_2 = 2; 49 50 private String mCameraId; 51 private int mFacing; 52 private int mNewCameraState; 53 private String mClientName; 54 private int mApiLevel; 55 private boolean mIsNdk; 56 private int mLatencyMs; 57 private long mLogId; 58 private int mSessionType; 59 private int mInternalReconfigure; 60 private long mRequestCount; 61 private long mResultErrorCount; 62 private boolean mDeviceError; 63 private float mMaxPreviewFps; 64 private ArrayList<CameraStreamStats> mStreamStats; 65 private String mUserTag; 66 private int mVideoStabilizationMode; 67 private int mSessionIndex; 68 private CameraExtensionSessionStats mCameraExtensionSessionStats; 69 CameraSessionStats()70 public CameraSessionStats() { 71 mFacing = -1; 72 mNewCameraState = -1; 73 mApiLevel = -1; 74 mIsNdk = false; 75 mLatencyMs = -1; 76 mLogId = 0; 77 mMaxPreviewFps = 0; 78 mSessionType = -1; 79 mInternalReconfigure = -1; 80 mRequestCount = 0; 81 mResultErrorCount = 0; 82 mDeviceError = false; 83 mStreamStats = new ArrayList<CameraStreamStats>(); 84 mVideoStabilizationMode = -1; 85 mSessionIndex = 0; 86 mCameraExtensionSessionStats = new CameraExtensionSessionStats(); 87 } 88 CameraSessionStats(String cameraId, int facing, int newCameraState, String clientName, int apiLevel, boolean isNdk, int creationDuration, float maxPreviewFps, int sessionType, int internalReconfigure, long logId, int sessionIdx)89 public CameraSessionStats(String cameraId, int facing, int newCameraState, 90 String clientName, int apiLevel, boolean isNdk, int creationDuration, 91 float maxPreviewFps, int sessionType, int internalReconfigure, long logId, 92 int sessionIdx) { 93 mCameraId = cameraId; 94 mFacing = facing; 95 mNewCameraState = newCameraState; 96 mClientName = clientName; 97 mApiLevel = apiLevel; 98 mIsNdk = isNdk; 99 mLatencyMs = creationDuration; 100 mLogId = logId; 101 mMaxPreviewFps = maxPreviewFps; 102 mSessionType = sessionType; 103 mInternalReconfigure = internalReconfigure; 104 mStreamStats = new ArrayList<CameraStreamStats>(); 105 mSessionIndex = sessionIdx; 106 mCameraExtensionSessionStats = new CameraExtensionSessionStats(); 107 } 108 109 public static final @android.annotation.NonNull Parcelable.Creator<CameraSessionStats> CREATOR = 110 new Parcelable.Creator<CameraSessionStats>() { 111 @Override 112 public CameraSessionStats createFromParcel(Parcel in) { 113 return new CameraSessionStats(in); 114 } 115 116 @Override 117 public CameraSessionStats[] newArray(int size) { 118 return new CameraSessionStats[size]; 119 } 120 }; 121 CameraSessionStats(Parcel in)122 private CameraSessionStats(Parcel in) { 123 readFromParcel(in); 124 } 125 126 @Override describeContents()127 public int describeContents() { 128 return 0; 129 } 130 131 @Override writeToParcel(Parcel dest, int flags)132 public void writeToParcel(Parcel dest, int flags) { 133 dest.writeString(mCameraId); 134 dest.writeInt(mFacing); 135 dest.writeInt(mNewCameraState); 136 dest.writeString(mClientName); 137 dest.writeInt(mApiLevel); 138 dest.writeBoolean(mIsNdk); 139 dest.writeInt(mLatencyMs); 140 dest.writeLong(mLogId); 141 dest.writeFloat(mMaxPreviewFps); 142 dest.writeInt(mSessionType); 143 dest.writeInt(mInternalReconfigure); 144 dest.writeLong(mRequestCount); 145 dest.writeLong(mResultErrorCount); 146 dest.writeBoolean(mDeviceError); 147 dest.writeTypedList(mStreamStats); 148 dest.writeString(mUserTag); 149 dest.writeInt(mVideoStabilizationMode); 150 dest.writeInt(mSessionIndex); 151 mCameraExtensionSessionStats.writeToParcel(dest, 0); 152 } 153 readFromParcel(Parcel in)154 public void readFromParcel(Parcel in) { 155 mCameraId = in.readString(); 156 mFacing = in.readInt(); 157 mNewCameraState = in.readInt(); 158 mClientName = in.readString(); 159 mApiLevel = in.readInt(); 160 mIsNdk = in.readBoolean(); 161 mLatencyMs = in.readInt(); 162 mLogId = in.readLong(); 163 mMaxPreviewFps = in.readFloat(); 164 mSessionType = in.readInt(); 165 mInternalReconfigure = in.readInt(); 166 mRequestCount = in.readLong(); 167 mResultErrorCount = in.readLong(); 168 mDeviceError = in.readBoolean(); 169 170 ArrayList<CameraStreamStats> streamStats = new ArrayList<CameraStreamStats>(); 171 in.readTypedList(streamStats, CameraStreamStats.CREATOR); 172 mStreamStats = streamStats; 173 174 mUserTag = in.readString(); 175 mVideoStabilizationMode = in.readInt(); 176 mSessionIndex = in.readInt(); 177 mCameraExtensionSessionStats = CameraExtensionSessionStats.CREATOR.createFromParcel(in); 178 } 179 getCameraId()180 public String getCameraId() { 181 return mCameraId; 182 } 183 getFacing()184 public int getFacing() { 185 return mFacing; 186 } 187 getNewCameraState()188 public int getNewCameraState() { 189 return mNewCameraState; 190 } 191 getClientName()192 public String getClientName() { 193 return mClientName; 194 } 195 getApiLevel()196 public int getApiLevel() { 197 return mApiLevel; 198 } 199 isNdk()200 public boolean isNdk() { 201 return mIsNdk; 202 } 203 getLatencyMs()204 public int getLatencyMs() { 205 return mLatencyMs; 206 } 207 getLogId()208 public long getLogId() { 209 return mLogId; 210 } 211 getMaxPreviewFps()212 public float getMaxPreviewFps() { 213 return mMaxPreviewFps; 214 } 215 getSessionType()216 public int getSessionType() { 217 return mSessionType; 218 } 219 getInternalReconfigureCount()220 public int getInternalReconfigureCount() { 221 return mInternalReconfigure; 222 } 223 getRequestCount()224 public long getRequestCount() { 225 return mRequestCount; 226 } 227 getResultErrorCount()228 public long getResultErrorCount() { 229 return mResultErrorCount; 230 } 231 getDeviceErrorFlag()232 public boolean getDeviceErrorFlag() { 233 return mDeviceError; 234 } 235 getStreamStats()236 public List<CameraStreamStats> getStreamStats() { 237 return mStreamStats; 238 } 239 getUserTag()240 public String getUserTag() { 241 return mUserTag; 242 } 243 getVideoStabilizationMode()244 public int getVideoStabilizationMode() { 245 return mVideoStabilizationMode; 246 } 247 getSessionIndex()248 public int getSessionIndex() { 249 return mSessionIndex; 250 } 251 getExtensionSessionStats()252 public CameraExtensionSessionStats getExtensionSessionStats() { 253 return mCameraExtensionSessionStats; 254 } 255 } 256