• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
18 import android.hardware.camera2.CameraMetadata;
19 import android.hardware.camera2.params.DynamicRangeProfiles;
20 import android.os.Parcel;
21 import android.os.Parcelable;
22 import android.util.Log;
23 
24 /**
25  * The camera stream statistics used for passing camera stream information from
26  * camera service to camera service proxy.
27  *
28  * Include camera stream configuration, request/error counts, startup latency,
29  * and latency/jitter histograms.
30  *
31  * @hide
32  */
33 public class CameraStreamStats implements Parcelable {
34     public static final int HISTOGRAM_TYPE_UNKNOWN = 0;
35     public static final int HISTOGRAM_TYPE_CAPTURE_LATENCY = 1;
36 
37     private int mWidth;
38     private int mHeight;
39     private int mFormat;
40     private float mMaxPreviewFps;
41     private int mDataSpace;
42     private long mUsage;
43     private long mRequestCount;
44     private long mErrorCount;
45     private int mStartLatencyMs;
46     private int mMaxHalBuffers;
47     private int mMaxAppBuffers;
48     private int mHistogramType;
49     private float[] mHistogramBins;
50     private long[] mHistogramCounts;
51     private long mDynamicRangeProfile;
52     private long mStreamUseCase;
53 
54     private static final String TAG = "CameraStreamStats";
55 
CameraStreamStats()56     public CameraStreamStats() {
57         mWidth = 0;
58         mHeight = 0;
59         mFormat = 0;
60         mMaxPreviewFps = 0;
61         mDataSpace = 0;
62         mUsage = 0;
63         mRequestCount = 0;
64         mErrorCount = 0;
65         mStartLatencyMs = 0;
66         mMaxHalBuffers = 0;
67         mMaxAppBuffers = 0;
68         mHistogramType = HISTOGRAM_TYPE_UNKNOWN;
69         mDynamicRangeProfile = DynamicRangeProfiles.STANDARD;
70         mStreamUseCase = CameraMetadata.SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT;
71     }
72 
CameraStreamStats(int width, int height, int format, float maxPreviewFps, int dataSpace, long usage, long requestCount, long errorCount, int startLatencyMs, int maxHalBuffers, int maxAppBuffers, long dynamicRangeProfile, long streamUseCase)73     public CameraStreamStats(int width, int height, int format, float maxPreviewFps,
74             int dataSpace, long usage, long requestCount, long errorCount,
75             int startLatencyMs, int maxHalBuffers, int maxAppBuffers, long dynamicRangeProfile,
76             long streamUseCase) {
77         mWidth = width;
78         mHeight = height;
79         mFormat = format;
80         mMaxPreviewFps = maxPreviewFps;
81         mDataSpace = dataSpace;
82         mUsage = usage;
83         mRequestCount = requestCount;
84         mErrorCount = errorCount;
85         mStartLatencyMs = startLatencyMs;
86         mMaxHalBuffers = maxHalBuffers;
87         mMaxAppBuffers = maxAppBuffers;
88         mHistogramType = HISTOGRAM_TYPE_UNKNOWN;
89         mDynamicRangeProfile = dynamicRangeProfile;
90         mStreamUseCase = streamUseCase;
91     }
92 
93     public static final @android.annotation.NonNull Parcelable.Creator<CameraStreamStats> CREATOR =
94             new Parcelable.Creator<CameraStreamStats>() {
95         @Override
96         public CameraStreamStats createFromParcel(Parcel in) {
97             try {
98                 CameraStreamStats streamStats = new CameraStreamStats(in);
99                 return streamStats;
100             } catch (Exception e) {
101                 Log.e(TAG, "Exception creating CameraStreamStats from parcel", e);
102                 return null;
103             }
104         }
105 
106         @Override
107         public CameraStreamStats[] newArray(int size) {
108             return new CameraStreamStats[size];
109         }
110     };
111 
CameraStreamStats(Parcel in)112     private CameraStreamStats(Parcel in) {
113         readFromParcel(in);
114     }
115 
116     @Override
describeContents()117     public int describeContents() {
118         return 0;
119     }
120 
121     @Override
writeToParcel(Parcel dest, int flags)122     public void writeToParcel(Parcel dest, int flags) {
123         dest.writeInt(mWidth);
124         dest.writeInt(mHeight);
125         dest.writeInt(mFormat);
126         dest.writeFloat(mMaxPreviewFps);
127         dest.writeInt(mDataSpace);
128         dest.writeLong(mUsage);
129         dest.writeLong(mRequestCount);
130         dest.writeLong(mErrorCount);
131         dest.writeInt(mStartLatencyMs);
132         dest.writeInt(mMaxHalBuffers);
133         dest.writeInt(mMaxAppBuffers);
134         dest.writeInt(mHistogramType);
135         dest.writeFloatArray(mHistogramBins);
136         dest.writeLongArray(mHistogramCounts);
137         dest.writeLong(mDynamicRangeProfile);
138         dest.writeLong(mStreamUseCase);
139     }
140 
readFromParcel(Parcel in)141     public void readFromParcel(Parcel in) {
142         mWidth = in.readInt();
143         mHeight = in.readInt();
144         mFormat = in.readInt();
145         mMaxPreviewFps = in.readFloat();
146         mDataSpace = in.readInt();
147         mUsage = in.readLong();
148         mRequestCount = in.readLong();
149         mErrorCount = in.readLong();
150         mStartLatencyMs = in.readInt();
151         mMaxHalBuffers = in.readInt();
152         mMaxAppBuffers = in.readInt();
153         mHistogramType = in.readInt();
154         mHistogramBins = in.createFloatArray();
155         mHistogramCounts = in.createLongArray();
156         mDynamicRangeProfile = in.readLong();
157         mStreamUseCase = in.readLong();
158     }
159 
getWidth()160     public int getWidth() {
161         return mWidth;
162     }
163 
getHeight()164     public int getHeight() {
165         return mHeight;
166     }
167 
getFormat()168     public int getFormat() {
169         return mFormat;
170     }
171 
getMaxPreviewFps()172     public float getMaxPreviewFps() {
173         return mMaxPreviewFps;
174     }
175 
getDataSpace()176     public int getDataSpace() {
177         return mDataSpace;
178     }
179 
getUsage()180     public long getUsage() {
181         return mUsage;
182     }
183 
getRequestCount()184     public long getRequestCount() {
185         return mRequestCount;
186     }
187 
getErrorCount()188     public long getErrorCount() {
189         return mErrorCount;
190     }
191 
getStartLatencyMs()192     public int getStartLatencyMs() {
193         return mStartLatencyMs;
194     }
195 
getMaxHalBuffers()196     public int getMaxHalBuffers() {
197         return mMaxHalBuffers;
198     }
199 
getMaxAppBuffers()200     public int getMaxAppBuffers() {
201         return mMaxAppBuffers;
202     }
203 
getHistogramType()204     public int getHistogramType() {
205         return mHistogramType;
206     }
207 
getHistogramBins()208     public float[] getHistogramBins() {
209         return mHistogramBins;
210     }
211 
getHistogramCounts()212     public long[] getHistogramCounts() {
213         return mHistogramCounts;
214     }
215 
getDynamicRangeProfile()216     public long getDynamicRangeProfile() {
217         return mDynamicRangeProfile;
218     }
219 
getStreamUseCase()220     public long getStreamUseCase() {
221         return mStreamUseCase;
222     }
223 }
224