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