• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file expected in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "camera_hdi_test_v1_3.h"
16 #include <functional>
17 
18 using namespace OHOS;
19 using namespace std;
20 using namespace testing::ext;
21 using namespace OHOS::Camera;
22 constexpr uint32_t ITEM_CAPACITY = 100;
23 constexpr uint32_t DATA_CAPACITY = 2000;
24 constexpr uint32_t DATA_COUNT = 1;
25 constexpr uint32_t FPS_COUNT = 2;
26 constexpr uint32_t EXPOSURE_COUNT = 4;
27 int64_t OHOS::Camera::Test::StreamConsumer::g_timestamp[2] = {0};
SetUpTestCase(void)28 void CameraHdiTestV1_3::SetUpTestCase(void) {}
TearDownTestCase(void)29 void CameraHdiTestV1_3::TearDownTestCase(void) {}
SetUp(void)30 void CameraHdiTestV1_3::SetUp(void)
31 {
32     cameraTest = std::make_shared<OHOS::Camera::Test>();
33     cameraTest->Init(); // assert inside
34     cameraTest->Open(DEVICE_0); // assert inside
35 }
36 
TearDown(void)37 void CameraHdiTestV1_3::TearDown(void)
38 {
39     cameraTest->Close();
40 }
41 
g_IsTagValueExistsU8(std::shared_ptr<CameraMetadata> ability,uint32_t tag,uint8_t value)42 bool g_IsTagValueExistsU8(std::shared_ptr<CameraMetadata> ability, uint32_t tag, uint8_t value)
43 {
44     common_metadata_header_t* data = ability->get();
45     camera_metadata_item_t entry;
46     int ret = FindCameraMetadataItem(data, tag, &entry);
47     if (ret == HDI::Camera::V1_0::NO_ERROR && entry.data.u8 != nullptr && entry.count > 0) {
48         for (int i = 0; i < entry.count; i++) {
49             if (entry.data.u8[i] == value) {
50                 return true;
51             }
52         }
53     } else {
54         printf("Find CameraMetadata fail!\n");
55         CAMERA_LOGE("Find CameraMetadata fail!");
56     }
57     return false;
58 }
59 
60 /**
61  * @tc.name:SUB_Driver_Camera_Moon_0200
62  * @tc.desc: Update moon ability setting
63  * @tc.size:MediumTest
64  * @tc.type:Function
65 */
66 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_Moon_0200, TestSize.Level1)
67 {
68     int32_t rc;
69     // step 2: set callback object
70     cameraTest->hostCallbackV1_2 = new OHOS::Camera::Test::TestCameraHostCallbackV1_2();
71     rc = cameraTest->serviceV1_3->SetCallback_V1_2(cameraTest->hostCallbackV1_2);
72     EXPECT_EQ(rc, 0);
73     // Start OHOS_ABILITY_MOON_CAPTURE_BOOST ability query
74     common_metadata_header_t* data = cameraTest->ability->get();
75     EXPECT_NE(data, nullptr);
76     camera_metadata_item_t entry;
77     int ret = FindCameraMetadataItem(data, OHOS_ABILITY_MOON_CAPTURE_BOOST, &entry);
78 
79     if (ret == HDI::Camera::V1_0::NO_ERROR && entry.data.u8 != nullptr && entry.count > 0) {
80         std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
81         constexpr float zoomRatio = 15;
82         uint8_t stabControl = OHOS_CAMERA_MOON_CAPTURE_BOOST_ENABLE;
83         meta->addEntry(OHOS_CONTROL_ZOOM_RATIO, &zoomRatio, DATA_COUNT);
84         meta->addEntry(OHOS_CONTROL_MOON_CAPTURE_BOOST, &stabControl, DATA_COUNT);
85         // ability meta data serialization for updating
86         std::vector<uint8_t> setting;
87         MetadataUtils::ConvertMetadataToVec(meta, setting);
88         cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
89         EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
90         CAMERA_LOGD("MoonCaptureBoost mode is set enabled.");
91 
92         cameraTest->intents = {PREVIEW, STILL_CAPTURE};
93         cameraTest->StartStream(cameraTest->intents);
94         EXPECT_EQ(cameraTest->rc, HDI::Camera::V1_0::NO_ERROR);
95         cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
96         cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, true);
97         sleep(1);
98         cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdCapture};
99         cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
100         cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
101         sleep(UT_SECOND_TIMES);
102         common_metadata_header_t* data = cameraTest->deviceCallback->resultMeta->get();
103         EXPECT_NE(data, nullptr);
104         camera_metadata_item_t entry;
105         int ret = FindCameraMetadataItem(data, OHOS_STATUS_MOON_CAPTURE_DETECTION, &entry);
106         EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, ret);
107         if (ret == HDI::Camera::V1_0::NO_ERROR && entry.data.u8 != nullptr && entry.count > 0) {
108             uint8_t value = entry.data.u8[0];
109             // 查询到状态, 检测状态到 月亮模式可开启
110             if (OHOS_CAMERA_MOON_CAPTURE_BOOST_ENABLE == value) {
111                 printf("Moon mode is set enabled.");
112             } else {
113                 printf("Moon mode is not enabled.");
114             }
115         } else {
116             GTEST_SKIP() << "skip this test, because OHOS_ABILITY_MOON_CAPTURE_BOOST not supported now" << std::endl;
117         }
118     }
119 }
120 
121 /**
122  * @tc.name:SUB_Driver_Camera_Moon_0300
123  * @tc.desc: Update moon ability setting
124  * @tc.size:MediumTest
125  * @tc.type:Function
126 */
127 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_Moon_0300, TestSize.Level1)
128 {
129     int32_t rc;
130     // step 2: set callback object
131     cameraTest->hostCallbackV1_2 = new OHOS::Camera::Test::TestCameraHostCallbackV1_2();
132     rc = cameraTest->serviceV1_3->SetCallback_V1_2(cameraTest->hostCallbackV1_2);
133     EXPECT_EQ(rc, 0);
134     // Start OHOS_ABILITY_MOON_CAPTURE_BOOST ability query
135     common_metadata_header_t* data = cameraTest->ability->get();
136     EXPECT_NE(data, nullptr);
137     camera_metadata_item_t entry;
138     int ret = FindCameraMetadataItem(data, OHOS_ABILITY_MOON_CAPTURE_BOOST, &entry);
139     if (cameraTest->rc != 0) {
140         GTEST_SKIP() << "skip this test, because OHOS_ABILITY_MOON_CAPTURE_BOOST not supported now" << std::endl;
141         return;
142     }
143 
144     if (ret == HDI::Camera::V1_0::NO_ERROR && entry.data.u8 != nullptr && entry.count > 0) {
145         std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
146         constexpr float zoomRatio = 15;
147         uint8_t stabControl = OHOS_CAMERA_MOON_CAPTURE_BOOST_ENABLE;
148         meta->addEntry(OHOS_CONTROL_ZOOM_RATIO, &zoomRatio, DATA_COUNT);
149         meta->addEntry(OHOS_CONTROL_MOON_CAPTURE_BOOST, &stabControl, DATA_COUNT);
150         // ability meta data serialization for updating
151         std::vector<uint8_t> setting;
152         MetadataUtils::ConvertMetadataToVec(meta, setting);
153         cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
154         EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
155         CAMERA_LOGD("MoonCaptureBoost mode is set enabled.");
156 
157         cameraTest->intents = {PREVIEW, STILL_CAPTURE};
158         cameraTest->StartStream(cameraTest->intents);
159         EXPECT_EQ(cameraTest->rc, HDI::Camera::V1_0::NO_ERROR);
160         cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
161         cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, true);
162         sleep(1);
163         cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdCapture};
164         cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
165         cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
166     }
167 }
168 
169 /**
170  * @tc.name: SUB_Driver_Camera_SlowMotion_0300
171  * @tc.desc: CommitStreams_V1_1 for HIGH_FRAME_RATE, preview and video, fps is 120
172  * @tc.size: MediumTest
173  * @tc.type: Function
174  */
175 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_SlowMotion_0300, TestSize.Level1)
176 {
177     if (!g_IsTagValueExistsU8(cameraTest->ability, OHOS_ABILITY_CAMERA_MODES, OHOS::HDI::Camera::V1_3::HIGH_FRAME_RATE)) {
178         cout << "skip this test, because HIGH_FRAME_RATE not in OHOS_ABILITY_CAMERA_MODES" << endl;
179         return;
180     }
181     cameraTest->CreateAndCommitStreamsForHighFrameRate(cameraTest);
182     // Update settings
183     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
184     int32_t highFrameRate[2] = {120, 120};
185     meta->addEntry(OHOS_CONTROL_FPS_RANGES, &highFrameRate, FPS_COUNT);
186     std::vector<uint8_t> setting;
187     MetadataUtils::ConvertMetadataToVec(meta, setting);
188     cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
189     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
190 
191     // Start capture
192     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
193     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
194 
195     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
196     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
197     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
198     sleep(DATA_COUNT);
199     cameraTest->streamInfosV1_1.clear();
200 }
201 
202 /**
203  * @tc.name: SUB_Driver_Camera_SlowMotion_0400
204  * @tc.desc: CommitStreams_V1_1 for HIGH_FRAME_RATE, preview and video, fps is 240
205  * @tc.size: MediumTest
206  * @tc.type: Function
207  */
208 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_SlowMotion_0400, TestSize.Level1)
209 {
210     if (!g_IsTagValueExistsU8(cameraTest->ability, OHOS_ABILITY_CAMERA_MODES, OHOS::HDI::Camera::V1_3::HIGH_FRAME_RATE)) {
211         cout << "skip this test, because HIGH_FRAME_RATE not in OHOS_ABILITY_CAMERA_MODES" << endl;
212         return;
213     }
214     cameraTest->CreateAndCommitStreamsForHighFrameRate(cameraTest);
215 
216     // Update settings
217     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
218     int32_t highFrameRate[2] = {240, 240};
219     meta->addEntry(OHOS_CONTROL_FPS_RANGES, &highFrameRate, FPS_COUNT);
220     std::vector<uint8_t> setting;
221     MetadataUtils::ConvertMetadataToVec(meta, setting);
222     cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
223     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
224 
225     // Start capture
226     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
227     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
228 
229     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
230     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
231     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
232     sleep(DATA_COUNT);
233     cameraTest->streamInfosV1_1.clear();
234 }
235 
236 
237 /**
238  * @tc.name: SUB_Driver_Camera_SuperSlowMotion_0400
239  * @tc.desc: CommitStreams_V1_1 for SLOW_MOTION, preview and video, fps is 960
240  * @tc.size: MediumTest
241  * @tc.type: Function
242  */
243 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_SuperSlowMotion_0400, TestSize.Level1)
244 {
245     if (!g_IsTagValueExistsU8(cameraTest->ability, OHOS_ABILITY_CAMERA_MODES, OHOS::HDI::Camera::V1_2::SLOW_MOTION)) {
246         cout << "skip this test, because SLOW_MOTION not in OHOS_ABILITY_CAMERA_MODES" << endl;
247         return;
248     }
249     cameraTest->CreateAndCommitStreamsForSlowMotion(cameraTest);
250 
251     // Update settings
252     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
253     int32_t slowMotionValue[2] = {240, 240};
254     meta->addEntry(OHOS_CONTROL_FPS_RANGES, &slowMotionValue, FPS_COUNT);
255     std::vector<uint8_t> setting;
256     MetadataUtils::ConvertMetadataToVec(meta, setting);
257     cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
258     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
259 
260     // Start capture
261     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
262     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
263 
264     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
265     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
266     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
267     sleep(DATA_COUNT);
268     cameraTest->streamInfosV1_1.clear();
269 }
270 
271 /**
272  * @tc.name: SUB_Driver_Camera_SuperSlowMotion_0200
273  * @tc.desc: OHOS_ABILITY_MOTION_DETECTION_SUPPORT, OHOS_CAMERA_MOTION_DETECTION_SUPPORTED
274  * @tc.size: MediumTest
275  * @tc.type: Function
276  */
277 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_SuperSlowMotion_0200, TestSize.Level1)
278 {
279     if (!g_IsTagValueExistsU8(cameraTest->ability, OHOS_ABILITY_CAMERA_MODES, OHOS::HDI::Camera::V1_2::SLOW_MOTION)) {
280         cout << "skip this test, because SLOW_MOTION not in OHOS_ABILITY_CAMERA_MODES" << endl;
281         return;
282     }
283     // Set callback object
284     cameraTest->hostCallbackV1_2 = new OHOS::Camera::Test::TestCameraHostCallbackV1_2();
285     cameraTest->rc = cameraTest->serviceV1_3->SetCallback_V1_2(cameraTest->hostCallbackV1_2);
286     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
287     EXPECT_NE(cameraTest->ability, nullptr);
288     common_metadata_header_t* data = cameraTest->ability->get();
289     EXPECT_NE(data, nullptr);
290     camera_metadata_item_t entry;
291     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_MOTION_DETECTION_SUPPORT, &entry);
292     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
293     if (cameraTest->rc == HDI::Camera::V1_0::NO_ERROR && entry.data.u8 != nullptr && entry.count > 0) {
294         EXPECT_TRUE(entry.data.u8 != nullptr);
295         if (entry.data.u8[0] == OHOS_CAMERA_MOTION_DETECTION_SUPPORTED) {
296             cameraTest->CreateAndCommitStreamsForSlowMotion(cameraTest);
297             cameraTest->UpdateSettingsForSlowMotionMode(cameraTest);
298             cameraTest->SuperSlowMotionStatusCallback(cameraTest);
299         }
300     }
301 }
302 
303 /**
304  * @tc.name:SUB_Driver_Camera_PerOptimization_0100
305  * @tc.desc:CAPTURE_DURATION
306  * @tc.size:MediumTest
307  * @tc.type:Function
308 */
309 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_PerOptimization_0100, TestSize.Level1)
310 {
311     EXPECT_NE(cameraTest->ability, nullptr);
312     common_metadata_header_t* data = cameraTest->ability->get();
313     EXPECT_NE(data, nullptr);
314     camera_metadata_item_t entry;
315     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_CAPTURE_DURATION_SUPPORTED, &entry);
316     if (cameraTest->rc != 0 || entry.data.u8[0] != 1) {
317         cout << "skip this test, because OHOS_ABILITY_CAPTURE_DURATION_SUPPORTED not supported now" << endl;
318         return;
319     }
320 
321     // Start stream
322     cameraTest->intents = {PREVIEW, STILL_CAPTURE};
323     cameraTest->StartStream(cameraTest->intents);
324 
325     // Fill capture setting
326     std::shared_ptr<CameraSetting> modeSetting = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
327     uint8_t muteMode = static_cast<uint8_t>(OHOS_CAMERA_MUTE_MODE_OFF);
328     modeSetting->addEntry(OHOS_CONTROL_MUTE_MODE, &muteMode, DATA_COUNT);
329     uint8_t deferredImage = OHOS::HDI::Camera::V1_2::STILL_IMAGE;
330     modeSetting->addEntry(OHOS_CONTROL_DEFERRED_IMAGE_DELIVERY, &deferredImage, DATA_COUNT);
331     std::vector<uint8_t> controlVec;
332     MetadataUtils::ConvertMetadataToVec(modeSetting, controlVec);
333     cameraTest->abilityVec = controlVec;
334 
335     // Start preview and capture
336     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, true, true);
337     // OncaptureReady trigger
338     for (uint8_t i = 0; i < 2; i++) {
339         cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
340     }
341 
342     // Release stream
343     cameraTest->captureIds = {cameraTest->captureIdPreview};
344     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
345     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
346 
347     sleep(UT_SECOND_TIMES);
348     common_metadata_header_t* callbackData = cameraTest->deviceCallback->resultMeta->get();
349     EXPECT_NE(callbackData, nullptr);
350     camera_metadata_item_t callbackEntry;
351     cameraTest->rc = FindCameraMetadataItem(callbackData, OHOS_CAMERA_CUSTOM_SNAPSHOT_DURATION, &callbackEntry);
352     if (cameraTest->rc != 0) {
353         GTEST_SKIP() << "skip this test, because OHOS_CAMERA_CUSTOM_SNAPSHOT_DURATION not supported now" << std::endl;
354         return;
355     }
356     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
357     printf("currentSnapshotDuration = %d\n", callbackEntry.data.ui32[0]);
358 }
359 
360 /**
361  * @tc.name: SUB_Driver_Camera_Moving_0200
362  * @tc.desc: OHOS_CONTROL_MOVING_PHOTO OHOS_CAMERA_MOVING_PHOTO_OFF
363  * @tc.size: MediumTest
364  * @tc.type: Function
365  */
366 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_Moving_0200, TestSize.Level1)
367 {
368     CAMERA_LOGI("test Camera_Device_Hdi_V1_3_013 start.");
369     cameraTest->streamOperatorCallbackV1_3 = new OHOS::Camera::Test::TestStreamOperatorCallbackV1_3();
370     cameraTest->rc = cameraTest->cameraDeviceV1_3->GetStreamOperator_V1_3(
371         cameraTest->streamOperatorCallbackV1_3, cameraTest->streamOperator_V1_3);
372     EXPECT_NE(cameraTest->streamOperator_V1_3, nullptr);
373 
374     cameraTest->streamInfoV1_1 = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
375     cameraTest->DefaultInfosPreview(cameraTest->streamInfoV1_1);
376     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoV1_1);
377 
378     cameraTest->streamInfoCapture = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
379     cameraTest->DefaultInfosCapture(cameraTest->streamInfoCapture);
380     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoCapture);
381 
382     std::shared_ptr<CameraSetting> modeSetting = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
383     uint8_t movingPhoto = static_cast<uint8_t>(OHOS_CAMERA_MOVING_PHOTO_OFF);
384     modeSetting->addEntry(OHOS_CONTROL_MOVING_PHOTO, &movingPhoto, 1);
385     std::vector<uint8_t> metaVec;
386     MetadataUtils::ConvertMetadataToVec(modeSetting, metaVec);
387     cameraTest->cameraDeviceV1_3->UpdateSettings(metaVec);
388 
389     cameraTest->rc = cameraTest->streamOperator_V1_3->CreateStreams_V1_1(cameraTest->streamInfosV1_1);
390     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
391     cameraTest->rc = cameraTest->streamOperator_V1_3->CommitStreams(OperationMode::NORMAL, cameraTest->abilityVec);
392     EXPECT_EQ(cameraTest->rc, HDI::Camera::V1_0::NO_ERROR);
393 
394     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
395     cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
396     cameraTest->captureIds = {cameraTest->captureIdPreview};
397     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
398     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
399 }
400 
401 /**
402  * @tc.name: SUB_Driver_Camera_Moving_0300
403  * @tc.desc: OHOS_CONTROL_MOVING_PHOTO OHOS_CAMERA_MOVING_PHOTO_ON
404  * @tc.size: MediumTest
405  * @tc.type: Function
406  */
407 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_Moving_0300, TestSize.Level1)
408 {
409     CAMERA_LOGI("test Moving Photo Switch On");
410     cameraTest->streamOperatorCallbackV1_3 = new OHOS::Camera::Test::TestStreamOperatorCallbackV1_3();
411     cameraTest->rc = cameraTest->cameraDeviceV1_3->GetStreamOperator_V1_3(
412         cameraTest->streamOperatorCallbackV1_3, cameraTest->streamOperator_V1_3);
413     EXPECT_NE(cameraTest->streamOperator_V1_3, nullptr);
414 
415     cameraTest->streamInfoV1_1 = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
416     cameraTest->DefaultInfosPreview(cameraTest->streamInfoV1_1);
417     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoV1_1);
418 
419     cameraTest->streamInfoCapture = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
420     cameraTest->DefaultInfosCapture(cameraTest->streamInfoCapture);
421     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoCapture);
422 
423     std::shared_ptr<CameraSetting> modeSetting = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
424     uint8_t movingPhoto = static_cast<uint8_t>(OHOS_CAMERA_MOVING_PHOTO_ON);
425     modeSetting->addEntry(OHOS_CONTROL_MOVING_PHOTO, &movingPhoto, 1);
426     std::vector<uint8_t> metaVec;
427     MetadataUtils::ConvertMetadataToVec(modeSetting, metaVec);
428     cameraTest->cameraDeviceV1_3->UpdateSettings(metaVec);
429 
430     cameraTest->rc = cameraTest->streamOperator_V1_3->CreateStreams_V1_1(cameraTest->streamInfosV1_1);
431     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
432     cameraTest->rc = cameraTest->streamOperator_V1_3->CommitStreams(OperationMode::NORMAL, cameraTest->abilityVec);
433     EXPECT_EQ(cameraTest->rc, HDI::Camera::V1_0::NO_ERROR);
434 
435     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
436     cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
437     cameraTest->captureIds = {cameraTest->captureIdPreview};
438     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
439     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
440 }
441 
442 /**
443  * @tc.name: SUB_Driver_Camera_HighSolution_0200
444  * @tc.desc: CommitStreams_V1_1 for HIGH_RESOLUTION_PHOTO, preview and capture
445  * @tc.size: MediumTest
446  * @tc.type: Function
447  */
448 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_HighResolution_0200, TestSize.Level1)
449 {
450     if (!g_IsTagValueExistsU8(cameraTest->ability,
451         OHOS_ABILITY_CAMERA_MODES, OHOS::HDI::Camera::V1_3::HIGH_RESOLUTION_PHOTO)) {
452         cout << "skip this test, because HIGH_RESOLUTION_PHOTO not in OHOS_ABILITY_CAMERA_MODES" << endl;
453         return;
454     }
455     EXPECT_NE(cameraTest->ability, nullptr);
456     common_metadata_header_t* data = cameraTest->ability->get();
457     EXPECT_NE(data, nullptr);
458     camera_metadata_item_t entry;
459     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_CAPTURE_EXPECT_TIME, &entry);
460     if (cameraTest->rc == HDI::Camera::V1_0::NO_ERROR) {
461         EXPECT_NE(entry.data.ui32, nullptr);
462         EXPECT_EQ(entry.count > 1, true);
463         CAMERA_LOGI("mode is %{public}u and captureExpectTime is %{public}u", entry.data.ui32[0], entry.data.ui32[1]);
464     }
465     cameraTest->startStreamForHighResolutionPhoto(cameraTest);
466 
467     // Update settings
468     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
469     int32_t aeExposureCompensation = EXPOSURE_COUNT;
470     meta->addEntry(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, &aeExposureCompensation, DATA_COUNT);
471     uint8_t focusMode = OHOS_CAMERA_FOCUS_MODE_AUTO;
472     meta->addEntry(OHOS_CONTROL_FOCUS_MODE, &focusMode, DATA_COUNT);
473     std::vector<uint8_t> setting;
474     MetadataUtils::ConvertMetadataToVec(meta, setting);
475     cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
476     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
477 
478     sleep(UT_SECOND_TIMES);
479     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
480     cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
481     cameraTest->captureIds = {cameraTest->captureIdPreview};
482     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
483     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
484 }
485 
486 /**
487  * @tc.name: SUB_Driver_Camera_SMPhoto_0200
488  * @tc.desc: CommitStreams_V1_1 for CAPTURE_MACRO, preview and capture
489  * @tc.size: MediumTest
490  * @tc.type: Function
491  */
492 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_SMPhoto_0200, TestSize.Level1)
493 {
494     if (!g_IsTagValueExistsU8(cameraTest->ability, OHOS_ABILITY_CAMERA_MODES, OHOS::HDI::Camera::V1_3::CAPTURE_MACRO)) {
495         cout << "skip this test, because CAPTURE_MACRO not in OHOS_ABILITY_CAMERA_MODES" << endl;
496         return;
497     }
498     // Get stream operator
499     cameraTest->streamOperatorCallbackV1_3 = new OHOS::Camera::Test::TestStreamOperatorCallbackV1_3();
500     cameraTest->rc = cameraTest->cameraDeviceV1_3->GetStreamOperator_V1_3(cameraTest->streamOperatorCallbackV1_3,
501         cameraTest->streamOperator_V1_3);
502     EXPECT_NE(cameraTest->streamOperator_V1_3, nullptr);
503     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
504     // Preview streamInfo
505     cameraTest->streamInfoPre = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
506     cameraTest->DefaultInfosPreview(cameraTest->streamInfoPre);
507     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoPre);
508     // Capture streamInfo
509     cameraTest->streamInfoCapture = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
510     cameraTest->DefaultInfosCapture(cameraTest->streamInfoCapture);
511     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoCapture);
512     cameraTest->rc = cameraTest->streamOperator_V1_3->CreateStreams_V1_1(cameraTest->streamInfosV1_1);
513     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
514     cameraTest->rc = cameraTest->streamOperator_V1_3->CommitStreams_V1_1(
515         static_cast<OHOS::HDI::Camera::V1_1::OperationMode_V1_1>(OHOS::HDI::Camera::V1_3::CAPTURE_MACRO),
516         cameraTest->abilityVec);
517     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
518 
519     // Update settings
520     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
521     float lensFocusDistance = DATA_COUNT;
522     meta->addEntry(OHOS_CONTROL_LENS_FOCUS_DISTANCE, &lensFocusDistance, DATA_COUNT);
523     std::vector<uint8_t> setting;
524     MetadataUtils::ConvertMetadataToVec(meta, setting);
525     cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
526     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
527 
528     sleep(UT_SECOND_TIMES);
529     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
530     cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
531 
532     cameraTest->captureIds = {cameraTest->captureIdPreview};
533     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
534     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
535 }
536 
537 /**
538  * @tc.name: SUB_Driver_Camera_SMVideo_0200
539  * @tc.desc: CommitStreams_V1_1 for VIDEO_MACRO, preview and capture
540  * @tc.size: MediumTest
541  * @tc.type: Function
542  */
543 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_SMVideo_0200, TestSize.Level1)
544 {
545     if (!g_IsTagValueExistsU8(cameraTest->ability, OHOS_ABILITY_CAMERA_MODES, OHOS::HDI::Camera::V1_3::VIDEO_MACRO)) {
546         cout << "skip this test, because VIDEO_MACRO not in OHOS_ABILITY_CAMERA_MODES" << endl;
547         return;
548     }
549     // Get stream operator
550     cameraTest->streamOperatorCallbackV1_3 = new OHOS::Camera::Test::TestStreamOperatorCallbackV1_3();
551     cameraTest->rc = cameraTest->cameraDeviceV1_3->GetStreamOperator_V1_3(cameraTest->streamOperatorCallbackV1_3,
552         cameraTest->streamOperator_V1_3);
553     EXPECT_NE(cameraTest->streamOperator_V1_3, nullptr);
554     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
555     // Preview streamInfo
556     cameraTest->streamInfoPre = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
557     cameraTest->DefaultInfosPreview(cameraTest->streamInfoPre);
558     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoPre);
559     // Capture streamInfo
560     cameraTest->streamInfoVideo = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
561     cameraTest->DefaultInfosVideo(cameraTest->streamInfoVideo);
562     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoVideo);
563     // Create and commit streams
564     cameraTest->rc = cameraTest->streamOperator_V1_3->CreateStreams_V1_1(cameraTest->streamInfosV1_1);
565     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
566     cameraTest->rc = cameraTest->streamOperator_V1_3->CommitStreams_V1_1(
567         static_cast<OHOS::HDI::Camera::V1_1::OperationMode_V1_1>(OHOS::HDI::Camera::V1_3::VIDEO_MACRO),
568         cameraTest->abilityVec);
569     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
570     // Update settings
571     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
572     float lensFocusDistance = DATA_COUNT;
573     meta->addEntry(OHOS_CONTROL_LENS_FOCUS_DISTANCE, &lensFocusDistance, DATA_COUNT);
574     std::vector<uint8_t> setting;
575     MetadataUtils::ConvertMetadataToVec(meta, setting);
576     cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
577     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
578     sleep(UT_SECOND_TIMES);
579     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
580     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
581     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
582     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
583     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
584 }
585 
586 /**
587  * @tc.name:SUB_Driver_Camera_DynamicFps_0100
588  * @tc.desc:Dynamic FPS configuration, range setting, streams fps constrain
589  * @tc.size:MediumTest
590  * @tc.type:Function
591 */
592 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_DynamicFps_0100, TestSize.Level1)
593 {
594     // PREVIEW and VIDEO stream
595     cameraTest->intents = {PREVIEW, VIDEO};
596     // This requirement only in VIDEO mode
597     cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::OperationMode::VIDEO);
598     // Bind fps range with preview stream and video stream
599     common_metadata_header_t* data = cameraTest->ability->get();
600     EXPECT_NE(data, nullptr);
601     camera_metadata_item_t entry;
602     cameraTest->rc = FindCameraMetadataItem(data, OHOS_CONTROL_FPS_RANGES, &entry);
603     // The FPS only valid in current release, non backward compatibility
604     int32_t fpsRanges[] = {1, 30};
605     bool result;
606     if (cameraTest->rc != CAM_META_SUCCESS) {
607         std::cout << "Not found TAG[OHOS_CONTROL_FPS_RANGES], insert one" << std::endl;
608         result = cameraTest->ability->addEntry(OHOS_CONTROL_FPS_RANGES,
609             fpsRanges, sizeof(fpsRanges) / sizeof(int32_t));
610         EXPECT_EQ(true, result);
611     } else {
612         std::cout << "Found TAG[OHOS_CONTROL_FPS_RANGES], Update it" << std::endl;
613         result = cameraTest->ability->updateEntry(OHOS_CONTROL_FPS_RANGES,
614             fpsRanges, sizeof(fpsRanges) / sizeof(int32_t));
615         EXPECT_EQ(true, result);
616     }
617     OHOS::Camera::MetadataUtils::ConvertMetadataToVec(cameraTest->ability, cameraTest->abilityVec);
618     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
619     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
620     // Release stream
621     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
622     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
623     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
624 }
625 
626 /**
627  * @tc.name:SUB_Driver_Camera_DynamicFps_0200
628  * @tc.desc:Dynamic FPS configuration, range setting, streams fps constrain
629  * @tc.size:MediumTest
630  * @tc.type:Function
631 */
632 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_DynamicFps_0200, TestSize.Level1)
633 {
634     // PREVIEW and VIDEO stream
635     cameraTest->intents = {PREVIEW, VIDEO};
636     // This requirement only in VIDEO mode
637     cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::OperationMode::VIDEO);
638     // Bind fps range with preview stream and video stream
639     common_metadata_header_t* data = cameraTest->ability->get();
640     EXPECT_NE(data, nullptr);
641     camera_metadata_item_t entry;
642     cameraTest->rc = FindCameraMetadataItem(data, OHOS_CONTROL_FPS_RANGES, &entry);
643     // The FPS only valid in current release, non backward compatibility
644     int32_t fpsRanges[] = {35, 60};
645     bool result;
646     if (cameraTest->rc != CAM_META_SUCCESS) {
647         std::cout << "Not found TAG[OHOS_CONTROL_FPS_RANGES], insert one" << std::endl;
648         result = cameraTest->ability->addEntry(OHOS_CONTROL_FPS_RANGES,
649             fpsRanges, sizeof(fpsRanges) / sizeof(int32_t));
650         EXPECT_EQ(true, result);
651     } else {
652         std::cout << "Found TAG[OHOS_CONTROL_FPS_RANGES], Update it" << std::endl;
653         result = cameraTest->ability->updateEntry(OHOS_CONTROL_FPS_RANGES,
654             fpsRanges, sizeof(fpsRanges) / sizeof(int32_t));
655         EXPECT_EQ(true, result);
656     }
657     OHOS::Camera::MetadataUtils::ConvertMetadataToVec(cameraTest->ability, cameraTest->abilityVec);
658     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
659     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
660     // Release stream
661     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
662     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
663     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
664 }
665 
666 /**
667 + * @tc.name:SUB_Driver_Camera_DynamicFps_0300
668 + * @tc.desc:Dynamic FPS configuration, fixed fps setting, streams fps constrain
669 + * @tc.size:MediumTest
670 + * @tc.type:Function
671 +*/
672 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_DynamicFps_0300, TestSize.Level1)
673 {
674     // PREVIEW and VIDEO stream
675     cameraTest->intents = {PREVIEW, VIDEO};
676     // This requirement only in VIDEO mode
677     cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::OperationMode::VIDEO);
678     // Bind fixed fps with preview stream and video stream, constraint
679     common_metadata_header_t* data = cameraTest->ability->get();
680     EXPECT_NE(data, nullptr);
681     camera_metadata_item_t entry;
682     cameraTest->rc = FindCameraMetadataItem(data, OHOS_CONTROL_FPS_RANGES, &entry);
683     // The FPS only valid in current release, non backward compatibility
684     int32_t previewFixedFps[] = {30, 30};
685     bool result;
686     if (cameraTest->rc != CAM_META_SUCCESS) {
687         std::cout << "Not found TAG[OHOS_CONTROL_FPS_RANGES], insert one" << std::endl;
688         result = cameraTest->ability->addEntry(OHOS_CONTROL_FPS_RANGES,
689             previewFixedFps, sizeof(previewFixedFps) / sizeof(int32_t));
690         EXPECT_EQ(true, result);
691     } else {
692         std::cout << "Found TAG[OHOS_CONTROL_FPS_RANGES], Update it" << std::endl;
693         result = cameraTest->ability->updateEntry(OHOS_CONTROL_FPS_RANGES,
694             previewFixedFps, sizeof(previewFixedFps) / sizeof(int32_t));
695         EXPECT_EQ(true, result);
696     }
697     OHOS::Camera::MetadataUtils::ConvertMetadataToVec(cameraTest->ability, cameraTest->abilityVec);
698     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
699     // Update video fixed fps, constraint relationship
700     int32_t videoFixedFps[] = {60, 60};
701     std::cout << "Update fixed fps for video capture" << std::endl;
702     result = cameraTest->ability->updateEntry(OHOS_CONTROL_FPS_RANGES,
703         videoFixedFps, sizeof(videoFixedFps) / sizeof(int32_t));
704     EXPECT_EQ(true, result);
705     OHOS::Camera::MetadataUtils::ConvertMetadataToVec(cameraTest->ability, cameraTest->abilityVec);
706     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
707     // Release stream
708     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
709     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
710     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
711 }
712 
713 /**
714 + * @tc.name:SUB_Driver_Camera_DynamicFps_0400
715 + * @tc.desc:Dynamic FPS configuration, fixed fps setting, streams fps constrain
716 + * @tc.size:MediumTest
717 + * @tc.type:Function
718 +*/
719 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_DynamicFps_0400, TestSize.Level1)
720 {
721     // PREVIEW and VIDEO stream
722     cameraTest->intents = {PREVIEW, VIDEO};
723     // This requirement only in VIDEO mode
724     cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::OperationMode::VIDEO);
725     // Bind fixed fps with preview stream and video stream, constraint
726     common_metadata_header_t* data = cameraTest->ability->get();
727     EXPECT_NE(data, nullptr);
728     camera_metadata_item_t entry;
729     cameraTest->rc = FindCameraMetadataItem(data, OHOS_CONTROL_FPS_RANGES, &entry);
730     // The FPS only valid in current release, non backward compatibility
731     int32_t previewFixedFps[] = {45, 45};
732     bool result;
733     if (cameraTest->rc != CAM_META_SUCCESS) {
734         std::cout << "Not found TAG[OHOS_CONTROL_FPS_RANGES], insert one" << std::endl;
735         result = cameraTest->ability->addEntry(OHOS_CONTROL_FPS_RANGES,
736             previewFixedFps, sizeof(previewFixedFps) / sizeof(int32_t));
737         EXPECT_EQ(true, result);
738     } else {
739         std::cout << "Found TAG[OHOS_CONTROL_FPS_RANGES], Update it" << std::endl;
740         result = cameraTest->ability->updateEntry(OHOS_CONTROL_FPS_RANGES,
741             previewFixedFps, sizeof(previewFixedFps) / sizeof(int32_t));
742         EXPECT_EQ(true, result);
743     }
744     OHOS::Camera::MetadataUtils::ConvertMetadataToVec(cameraTest->ability, cameraTest->abilityVec);
745     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
746     // Update video fixed fps, constraint relationship
747     int32_t videoFixedFps[] = {15, 15};
748     std::cout << "Update fixed fps for video capture" << std::endl;
749     result = cameraTest->ability->updateEntry(OHOS_CONTROL_FPS_RANGES,
750         videoFixedFps, sizeof(videoFixedFps) / sizeof(int32_t));
751     EXPECT_EQ(true, result);
752     OHOS::Camera::MetadataUtils::ConvertMetadataToVec(cameraTest->ability, cameraTest->abilityVec);
753     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
754     // Release stream
755     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
756     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
757 
758     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
759 }
760 
761 /**
762  * @tc.name:SUB_Driver_Camera_DynamicFps_0500
763  * @tc.desc:Dynamic FPS configuration, range setting, streams fps constrain
764  * @tc.size:MediumTest
765  * @tc.type:Function
766 */
767 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_DynamicFps_0500, TestSize.Level1)
768 {
769     // PREVIEW and VIDEO stream
770     cameraTest->intents = {PREVIEW, VIDEO};
771     // This requirement only in VIDEO mode
772     cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::OperationMode::VIDEO);
773     // Bind fps range with preview stream and video stream
774     common_metadata_header_t* data = cameraTest->ability->get();
775     EXPECT_NE(data, nullptr);
776     camera_metadata_item_t entry;
777     cameraTest->rc = FindCameraMetadataItem(data, OHOS_CONTROL_FPS_RANGES, &entry);
778     // The FPS only valid in current release, non backward compatibility
779     int32_t fpsRanges[] = {30, 30};
780     bool result;
781     if (cameraTest->rc != CAM_META_SUCCESS) {
782         std::cout << "Not found TAG[OHOS_CONTROL_FPS_RANGES], insert one" << std::endl;
783         result = cameraTest->ability->addEntry(OHOS_CONTROL_FPS_RANGES,
784             fpsRanges, sizeof(fpsRanges) / sizeof(int32_t));
785         EXPECT_EQ(true, result);
786     } else {
787         std::cout << "Found TAG[OHOS_CONTROL_FPS_RANGES], Update it" << std::endl;
788         result = cameraTest->ability->updateEntry(OHOS_CONTROL_FPS_RANGES,
789             fpsRanges, sizeof(fpsRanges) / sizeof(int32_t));
790         EXPECT_EQ(true, result);
791     }
792     OHOS::Camera::MetadataUtils::ConvertMetadataToVec(cameraTest->ability, cameraTest->abilityVec);
793     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
794     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
795     // Release stream
796     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
797     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
798     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
799 }
800 /**
801  * @tc.name: SUB_Driver_Camera_HighQuality_0200
802  * @tc.desc: OHOS_CONTROL_HIGH_QUALITY_MODE OHOS_CONTROL_HIGH_QUALITY_MODE_OFF
803  * @tc.size: MediumTest
804  * @tc.type: Function
805  */
806 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_HighQuality_0200, TestSize.Level1)
807 {
808     CAMERA_LOGI("test OHOS_CONTROL_HIGH_QUALITY_MODE_OFF start.");
809     cameraTest->streamOperatorCallbackV1_3 = new OHOS::Camera::Test::TestStreamOperatorCallbackV1_3();
810     cameraTest->rc = cameraTest->cameraDeviceV1_3->GetStreamOperator_V1_3(
811         cameraTest->streamOperatorCallbackV1_3, cameraTest->streamOperator_V1_3);
812     EXPECT_NE(cameraTest->streamOperator_V1_3, nullptr);
813 
814     cameraTest->streamInfoV1_1 = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
815     cameraTest->DefaultInfosPreview(cameraTest->streamInfoV1_1);
816     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoV1_1);
817 
818     cameraTest->streamInfoCapture = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
819     cameraTest->DefaultInfosCapture(cameraTest->streamInfoCapture);
820     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoCapture);
821 
822     std::shared_ptr<CameraSetting> modeSetting = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
823     uint8_t movingPhoto = static_cast<uint8_t>(OHOS_CONTROL_HIGH_QUALITY_MODE_OFF);
824     modeSetting->addEntry(OHOS_CONTROL_HIGH_QUALITY_MODE, &movingPhoto, 1);
825     std::vector<uint8_t> metaVec;
826     MetadataUtils::ConvertMetadataToVec(modeSetting, metaVec);
827     cameraTest->cameraDeviceV1_3->UpdateSettings(metaVec);
828 
829     cameraTest->rc = cameraTest->streamOperator_V1_3->CreateStreams_V1_1(cameraTest->streamInfosV1_1);
830     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
831     cameraTest->rc = cameraTest->streamOperator_V1_3->CommitStreams(OperationMode::NORMAL, cameraTest->abilityVec);
832     EXPECT_EQ(cameraTest->rc, HDI::Camera::V1_0::NO_ERROR);
833 
834     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
835     cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
836     cameraTest->captureIds = {cameraTest->captureIdPreview};
837     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
838     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
839 }
840 
841 /**
842  * @tc.name: SUB_Driver_Camera_HighQuality_0300
843  * @tc.desc: OHOS_CONTROL_HIGH_QUALITY_MODE OHOS_CONTROL_HIGH_QUALITY_MODE_ON
844  * @tc.size: MediumTest
845  * @tc.type: Function
846  */
847 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_HighQuality_0300, TestSize.Level1)
848 {
849     CAMERA_LOGI("test OHOS_CONTROL_HIGH_QUALITY_MODE_ON start.");
850     cameraTest->streamOperatorCallbackV1_3 = new OHOS::Camera::Test::TestStreamOperatorCallbackV1_3();
851     cameraTest->rc = cameraTest->cameraDeviceV1_3->GetStreamOperator_V1_3(
852         cameraTest->streamOperatorCallbackV1_3, cameraTest->streamOperator_V1_3);
853     EXPECT_NE(cameraTest->streamOperator_V1_3, nullptr);
854 
855     cameraTest->streamInfoV1_1 = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
856     cameraTest->DefaultInfosPreview(cameraTest->streamInfoV1_1);
857     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoV1_1);
858 
859     cameraTest->streamInfoCapture = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
860     cameraTest->DefaultInfosCapture(cameraTest->streamInfoCapture);
861     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoCapture);
862 
863     std::shared_ptr<CameraSetting> modeSetting = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
864     uint8_t movingPhoto = static_cast<uint8_t>(OHOS_CONTROL_HIGH_QUALITY_MODE_ON);
865     modeSetting->addEntry(OHOS_CONTROL_HIGH_QUALITY_MODE, &movingPhoto, 1);
866     std::vector<uint8_t> metaVec;
867     MetadataUtils::ConvertMetadataToVec(modeSetting, metaVec);
868     cameraTest->cameraDeviceV1_3->UpdateSettings(metaVec);
869 
870     cameraTest->rc = cameraTest->streamOperator_V1_3->CreateStreams_V1_1(cameraTest->streamInfosV1_1);
871     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
872     cameraTest->rc = cameraTest->streamOperator_V1_3->CommitStreams(OperationMode::NORMAL, cameraTest->abilityVec);
873     EXPECT_EQ(cameraTest->rc, HDI::Camera::V1_0::NO_ERROR);
874 
875     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
876     cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
877     cameraTest->captureIds = {cameraTest->captureIdPreview};
878     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
879     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
880 }
881 
UpdateMetadata(std::shared_ptr<OHOS::Camera::Test> cameraTest,std::shared_ptr<CameraSetting> meta)882 void UpdateMetadata(std::shared_ptr<OHOS::Camera::Test> cameraTest, std::shared_ptr<CameraSetting> meta)
883 {
884     // 修改Zoom大于15x
885     float zoomRatio = 16.0f;
886     meta->addEntry(OHOS_CONTROL_ZOOM_RATIO, &zoomRatio, DATA_COUNT);
887     // 使能脚架检测
888     uint8_t tripoDetection = 1;
889     meta->addEntry(OHOS_CONTROL_TRIPOD_DETECTION, &tripoDetection, DATA_COUNT);
890     std::vector<uint8_t> setting;
891     MetadataUtils::ConvertMetadataToVec(meta, setting);
892     cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
893 }
894 
895 /**
896  * @tc.name: SUB_Driver_Camera_Tripod_0200
897  * @tc.desc: OHOS_ABILITY_TRIPOD_DETECTION
898  * @tc.size: MediumTest
899  * @tc.type: Function
900  */
901 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_Tripod_0200, TestSize.Level1)
902 {
903     CAMERA_LOGI("CameraHdiTestV1_3 SUB_Driver_Camera_Tripod_0200 start.");
904     // 查询是否支持脚架检测
905     common_metadata_header_t* data = cameraTest->ability->get();
906     ASSERT_NE(data, nullptr);
907     camera_metadata_item_t entry;
908     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_TRIPOD_DETECTION, &entry);
909     if (cameraTest->rc != HDI::Camera::V1_0::NO_ERROR || entry.data.i32 == nullptr
910         || entry.count <= 0 || entry.data.i32[0] != 1) {
911         cout << "skip this test, because OHOS_ABILITY_TRIPOD_DETECTION not supported" << endl;
912         return;
913     }
914     cameraTest->intents = {PREVIEW, STILL_CAPTURE};
915     cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::CAPTURE);
916     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
917     UpdateMetadata(cameraTest, meta);
918     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
919     sleep(UT_SECOND_TIMES);
920     if (cameraTest->deviceCallback->resultMeta == nullptr) {
921         CAMERA_LOGI("Camera_Device_Hdi_V1_3_048 onresult not be invoked.");
922         return;
923     }
924     common_metadata_header_t* resultData = cameraTest->deviceCallback->resultMeta->get();
925     if (resultData == nullptr) {
926         CAMERA_LOGI("Camera_Device_Hdi_V1_3_048 onresult be invoked but data was nullptr.");
927         return;
928     }
929     camera_metadata_item_t statusEntry;
930     cameraTest->rc = FindCameraMetadataItem(resultData, OHOS_STATUS_TRIPOD_DETECTION_STATUS, &statusEntry);
931     if (cameraTest->rc == HDI::Camera::V1_0::NO_ERROR && statusEntry.data.u8 != nullptr && statusEntry.count > 0) {
932         CAMERA_LOGI("OHOS_STATUS_TRIPOD_DETECTION_STATUS value:%{public}d", statusEntry.data.u8[0]);
933         // 使能脚架检测算法
934         meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
935         uint8_t tripodStablitationAlgorithm = 1;
936         meta->addEntry(OHOS_CONTROL_TRIPOD_STABLITATION, &tripodStablitationAlgorithm, DATA_COUNT);
937         std::vector<uint8_t> pointData;
938         MetadataUtils::ConvertMetadataToVec(meta, pointData);
939         cameraTest->cameraDeviceV1_3->UpdateSettings(pointData);
940     }
941     camera_metadata_item_t pointEntry;
942     cameraTest->rc = FindCameraMetadataItem(resultData, OHOS_STATUS_SKETCH_POINT, &pointEntry);
943     if (cameraTest->rc == HDI::Camera::V1_0::NO_ERROR && pointEntry.data.f != nullptr && pointEntry.count > 0) {
944         CAMERA_LOGI("OHOS_STATUS_SKETCH_POINT x:%{public}f y:%{public}f", pointEntry.data.f[0], pointEntry.data.f[1]);
945     }
946     cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
947     cameraTest->captureIds = {cameraTest->captureIdPreview};
948     cameraTest->streamIds = {cameraTest->streamIdCapture, cameraTest->streamIdPreview};
949     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
950 }
951 
FindHumanDetectResult(common_metadata_header_t * streamData)952 void FindHumanDetectResult(common_metadata_header_t* streamData)
953 {
954     camera_metadata_item_t faceEntry;
955     int32_t rc = FindCameraMetadataItem(streamData, OHOS_STATISTICS_DETECT_HUMAN_FACE_INFOS, &faceEntry);
956     if (rc == HDI::Camera::V1_0::NO_ERROR) {
957         if (faceEntry.data.i32 != nullptr && faceEntry.count > 0) {
958             CAMERA_LOGI("FindDetectResult human face result");
959         }
960     }
961     camera_metadata_item_t bodyEntry;
962     rc = FindCameraMetadataItem(streamData, OHOS_STATISTICS_DETECT_HUMAN_BODY_INFOS, &bodyEntry);
963     if (rc == HDI::Camera::V1_0::NO_ERROR) {
964         if (bodyEntry.data.i32 != nullptr && bodyEntry.count > 0) {
965             CAMERA_LOGI("FindDetectResult human body result");
966         }
967     }
968     camera_metadata_item_t baseFaceEntry;
969     rc = FindCameraMetadataItem(streamData, OHOS_STATISTICS_DETECT_BASE_FACE_INFO, &baseFaceEntry);
970     if (rc == HDI::Camera::V1_0::NO_ERROR) {
971         if (baseFaceEntry.data.i32 != nullptr && baseFaceEntry.count > 0) {
972             CAMERA_LOGI("FindDetectResult base face result");
973         }
974     }
975 }
976 
FindOtherDetectResult(common_metadata_header_t * streamData)977 void FindOtherDetectResult(common_metadata_header_t* streamData)
978 {
979     camera_metadata_item_t catFaceEntry;
980     int32_t rc = FindCameraMetadataItem(streamData, OHOS_STATISTICS_DETECT_CAT_FACE_INFOS, &catFaceEntry);
981     if (rc == HDI::Camera::V1_0::NO_ERROR) {
982         if (catFaceEntry.data.i32 != nullptr && catFaceEntry.count > 0) {
983             CAMERA_LOGI("FindDetectResult cat face result");
984         }
985     }
986     camera_metadata_item_t catBodyEntry;
987     rc = FindCameraMetadataItem(streamData, OHOS_STATISTICS_DETECT_CAT_BODY_INFOS, &catBodyEntry);
988     if (rc == HDI::Camera::V1_0::NO_ERROR) {
989         if (catBodyEntry.data.i32 != nullptr && catBodyEntry.count > 0) {
990             CAMERA_LOGI("FindDetectResult cat body result");
991         }
992     }
993     camera_metadata_item_t dogFaceEntry;
994     rc = FindCameraMetadataItem(streamData, OHOS_STATISTICS_DETECT_DOG_FACE_INFOS, &dogFaceEntry);
995     if (rc == HDI::Camera::V1_0::NO_ERROR) {
996         if (dogFaceEntry.data.i32 != nullptr && dogFaceEntry.count > 0) {
997             CAMERA_LOGI("FindDetectResult dog face result");
998         }
999     }
1000     camera_metadata_item_t dogBodyEntry;
1001     rc = FindCameraMetadataItem(streamData, OHOS_STATISTICS_DETECT_DOG_BODY_INFOS, &dogBodyEntry);
1002     if (rc == HDI::Camera::V1_0::NO_ERROR) {
1003         if (dogBodyEntry.data.i32 != nullptr && dogBodyEntry.count > 0) {
1004             CAMERA_LOGI("FindDetectResult dog body result");
1005         }
1006     }
1007     camera_metadata_item_t salientEntry;
1008     rc = FindCameraMetadataItem(streamData, OHOS_STATISTICS_DETECT_SALIENT_INFOS, &salientEntry);
1009     if (rc == HDI::Camera::V1_0::NO_ERROR) {
1010         if (salientEntry.data.i32 != nullptr && salientEntry.count > 0) {
1011             CAMERA_LOGI("FindDetectResult salient result");
1012         }
1013     }
1014     camera_metadata_item_t barCodeEntry;
1015     rc = FindCameraMetadataItem(streamData, OHOS_STATISTICS_DETECT_BAR_CODE_INFOS, &barCodeEntry);
1016     if (rc == HDI::Camera::V1_0::NO_ERROR) {
1017         if (barCodeEntry.data.i32 != nullptr && barCodeEntry.count > 0) {
1018             CAMERA_LOGI("FindDetectResult bar code result");
1019         }
1020     }
1021 }
1022 
1023 /**
1024  * @tc.name: SUB_Driver_Camera_Detect_0200
1025  * @tc.desc: OHOS_ABILITY_STATISTICS_DETECT_TYPE,EnableResult
1026  * @tc.size: MediumTest
1027  * @tc.type: Function
1028  */
1029 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_Detect_0200, TestSize.Level1)
1030 {
1031     common_metadata_header_t* data = cameraTest->ability->get();
1032     ASSERT_NE(data, nullptr);
1033     camera_metadata_item_t entry;
1034     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_STATISTICS_DETECT_TYPE, &entry);
1035     if (cameraTest->rc == HDI::Camera::V1_0::NO_ERROR && entry.data.u8 != nullptr && entry.count > 0) {
1036         cameraTest->intents = {PREVIEW, StreamIntent::VIDEO};
1037         cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::VIDEO);
1038         cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
1039         cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
1040         std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1041         std::vector<uint8_t> detectTypes;
1042         for (int i = 0; i < entry.count; i++) {
1043             detectTypes.push_back(entry.data.u8[i]);
1044         }
1045         uint8_t* typesToEnable = detectTypes.data();
1046         meta->addEntry(OHOS_CONTROL_STATISTICS_DETECT_SETTING, typesToEnable, detectTypes.size());
1047         std::vector<uint8_t> setting;
1048         MetadataUtils::ConvertMetadataToVec(meta, setting);
1049         cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->streamOperator_V1_3->EnableResult(
1050                 cameraTest->streamIdVideo, setting);
1051         ASSERT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
1052         sleep(UT_SECOND_TIMES);
1053         if (cameraTest->streamOperatorCallbackV1_3->streamResultMeta == nullptr) {
1054             CAMERA_LOGI("Camera_Device_Hdi_V1_3_053 onresult not be invoked.");
1055             return;
1056         }
1057         common_metadata_header_t* streamData = cameraTest->streamOperatorCallbackV1_3->streamResultMeta->get();
1058         if (data == nullptr) {
1059             CAMERA_LOGI("Camera_Device_Hdi_V1_3_053 onresult be invoked but data was nullptr.");
1060             return;
1061         }
1062         FindHumanDetectResult(streamData);
1063         FindOtherDetectResult(streamData);
1064         cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
1065         cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
1066         cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
1067     }
1068 }
1069 
1070 /**
1071  * @tc.name: SUB_Driver_Camera_Detect_0300
1072  * @tc.desc: OHOS_ABILITY_STATISTICS_DETECT_TYPE,EnableResult
1073  * @tc.size: MediumTest
1074  * @tc.type: Function
1075  */
1076 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_Detect_0300, TestSize.Level1)
1077 {
1078     common_metadata_header_t* data = cameraTest->ability->get();
1079     ASSERT_NE(data, nullptr);
1080     camera_metadata_item_t entry;
1081     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_STATISTICS_DETECT_TYPE, &entry);
1082     if (cameraTest->rc == HDI::Camera::V1_0::NO_ERROR && entry.data.u8 != nullptr && entry.count > 0) {
1083         cameraTest->intents = {PREVIEW, StreamIntent::VIDEO};
1084         cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::VIDEO);
1085         cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
1086         cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
1087         std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1088         std::vector<uint8_t> detectTypes;
1089         for (int i = 0; i < entry.count; i++) {
1090             detectTypes.push_back(entry.data.u8[i]);
1091         }
1092         uint8_t* typesToEnable = detectTypes.data();
1093         meta->addEntry(OHOS_CONTROL_STATISTICS_DETECT_SETTING, typesToEnable, detectTypes.size());
1094         std::vector<uint8_t> setting;
1095         MetadataUtils::ConvertMetadataToVec(meta, setting);
1096         cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->streamOperator_V1_3->DisableResult(
1097                 cameraTest->streamIdVideo, setting);
1098         ASSERT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
1099         sleep(UT_SECOND_TIMES);
1100         if (cameraTest->streamOperatorCallbackV1_3->streamResultMeta == nullptr) {
1101             CAMERA_LOGI("Camera_Device_Hdi_V1_3_053 onresult not be invoked.");
1102             return;
1103         }
1104         common_metadata_header_t* streamData = cameraTest->streamOperatorCallbackV1_3->streamResultMeta->get();
1105         if (data == nullptr) {
1106             CAMERA_LOGI("Camera_Device_Hdi_V1_3_053 onresult be invoked but data was nullptr.");
1107             return;
1108         }
1109         FindHumanDetectResult(streamData);
1110         FindOtherDetectResult(streamData);
1111         cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
1112         cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
1113         cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
1114     }
1115 }
1116 
1117 /**
1118  * @tc.name:SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_RANGE_TYPE_0100
1119  * @tc.desc: test TAG OHOS_ABILITY_FOCUS_RANGE_TYPES and OHOS_CONTROL_FOCUS_RANGE_TYPE
1120  * @tc.size:MediumTest
1121  * @tc.type:Function
1122 */
1123 HWTEST_F(CameraHdiTestV1_3, SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_RANGE_TYPE_0100, TestSize.Level1)
1124 {
1125     cameraTest->Close();
1126     cameraTest->Open(DEVICE_1); // front camera
1127     ASSERT_NE(cameraTest->ability, nullptr);
1128     common_metadata_header_t* data = cameraTest->ability->get();
1129     ASSERT_NE(data, nullptr);
1130     camera_metadata_item_t entry;
1131     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_FOCUS_RANGE_TYPES, &entry);
1132     if (cameraTest->rc != CAM_META_SUCCESS || entry.count == 0) {
1133         CAMERA_LOGE("OHOS_ABILITY_FOCUS_RANGE_TYPES is not supported");
1134         return;
1135     }
1136     for (int i = 0; i < entry.count; i++) {
1137         if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_RANGE_NEAR) {
1138             CAMERA_LOGI("focus range type OHOS_CAMERA_FOCUS_RANGE_NEAR is supported");
1139         } else if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_RANGE_AUTO) {
1140             CAMERA_LOGI("focus range type OHOS_CAMERA_FOCUS_RANGE_AUTO is supported");
1141         } else {
1142             CAMERA_LOGE("focus range type is not supported");
1143             return;
1144         }
1145     }
1146     camera_metadata_item_t item;
1147     bool status = false;
1148     uint8_t metaFocusRangeType = static_cast<uint8_t>(OHOS_CAMERA_FOCUS_RANGE_NEAR);
1149     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_RANGE_TYPE, &item);
1150     if (ret == CAM_META_ITEM_NOT_FOUND) {
1151         status = cameraTest->ability->addEntry(OHOS_CONTROL_FOCUS_RANGE_TYPE, &metaFocusRangeType, DATA_COUNT);
1152         CAMERA_LOGI("add OHOS_CAMERA_FOCUS_RANGE_NEAR to ability");
1153     } else if (ret == CAM_META_SUCCESS) {
1154         status = cameraTest->ability->updateEntry(OHOS_CONTROL_FOCUS_RANGE_TYPE, &metaFocusRangeType, DATA_COUNT);
1155         CAMERA_LOGI("update OHOS_CAMERA_FOCUS_RANGE_NEAR to ability");
1156     }
1157     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1158     std::vector<uint8_t> setting;
1159     uint8_t nearType = 1;
1160     meta->addEntry(OHOS_CONTROL_FOCUS_RANGE_TYPE, &nearType, DATA_COUNT);
1161     MetadataUtils::ConvertMetadataToVec(meta, setting);
1162     cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
1163     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
1164     CAMERA_LOGI("first: update settings success");
1165     ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_RANGE_TYPE, &item);
1166     EXPECT_EQ(ret, CAM_META_SUCCESS);
1167     EXPECT_TRUE(item.data.u8[0] == OHOS_CAMERA_FOCUS_RANGE_NEAR);
1168 }
1169 
1170 /**
1171  * @tc.name:SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_RANGE_TYPE_0200
1172  * @tc.desc: test TAG OHOS_ABILITY_FOCUS_RANGE_TYPES and OHOS_CONTROL_FOCUS_RANGE_TYPE
1173  * @tc.size:MediumTest
1174  * @tc.type:Function
1175 */
1176 HWTEST_F(CameraHdiTestV1_3, SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_RANGE_TYPE_0200, TestSize.Level1)
1177 {
1178     cameraTest->Close();
1179     cameraTest->Open(DEVICE_1); // front camera
1180     ASSERT_NE(cameraTest->ability, nullptr);
1181     common_metadata_header_t* data = cameraTest->ability->get();
1182     ASSERT_NE(data, nullptr);
1183     camera_metadata_item_t entry;
1184     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_FOCUS_RANGE_TYPES, &entry);
1185     if (cameraTest->rc != CAM_META_SUCCESS || entry.count == 0) {
1186         CAMERA_LOGE("OHOS_ABILITY_FOCUS_RANGE_TYPES is not supported");
1187         return;
1188     }
1189     for (int i = 0; i < entry.count; i++) {
1190         if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_RANGE_NEAR) {
1191             CAMERA_LOGI("focus range type OHOS_CAMERA_FOCUS_RANGE_NEAR is supported");
1192         } else if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_RANGE_AUTO) {
1193             CAMERA_LOGI("focus range type OHOS_CAMERA_FOCUS_RANGE_AUTO is supported");
1194         } else {
1195             CAMERA_LOGE("focus range type is not supported");
1196             return;
1197         }
1198     }
1199     camera_metadata_item_t item;
1200     bool status = false;
1201     std::vector<uint8_t> setting;
1202     uint8_t metaFocusRangeType = static_cast<uint8_t>(OHOS_CAMERA_FOCUS_RANGE_AUTO);
1203     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_RANGE_TYPE, &item);
1204     if (ret == CAM_META_ITEM_NOT_FOUND) {
1205         status = cameraTest->ability->addEntry(OHOS_CONTROL_FOCUS_RANGE_TYPE, &metaFocusRangeType, DATA_COUNT);
1206         CAMERA_LOGI("add OHOS_CAMERA_FOCUS_RANGE_AUTO to ability");
1207     } else if (ret == CAM_META_SUCCESS) {
1208         status = cameraTest->ability->updateEntry(OHOS_CONTROL_FOCUS_RANGE_TYPE, &metaFocusRangeType, DATA_COUNT);
1209         CAMERA_LOGI("update OHOS_CAMERA_FOCUS_RANGE_AUTO to ability");
1210     }
1211     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1212     uint8_t autoType = 0;
1213     meta->addEntry(OHOS_CONTROL_FOCUS_RANGE_TYPE, &autoType, DATA_COUNT);
1214     MetadataUtils::ConvertMetadataToVec(meta, setting);
1215     cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
1216     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
1217     CAMERA_LOGI("second: update settings success");
1218     ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_RANGE_TYPE, &item);
1219     EXPECT_EQ(ret, CAM_META_SUCCESS);
1220     EXPECT_TRUE(item.data.u8[0] == OHOS_CAMERA_FOCUS_RANGE_AUTO);
1221 }
1222 
1223 /**
1224  * @tc.name:SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_DRIVEN_TYPE_0100
1225  * @tc.desc: test TAG OHOS_ABILITY_FOCUS_DRIVEN_TYPES and OHOS_CONTROL_FOCUS_DRIVEN_TYPE
1226  * @tc.size:MediumTest
1227  * @tc.type:Function
1228 */
1229 HWTEST_F(CameraHdiTestV1_3, SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_DRIVEN_TYPE_0100, TestSize.Level1)
1230 {
1231     ASSERT_NE(cameraTest->ability, nullptr);
1232     common_metadata_header_t* data = cameraTest->ability->get();
1233     ASSERT_NE(data, nullptr);
1234     camera_metadata_item_t entry;
1235     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_FOCUS_DRIVEN_TYPES, &entry);
1236     if (cameraTest->rc != CAM_META_SUCCESS || entry.count == 0) {
1237         CAMERA_LOGE("OHOS_ABILITY_FOCUS_DRIVEN_TYPES is not supported");
1238         return;
1239     }
1240     for (int i = 0; i < entry.count; i++) {
1241         if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_DRIVEN_FACE) {
1242             CAMERA_LOGI("focus driven type OHOS_CAMERA_FOCUS_DRIVEN_FACE is supported");
1243         } else if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_DRIVEN_AUTO) {
1244             CAMERA_LOGI("focus driven type OHOS_CAMERA_FOCUS_DRIVEN_AUTO is supported");
1245         } else {
1246             CAMERA_LOGE("focus driven type is not supported");
1247             return;
1248         }
1249     }
1250     camera_metadata_item_t item;
1251     bool status = false;
1252     uint8_t metaFocusDrivenType = static_cast<uint8_t>(OHOS_CAMERA_FOCUS_DRIVEN_FACE);
1253     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &item);
1254     if (ret == CAM_META_ITEM_NOT_FOUND) {
1255         status = cameraTest->ability->addEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &metaFocusDrivenType, DATA_COUNT);
1256         CAMERA_LOGI("add OHOS_CAMERA_FOCUS_DRIVEN_FACE to ability");
1257     } else if (ret == CAM_META_SUCCESS) {
1258         status = cameraTest->ability->updateEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &metaFocusDrivenType, DATA_COUNT);
1259         CAMERA_LOGI("update OHOS_CAMERA_FOCUS_DRIVEN_FACE to ability");
1260     }
1261     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1262     std::vector<uint8_t> setting;
1263     uint8_t faceType = 1;
1264     meta->addEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &faceType, DATA_COUNT);
1265     MetadataUtils::ConvertMetadataToVec(meta, setting);
1266     cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
1267     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
1268     CAMERA_LOGI("first: update settings success");
1269     ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &item);
1270     EXPECT_EQ(ret, CAM_META_SUCCESS);
1271     EXPECT_TRUE(item.data.u8[0] == OHOS_CAMERA_FOCUS_DRIVEN_FACE);
1272 }
1273 
1274 /**
1275  * @tc.name:SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_DRIVEN_TYPE_0200
1276  * @tc.desc: test TAG OHOS_ABILITY_FOCUS_DRIVEN_TYPES and OHOS_CONTROL_FOCUS_DRIVEN_TYPE
1277  * @tc.size:MediumTest
1278  * @tc.type:Function
1279 */
1280 HWTEST_F(CameraHdiTestV1_3, SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_DRIVEN_TYPE_0200, TestSize.Level1)
1281 {
1282     ASSERT_NE(cameraTest->ability, nullptr);
1283     common_metadata_header_t* data = cameraTest->ability->get();
1284     ASSERT_NE(data, nullptr);
1285     camera_metadata_item_t entry;
1286     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_FOCUS_DRIVEN_TYPES, &entry);
1287     if (cameraTest->rc != CAM_META_SUCCESS || entry.count == 0) {
1288         CAMERA_LOGE("OHOS_ABILITY_FOCUS_DRIVEN_TYPES is not supported");
1289         return;
1290     }
1291     for (int i = 0; i < entry.count; i++) {
1292         if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_DRIVEN_FACE) {
1293             CAMERA_LOGI("focus driven type OHOS_CAMERA_FOCUS_DRIVEN_FACE is supported");
1294         } else if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_DRIVEN_AUTO) {
1295             CAMERA_LOGI("focus driven type OHOS_CAMERA_FOCUS_DRIVEN_AUTO is supported");
1296         } else {
1297             CAMERA_LOGE("focus driven type is not supported");
1298             return;
1299         }
1300     }
1301     camera_metadata_item_t item;
1302     bool status = false;
1303     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1304     std::vector<uint8_t> setting;
1305     uint8_t metaFocusDrivenType = static_cast<uint8_t>(OHOS_CAMERA_FOCUS_DRIVEN_AUTO);
1306     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &item);
1307     if (ret == CAM_META_ITEM_NOT_FOUND) {
1308         status = cameraTest->ability->addEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &metaFocusDrivenType, DATA_COUNT);
1309         CAMERA_LOGI("add OHOS_CAMERA_FOCUS_DRIVEN_AUTO to ability");
1310     } else if (ret == CAM_META_SUCCESS) {
1311         status = cameraTest->ability->updateEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &metaFocusDrivenType, DATA_COUNT);
1312         CAMERA_LOGI("update OHOS_CAMERA_FOCUS_DRIVEN_AUTO to ability");
1313     }
1314     meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1315     uint8_t autoType = 0;
1316     meta->addEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &autoType, DATA_COUNT);
1317     MetadataUtils::ConvertMetadataToVec(meta, setting);
1318     cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
1319     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
1320     CAMERA_LOGI("second: update settings success");
1321     ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &item);
1322     EXPECT_EQ(ret, CAM_META_SUCCESS);
1323     EXPECT_TRUE(item.data.u8[0] == OHOS_CAMERA_FOCUS_DRIVEN_AUTO);
1324 }
1325 
SetFocusDrivenType(common_metadata_header_t * data,camera_focus_driven_type_t type,std::shared_ptr<OHOS::Camera::CameraSetting> & meta,std::vector<uint8_t> & setting)1326 bool CameraHdiTestV1_3::SetFocusDrivenType(common_metadata_header_t* data, camera_focus_driven_type_t type,
1327     std::shared_ptr<OHOS::Camera::CameraSetting>& meta, std::vector<uint8_t>& setting)
1328 {
1329     bool result = false;
1330     camera_metadata_item_t entry;
1331     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_FOCUS_DRIVEN_TYPES, &entry);
1332     if (cameraTest->rc != CAM_META_SUCCESS || entry.count == 0) {
1333         CAMERA_LOGE("OHOS_ABILITY_FOCUS_DRIVEN_TYPES is not supported");
1334         return result;
1335     }
1336     for (int i = 0; i < entry.count; i++) {
1337         if (entry.data.u8[i] == type) {
1338             result = true;
1339             break;
1340         }
1341     }
1342     if (result == false) {
1343         return result;
1344     }
1345     camera_metadata_item_t item;
1346     bool status = false;
1347     uint8_t metaFocusDrivenType = static_cast<uint8_t>(type);
1348     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &item);
1349     if (ret == CAM_META_ITEM_NOT_FOUND) {
1350         status = cameraTest->ability->addEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &metaFocusDrivenType, DATA_COUNT);
1351     } else if (ret == CAM_META_SUCCESS) {
1352         status = cameraTest->ability->updateEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &metaFocusDrivenType, DATA_COUNT);
1353     }
1354     meta->addEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &metaFocusDrivenType, DATA_COUNT);
1355     MetadataUtils::ConvertMetadataToVec(meta, setting);
1356     cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
1357     cameraTest->rc == HDI::Camera::V1_0::NO_ERROR ? result = true : result = false;
1358     return result;
1359 }
1360 
FindFocusTrackingResult(common_metadata_header_t * streamData)1361 void FindFocusTrackingResult(common_metadata_header_t* streamData)
1362 {
1363     camera_metadata_item_t modeEntry;
1364     int32_t rc = FindCameraMetadataItem(streamData, OHOS_CONTROL_FOCUS_TRACKING_MODE, &modeEntry);
1365     if (rc == HDI::Camera::V1_0::NO_ERROR) {
1366         if (modeEntry.data.u8 != nullptr && modeEntry.count > 0) {
1367             CAMERA_LOGI("FindDetectResult human face result");
1368         }
1369     }
1370     camera_metadata_item_t rectEntry;
1371     rc = FindCameraMetadataItem(streamData, OHOS_ABILITY_FOCUS_TRACKING_REGION, &rectEntry);
1372     if (rc == HDI::Camera::V1_0::NO_ERROR) {
1373         if (rectEntry.data.i32 != nullptr && rectEntry.count > 0) {
1374             CAMERA_LOGI("FindDetectResult human body result");
1375         }
1376     }
1377 }
1378 
1379 /**
1380  * @tc.name:SUB_MULTIMEDIA_CAMERA_OHOS_FOCUS_TRACKING_0100
1381  * @tc.desc: test TAG OHOS_ABILITY_FOCUS_TRACKING_REGION and OHOS_CONTROL_FOCUS_TRACKING_MODE
1382  * @tc.size:MediumTest
1383  * @tc.type:Function
1384 */
1385 HWTEST_F(CameraHdiTestV1_3, SUB_MULTIMEDIA_CAMERA_OHOS_FOCUS_TRACKING_0100, TestSize.Level1)
1386 {
1387     ASSERT_NE(cameraTest->ability, nullptr);
1388     common_metadata_header_t* data = cameraTest->ability->get();
1389     ASSERT_NE(data, nullptr);
1390     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1391     std::vector<uint8_t> setting;
1392     bool result = SetFocusDrivenType(data, OHOS_CAMERA_FOCUS_DRIVEN_FACE, meta, setting);
1393     if (result == false) {
1394         CAMERA_LOGE("SetFocusDrivenType failed");
1395         return;
1396     }
1397     cameraTest->intents = {PREVIEW, StreamIntent::VIDEO};
1398     cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::VIDEO);
1399     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
1400     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
1401     cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->streamOperator_V1_3->EnableResult(
1402         cameraTest->streamIdVideo, setting);
1403     if (cameraTest->rc != HDI::Camera::V1_0::NO_ERROR) {
1404         return;
1405     }
1406     sleep(UT_SECOND_TIMES);
1407     if (cameraTest->streamOperatorCallbackV1_3->streamResultMeta == nullptr) {
1408         CAMERA_LOGI("onresult not be invoked.");
1409         return;
1410     }
1411     common_metadata_header_t* streamData = cameraTest->streamOperatorCallbackV1_3->streamResultMeta->get();
1412     FindFocusTrackingResult(streamData);
1413     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
1414     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
1415     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
1416 }
1417 
1418 /**
1419  * @tc.name:SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_COLOR_RESERVATION_TYPE_0100
1420  * @tc.desc: test TAG OHOS_ABILITY_COLOR_RESERVATION_TYPES and OHOS_CONTROL_COLOR_RESERVATION_TYPE
1421  * @tc.size:MediumTest
1422  * @tc.type:Function
1423 */
1424 HWTEST_F(CameraHdiTestV1_3, SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_COLOR_RESERVATION_TYPE_0100, TestSize.Level1)
1425 {
1426     ASSERT_NE(cameraTest->ability, nullptr);
1427     common_metadata_header_t* data = cameraTest->ability->get();
1428     ASSERT_NE(data, nullptr);
1429     camera_metadata_item_t entry;
1430     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_COLOR_RESERVATION_TYPES, &entry);
1431     if (cameraTest->rc != CAM_META_SUCCESS || entry.count == 0) {
1432         CAMERA_LOGE("OHOS_ABILITY_COLOR_RESERVATION_TYPES is not supported");
1433         return;
1434     }
1435     for (int i = 0; i < entry.count; i++) {
1436         if (entry.data.u8[i] == OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT) {
1437             CAMERA_LOGI("color reservation type OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT is supported");
1438         } else if (entry.data.u8[i] == OHOS_CAMERA_COLOR_RESERVATION_NONE) {
1439             CAMERA_LOGI("color reservation type OHOS_CAMERA_COLOR_RESERVATION_NONE is supported");
1440         } else {
1441             CAMERA_LOGE("color reservation type is not supported");
1442             return;
1443         }
1444     }
1445     camera_metadata_item_t item;
1446     bool status = false;
1447     uint8_t metacolorType = static_cast<uint8_t>(OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT);
1448     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_COLOR_RESERVATION_TYPE, &item);
1449     if (ret == CAM_META_ITEM_NOT_FOUND) {
1450         status = cameraTest->ability->addEntry(OHOS_CONTROL_COLOR_RESERVATION_TYPE, &metacolorType, DATA_COUNT);
1451         CAMERA_LOGI("add OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT to ability");
1452     } else if (ret == CAM_META_SUCCESS) {
1453         status = cameraTest->ability->updateEntry(OHOS_CONTROL_COLOR_RESERVATION_TYPE, &metacolorType, DATA_COUNT);
1454         CAMERA_LOGI("update OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT to ability");
1455     }
1456     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1457     std::vector<uint8_t> setting;
1458     uint8_t portraitType = 1;
1459     meta->addEntry(OHOS_CONTROL_COLOR_RESERVATION_TYPE, &portraitType, DATA_COUNT);
1460     MetadataUtils::ConvertMetadataToVec(meta, setting);
1461     cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
1462     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
1463     CAMERA_LOGI("first: update settings success");
1464     ret = FindCameraMetadataItem(data, OHOS_CONTROL_COLOR_RESERVATION_TYPE, &item);
1465     EXPECT_EQ(ret, CAM_META_SUCCESS);
1466     EXPECT_TRUE(item.data.u8[0] == OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT);
1467 }
1468 
1469 /**
1470  * @tc.name:SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_COLOR_RESERVATION_TYPE_0200
1471  * @tc.desc: test TAG OHOS_ABILITY_COLOR_RESERVATION_TYPES and OHOS_CONTROL_COLOR_RESERVATION_TYPE
1472  * @tc.size:MediumTest
1473  * @tc.type:Function
1474 */
1475 HWTEST_F(CameraHdiTestV1_3, SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_COLOR_RESERVATION_TYPE_0200, TestSize.Level1)
1476 {
1477     ASSERT_NE(cameraTest->ability, nullptr);
1478     common_metadata_header_t* data = cameraTest->ability->get();
1479     ASSERT_NE(data, nullptr);
1480     camera_metadata_item_t entry;
1481     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_COLOR_RESERVATION_TYPES, &entry);
1482     if (cameraTest->rc != CAM_META_SUCCESS || entry.count == 0) {
1483         CAMERA_LOGE("OHOS_ABILITY_COLOR_RESERVATION_TYPES is not supported");
1484         return;
1485     }
1486     for (int i = 0; i < entry.count; i++) {
1487         if (entry.data.u8[i] == OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT) {
1488             CAMERA_LOGI("color reservation type OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT is supported");
1489         } else if (entry.data.u8[i] == OHOS_CAMERA_COLOR_RESERVATION_NONE) {
1490             CAMERA_LOGI("color reservation type OHOS_CAMERA_COLOR_RESERVATION_NONE is supported");
1491         } else {
1492             CAMERA_LOGE("color reservation type is not supported");
1493             return;
1494         }
1495     }
1496     camera_metadata_item_t item;
1497     bool status = false;
1498     uint8_t metacolorType = static_cast<uint8_t>(OHOS_CAMERA_COLOR_RESERVATION_NONE);
1499     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_COLOR_RESERVATION_TYPE, &item);
1500     if (ret == CAM_META_ITEM_NOT_FOUND) {
1501         status = cameraTest->ability->addEntry(OHOS_CONTROL_COLOR_RESERVATION_TYPE, &metacolorType, DATA_COUNT);
1502         CAMERA_LOGI("add OHOS_CAMERA_COLOR_RESERVATION_NONE to ability");
1503     } else if (ret == CAM_META_SUCCESS) {
1504         status = cameraTest->ability->updateEntry(OHOS_CONTROL_COLOR_RESERVATION_TYPE, &metacolorType, DATA_COUNT);
1505         CAMERA_LOGI("update OHOS_CAMERA_COLOR_RESERVATION_NONE to ability");
1506     }
1507     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1508     std::vector<uint8_t> setting;
1509     uint8_t noneType = 0;
1510     meta->addEntry(OHOS_CONTROL_COLOR_RESERVATION_TYPE, &noneType, DATA_COUNT);
1511     MetadataUtils::ConvertMetadataToVec(meta, setting);
1512     cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
1513     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
1514     CAMERA_LOGI("second: update settings success");
1515     ret = FindCameraMetadataItem(data, OHOS_CONTROL_COLOR_RESERVATION_TYPE, &item);
1516     EXPECT_EQ(ret, CAM_META_SUCCESS);
1517     EXPECT_TRUE(item.data.u8[0] == OHOS_CAMERA_COLOR_RESERVATION_NONE);
1518 }
1519