xref: /aosp_15_r20/frameworks/av/camera/CameraSessionStats.cpp (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1*ec779b8eSAndroid Build Coastguard Worker /*
2*ec779b8eSAndroid Build Coastguard Worker  * Copyright (C) 2020 The Android Open Source Project
3*ec779b8eSAndroid Build Coastguard Worker  *
4*ec779b8eSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*ec779b8eSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*ec779b8eSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*ec779b8eSAndroid Build Coastguard Worker  *
8*ec779b8eSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*ec779b8eSAndroid Build Coastguard Worker  *
10*ec779b8eSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*ec779b8eSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*ec779b8eSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*ec779b8eSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*ec779b8eSAndroid Build Coastguard Worker  * limitations under the License.
15*ec779b8eSAndroid Build Coastguard Worker  */
16*ec779b8eSAndroid Build Coastguard Worker 
17*ec779b8eSAndroid Build Coastguard Worker // #define LOG_NDEBUG 0
18*ec779b8eSAndroid Build Coastguard Worker #define LOG_TAG "CameraSessionStats"
19*ec779b8eSAndroid Build Coastguard Worker 
20*ec779b8eSAndroid Build Coastguard Worker #include <utils/Log.h>
21*ec779b8eSAndroid Build Coastguard Worker #include <utils/String16.h>
22*ec779b8eSAndroid Build Coastguard Worker 
23*ec779b8eSAndroid Build Coastguard Worker #include <camera/CameraSessionStats.h>
24*ec779b8eSAndroid Build Coastguard Worker #include <camera/StringUtils.h>
25*ec779b8eSAndroid Build Coastguard Worker 
26*ec779b8eSAndroid Build Coastguard Worker #include <binder/Parcel.h>
27*ec779b8eSAndroid Build Coastguard Worker 
28*ec779b8eSAndroid Build Coastguard Worker namespace android {
29*ec779b8eSAndroid Build Coastguard Worker namespace hardware {
30*ec779b8eSAndroid Build Coastguard Worker 
readFromParcel(const android::Parcel * parcel)31*ec779b8eSAndroid Build Coastguard Worker status_t CameraStreamStats::readFromParcel(const android::Parcel* parcel) {
32*ec779b8eSAndroid Build Coastguard Worker     if (parcel == NULL) {
33*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Null parcel", __FUNCTION__);
34*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
35*ec779b8eSAndroid Build Coastguard Worker     }
36*ec779b8eSAndroid Build Coastguard Worker 
37*ec779b8eSAndroid Build Coastguard Worker     status_t err = OK;
38*ec779b8eSAndroid Build Coastguard Worker 
39*ec779b8eSAndroid Build Coastguard Worker     int width = 0;
40*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&width)) != OK) {
41*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read width from parcel", __FUNCTION__);
42*ec779b8eSAndroid Build Coastguard Worker         return err;
43*ec779b8eSAndroid Build Coastguard Worker     }
44*ec779b8eSAndroid Build Coastguard Worker 
45*ec779b8eSAndroid Build Coastguard Worker     int height = 0;
46*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&height)) != OK) {
47*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read height from parcel", __FUNCTION__);
48*ec779b8eSAndroid Build Coastguard Worker         return err;
49*ec779b8eSAndroid Build Coastguard Worker     }
50*ec779b8eSAndroid Build Coastguard Worker 
51*ec779b8eSAndroid Build Coastguard Worker     int format = 0;
52*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&format)) != OK) {
53*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read format from parcel", __FUNCTION__);
54*ec779b8eSAndroid Build Coastguard Worker         return err;
55*ec779b8eSAndroid Build Coastguard Worker     }
56*ec779b8eSAndroid Build Coastguard Worker 
57*ec779b8eSAndroid Build Coastguard Worker     float maxPreviewFps = 0;
58*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readFloat(&maxPreviewFps)) != OK) {
59*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read maxPreviewFps from parcel", __FUNCTION__);
60*ec779b8eSAndroid Build Coastguard Worker         return err;
61*ec779b8eSAndroid Build Coastguard Worker     }
62*ec779b8eSAndroid Build Coastguard Worker 
63*ec779b8eSAndroid Build Coastguard Worker     int dataSpace = 0;
64*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&dataSpace)) != OK) {
65*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read dataSpace from parcel", __FUNCTION__);
66*ec779b8eSAndroid Build Coastguard Worker         return err;
67*ec779b8eSAndroid Build Coastguard Worker     }
68*ec779b8eSAndroid Build Coastguard Worker 
69*ec779b8eSAndroid Build Coastguard Worker     int64_t usage = 0;
70*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt64(&usage)) != OK) {
71*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read usage from parcel", __FUNCTION__);
72*ec779b8eSAndroid Build Coastguard Worker         return err;
73*ec779b8eSAndroid Build Coastguard Worker     }
74*ec779b8eSAndroid Build Coastguard Worker 
75*ec779b8eSAndroid Build Coastguard Worker     int64_t requestCount = 0;
76*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt64(&requestCount)) != OK) {
77*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read request count from parcel", __FUNCTION__);
78*ec779b8eSAndroid Build Coastguard Worker         return err;
79*ec779b8eSAndroid Build Coastguard Worker     }
80*ec779b8eSAndroid Build Coastguard Worker 
81*ec779b8eSAndroid Build Coastguard Worker     int64_t errorCount = 0;
82*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt64(&errorCount)) != OK) {
83*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read error count from parcel", __FUNCTION__);
84*ec779b8eSAndroid Build Coastguard Worker         return err;
85*ec779b8eSAndroid Build Coastguard Worker     }
86*ec779b8eSAndroid Build Coastguard Worker 
87*ec779b8eSAndroid Build Coastguard Worker     int startLatencyMs = 0;
88*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&startLatencyMs)) != OK) {
89*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read start latency from parcel", __FUNCTION__);
90*ec779b8eSAndroid Build Coastguard Worker         return err;
91*ec779b8eSAndroid Build Coastguard Worker     }
92*ec779b8eSAndroid Build Coastguard Worker 
93*ec779b8eSAndroid Build Coastguard Worker     int maxHalBuffers = 0;
94*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&maxHalBuffers)) != OK) {
95*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read max Hal buffers from parcel", __FUNCTION__);
96*ec779b8eSAndroid Build Coastguard Worker         return err;
97*ec779b8eSAndroid Build Coastguard Worker     }
98*ec779b8eSAndroid Build Coastguard Worker 
99*ec779b8eSAndroid Build Coastguard Worker     int maxAppBuffers = 0;
100*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&maxAppBuffers)) != OK) {
101*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read max app buffers from parcel", __FUNCTION__);
102*ec779b8eSAndroid Build Coastguard Worker         return err;
103*ec779b8eSAndroid Build Coastguard Worker     }
104*ec779b8eSAndroid Build Coastguard Worker 
105*ec779b8eSAndroid Build Coastguard Worker     int histogramType = HISTOGRAM_TYPE_UNKNOWN;
106*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&histogramType)) != OK) {
107*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read histogram type from parcel", __FUNCTION__);
108*ec779b8eSAndroid Build Coastguard Worker         return err;
109*ec779b8eSAndroid Build Coastguard Worker     }
110*ec779b8eSAndroid Build Coastguard Worker 
111*ec779b8eSAndroid Build Coastguard Worker     std::vector<float> histogramBins;
112*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readFloatVector(&histogramBins)) != OK) {
113*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read histogram bins from parcel", __FUNCTION__);
114*ec779b8eSAndroid Build Coastguard Worker         return err;
115*ec779b8eSAndroid Build Coastguard Worker     }
116*ec779b8eSAndroid Build Coastguard Worker 
117*ec779b8eSAndroid Build Coastguard Worker     std::vector<int64_t> histogramCounts;
118*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt64Vector(&histogramCounts)) != OK) {
119*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read histogram counts from parcel", __FUNCTION__);
120*ec779b8eSAndroid Build Coastguard Worker         return err;
121*ec779b8eSAndroid Build Coastguard Worker     }
122*ec779b8eSAndroid Build Coastguard Worker 
123*ec779b8eSAndroid Build Coastguard Worker     int64_t dynamicRangeProfile = ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD;
124*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt64(&dynamicRangeProfile)) != OK) {
125*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read dynamic range profile type from parcel", __FUNCTION__);
126*ec779b8eSAndroid Build Coastguard Worker         return err;
127*ec779b8eSAndroid Build Coastguard Worker     }
128*ec779b8eSAndroid Build Coastguard Worker 
129*ec779b8eSAndroid Build Coastguard Worker     int64_t streamUseCase = ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT;
130*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt64(&streamUseCase)) != OK) {
131*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read stream use case from parcel", __FUNCTION__);
132*ec779b8eSAndroid Build Coastguard Worker         return err;
133*ec779b8eSAndroid Build Coastguard Worker     }
134*ec779b8eSAndroid Build Coastguard Worker 
135*ec779b8eSAndroid Build Coastguard Worker     int32_t colorSpace = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED;
136*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&colorSpace)) != OK) {
137*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read color space from parcel", __FUNCTION__);
138*ec779b8eSAndroid Build Coastguard Worker         return err;
139*ec779b8eSAndroid Build Coastguard Worker     }
140*ec779b8eSAndroid Build Coastguard Worker 
141*ec779b8eSAndroid Build Coastguard Worker     mWidth = width;
142*ec779b8eSAndroid Build Coastguard Worker     mHeight = height;
143*ec779b8eSAndroid Build Coastguard Worker     mFormat = format;
144*ec779b8eSAndroid Build Coastguard Worker     mMaxPreviewFps = maxPreviewFps;
145*ec779b8eSAndroid Build Coastguard Worker     mDataSpace = dataSpace;
146*ec779b8eSAndroid Build Coastguard Worker     mUsage = usage;
147*ec779b8eSAndroid Build Coastguard Worker     mRequestCount = requestCount;
148*ec779b8eSAndroid Build Coastguard Worker     mErrorCount = errorCount;
149*ec779b8eSAndroid Build Coastguard Worker     mStartLatencyMs = startLatencyMs;
150*ec779b8eSAndroid Build Coastguard Worker     mMaxHalBuffers = maxHalBuffers;
151*ec779b8eSAndroid Build Coastguard Worker     mMaxAppBuffers = maxAppBuffers;
152*ec779b8eSAndroid Build Coastguard Worker     mHistogramType = histogramType;
153*ec779b8eSAndroid Build Coastguard Worker     mHistogramBins = std::move(histogramBins);
154*ec779b8eSAndroid Build Coastguard Worker     mHistogramCounts = std::move(histogramCounts);
155*ec779b8eSAndroid Build Coastguard Worker     mDynamicRangeProfile = dynamicRangeProfile;
156*ec779b8eSAndroid Build Coastguard Worker     mStreamUseCase = streamUseCase;
157*ec779b8eSAndroid Build Coastguard Worker     mColorSpace = colorSpace;
158*ec779b8eSAndroid Build Coastguard Worker 
159*ec779b8eSAndroid Build Coastguard Worker     return OK;
160*ec779b8eSAndroid Build Coastguard Worker }
161*ec779b8eSAndroid Build Coastguard Worker 
writeToParcel(android::Parcel * parcel) const162*ec779b8eSAndroid Build Coastguard Worker status_t CameraStreamStats::writeToParcel(android::Parcel* parcel) const {
163*ec779b8eSAndroid Build Coastguard Worker     if (parcel == NULL) {
164*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Null parcel", __FUNCTION__);
165*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
166*ec779b8eSAndroid Build Coastguard Worker     }
167*ec779b8eSAndroid Build Coastguard Worker 
168*ec779b8eSAndroid Build Coastguard Worker     status_t err = OK;
169*ec779b8eSAndroid Build Coastguard Worker 
170*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mWidth)) != OK) {
171*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write stream width!", __FUNCTION__);
172*ec779b8eSAndroid Build Coastguard Worker         return err;
173*ec779b8eSAndroid Build Coastguard Worker     }
174*ec779b8eSAndroid Build Coastguard Worker 
175*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mHeight)) != OK) {
176*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write stream height!", __FUNCTION__);
177*ec779b8eSAndroid Build Coastguard Worker         return err;
178*ec779b8eSAndroid Build Coastguard Worker     }
179*ec779b8eSAndroid Build Coastguard Worker 
180*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mFormat)) != OK) {
181*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write stream format!", __FUNCTION__);
182*ec779b8eSAndroid Build Coastguard Worker         return err;
183*ec779b8eSAndroid Build Coastguard Worker     }
184*ec779b8eSAndroid Build Coastguard Worker 
185*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeFloat(mMaxPreviewFps)) != OK) {
186*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write stream maxPreviewFps!", __FUNCTION__);
187*ec779b8eSAndroid Build Coastguard Worker         return err;
188*ec779b8eSAndroid Build Coastguard Worker     }
189*ec779b8eSAndroid Build Coastguard Worker 
190*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mDataSpace)) != OK) {
191*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write stream dataSpace!", __FUNCTION__);
192*ec779b8eSAndroid Build Coastguard Worker         return err;
193*ec779b8eSAndroid Build Coastguard Worker     }
194*ec779b8eSAndroid Build Coastguard Worker 
195*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt64(mUsage)) != OK) {
196*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write stream usage!", __FUNCTION__);
197*ec779b8eSAndroid Build Coastguard Worker         return err;
198*ec779b8eSAndroid Build Coastguard Worker     }
199*ec779b8eSAndroid Build Coastguard Worker 
200*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt64(mRequestCount)) != OK) {
201*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write stream request count!", __FUNCTION__);
202*ec779b8eSAndroid Build Coastguard Worker         return err;
203*ec779b8eSAndroid Build Coastguard Worker     }
204*ec779b8eSAndroid Build Coastguard Worker 
205*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt64(mErrorCount)) != OK) {
206*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write stream error count!", __FUNCTION__);
207*ec779b8eSAndroid Build Coastguard Worker         return err;
208*ec779b8eSAndroid Build Coastguard Worker     }
209*ec779b8eSAndroid Build Coastguard Worker 
210*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mStartLatencyMs)) != OK) {
211*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write stream start latency!", __FUNCTION__);
212*ec779b8eSAndroid Build Coastguard Worker         return err;
213*ec779b8eSAndroid Build Coastguard Worker     }
214*ec779b8eSAndroid Build Coastguard Worker 
215*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mMaxHalBuffers)) != OK) {
216*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write max hal buffers", __FUNCTION__);
217*ec779b8eSAndroid Build Coastguard Worker         return err;
218*ec779b8eSAndroid Build Coastguard Worker     }
219*ec779b8eSAndroid Build Coastguard Worker 
220*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mMaxAppBuffers)) != OK) {
221*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write max app buffers", __FUNCTION__);
222*ec779b8eSAndroid Build Coastguard Worker         return err;
223*ec779b8eSAndroid Build Coastguard Worker     }
224*ec779b8eSAndroid Build Coastguard Worker 
225*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mHistogramType)) != OK) {
226*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write histogram type", __FUNCTION__);
227*ec779b8eSAndroid Build Coastguard Worker         return err;
228*ec779b8eSAndroid Build Coastguard Worker     }
229*ec779b8eSAndroid Build Coastguard Worker 
230*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeFloatVector(mHistogramBins)) != OK) {
231*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write histogram bins!", __FUNCTION__);
232*ec779b8eSAndroid Build Coastguard Worker         return err;
233*ec779b8eSAndroid Build Coastguard Worker     }
234*ec779b8eSAndroid Build Coastguard Worker 
235*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt64Vector(mHistogramCounts)) != OK) {
236*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write histogram counts!", __FUNCTION__);
237*ec779b8eSAndroid Build Coastguard Worker         return err;
238*ec779b8eSAndroid Build Coastguard Worker     }
239*ec779b8eSAndroid Build Coastguard Worker 
240*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt64(mDynamicRangeProfile)) != OK) {
241*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write dynamic range profile type", __FUNCTION__);
242*ec779b8eSAndroid Build Coastguard Worker         return err;
243*ec779b8eSAndroid Build Coastguard Worker     }
244*ec779b8eSAndroid Build Coastguard Worker 
245*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt64(mStreamUseCase)) != OK) {
246*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write stream use case!", __FUNCTION__);
247*ec779b8eSAndroid Build Coastguard Worker         return err;
248*ec779b8eSAndroid Build Coastguard Worker     }
249*ec779b8eSAndroid Build Coastguard Worker 
250*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mColorSpace)) != OK) {
251*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write color space", __FUNCTION__);
252*ec779b8eSAndroid Build Coastguard Worker         return err;
253*ec779b8eSAndroid Build Coastguard Worker     }
254*ec779b8eSAndroid Build Coastguard Worker 
255*ec779b8eSAndroid Build Coastguard Worker     return OK;
256*ec779b8eSAndroid Build Coastguard Worker }
257*ec779b8eSAndroid Build Coastguard Worker 
258*ec779b8eSAndroid Build Coastguard Worker const int CameraSessionStats::CAMERA_STATE_OPEN = 0;
259*ec779b8eSAndroid Build Coastguard Worker const int CameraSessionStats::CAMERA_STATE_ACTIVE = 1;
260*ec779b8eSAndroid Build Coastguard Worker const int CameraSessionStats::CAMERA_STATE_IDLE = 2;
261*ec779b8eSAndroid Build Coastguard Worker const int CameraSessionStats::CAMERA_STATE_CLOSED = 3;
262*ec779b8eSAndroid Build Coastguard Worker 
263*ec779b8eSAndroid Build Coastguard Worker const int CameraSessionStats::CAMERA_FACING_BACK = 0;
264*ec779b8eSAndroid Build Coastguard Worker const int CameraSessionStats::CAMERA_FACING_FRONT = 1;
265*ec779b8eSAndroid Build Coastguard Worker const int CameraSessionStats::CAMERA_FACING_EXTERNAL = 2;
266*ec779b8eSAndroid Build Coastguard Worker 
267*ec779b8eSAndroid Build Coastguard Worker const int CameraSessionStats::CAMERA_API_LEVEL_1 = 1;
268*ec779b8eSAndroid Build Coastguard Worker const int CameraSessionStats::CAMERA_API_LEVEL_2 = 2;
269*ec779b8eSAndroid Build Coastguard Worker 
CameraSessionStats()270*ec779b8eSAndroid Build Coastguard Worker CameraSessionStats::CameraSessionStats() :
271*ec779b8eSAndroid Build Coastguard Worker         mFacing(CAMERA_FACING_BACK),
272*ec779b8eSAndroid Build Coastguard Worker         mNewCameraState(CAMERA_STATE_CLOSED),
273*ec779b8eSAndroid Build Coastguard Worker         mApiLevel(0),
274*ec779b8eSAndroid Build Coastguard Worker         mIsNdk(false),
275*ec779b8eSAndroid Build Coastguard Worker         mLatencyMs(-1),
276*ec779b8eSAndroid Build Coastguard Worker         mLogId(0),
277*ec779b8eSAndroid Build Coastguard Worker         mMaxPreviewFps(0),
278*ec779b8eSAndroid Build Coastguard Worker         mSessionType(0),
279*ec779b8eSAndroid Build Coastguard Worker         mInternalReconfigure(0),
280*ec779b8eSAndroid Build Coastguard Worker         mRequestCount(0),
281*ec779b8eSAndroid Build Coastguard Worker         mResultErrorCount(0),
282*ec779b8eSAndroid Build Coastguard Worker         mDeviceError(false),
283*ec779b8eSAndroid Build Coastguard Worker         mVideoStabilizationMode(-1),
284*ec779b8eSAndroid Build Coastguard Worker         mSessionIndex(0),
285*ec779b8eSAndroid Build Coastguard Worker         mCameraExtensionSessionStats() {}
286*ec779b8eSAndroid Build Coastguard Worker 
CameraSessionStats(const std::string & cameraId,int facing,int newCameraState,const std::string & clientName,int apiLevel,bool isNdk,int32_t latencyMs,int64_t logId)287*ec779b8eSAndroid Build Coastguard Worker CameraSessionStats::CameraSessionStats(const std::string& cameraId,
288*ec779b8eSAndroid Build Coastguard Worker         int facing, int newCameraState, const std::string& clientName,
289*ec779b8eSAndroid Build Coastguard Worker         int apiLevel, bool isNdk, int32_t latencyMs, int64_t logId) :
290*ec779b8eSAndroid Build Coastguard Worker                 mCameraId(cameraId),
291*ec779b8eSAndroid Build Coastguard Worker                 mFacing(facing),
292*ec779b8eSAndroid Build Coastguard Worker                 mNewCameraState(newCameraState),
293*ec779b8eSAndroid Build Coastguard Worker                 mClientName(clientName),
294*ec779b8eSAndroid Build Coastguard Worker                 mApiLevel(apiLevel),
295*ec779b8eSAndroid Build Coastguard Worker                 mIsNdk(isNdk),
296*ec779b8eSAndroid Build Coastguard Worker                 mLatencyMs(latencyMs),
297*ec779b8eSAndroid Build Coastguard Worker                 mLogId(logId),
298*ec779b8eSAndroid Build Coastguard Worker                 mMaxPreviewFps(0),
299*ec779b8eSAndroid Build Coastguard Worker                 mSessionType(0),
300*ec779b8eSAndroid Build Coastguard Worker                 mInternalReconfigure(0),
301*ec779b8eSAndroid Build Coastguard Worker                 mRequestCount(0),
302*ec779b8eSAndroid Build Coastguard Worker                 mResultErrorCount(0),
303*ec779b8eSAndroid Build Coastguard Worker                 mDeviceError(0),
304*ec779b8eSAndroid Build Coastguard Worker                 mVideoStabilizationMode(-1),
305*ec779b8eSAndroid Build Coastguard Worker                 mSessionIndex(0),
306*ec779b8eSAndroid Build Coastguard Worker                 mCameraExtensionSessionStats() {}
307*ec779b8eSAndroid Build Coastguard Worker 
readFromParcel(const android::Parcel * parcel)308*ec779b8eSAndroid Build Coastguard Worker status_t CameraSessionStats::readFromParcel(const android::Parcel* parcel) {
309*ec779b8eSAndroid Build Coastguard Worker     if (parcel == NULL) {
310*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Null parcel", __FUNCTION__);
311*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
312*ec779b8eSAndroid Build Coastguard Worker     }
313*ec779b8eSAndroid Build Coastguard Worker 
314*ec779b8eSAndroid Build Coastguard Worker     status_t err = OK;
315*ec779b8eSAndroid Build Coastguard Worker 
316*ec779b8eSAndroid Build Coastguard Worker     String16 id;
317*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readString16(&id)) != OK) {
318*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read camera id!", __FUNCTION__);
319*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
320*ec779b8eSAndroid Build Coastguard Worker     }
321*ec779b8eSAndroid Build Coastguard Worker 
322*ec779b8eSAndroid Build Coastguard Worker     int facing = 0;
323*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&facing)) != OK) {
324*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read camera facing from parcel", __FUNCTION__);
325*ec779b8eSAndroid Build Coastguard Worker         return err;
326*ec779b8eSAndroid Build Coastguard Worker     }
327*ec779b8eSAndroid Build Coastguard Worker 
328*ec779b8eSAndroid Build Coastguard Worker     int32_t newCameraState;
329*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&newCameraState)) != OK) {
330*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read new camera state from parcel", __FUNCTION__);
331*ec779b8eSAndroid Build Coastguard Worker         return err;
332*ec779b8eSAndroid Build Coastguard Worker     }
333*ec779b8eSAndroid Build Coastguard Worker 
334*ec779b8eSAndroid Build Coastguard Worker     String16 clientName;
335*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readString16(&clientName)) != OK) {
336*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read client name!", __FUNCTION__);
337*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
338*ec779b8eSAndroid Build Coastguard Worker     }
339*ec779b8eSAndroid Build Coastguard Worker 
340*ec779b8eSAndroid Build Coastguard Worker     int32_t apiLevel;
341*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&apiLevel)) != OK) {
342*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read api level from parcel", __FUNCTION__);
343*ec779b8eSAndroid Build Coastguard Worker         return err;
344*ec779b8eSAndroid Build Coastguard Worker     }
345*ec779b8eSAndroid Build Coastguard Worker 
346*ec779b8eSAndroid Build Coastguard Worker     bool isNdk;
347*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readBool(&isNdk)) != OK) {
348*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read isNdk flag from parcel", __FUNCTION__);
349*ec779b8eSAndroid Build Coastguard Worker         return err;
350*ec779b8eSAndroid Build Coastguard Worker     }
351*ec779b8eSAndroid Build Coastguard Worker 
352*ec779b8eSAndroid Build Coastguard Worker     int32_t latencyMs;
353*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&latencyMs)) != OK) {
354*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read latencyMs from parcel", __FUNCTION__);
355*ec779b8eSAndroid Build Coastguard Worker         return err;
356*ec779b8eSAndroid Build Coastguard Worker     }
357*ec779b8eSAndroid Build Coastguard Worker 
358*ec779b8eSAndroid Build Coastguard Worker     int64_t logId;
359*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt64(&logId)) != OK) {
360*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read log ID from parcel", __FUNCTION__);
361*ec779b8eSAndroid Build Coastguard Worker         return err;
362*ec779b8eSAndroid Build Coastguard Worker     }
363*ec779b8eSAndroid Build Coastguard Worker 
364*ec779b8eSAndroid Build Coastguard Worker     float maxPreviewFps;
365*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readFloat(&maxPreviewFps)) != OK) {
366*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read maxPreviewFps from parcel", __FUNCTION__);
367*ec779b8eSAndroid Build Coastguard Worker         return err;
368*ec779b8eSAndroid Build Coastguard Worker     }
369*ec779b8eSAndroid Build Coastguard Worker 
370*ec779b8eSAndroid Build Coastguard Worker     int32_t sessionType;
371*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&sessionType)) != OK) {
372*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read session type from parcel", __FUNCTION__);
373*ec779b8eSAndroid Build Coastguard Worker         return err;
374*ec779b8eSAndroid Build Coastguard Worker     }
375*ec779b8eSAndroid Build Coastguard Worker 
376*ec779b8eSAndroid Build Coastguard Worker     int32_t internalReconfigure;
377*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&internalReconfigure)) != OK) {
378*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read internal reconfigure count from parcel", __FUNCTION__);
379*ec779b8eSAndroid Build Coastguard Worker         return err;
380*ec779b8eSAndroid Build Coastguard Worker     }
381*ec779b8eSAndroid Build Coastguard Worker 
382*ec779b8eSAndroid Build Coastguard Worker     int64_t requestCount;
383*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt64(&requestCount)) != OK) {
384*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read request count from parcel", __FUNCTION__);
385*ec779b8eSAndroid Build Coastguard Worker         return err;
386*ec779b8eSAndroid Build Coastguard Worker     }
387*ec779b8eSAndroid Build Coastguard Worker 
388*ec779b8eSAndroid Build Coastguard Worker     int64_t resultErrorCount;
389*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt64(&resultErrorCount)) != OK) {
390*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read result error count from parcel", __FUNCTION__);
391*ec779b8eSAndroid Build Coastguard Worker         return err;
392*ec779b8eSAndroid Build Coastguard Worker     }
393*ec779b8eSAndroid Build Coastguard Worker 
394*ec779b8eSAndroid Build Coastguard Worker     bool deviceError;
395*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readBool(&deviceError)) != OK) {
396*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read device error flag from parcel", __FUNCTION__);
397*ec779b8eSAndroid Build Coastguard Worker         return err;
398*ec779b8eSAndroid Build Coastguard Worker     }
399*ec779b8eSAndroid Build Coastguard Worker 
400*ec779b8eSAndroid Build Coastguard Worker     std::vector<CameraStreamStats> streamStats;
401*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readParcelableVector(&streamStats)) != OK) {
402*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read stream state from parcel", __FUNCTION__);
403*ec779b8eSAndroid Build Coastguard Worker         return err;
404*ec779b8eSAndroid Build Coastguard Worker     }
405*ec779b8eSAndroid Build Coastguard Worker 
406*ec779b8eSAndroid Build Coastguard Worker     String16 userTag;
407*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readString16(&userTag)) != OK) {
408*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read user tag!", __FUNCTION__);
409*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
410*ec779b8eSAndroid Build Coastguard Worker     }
411*ec779b8eSAndroid Build Coastguard Worker 
412*ec779b8eSAndroid Build Coastguard Worker     int32_t videoStabilizationMode;
413*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&videoStabilizationMode)) != OK) {
414*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read video stabilization mode from parcel", __FUNCTION__);
415*ec779b8eSAndroid Build Coastguard Worker         return err;
416*ec779b8eSAndroid Build Coastguard Worker     }
417*ec779b8eSAndroid Build Coastguard Worker 
418*ec779b8eSAndroid Build Coastguard Worker     bool usedUltraWide = false;
419*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readBool(&usedUltraWide)) != OK) {
420*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read ultrawide usage from parcel", __FUNCTION__);
421*ec779b8eSAndroid Build Coastguard Worker         return err;
422*ec779b8eSAndroid Build Coastguard Worker     }
423*ec779b8eSAndroid Build Coastguard Worker 
424*ec779b8eSAndroid Build Coastguard Worker     bool usedZoomOverride = false;
425*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readBool(&usedZoomOverride)) != OK) {
426*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read zoom override usage from parcel", __FUNCTION__);
427*ec779b8eSAndroid Build Coastguard Worker         return err;
428*ec779b8eSAndroid Build Coastguard Worker     }
429*ec779b8eSAndroid Build Coastguard Worker 
430*ec779b8eSAndroid Build Coastguard Worker     int32_t sessionIdx;
431*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&sessionIdx)) != OK) {
432*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read session index from parcel", __FUNCTION__);
433*ec779b8eSAndroid Build Coastguard Worker         return err;
434*ec779b8eSAndroid Build Coastguard Worker     }
435*ec779b8eSAndroid Build Coastguard Worker 
436*ec779b8eSAndroid Build Coastguard Worker     CameraExtensionSessionStats extStats{};
437*ec779b8eSAndroid Build Coastguard Worker     if ((err = extStats.readFromParcel(parcel)) != OK) {
438*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read extension session stats from parcel", __FUNCTION__);
439*ec779b8eSAndroid Build Coastguard Worker         return err;
440*ec779b8eSAndroid Build Coastguard Worker     }
441*ec779b8eSAndroid Build Coastguard Worker 
442*ec779b8eSAndroid Build Coastguard Worker     auto mostRequestedFpsRange = std::make_pair(0,0);
443*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&mostRequestedFpsRange.first)) != OK) {
444*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read frame rate range min info!", __FUNCTION__);
445*ec779b8eSAndroid Build Coastguard Worker         return err;
446*ec779b8eSAndroid Build Coastguard Worker     }
447*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->readInt32(&mostRequestedFpsRange.second)) != OK) {
448*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to read frame rate range max info!", __FUNCTION__);
449*ec779b8eSAndroid Build Coastguard Worker         return err;
450*ec779b8eSAndroid Build Coastguard Worker     }
451*ec779b8eSAndroid Build Coastguard Worker 
452*ec779b8eSAndroid Build Coastguard Worker     mCameraId = toStdString(id);
453*ec779b8eSAndroid Build Coastguard Worker     mFacing = facing;
454*ec779b8eSAndroid Build Coastguard Worker     mNewCameraState = newCameraState;
455*ec779b8eSAndroid Build Coastguard Worker     mClientName = toStdString(clientName);
456*ec779b8eSAndroid Build Coastguard Worker     mApiLevel = apiLevel;
457*ec779b8eSAndroid Build Coastguard Worker     mIsNdk = isNdk;
458*ec779b8eSAndroid Build Coastguard Worker     mLatencyMs = latencyMs;
459*ec779b8eSAndroid Build Coastguard Worker     mLogId = logId;
460*ec779b8eSAndroid Build Coastguard Worker     mMaxPreviewFps = maxPreviewFps;
461*ec779b8eSAndroid Build Coastguard Worker     mSessionType = sessionType;
462*ec779b8eSAndroid Build Coastguard Worker     mInternalReconfigure = internalReconfigure;
463*ec779b8eSAndroid Build Coastguard Worker     mRequestCount = requestCount;
464*ec779b8eSAndroid Build Coastguard Worker     mResultErrorCount = resultErrorCount;
465*ec779b8eSAndroid Build Coastguard Worker     mDeviceError = deviceError;
466*ec779b8eSAndroid Build Coastguard Worker     mStreamStats = std::move(streamStats);
467*ec779b8eSAndroid Build Coastguard Worker     mUserTag = toStdString(userTag);
468*ec779b8eSAndroid Build Coastguard Worker     mVideoStabilizationMode = videoStabilizationMode;
469*ec779b8eSAndroid Build Coastguard Worker     mUsedUltraWide = usedUltraWide;
470*ec779b8eSAndroid Build Coastguard Worker     mUsedZoomOverride = usedZoomOverride;
471*ec779b8eSAndroid Build Coastguard Worker     mSessionIndex = sessionIdx;
472*ec779b8eSAndroid Build Coastguard Worker     mCameraExtensionSessionStats = extStats;
473*ec779b8eSAndroid Build Coastguard Worker     mMostRequestedFpsRange = mostRequestedFpsRange;
474*ec779b8eSAndroid Build Coastguard Worker 
475*ec779b8eSAndroid Build Coastguard Worker     return OK;
476*ec779b8eSAndroid Build Coastguard Worker }
477*ec779b8eSAndroid Build Coastguard Worker 
writeToParcel(android::Parcel * parcel) const478*ec779b8eSAndroid Build Coastguard Worker status_t CameraSessionStats::writeToParcel(android::Parcel* parcel) const {
479*ec779b8eSAndroid Build Coastguard Worker     if (parcel == NULL) {
480*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Null parcel", __FUNCTION__);
481*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
482*ec779b8eSAndroid Build Coastguard Worker     }
483*ec779b8eSAndroid Build Coastguard Worker 
484*ec779b8eSAndroid Build Coastguard Worker     status_t err = OK;
485*ec779b8eSAndroid Build Coastguard Worker 
486*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeString16(toString16(mCameraId))) != OK) {
487*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write camera id!", __FUNCTION__);
488*ec779b8eSAndroid Build Coastguard Worker         return err;
489*ec779b8eSAndroid Build Coastguard Worker     }
490*ec779b8eSAndroid Build Coastguard Worker 
491*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mFacing)) != OK) {
492*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write camera facing!", __FUNCTION__);
493*ec779b8eSAndroid Build Coastguard Worker         return err;
494*ec779b8eSAndroid Build Coastguard Worker     }
495*ec779b8eSAndroid Build Coastguard Worker 
496*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mNewCameraState)) != OK) {
497*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write new camera state!", __FUNCTION__);
498*ec779b8eSAndroid Build Coastguard Worker         return err;
499*ec779b8eSAndroid Build Coastguard Worker     }
500*ec779b8eSAndroid Build Coastguard Worker 
501*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeString16(toString16(mClientName))) != OK) {
502*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write client name!", __FUNCTION__);
503*ec779b8eSAndroid Build Coastguard Worker         return err;
504*ec779b8eSAndroid Build Coastguard Worker     }
505*ec779b8eSAndroid Build Coastguard Worker 
506*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mApiLevel)) != OK) {
507*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write api level!", __FUNCTION__);
508*ec779b8eSAndroid Build Coastguard Worker         return err;
509*ec779b8eSAndroid Build Coastguard Worker     }
510*ec779b8eSAndroid Build Coastguard Worker 
511*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeBool(mIsNdk)) != OK) {
512*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write isNdk flag!", __FUNCTION__);
513*ec779b8eSAndroid Build Coastguard Worker         return err;
514*ec779b8eSAndroid Build Coastguard Worker     }
515*ec779b8eSAndroid Build Coastguard Worker 
516*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mLatencyMs)) != OK) {
517*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write latency in Ms!", __FUNCTION__);
518*ec779b8eSAndroid Build Coastguard Worker         return err;
519*ec779b8eSAndroid Build Coastguard Worker     }
520*ec779b8eSAndroid Build Coastguard Worker 
521*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt64(mLogId)) != OK) {
522*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write log ID!", __FUNCTION__);
523*ec779b8eSAndroid Build Coastguard Worker         return err;
524*ec779b8eSAndroid Build Coastguard Worker     }
525*ec779b8eSAndroid Build Coastguard Worker 
526*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeFloat(mMaxPreviewFps)) != OK) {
527*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write maxPreviewFps!", __FUNCTION__);
528*ec779b8eSAndroid Build Coastguard Worker         return err;
529*ec779b8eSAndroid Build Coastguard Worker     }
530*ec779b8eSAndroid Build Coastguard Worker 
531*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mSessionType)) != OK) {
532*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write session type!", __FUNCTION__);
533*ec779b8eSAndroid Build Coastguard Worker         return err;
534*ec779b8eSAndroid Build Coastguard Worker     }
535*ec779b8eSAndroid Build Coastguard Worker 
536*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mInternalReconfigure)) != OK) {
537*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write internal reconfigure count!", __FUNCTION__);
538*ec779b8eSAndroid Build Coastguard Worker         return err;
539*ec779b8eSAndroid Build Coastguard Worker     }
540*ec779b8eSAndroid Build Coastguard Worker 
541*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt64(mRequestCount)) != OK) {
542*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write request count!", __FUNCTION__);
543*ec779b8eSAndroid Build Coastguard Worker         return err;
544*ec779b8eSAndroid Build Coastguard Worker     }
545*ec779b8eSAndroid Build Coastguard Worker 
546*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt64(mResultErrorCount)) != OK) {
547*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write result error count!", __FUNCTION__);
548*ec779b8eSAndroid Build Coastguard Worker         return err;
549*ec779b8eSAndroid Build Coastguard Worker     }
550*ec779b8eSAndroid Build Coastguard Worker 
551*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeBool(mDeviceError)) != OK) {
552*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write device error flag!", __FUNCTION__);
553*ec779b8eSAndroid Build Coastguard Worker         return err;
554*ec779b8eSAndroid Build Coastguard Worker     }
555*ec779b8eSAndroid Build Coastguard Worker 
556*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeParcelableVector(mStreamStats)) != OK) {
557*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write stream states!", __FUNCTION__);
558*ec779b8eSAndroid Build Coastguard Worker         return err;
559*ec779b8eSAndroid Build Coastguard Worker     }
560*ec779b8eSAndroid Build Coastguard Worker 
561*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeString16(toString16(mUserTag))) != OK) {
562*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write user tag!", __FUNCTION__);
563*ec779b8eSAndroid Build Coastguard Worker         return err;
564*ec779b8eSAndroid Build Coastguard Worker     }
565*ec779b8eSAndroid Build Coastguard Worker 
566*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mVideoStabilizationMode)) != OK) {
567*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write video stabilization mode!", __FUNCTION__);
568*ec779b8eSAndroid Build Coastguard Worker         return err;
569*ec779b8eSAndroid Build Coastguard Worker     }
570*ec779b8eSAndroid Build Coastguard Worker 
571*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeBool(mUsedUltraWide)) != OK) {
572*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write ultrawide usage!", __FUNCTION__);
573*ec779b8eSAndroid Build Coastguard Worker         return err;
574*ec779b8eSAndroid Build Coastguard Worker     }
575*ec779b8eSAndroid Build Coastguard Worker 
576*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeBool(mUsedZoomOverride)) != OK) {
577*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write zoom override usage!", __FUNCTION__);
578*ec779b8eSAndroid Build Coastguard Worker         return err;
579*ec779b8eSAndroid Build Coastguard Worker     }
580*ec779b8eSAndroid Build Coastguard Worker 
581*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mSessionIndex)) != OK) {
582*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write session index!", __FUNCTION__);
583*ec779b8eSAndroid Build Coastguard Worker         return err;
584*ec779b8eSAndroid Build Coastguard Worker     }
585*ec779b8eSAndroid Build Coastguard Worker 
586*ec779b8eSAndroid Build Coastguard Worker     if ((err = mCameraExtensionSessionStats.writeToParcel(parcel)) != OK) {
587*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write extension sessions stats!", __FUNCTION__);
588*ec779b8eSAndroid Build Coastguard Worker         return err;
589*ec779b8eSAndroid Build Coastguard Worker     }
590*ec779b8eSAndroid Build Coastguard Worker 
591*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mMostRequestedFpsRange.first)) != OK) {
592*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write frame rate range min info!", __FUNCTION__);
593*ec779b8eSAndroid Build Coastguard Worker         return err;
594*ec779b8eSAndroid Build Coastguard Worker     }
595*ec779b8eSAndroid Build Coastguard Worker 
596*ec779b8eSAndroid Build Coastguard Worker     if ((err = parcel->writeInt32(mMostRequestedFpsRange.second)) != OK) {
597*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Failed to write frame rate range max info!", __FUNCTION__);
598*ec779b8eSAndroid Build Coastguard Worker         return err;
599*ec779b8eSAndroid Build Coastguard Worker     }
600*ec779b8eSAndroid Build Coastguard Worker 
601*ec779b8eSAndroid Build Coastguard Worker     return OK;
602*ec779b8eSAndroid Build Coastguard Worker }
603*ec779b8eSAndroid Build Coastguard Worker 
604*ec779b8eSAndroid Build Coastguard Worker } // namespace hardware
605*ec779b8eSAndroid Build Coastguard Worker } // namesmpace android
606