• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2024 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 
17 #ifndef ANDROID_SERVERS_CAMERA_SHAREDSESSIONCONFIGUTILS_H_
18 #define ANDROID_SERVERS_CAMERA_SHAREDSESSIONCONFIGUTILS_H_
19 
20 #define SHARED_SESSION_FILE_PATH "system_ext/etc/"
21 #define SHARED_SESSION_FILE_NAME "shared_session_config.xml"
22 
23 #include <android/hardware_buffer.h>
24 #include <camera/camera2/OutputConfiguration.h>
25 #include <system/camera_metadata.h>
26 #include <system/graphics.h>
27 
28 #include <set>
29 #include <string>
30 #include "tinyxml2.h"
31 #include <vector>
32 
33 using tinyxml2::XMLElement;
34 namespace android {
35 
36 enum ErrorCode : uint8_t {
37     // OK status.
38     STATUS_OK = 0,
39 
40     // Error status. Cannot read the config file (config file missing or not
41     // accessible)
42     ERROR_READ_CONFIG_FILE = 1,
43 
44     // Error status. Config file format doesn't match.
45     ERROR_CONFIG_FILE_FORMAT = 2,
46 
47     // Error status. Config reader hasn't been initialized.
48     ERROR_CONFIG_READER_UNINITIALIZED = 3,
49 
50     // Error status. Bad parameter.
51     ERROR_BAD_PARAMETER = 4,
52 };
53 
54 inline const std::set<int64_t> VALID_COLOR_SPACES = {
55         ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED,
56         ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_SRGB,
57         ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_DISPLAY_P3,
58         ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_BT2020_HLG,
59 };
60 
61 inline const std::set<int64_t> VALID_SURFACE_TYPES = {
62         OutputConfiguration::SURFACE_TYPE_SURFACE_VIEW,
63         OutputConfiguration::SURFACE_TYPE_SURFACE_TEXTURE,
64         OutputConfiguration::SURFACE_TYPE_MEDIA_RECORDER,
65         OutputConfiguration::SURFACE_TYPE_MEDIA_CODEC,
66         OutputConfiguration::SURFACE_TYPE_IMAGE_READER,
67 };
68 
69 inline const std::set<int64_t> VALID_STREAM_USE_CASES = {
70         ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT,
71         ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW,
72         ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_STILL_CAPTURE,
73         ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_VIDEO_RECORD,
74         ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_PREVIEW_VIDEO_STILL,
75         ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_VIDEO_CALL,
76         ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW,
77         ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_VENDOR_START,
78 };
79 
80 inline const std::set<int64_t> VALID_TIMESTAMP_BASES = {
81         OutputConfiguration::TIMESTAMP_BASE_DEFAULT,
82         OutputConfiguration::TIMESTAMP_BASE_SENSOR,
83         OutputConfiguration::TIMESTAMP_BASE_MONOTONIC,
84         OutputConfiguration::TIMESTAMP_BASE_REALTIME,
85         OutputConfiguration::TIMESTAMP_BASE_CHOREOGRAPHER_SYNCED,
86         OutputConfiguration::TIMESTAMP_BASE_MAX,
87 };
88 
89 inline const std::set<int64_t> VALID_MIRROR_MODES = {
90         OutputConfiguration::MIRROR_MODE_AUTO,
91         OutputConfiguration::MIRROR_MODE_NONE,
92         OutputConfiguration::MIRROR_MODE_H,
93         OutputConfiguration::MIRROR_MODE_V,
94 };
95 
96 inline const std::set<int64_t> VALID_FORMATS = {
97         HAL_PIXEL_FORMAT_RGBA_8888,
98         HAL_PIXEL_FORMAT_RGBX_8888,
99         HAL_PIXEL_FORMAT_RGB_888,
100         HAL_PIXEL_FORMAT_RGB_565,
101         HAL_PIXEL_FORMAT_BGRA_8888,
102         HAL_PIXEL_FORMAT_YCBCR_422_SP,
103         HAL_PIXEL_FORMAT_YCRCB_420_SP,
104         HAL_PIXEL_FORMAT_YCBCR_422_I,
105         HAL_PIXEL_FORMAT_RGBA_FP16,
106         HAL_PIXEL_FORMAT_RAW16,
107         HAL_PIXEL_FORMAT_BLOB,
108         HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
109         HAL_PIXEL_FORMAT_YCBCR_420_888,
110         HAL_PIXEL_FORMAT_RAW_OPAQUE,
111         HAL_PIXEL_FORMAT_RAW10,
112         HAL_PIXEL_FORMAT_RAW12,
113         HAL_PIXEL_FORMAT_RGBA_1010102,
114         HAL_PIXEL_FORMAT_Y8,
115         HAL_PIXEL_FORMAT_Y16,
116         HAL_PIXEL_FORMAT_YV12,
117         HAL_PIXEL_FORMAT_DEPTH_16,
118         HAL_PIXEL_FORMAT_DEPTH_24,
119         HAL_PIXEL_FORMAT_DEPTH_24_STENCIL_8,
120         HAL_PIXEL_FORMAT_DEPTH_32F,
121         HAL_PIXEL_FORMAT_DEPTH_32F_STENCIL_8,
122         HAL_PIXEL_FORMAT_STENCIL_8,
123         HAL_PIXEL_FORMAT_YCBCR_P010,
124         HAL_PIXEL_FORMAT_HSV_888,
125 };
126 
127 inline const std::set<int64_t> VALID_USAGES = {
128         AHARDWAREBUFFER_USAGE_CPU_READ_NEVER,
129         AHARDWAREBUFFER_USAGE_CPU_READ_RARELY,
130         AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN,
131         AHARDWAREBUFFER_USAGE_CPU_WRITE_NEVER,
132         AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY,
133         AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN,
134         AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER,
135         AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT,
136         AHARDWAREBUFFER_USAGE_COMPOSER_OVERLAY,
137         AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT,
138         AHARDWAREBUFFER_USAGE_VIDEO_ENCODE,
139         AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA,
140         AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER,
141         AHARDWAREBUFFER_USAGE_GPU_CUBE_MAP,
142         AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE,
143         AHARDWAREBUFFER_USAGE_FRONT_BUFFER,
144         AHARDWAREBUFFER_USAGE_VENDOR_0,
145         AHARDWAREBUFFER_USAGE_VENDOR_1,
146         AHARDWAREBUFFER_USAGE_VENDOR_2,
147         AHARDWAREBUFFER_USAGE_VENDOR_3,
148         AHARDWAREBUFFER_USAGE_VENDOR_4,
149         AHARDWAREBUFFER_USAGE_VENDOR_5,
150         AHARDWAREBUFFER_USAGE_VENDOR_6,
151         AHARDWAREBUFFER_USAGE_VENDOR_7,
152         AHARDWAREBUFFER_USAGE_VENDOR_8,
153         AHARDWAREBUFFER_USAGE_VENDOR_9,
154         AHARDWAREBUFFER_USAGE_VENDOR_10,
155         AHARDWAREBUFFER_USAGE_VENDOR_11,
156         AHARDWAREBUFFER_USAGE_VENDOR_12,
157         AHARDWAREBUFFER_USAGE_VENDOR_13,
158         AHARDWAREBUFFER_USAGE_VENDOR_14,
159         AHARDWAREBUFFER_USAGE_VENDOR_15,
160         AHARDWAREBUFFER_USAGE_VENDOR_16,
161         AHARDWAREBUFFER_USAGE_VENDOR_17,
162         AHARDWAREBUFFER_USAGE_VENDOR_18,
163 };
164 
165 inline const std::set<int64_t> VALID_DATA_SPACES = {
166         HAL_DATASPACE_UNKNOWN,
167         HAL_DATASPACE_ARBITRARY,
168         HAL_DATASPACE_STANDARD_UNSPECIFIED,
169         HAL_DATASPACE_STANDARD_BT709,
170         HAL_DATASPACE_STANDARD_BT601_625,
171         HAL_DATASPACE_STANDARD_BT601_625_UNADJUSTED,
172         HAL_DATASPACE_STANDARD_BT601_525,
173         HAL_DATASPACE_STANDARD_BT601_525_UNADJUSTED,
174         HAL_DATASPACE_STANDARD_BT2020,
175         HAL_DATASPACE_STANDARD_BT2020_CONSTANT_LUMINANCE,
176         HAL_DATASPACE_STANDARD_BT470M,
177         HAL_DATASPACE_STANDARD_FILM,
178         HAL_DATASPACE_STANDARD_DCI_P3,
179         HAL_DATASPACE_STANDARD_ADOBE_RGB,
180         HAL_DATASPACE_TRANSFER_UNSPECIFIED,
181         HAL_DATASPACE_TRANSFER_LINEAR,
182         HAL_DATASPACE_TRANSFER_SRGB,
183         HAL_DATASPACE_TRANSFER_SMPTE_170M,
184         HAL_DATASPACE_TRANSFER_GAMMA2_2,
185         HAL_DATASPACE_TRANSFER_GAMMA2_6,
186         HAL_DATASPACE_TRANSFER_GAMMA2_8,
187         HAL_DATASPACE_TRANSFER_ST2084,
188         HAL_DATASPACE_TRANSFER_HLG,
189         HAL_DATASPACE_RANGE_UNSPECIFIED,
190         HAL_DATASPACE_RANGE_FULL,
191         HAL_DATASPACE_RANGE_LIMITED,
192         HAL_DATASPACE_RANGE_EXTENDED,
193         HAL_DATASPACE_SRGB_LINEAR,
194         HAL_DATASPACE_V0_SRGB_LINEAR,
195         HAL_DATASPACE_V0_SCRGB_LINEAR,
196         HAL_DATASPACE_SRGB,
197         HAL_DATASPACE_V0_SRGB,
198         HAL_DATASPACE_V0_SCRGB,
199         HAL_DATASPACE_JFIF,
200         HAL_DATASPACE_V0_JFIF,
201         HAL_DATASPACE_BT601_625,
202         HAL_DATASPACE_V0_BT601_625,
203         HAL_DATASPACE_BT601_525,
204         HAL_DATASPACE_V0_BT601_525,
205         HAL_DATASPACE_BT709,
206         HAL_DATASPACE_V0_BT709,
207         HAL_DATASPACE_DCI_P3_LINEAR,
208         HAL_DATASPACE_DCI_P3,
209         HAL_DATASPACE_DISPLAY_P3_LINEAR,
210         HAL_DATASPACE_DISPLAY_P3,
211         HAL_DATASPACE_ADOBE_RGB,
212         HAL_DATASPACE_BT2020_LINEAR,
213         HAL_DATASPACE_BT2020,
214         HAL_DATASPACE_BT2020_PQ,
215         HAL_DATASPACE_DEPTH,
216         HAL_DATASPACE_SENSOR,
217 };
218 
219 class SharedSessionConfigUtils {
220 public:
221 
222     // toString function for ErrorCode enum.
223     static const char* toString(ErrorCode errorCode);
224 
225     // Convert string representation of colorspace to its int value.
226     static ErrorCode getColorSpaceFromStr(const char* colorSpaceStr, int32_t* colorSpace);
227 
228     // Convert string representation of surface type to its int value.
229     static ErrorCode getSurfaceTypeFromXml(const XMLElement* surfaceTypeXml, int64_t* surfaceType);
230 
231     // Convert string representation of width to its int value.
232     static ErrorCode getWidthFromXml(const XMLElement* widthXml, int64_t* width);
233 
234     // Convert string representation of height to its int value.
235     static ErrorCode getHeightFromXml(const XMLElement* heightXml, int64_t* height);
236 
237     // Convert string representation of physical cameraId to its std::string value.
238     static ErrorCode getPhysicalCameraIdFromXml(const XMLElement* physicalCameraIdXml,
239                                                 std::string* physicalCameraId);
240 
241     // Convert string representation of stream use case to its int64 value.
242     static ErrorCode getStreamUseCaseFromXml(const XMLElement* streamUseCaseXml,
243                                              int64_t* streamUseCase);
244 
245     // Convert string representation of timestamp base to its int value.
246     static ErrorCode getTimestampBaseFromXml(const XMLElement* timestampBaseXml,
247                                              int64_t* timestampBase);
248 
249     // Convert string representation of mirror mode to its int value.
250     static ErrorCode getMirrorModeFromXml(const XMLElement* mirrorModeXml, int64_t* mirrorMode);
251 
252     // Convert string representation of use readout timestamp to its bool value.
253     static ErrorCode getUseReadoutTimestampFromXml(const XMLElement* useReadoutTimestampXml,
254                                                    bool* useReadoutTimestamp);
255 
256     // Convert string representation of format to its int value.
257     static ErrorCode getFormatFromXml(const XMLElement* formatXml, int64_t* format,
258                                       int64_t surfaceType);
259 
260     // Convert string representation of usage to its int64 value.
261     static ErrorCode getUsageFromXml(const XMLElement* usageXml, int64_t* usage,
262                                      int64_t surfaceType);
263 
264     // Convert string representation of data space to its int value.
265     static ErrorCode getDataSpaceFromXml(const XMLElement* dataSpaceXml, int64_t* dataSpace);
266 
267     static std::vector<std::string> splitString(std::string inputString, char delimiter);
268 
269     static std::string setToString(const std::set<int64_t>& s);
270 };
271 
272 }  // namespace android
273 
274 #endif  // ANDROID_SERVERS_CAMERA_SHAREDSESSIONCONFIGUTILS_H_
275