• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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 HARDWARE_INTERFACES_CAMERA_PROVIDER_AIDL_VTS_CAMERA_AIDL_TEST_H_
18 #define HARDWARE_INTERFACES_CAMERA_PROVIDER_AIDL_VTS_CAMERA_AIDL_TEST_H_
19 
20 #define LOG_TAG "camera_aidl_hal_test"
21 
22 #include <string>
23 #include <unordered_map>
24 #include <unordered_set>
25 
26 #include <CameraMetadata.h>
27 #include <CameraParameters.h>
28 #include <HandleImporter.h>
29 #include <fmq/AidlMessageQueue.h>
30 
31 #include <aidl/android/hardware/graphics/common/Dataspace.h>
32 
33 #include <aidl/android/hardware/camera/common/Status.h>
34 #include <aidl/android/hardware/camera/common/TorchModeStatus.h>
35 #include <aidl/android/hardware/common/NativeHandle.h>
36 
37 #include <aidl/android/hardware/camera/device/CaptureResult.h>
38 #include <aidl/android/hardware/camera/device/ErrorCode.h>
39 #include <aidl/android/hardware/camera/device/HalStream.h>
40 #include <aidl/android/hardware/camera/device/ICameraDevice.h>
41 #include <aidl/android/hardware/camera/device/NotifyMsg.h>
42 #include <aidl/android/hardware/camera/device/PhysicalCameraMetadata.h>
43 #include <aidl/android/hardware/camera/device/Stream.h>
44 
45 #include <aidl/android/hardware/camera/provider/ICameraProvider.h>
46 
47 #include <aidl/android/hardware/graphics/common/PixelFormat.h>
48 
49 #include <gtest/gtest.h>
50 
51 #include <log/log.h>
52 #include <system/camera_metadata.h>
53 #include <utils/KeyedVector.h>
54 #include <utils/Timers.h>
55 
56 using ::aidl::android::hardware::camera::common::Status;
57 using ::aidl::android::hardware::camera::common::TorchModeStatus;
58 using ::aidl::android::hardware::camera::device::BufferRequest;
59 using ::aidl::android::hardware::camera::device::BufferRequestStatus;
60 using ::aidl::android::hardware::camera::device::CameraMetadata;
61 using ::aidl::android::hardware::camera::device::CaptureResult;
62 using ::aidl::android::hardware::camera::device::ErrorCode;
63 using ::aidl::android::hardware::camera::device::HalStream;
64 using ::aidl::android::hardware::camera::device::ICameraDevice;
65 using ::aidl::android::hardware::camera::device::ICameraDeviceSession;
66 using ::aidl::android::hardware::camera::device::ICameraInjectionSession;
67 using ::aidl::android::hardware::camera::device::NotifyMsg;
68 using ::aidl::android::hardware::camera::device::PhysicalCameraMetadata;
69 using ::aidl::android::hardware::camera::device::RequestTemplate;
70 using ::aidl::android::hardware::camera::device::Stream;
71 using ::aidl::android::hardware::camera::device::StreamBuffer;
72 using ::aidl::android::hardware::camera::device::StreamBufferRet;
73 using ::aidl::android::hardware::camera::device::StreamConfiguration;
74 using ::aidl::android::hardware::camera::device::StreamConfigurationMode;
75 using ::aidl::android::hardware::camera::provider::ConcurrentCameraIdCombination;
76 using ::aidl::android::hardware::camera::provider::ICameraProvider;
77 
78 using ::aidl::android::hardware::common::NativeHandle;
79 using ::aidl::android::hardware::common::fmq::SynchronizedReadWrite;
80 
81 using ::aidl::android::hardware::graphics::common::Dataspace;
82 using ::aidl::android::hardware::graphics::common::PixelFormat;
83 
84 using ::android::hardware::camera::common::V1_0::helper::HandleImporter;
85 using ::android::hardware::camera::common::V1_0::helper::Size;
86 
87 using ResultMetadataQueue = android::AidlMessageQueue<int8_t, SynchronizedReadWrite>;
88 
89 using ::ndk::ScopedAStatus;
90 
91 class DeviceCb;  // Forward declare to break circular header dependency
92 
93 class CameraAidlTest : public ::testing::TestWithParam<std::string> {
94   public:
95     enum SystemCameraKind {
96         /**
97          * These camera devices are visible to all apps and system components alike
98          */
99         PUBLIC = 0,
100 
101         /**
102          * These camera devices are visible only to processes having the
103          * android.permission.SYSTEM_CAMERA permission. They are not exposed to 3P
104          * apps.
105          */
106         SYSTEM_ONLY_CAMERA,
107 
108         /**
109          * These camera devices are visible only to HAL clients (that try to connect
110          * on a hwbinder thread).
111          */
112         HIDDEN_SECURE_CAMERA
113     };
114 
115     struct AvailableStream {
116         int32_t width;
117         int32_t height;
118         int32_t format;
119     };
120 
121     enum ReprocessType {
122         PRIV_REPROCESS,
123         YUV_REPROCESS,
124     };
125 
126     struct AvailableZSLInputOutput {
127         int32_t inputFormat;
128         int32_t outputFormat;
129     };
130 
131     virtual void SetUp() override;
132     virtual void TearDown() override;
133 
134     std::vector<std::string> getCameraDeviceNames(std::shared_ptr<ICameraProvider>& provider,
135                                                   bool addSecureOnly = false);
136 
137     static bool isSecureOnly(const std::shared_ptr<ICameraProvider>& provider,
138                              const std::string& name);
139 
140     std::map<std::string, std::string> getCameraDeviceIdToNameMap(
141             std::shared_ptr<ICameraProvider> provider);
142 
143     static std::vector<ConcurrentCameraIdCombination> getConcurrentDeviceCombinations(
144             std::shared_ptr<ICameraProvider>& provider);
145 
146     void notifyDeviceState(int64_t state);
147 
148     static void allocateGraphicBuffer(uint32_t width, uint32_t height, uint64_t usage,
149                                       PixelFormat format, buffer_handle_t* buffer_handle /*out*/);
150 
151     static void openEmptyDeviceSession(const std::string& name,
152                                        const std::shared_ptr<ICameraProvider>& provider,
153                                        std::shared_ptr<ICameraDeviceSession>* session /*out*/,
154                                        CameraMetadata* staticMeta /*out*/,
155                                        std::shared_ptr<ICameraDevice>* device /*out*/);
156     static void openEmptyInjectionSession(const std::string& name,
157                                           const std::shared_ptr<ICameraProvider>& provider,
158                                           std::shared_ptr<ICameraInjectionSession>* session /*out*/,
159                                           CameraMetadata* staticMeta /*out*/,
160                                           std::shared_ptr<ICameraDevice>* device /*out*/);
161 
162     static void createStreamConfiguration(std::vector<Stream>& streams,
163                                           StreamConfigurationMode configMode,
164                                           StreamConfiguration* config, int32_t jpegBufferSize = 0);
165 
166     void configureOfflineStillStream(
167             const std::string& name, const std::shared_ptr<ICameraProvider>& provider,
168             const AvailableStream* threshold,
169             std::shared_ptr<ICameraDeviceSession>* session /*out*/, Stream* stream /*out*/,
170             std::vector<HalStream>* halStreams, bool* supportsPartialResults /*out*/,
171             int32_t* partialResultCount /*out*/, std::shared_ptr<DeviceCb>* outCb /*out*/,
172             int32_t* jpegBufferSize /*out*/, bool* useHalBufManager /*out*/);
173 
174     void configureStreams(
175             const std::string& name, const std::shared_ptr<ICameraProvider>& provider,
176             PixelFormat format, std::shared_ptr<ICameraDeviceSession>* session /*out*/,
177             Stream* previewStream /*out*/, std::vector<HalStream>* halStreams /*out*/,
178             bool* supportsPartialResults /*out*/, int32_t* partialResultCount /*out*/,
179             bool* useHalBufManager /*out*/, std::shared_ptr<DeviceCb>* outCb /*out*/,
180             uint32_t streamConfigCounter, bool maxResolution,
181             aidl::android::hardware::camera::metadata::RequestAvailableDynamicRangeProfilesMap
182                     prof = ::aidl::android::hardware::camera::metadata::
183                             RequestAvailableDynamicRangeProfilesMap::
184                                     ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD);
185 
186     void configurePreviewStreams(
187             const std::string& name, const std::shared_ptr<ICameraProvider>& provider,
188             const AvailableStream* previewThreshold,
189             const std::unordered_set<std::string>& physicalIds,
190             std::shared_ptr<ICameraDeviceSession>* session /*out*/, Stream* previewStream /*out*/,
191             std::vector<HalStream>* halStreams /*out*/, bool* supportsPartialResults /*out*/,
192             int32_t* partialResultCount /*out*/, bool* useHalBufManager /*out*/,
193             std::shared_ptr<DeviceCb>* cb /*out*/, int32_t streamConfigCounter = 0,
194             bool allowUnsupport = false);
195 
196     void configurePreviewStream(
197             const std::string& name, const std::shared_ptr<ICameraProvider>& provider,
198             const AvailableStream* previewThreshold,
199             std::shared_ptr<ICameraDeviceSession>* session /*out*/, Stream* previewStream /*out*/,
200             std::vector<HalStream>* halStreams /*out*/, bool* supportsPartialResults /*out*/,
201             int32_t* partialResultCount /*out*/, bool* useHalBufManager /*out*/,
202             std::shared_ptr<DeviceCb>* cb /*out*/, uint32_t streamConfigCounter = 0);
203 
204     void configureSingleStream(
205             const std::string& name, const std::shared_ptr<ICameraProvider>& provider,
206             const AvailableStream* previewThreshold, uint64_t bufferUsage,
207             RequestTemplate reqTemplate, std::shared_ptr<ICameraDeviceSession>* session /*out*/,
208             Stream* previewStream /*out*/, std::vector<HalStream>* halStreams /*out*/,
209             bool* supportsPartialResults /*out*/, int32_t* partialResultCount /*out*/,
210             bool* useHalBufManager /*out*/, std::shared_ptr<DeviceCb>* cb /*out*/,
211             uint32_t streamConfigCounter = 0);
212 
213     void verifyLogicalOrUltraHighResCameraMetadata(const std::string& cameraName,
214                                                    const std::shared_ptr<ICameraDevice>& device,
215                                                    const CameraMetadata& chars,
216                                                    const std::vector<std::string>& deviceNames);
217 
218     static void verifyCameraCharacteristics(const CameraMetadata& chars);
219 
220     static void verifyExtendedSceneModeCharacteristics(const camera_metadata_t* metadata);
221 
222     static void verifyZoomCharacteristics(const camera_metadata_t* metadata);
223 
224     static void verifyRecommendedConfigs(const CameraMetadata& chars);
225 
226     static void verifyMonochromeCharacteristics(const CameraMetadata& chars);
227 
228     static void verifyMonochromeCameraResult(
229             const ::android::hardware::camera::common::V1_0::helper::CameraMetadata& metadata);
230 
231     static void verifyStreamUseCaseCharacteristics(const camera_metadata_t* metadata);
232 
233     static void verifyStreamCombination(const std::shared_ptr<ICameraDevice>& device,
234                                         const StreamConfiguration& config, bool expectedStatus,
235                                         bool expectStreamCombQuery);
236 
237     static void verifyLogicalCameraResult(const camera_metadata_t* staticMetadata,
238                                           const std::vector<uint8_t>& resultMetadata);
239 
240     static void verifyBuffersReturned(const std::shared_ptr<ICameraDeviceSession>& session,
241                                       int32_t streamId, const std::shared_ptr<DeviceCb>& cb,
242                                       uint32_t streamConfigCounter = 0);
243 
244     void verifyBuffersReturned(const std::shared_ptr<ICameraDeviceSession>& session,
245                                const std::vector<int32_t>& streamIds,
246                                const std::shared_ptr<DeviceCb>& cb,
247                                uint32_t streamConfigCounter = 0);
248 
249     static void verifySessionReconfigurationQuery(
250             const std::shared_ptr<ICameraDeviceSession>& session, camera_metadata* oldSessionParams,
251             camera_metadata* newSessionParams);
252 
253     static void verifyRequestTemplate(const camera_metadata_t* metadata,
254                                       RequestTemplate requestTemplate);
255 
256     static void overrideRotateAndCrop(CameraMetadata* settings /*in/out*/);
257 
258     static bool isDepthOnly(const camera_metadata_t* staticMeta);
259 
260     static bool isUltraHighResolution(const camera_metadata_t* staticMeta);
261 
262     static Status getAvailableOutputStreams(const camera_metadata_t* staticMeta,
263                                             std::vector<AvailableStream>& outputStreams,
264                                             const AvailableStream* threshold = nullptr,
265                                             bool maxResolution = false);
266 
267     static Status getMaxOutputSizeForFormat(const camera_metadata_t* staticMeta, PixelFormat format,
268                                             Size* size, bool maxResolution = false);
269 
270     static Status getMandatoryConcurrentStreams(const camera_metadata_t* staticMeta,
271                                                 std::vector<AvailableStream>* outputStreams);
272 
273     static bool supportsPreviewStabilization(const std::string& name,
274                                              const std::shared_ptr<ICameraProvider>& provider);
275 
276     static Status getJpegBufferSize(camera_metadata_t* staticMeta, int32_t* outBufSize);
277 
278     static Status isConstrainedModeAvailable(camera_metadata_t* staticMeta);
279 
280     static Status isLogicalMultiCamera(const camera_metadata_t* staticMeta);
281 
282     static bool isTorchSupported(const camera_metadata_t* staticMeta);
283 
284     static bool isTorchStrengthControlSupported(const camera_metadata_t* staticMeta);
285 
286     static Status isOfflineSessionSupported(const camera_metadata_t* staticMeta);
287 
288     static Status getPhysicalCameraIds(const camera_metadata_t* staticMeta,
289                                        std::unordered_set<std::string>* physicalIds /*out*/);
290 
291     static Status getSupportedKeys(camera_metadata_t* staticMeta, uint32_t tagId,
292                                    std::unordered_set<int32_t>* requestIDs /*out*/);
293 
294     static void fillOutputStreams(camera_metadata_ro_entry_t* entry,
295                                   std::vector<AvailableStream>& outputStreams,
296                                   const AvailableStream* threshold = nullptr,
297                                   const int32_t availableConfigOutputTag = 0u);
298 
299     static void constructFilteredSettings(
300             const std::shared_ptr<ICameraDeviceSession>& session,
301             const std::unordered_set<int32_t>& availableKeys, RequestTemplate reqTemplate,
302             android::hardware::camera::common::V1_0::helper::CameraMetadata*
303                     defaultSettings /*out*/,
304             android::hardware::camera::common::V1_0::helper::CameraMetadata* filteredSettings
305             /*out*/);
306 
307     static Status pickConstrainedModeSize(camera_metadata_t* staticMeta,
308                                           AvailableStream& hfrStream);
309 
310     static Status isZSLModeAvailable(const camera_metadata_t* staticMeta);
311 
312     static Status isZSLModeAvailable(const camera_metadata_t* staticMeta, ReprocessType reprocType);
313 
314     static Status getZSLInputOutputMap(camera_metadata_t* staticMeta,
315                                        std::vector<AvailableZSLInputOutput>& inputOutputMap);
316 
317     static Status findLargestSize(const std::vector<AvailableStream>& streamSizes, int32_t format,
318                                   AvailableStream& result);
319 
320     static Status isMonochromeCamera(const camera_metadata_t* staticMeta);
321 
322     static Status getSystemCameraKind(const camera_metadata_t* staticMeta,
323                                       SystemCameraKind* systemCameraKind);
324 
325     static void getMultiResolutionStreamConfigurations(
326             camera_metadata_ro_entry* multiResStreamConfigs,
327             camera_metadata_ro_entry* streamConfigs,
328             camera_metadata_ro_entry* maxResolutionStreamConfigs,
329             const camera_metadata_t* staticMetadata);
330 
331     static void getPrivacyTestPatternModes(
332             const camera_metadata_t* staticMetadata,
333             std::unordered_set<int32_t>* privacyTestPatternModes /*out*/);
334 
335     static Dataspace getDataspace(PixelFormat format);
336 
337     void processCaptureRequestInternal(uint64_t bufferUsage, RequestTemplate reqTemplate,
338                                        bool useSecureOnlyCameras);
339 
340     void processPreviewStabilizationCaptureRequestInternal(
341             bool previewStabilizationOn,
342             /*inout*/ std::unordered_map<std::string, nsecs_t>& cameraDeviceToTimeLag);
343 
344     static bool is10BitDynamicRangeCapable(const camera_metadata_t* staticMeta);
345 
346     static void get10BitDynamicRangeProfiles(
347             const camera_metadata_t* staticMeta,
348             std::vector<aidl::android::hardware::camera::metadata::
349                                 RequestAvailableDynamicRangeProfilesMap>* profiles);
350 
351     // Used by switchToOffline where a new result queue is created for offline reqs
352     void updateInflightResultQueue(const std::shared_ptr<ResultMetadataQueue>& resultQueue);
353 
354     static Size getMinSize(Size a, Size b);
355 
356   protected:
357     // In-flight queue for tracking completion of capture requests.
358     struct InFlightRequest {
359         // Set by notify() SHUTTER call.
360         nsecs_t shutterTimestamp;
361 
362         bool shutterReadoutTimestampValid;
363         nsecs_t shutterReadoutTimestamp;
364 
365         bool errorCodeValid;
366         ErrorCode errorCode;
367 
368         // Is partial result supported
369         bool usePartialResult;
370 
371         // Partial result count expected
372         int32_t numPartialResults;
373 
374         // Message queue
375         std::shared_ptr<ResultMetadataQueue> resultQueue;
376 
377         // Set by process_capture_result call with valid metadata
378         bool haveResultMetadata;
379 
380         // Decremented by calls to process_capture_result with valid output
381         // and input buffers
382         ssize_t numBuffersLeft;
383 
384         // A 64bit integer to index the frame number associated with this result.
385         int64_t frameNumber;
386 
387         // The partial result count (index) for this capture result.
388         int32_t partialResultCount;
389 
390         // For buffer drop errors, the stream ID for the stream that lost a buffer.
391         // For physical sub-camera result errors, the Id of the physical stream
392         // for the physical sub-camera.
393         // Otherwise -1.
394         int32_t errorStreamId;
395 
396         // If this request has any input buffer
397         bool hasInputBuffer;
398 
399         // Result metadata
400         ::android::hardware::camera::common::V1_0::helper::CameraMetadata collectedResult;
401 
402         // Inflight buffers
403         using OutstandingBuffers = std::unordered_map<uint64_t, buffer_handle_t>;
404         std::vector<OutstandingBuffers> mOutstandingBufferIds;
405 
406         // A copy-able StreamBuffer using buffer_handle_t instead of AIDLs NativeHandle
407         struct NativeStreamBuffer {
408             int32_t streamId;
409             int64_t bufferId;
410             buffer_handle_t buffer;
411             aidl::android::hardware::camera::device::BufferStatus status;
412             buffer_handle_t acquireFence;
413             buffer_handle_t releaseFence;
414         };
415 
416         // Buffers are added by process_capture_result when output buffers
417         // return from HAL but framework.
418         struct StreamBufferAndTimestamp {
419             NativeStreamBuffer buffer;
420             nsecs_t timeStamp;
421         };
422         std::vector<StreamBufferAndTimestamp> resultOutputBuffers;
423 
424         std::unordered_set<std::string> expectedPhysicalResults;
425 
InFlightRequestInFlightRequest426         InFlightRequest()
427             : shutterTimestamp(0),
428               shutterReadoutTimestampValid(false),
429               shutterReadoutTimestamp(0),
430               errorCodeValid(false),
431               errorCode(ErrorCode::ERROR_BUFFER),
432               usePartialResult(false),
433               numPartialResults(0),
434               resultQueue(nullptr),
435               haveResultMetadata(false),
436               numBuffersLeft(0),
437               frameNumber(0),
438               partialResultCount(0),
439               errorStreamId(-1),
440               hasInputBuffer(false),
441               collectedResult(1, 10) {}
442 
443         InFlightRequest(ssize_t numBuffers, bool hasInput, bool partialResults,
444                         int32_t partialCount, std::shared_ptr<ResultMetadataQueue> queue = nullptr)
445             : shutterTimestamp(0),
446               shutterReadoutTimestampValid(false),
447               shutterReadoutTimestamp(0),
448               errorCodeValid(false),
449               errorCode(ErrorCode::ERROR_BUFFER),
450               usePartialResult(partialResults),
451               numPartialResults(partialCount),
452               resultQueue(queue),
453               haveResultMetadata(false),
454               numBuffersLeft(numBuffers),
455               frameNumber(0),
456               partialResultCount(0),
457               errorStreamId(-1),
458               hasInputBuffer(hasInput),
459               collectedResult(1, 10) {}
460 
461         InFlightRequest(ssize_t numBuffers, bool hasInput, bool partialResults,
462                         int32_t partialCount,
463                         const std::unordered_set<std::string>& extraPhysicalResult,
464                         std::shared_ptr<ResultMetadataQueue> queue = nullptr)
465             : shutterTimestamp(0),
466               shutterReadoutTimestampValid(false),
467               shutterReadoutTimestamp(0),
468               errorCodeValid(false),
469               errorCode(ErrorCode::ERROR_BUFFER),
470               usePartialResult(partialResults),
471               numPartialResults(partialCount),
472               resultQueue(queue),
473               haveResultMetadata(false),
474               numBuffersLeft(numBuffers),
475               frameNumber(0),
476               partialResultCount(0),
477               errorStreamId(-1),
478               hasInputBuffer(hasInput),
479               collectedResult(1, 10),
480               expectedPhysicalResults(extraPhysicalResult) {}
481     };
482 
483     static bool matchDeviceName(const std::string& deviceName, const std::string& providerType,
484                                 std::string* deviceVersion, std::string* cameraId);
485 
486     static void verify10BitMetadata(
487             HandleImporter& importer, const InFlightRequest& request,
488             aidl::android::hardware::camera::metadata::RequestAvailableDynamicRangeProfilesMap
489                     profile);
490 
491     static void waitForReleaseFence(
492             std::vector<InFlightRequest::StreamBufferAndTimestamp>& resultOutputBuffers);
493 
494     // Map from frame number to the in-flight request state
495     typedef std::unordered_map<uint32_t, std::shared_ptr<InFlightRequest>> InFlightMap;
496 
497     std::mutex mLock;                          // Synchronize access to member variables
498     std::condition_variable mResultCondition;  // Condition variable for incoming results
499     InFlightMap mInflightMap;                  // Map of all inflight requests
500 
501     std::vector<NotifyMsg> mNotifyMessages;  // Current notification message
502 
503     std::mutex mTorchLock;               // Synchronize access to torch status
504     std::condition_variable mTorchCond;  // Condition variable for torch status
505     TorchModeStatus mTorchStatus;        // Current torch status
506 
507     // Camera provider service
508     std::shared_ptr<ICameraProvider> mProvider;
509 
510     // Camera device session used by the tests
511     // Tests should take care of closing this session and setting it back to nullptr in successful
512     // case. Declared as a field to allow TeadDown function to close the session if a test assertion
513     // fails.
514     std::shared_ptr<ICameraDeviceSession> mSession;
515 
516     // Camera provider type.
517     std::string mProviderType;
518 
519     HandleImporter mHandleImporter;
520 
521     friend class DeviceCb;
522     friend class SimpleDeviceCb;
523     friend class TorchProviderCb;
524 };
525 
526 namespace {
527 // device@<major>.<minor>/<type>/id
528 const char* kDeviceNameRE = "device@([0-9]+\\.[0-9]+)/\\s+/(.+)";
529 const int32_t kMaxVideoWidth = 4096;
530 const int32_t kMaxVideoHeight = 2160;
531 
532 const int64_t kStreamBufferTimeoutSec = 3;
533 const int64_t kTorchTimeoutSec = 1;
534 const char* kDumpOutput = "/dev/null";
535 const uint32_t kMaxPreviewWidth = 1920;
536 const uint32_t kMaxPreviewHeight = 1080;
537 }  // namespace
538 #endif  // HARDWARE_INTERFACES_CAMERA_PROVIDER_AIDL_VTS_CAMERA_AIDL_TEST_H_
539