• 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     EXPECT_EQ(ret, 0);
48     EXPECT_NE(entry.count, 0);
49     for (int i = 0; i < entry.count; i++) {
50         if (entry.data.u8[i] == value) {
51             return true;
52         }
53     }
54     return false;
55 }
56 
57 /**
58  * @tc.name:SUB_Driver_Camera_Moon_0200
59  * @tc.desc: Update moon ability setting
60  * @tc.size:MediumTest
61  * @tc.type:Function
62 */
63 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_Moon_0200, TestSize.Level1)
64 {
65     int32_t rc;
66     // step 2: set callback object
67     cameraTest->hostCallbackV1_2 = new OHOS::Camera::Test::TestCameraHostCallbackV1_2();
68     rc = cameraTest->serviceV1_3->SetCallback_V1_2(cameraTest->hostCallbackV1_2);
69     EXPECT_EQ(rc, 0);
70     // Start OHOS_ABILITY_MOON_CAPTURE_BOOST ability query
71     common_metadata_header_t* data = cameraTest->ability->get();
72     EXPECT_NE(data, nullptr);
73     camera_metadata_item_t entry;
74     int ret = FindCameraMetadataItem(data, OHOS_ABILITY_MOON_CAPTURE_BOOST, &entry);
75 
76     if (ret == HDI::Camera::V1_0::NO_ERROR && entry.data.u8 != nullptr && entry.count > 0) {
77         std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
78         constexpr float zoomRatio = 15;
79         uint8_t stabControl = OHOS_CAMERA_MOON_CAPTURE_BOOST_ENABLE;
80         meta->addEntry(OHOS_CONTROL_ZOOM_RATIO, &zoomRatio, DATA_COUNT);
81         meta->addEntry(OHOS_CONTROL_MOON_CAPTURE_BOOST, &stabControl, DATA_COUNT);
82         // ability meta data serialization for updating
83         std::vector<uint8_t> setting;
84         MetadataUtils::ConvertMetadataToVec(meta, setting);
85         cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
86         EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
87         CAMERA_LOGD("MoonCaptureBoost mode is set enabled.");
88 
89         cameraTest->intents = {PREVIEW, STILL_CAPTURE};
90         cameraTest->StartStream(cameraTest->intents);
91         EXPECT_EQ(cameraTest->rc, HDI::Camera::V1_0::NO_ERROR);
92         cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
93         cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, true);
94         sleep(1);
95         cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdCapture};
96         cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
97         cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
98         sleep(UT_SECOND_TIMES);
99         common_metadata_header_t* data = cameraTest->deviceCallback->resultMeta->get();
100         EXPECT_NE(data, nullptr);
101         camera_metadata_item_t entry;
102         int ret = FindCameraMetadataItem(data, OHOS_STATUS_MOON_CAPTURE_DETECTION, &entry);
103         EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, ret);
104         if (ret == HDI::Camera::V1_0::NO_ERROR && entry.data.u8 != nullptr && entry.count > 0) {
105             uint8_t value = entry.data.u8[0];
106             // 查询到状态, 检测状态到 月亮模式可开启
107             if (OHOS_CAMERA_MOON_CAPTURE_BOOST_ENABLE == value) {
108                 printf("Moon mode is set enabled.");
109             } else {
110                 printf("Moon mode is not enabled.");
111             }
112         } else {
113             printf("Moon is not exits.");
114         }
115     }
116 }
117 
118 /**
119  * @tc.name:SUB_Driver_Camera_Moon_0300
120  * @tc.desc: Update moon ability setting
121  * @tc.size:MediumTest
122  * @tc.type:Function
123 */
124 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_Moon_0300, TestSize.Level1)
125 {
126     int32_t rc;
127     // step 2: set callback object
128     cameraTest->hostCallbackV1_2 = new OHOS::Camera::Test::TestCameraHostCallbackV1_2();
129     rc = cameraTest->serviceV1_3->SetCallback_V1_2(cameraTest->hostCallbackV1_2);
130     EXPECT_EQ(rc, 0);
131     // Start OHOS_ABILITY_MOON_CAPTURE_BOOST ability query
132     common_metadata_header_t* data = cameraTest->ability->get();
133     EXPECT_NE(data, nullptr);
134     camera_metadata_item_t entry;
135     int ret = FindCameraMetadataItem(data, OHOS_ABILITY_MOON_CAPTURE_BOOST, &entry);
136 
137     if (ret == HDI::Camera::V1_0::NO_ERROR && entry.data.u8 != nullptr && entry.count > 0) {
138         std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
139         constexpr float zoomRatio = 15;
140         uint8_t stabControl = OHOS_CAMERA_MOON_CAPTURE_BOOST_ENABLE;
141         meta->addEntry(OHOS_CONTROL_ZOOM_RATIO, &zoomRatio, DATA_COUNT);
142         meta->addEntry(OHOS_CONTROL_MOON_CAPTURE_BOOST, &stabControl, DATA_COUNT);
143         // ability meta data serialization for updating
144         std::vector<uint8_t> setting;
145         MetadataUtils::ConvertMetadataToVec(meta, setting);
146         cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
147         EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
148         CAMERA_LOGD("MoonCaptureBoost mode is set enabled.");
149 
150         cameraTest->intents = {PREVIEW, STILL_CAPTURE};
151         cameraTest->StartStream(cameraTest->intents);
152         EXPECT_EQ(cameraTest->rc, HDI::Camera::V1_0::NO_ERROR);
153         cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
154         cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, true);
155         sleep(1);
156         cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdCapture};
157         cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
158         cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
159     }
160 }
161 
162 /**
163  * @tc.name: SUB_Driver_Camera_SlowMotion_0300
164  * @tc.desc: CommitStreams_V1_1 for HIGH_FRAME_RATE, preview and video, fps is 120
165  * @tc.size: MediumTest
166  * @tc.type: Function
167  */
168 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_SlowMotion_0300, TestSize.Level1)
169 {
170     if (!g_IsTagValueExistsU8(cameraTest->ability, OHOS_ABILITY_CAMERA_MODES, OHOS::HDI::Camera::V1_3::HIGH_FRAME_RATE)) {
171         cout << "skip this test, because HIGH_FRAME_RATE not in OHOS_ABILITY_CAMERA_MODES" << endl;
172         return;
173     }
174     cameraTest->CreateAndCommitStreamsForHighFrameRate(cameraTest);
175     // Update settings
176     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
177     int32_t highFrameRate[2] = {120, 120};
178     meta->addEntry(OHOS_CONTROL_FPS_RANGES, &highFrameRate, FPS_COUNT);
179     std::vector<uint8_t> setting;
180     MetadataUtils::ConvertMetadataToVec(meta, setting);
181     cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
182     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
183 
184     // Start capture
185     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
186     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
187 
188     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
189     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
190     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
191     sleep(DATA_COUNT);
192     cameraTest->streamInfosV1_1.clear();
193 }
194 
195 /**
196  * @tc.name: SUB_Driver_Camera_SlowMotion_0400
197  * @tc.desc: CommitStreams_V1_1 for HIGH_FRAME_RATE, preview and video, fps is 240
198  * @tc.size: MediumTest
199  * @tc.type: Function
200  */
201 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_SlowMotion_0400, TestSize.Level1)
202 {
203     if (!g_IsTagValueExistsU8(cameraTest->ability, OHOS_ABILITY_CAMERA_MODES, OHOS::HDI::Camera::V1_3::HIGH_FRAME_RATE)) {
204         cout << "skip this test, because HIGH_FRAME_RATE not in OHOS_ABILITY_CAMERA_MODES" << endl;
205         return;
206     }
207     cameraTest->CreateAndCommitStreamsForHighFrameRate(cameraTest);
208 
209     // Update settings
210     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
211     int32_t highFrameRate[2] = {240, 240};
212     meta->addEntry(OHOS_CONTROL_FPS_RANGES, &highFrameRate, FPS_COUNT);
213     std::vector<uint8_t> setting;
214     MetadataUtils::ConvertMetadataToVec(meta, setting);
215     cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
216     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
217 
218     // Start capture
219     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
220     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
221 
222     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
223     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
224     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
225     sleep(DATA_COUNT);
226     cameraTest->streamInfosV1_1.clear();
227 }
228 
229 
230 /**
231  * @tc.name: SUB_Driver_Camera_SuperSlowMotion_0400
232  * @tc.desc: CommitStreams_V1_1 for SLOW_MOTION, preview and video, fps is 960
233  * @tc.size: MediumTest
234  * @tc.type: Function
235  */
236 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_SuperSlowMotion_0400, TestSize.Level1)
237 {
238     if (!g_IsTagValueExistsU8(cameraTest->ability, OHOS_ABILITY_CAMERA_MODES, OHOS::HDI::Camera::V1_2::SLOW_MOTION)) {
239         cout << "skip this test, because SLOW_MOTION not in OHOS_ABILITY_CAMERA_MODES" << endl;
240         return;
241     }
242     cameraTest->CreateAndCommitStreamsForSlowMotion(cameraTest);
243 
244     // Update settings
245     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
246     int32_t slowMotionValue[2] = {240, 240};
247     meta->addEntry(OHOS_CONTROL_FPS_RANGES, &slowMotionValue, FPS_COUNT);
248     std::vector<uint8_t> setting;
249     MetadataUtils::ConvertMetadataToVec(meta, setting);
250     cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
251     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
252 
253     // Start capture
254     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
255     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
256 
257     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
258     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
259     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
260     sleep(DATA_COUNT);
261     cameraTest->streamInfosV1_1.clear();
262 }
263 
264 /**
265  * @tc.name: SUB_Driver_Camera_SuperSlowMotion_0200
266  * @tc.desc: OHOS_ABILITY_MOTION_DETECTION_SUPPORT, OHOS_CAMERA_MOTION_DETECTION_SUPPORTED
267  * @tc.size: MediumTest
268  * @tc.type: Function
269  */
270 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_SuperSlowMotion_0200, TestSize.Level1)
271 {
272     if (!g_IsTagValueExistsU8(cameraTest->ability, OHOS_ABILITY_CAMERA_MODES, OHOS::HDI::Camera::V1_2::SLOW_MOTION)) {
273         cout << "skip this test, because SLOW_MOTION not in OHOS_ABILITY_CAMERA_MODES" << endl;
274         return;
275     }
276     // Set callback object
277     cameraTest->hostCallbackV1_2 = new OHOS::Camera::Test::TestCameraHostCallbackV1_2();
278     cameraTest->rc = cameraTest->serviceV1_3->SetCallback_V1_2(cameraTest->hostCallbackV1_2);
279     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
280     EXPECT_NE(cameraTest->ability, nullptr);
281     common_metadata_header_t* data = cameraTest->ability->get();
282     EXPECT_NE(data, nullptr);
283     camera_metadata_item_t entry;
284     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_MOTION_DETECTION_SUPPORT, &entry);
285     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
286     if (cameraTest->rc == HDI::Camera::V1_0::NO_ERROR && entry.data.u8 != nullptr && entry.count > 0) {
287         EXPECT_TRUE(entry.data.u8 != nullptr);
288         if (entry.data.u8[0] == OHOS_CAMERA_MOTION_DETECTION_SUPPORTED) {
289             cameraTest->CreateAndCommitStreamsForSlowMotion(cameraTest);
290             cameraTest->UpdateSettingsForSlowMotionMode(cameraTest);
291             cameraTest->SuperSlowMotionStatusCallback(cameraTest);
292         }
293     }
294 }
295 
296 /**
297  * @tc.name:SUB_Driver_Camera_PerOptimization_0100
298  * @tc.desc:CAPTURE_DURATION
299  * @tc.size:MediumTest
300  * @tc.type:Function
301 */
302 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_PerOptimization_0100, TestSize.Level1)
303 {
304     EXPECT_NE(cameraTest->ability, nullptr);
305     common_metadata_header_t* data = cameraTest->ability->get();
306     EXPECT_NE(data, nullptr);
307     camera_metadata_item_t entry;
308     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_CAPTURE_DURATION_SUPPORTED, &entry);
309     if (cameraTest->rc != 0 || entry.data.u8[0] != 1) {
310         cout << "skip this test, because OHOS_ABILITY_CAPTURE_DURATION_SUPPORTED not supported now" << endl;
311         return;
312     }
313 
314     // Start stream
315     cameraTest->intents = {PREVIEW, STILL_CAPTURE};
316     cameraTest->StartStream(cameraTest->intents);
317 
318     // Fill capture setting
319     std::shared_ptr<CameraSetting> modeSetting = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
320     uint8_t muteMode = static_cast<uint8_t>(OHOS_CAMERA_MUTE_MODE_OFF);
321     modeSetting->addEntry(OHOS_CONTROL_MUTE_MODE, &muteMode, DATA_COUNT);
322     uint8_t deferredImage = OHOS::HDI::Camera::V1_2::STILL_IMAGE;
323     modeSetting->addEntry(OHOS_CONTROL_DEFERRED_IMAGE_DELIVERY, &deferredImage, DATA_COUNT);
324     std::vector<uint8_t> controlVec;
325     MetadataUtils::ConvertMetadataToVec(modeSetting, controlVec);
326     cameraTest->abilityVec = controlVec;
327 
328     // Start preview and capture
329     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, true, true);
330     // OncaptureReady trigger
331     for (uint8_t i = 0; i < 2; i++) {
332         cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
333     }
334 
335     // Release stream
336     cameraTest->captureIds = {cameraTest->captureIdPreview};
337     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
338     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
339 
340     sleep(UT_SECOND_TIMES);
341     common_metadata_header_t* callbackData = cameraTest->deviceCallback->resultMeta->get();
342     EXPECT_NE(callbackData, nullptr);
343     camera_metadata_item_t callbackEntry;
344     cameraTest->rc = FindCameraMetadataItem(callbackData, OHOS_CAMERA_CUSTOM_SNAPSHOT_DURATION, &callbackEntry);
345     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
346     printf("currentSnapshotDuration = %d\n", callbackEntry.data.ui32[0]);
347 }
348 
349 /**
350  * @tc.name: SUB_Driver_Camera_Moving_0200
351  * @tc.desc: OHOS_CONTROL_MOVING_PHOTO OHOS_CAMERA_MOVING_PHOTO_OFF
352  * @tc.size: MediumTest
353  * @tc.type: Function
354  */
355 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_Moving_0200, TestSize.Level1)
356 {
357     CAMERA_LOGI("test Camera_Device_Hdi_V1_3_013 start.");
358     cameraTest->streamOperatorCallbackV1_3 = new OHOS::Camera::Test::TestStreamOperatorCallbackV1_3();
359     cameraTest->rc = cameraTest->cameraDeviceV1_3->GetStreamOperator_V1_3(
360         cameraTest->streamOperatorCallbackV1_3, cameraTest->streamOperator_V1_3);
361     EXPECT_NE(cameraTest->streamOperator_V1_3, nullptr);
362 
363     cameraTest->streamInfoV1_1 = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
364     cameraTest->DefaultInfosPreview(cameraTest->streamInfoV1_1);
365     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoV1_1);
366 
367     cameraTest->streamInfoCapture = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
368     cameraTest->DefaultInfosCapture(cameraTest->streamInfoCapture);
369     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoCapture);
370 
371     std::shared_ptr<CameraSetting> modeSetting = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
372     uint8_t movingPhoto = static_cast<uint8_t>(OHOS_CAMERA_MOVING_PHOTO_OFF);
373     modeSetting->addEntry(OHOS_CONTROL_MOVING_PHOTO, &movingPhoto, 1);
374     std::vector<uint8_t> metaVec;
375     MetadataUtils::ConvertMetadataToVec(modeSetting, metaVec);
376     cameraTest->cameraDeviceV1_3->UpdateSettings(metaVec);
377 
378     cameraTest->rc = cameraTest->streamOperator_V1_3->CreateStreams_V1_1(cameraTest->streamInfosV1_1);
379     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
380     cameraTest->rc = cameraTest->streamOperator_V1_3->CommitStreams(OperationMode::NORMAL, cameraTest->abilityVec);
381     EXPECT_EQ(cameraTest->rc, HDI::Camera::V1_0::NO_ERROR);
382 
383     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
384     cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
385     cameraTest->captureIds = {cameraTest->captureIdPreview};
386     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
387     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
388 }
389 
390 /**
391  * @tc.name: SUB_Driver_Camera_Moving_0300
392  * @tc.desc: OHOS_CONTROL_MOVING_PHOTO OHOS_CAMERA_MOVING_PHOTO_ON
393  * @tc.size: MediumTest
394  * @tc.type: Function
395  */
396 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_Moving_0300, TestSize.Level1)
397 {
398     CAMERA_LOGI("test Moving Photo Switch On");
399     cameraTest->streamOperatorCallbackV1_3 = new OHOS::Camera::Test::TestStreamOperatorCallbackV1_3();
400     cameraTest->rc = cameraTest->cameraDeviceV1_3->GetStreamOperator_V1_3(
401         cameraTest->streamOperatorCallbackV1_3, cameraTest->streamOperator_V1_3);
402     EXPECT_NE(cameraTest->streamOperator_V1_3, nullptr);
403 
404     cameraTest->streamInfoV1_1 = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
405     cameraTest->DefaultInfosPreview(cameraTest->streamInfoV1_1);
406     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoV1_1);
407 
408     cameraTest->streamInfoCapture = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
409     cameraTest->DefaultInfosCapture(cameraTest->streamInfoCapture);
410     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoCapture);
411 
412     std::shared_ptr<CameraSetting> modeSetting = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
413     uint8_t movingPhoto = static_cast<uint8_t>(OHOS_CAMERA_MOVING_PHOTO_ON);
414     modeSetting->addEntry(OHOS_CONTROL_MOVING_PHOTO, &movingPhoto, 1);
415     std::vector<uint8_t> metaVec;
416     MetadataUtils::ConvertMetadataToVec(modeSetting, metaVec);
417     cameraTest->cameraDeviceV1_3->UpdateSettings(metaVec);
418 
419     cameraTest->rc = cameraTest->streamOperator_V1_3->CreateStreams_V1_1(cameraTest->streamInfosV1_1);
420     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
421     cameraTest->rc = cameraTest->streamOperator_V1_3->CommitStreams(OperationMode::NORMAL, cameraTest->abilityVec);
422     EXPECT_EQ(cameraTest->rc, HDI::Camera::V1_0::NO_ERROR);
423 
424     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
425     cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
426     cameraTest->captureIds = {cameraTest->captureIdPreview};
427     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
428     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
429 }
430 
431 /**
432  * @tc.name: SUB_Driver_Camera_HighSolution_0200
433  * @tc.desc: CommitStreams_V1_1 for HIGH_RESOLUTION_PHOTO, preview and capture
434  * @tc.size: MediumTest
435  * @tc.type: Function
436  */
437 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_HighResolution_0200, TestSize.Level1)
438 {
439     if (!g_IsTagValueExistsU8(cameraTest->ability,
440         OHOS_ABILITY_CAMERA_MODES, OHOS::HDI::Camera::V1_3::HIGH_RESOLUTION_PHOTO)) {
441         cout << "skip this test, because HIGH_RESOLUTION_PHOTO not in OHOS_ABILITY_CAMERA_MODES" << endl;
442         return;
443     }
444     EXPECT_NE(cameraTest->ability, nullptr);
445     common_metadata_header_t* data = cameraTest->ability->get();
446     EXPECT_NE(data, nullptr);
447     camera_metadata_item_t entry;
448     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_CAPTURE_EXPECT_TIME, &entry);
449     if (cameraTest->rc == HDI::Camera::V1_0::NO_ERROR) {
450         EXPECT_NE(entry.data.ui32, nullptr);
451         EXPECT_EQ(entry.count > 1, true);
452         CAMERA_LOGI("mode is %{public}u and captureExpectTime is %{public}u", entry.data.ui32[0], entry.data.ui32[1]);
453     }
454     cameraTest->startStreamForHighResolutionPhoto(cameraTest);
455 
456     // Update settings
457     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
458     int32_t aeExposureCompensation = EXPOSURE_COUNT;
459     meta->addEntry(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, &aeExposureCompensation, DATA_COUNT);
460     uint8_t focusMode = OHOS_CAMERA_FOCUS_MODE_AUTO;
461     meta->addEntry(OHOS_CONTROL_FOCUS_MODE, &focusMode, DATA_COUNT);
462     std::vector<uint8_t> setting;
463     MetadataUtils::ConvertMetadataToVec(meta, setting);
464     cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
465     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
466 
467     sleep(UT_SECOND_TIMES);
468     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
469     cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
470     cameraTest->captureIds = {cameraTest->captureIdPreview};
471     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
472     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
473 }
474 
475 /**
476  * @tc.name: SUB_Driver_Camera_SMPhoto_0200
477  * @tc.desc: CommitStreams_V1_1 for CAPTURE_MACRO, preview and capture
478  * @tc.size: MediumTest
479  * @tc.type: Function
480  */
481 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_SMPhoto_0200, TestSize.Level1)
482 {
483     if (!g_IsTagValueExistsU8(cameraTest->ability, OHOS_ABILITY_CAMERA_MODES, OHOS::HDI::Camera::V1_3::CAPTURE_MACRO)) {
484         cout << "skip this test, because CAPTURE_MACRO not in OHOS_ABILITY_CAMERA_MODES" << endl;
485         return;
486     }
487     // Get stream operator
488     cameraTest->streamOperatorCallbackV1_3 = new OHOS::Camera::Test::TestStreamOperatorCallbackV1_3();
489     cameraTest->rc = cameraTest->cameraDeviceV1_3->GetStreamOperator_V1_3(cameraTest->streamOperatorCallbackV1_3,
490         cameraTest->streamOperator_V1_3);
491     EXPECT_NE(cameraTest->streamOperator_V1_3, nullptr);
492     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
493     // Preview streamInfo
494     cameraTest->streamInfoPre = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
495     cameraTest->DefaultInfosPreview(cameraTest->streamInfoPre);
496     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoPre);
497     // Capture streamInfo
498     cameraTest->streamInfoCapture = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
499     cameraTest->DefaultInfosCapture(cameraTest->streamInfoCapture);
500     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoCapture);
501     cameraTest->rc = cameraTest->streamOperator_V1_3->CreateStreams_V1_1(cameraTest->streamInfosV1_1);
502     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
503     cameraTest->rc = cameraTest->streamOperator_V1_3->CommitStreams_V1_1(
504         static_cast<OHOS::HDI::Camera::V1_1::OperationMode_V1_1>(OHOS::HDI::Camera::V1_3::CAPTURE_MACRO),
505         cameraTest->abilityVec);
506     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
507 
508     // Update settings
509     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
510     float lensFocusDistance = DATA_COUNT;
511     meta->addEntry(OHOS_CONTROL_LENS_FOCUS_DISTANCE, &lensFocusDistance, DATA_COUNT);
512     std::vector<uint8_t> setting;
513     MetadataUtils::ConvertMetadataToVec(meta, setting);
514     cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
515     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
516 
517     sleep(UT_SECOND_TIMES);
518     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
519     cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
520 
521     cameraTest->captureIds = {cameraTest->captureIdPreview};
522     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
523     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
524 }
525 
526 /**
527  * @tc.name: SUB_Driver_Camera_SMVideo_0200
528  * @tc.desc: CommitStreams_V1_1 for VIDEO_MACRO, preview and capture
529  * @tc.size: MediumTest
530  * @tc.type: Function
531  */
532 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_SMVideo_0200, TestSize.Level1)
533 {
534     if (!g_IsTagValueExistsU8(cameraTest->ability, OHOS_ABILITY_CAMERA_MODES, OHOS::HDI::Camera::V1_3::VIDEO_MACRO)) {
535         cout << "skip this test, because VIDEO_MACRO not in OHOS_ABILITY_CAMERA_MODES" << endl;
536         return;
537     }
538     // Get stream operator
539     cameraTest->streamOperatorCallbackV1_3 = new OHOS::Camera::Test::TestStreamOperatorCallbackV1_3();
540     cameraTest->rc = cameraTest->cameraDeviceV1_3->GetStreamOperator_V1_3(cameraTest->streamOperatorCallbackV1_3,
541         cameraTest->streamOperator_V1_3);
542     EXPECT_NE(cameraTest->streamOperator_V1_3, nullptr);
543     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
544     // Preview streamInfo
545     cameraTest->streamInfoPre = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
546     cameraTest->DefaultInfosPreview(cameraTest->streamInfoPre);
547     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoPre);
548     // Capture streamInfo
549     cameraTest->streamInfoVideo = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
550     cameraTest->DefaultInfosVideo(cameraTest->streamInfoVideo);
551     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoVideo);
552     // Create and commit streams
553     cameraTest->rc = cameraTest->streamOperator_V1_3->CreateStreams_V1_1(cameraTest->streamInfosV1_1);
554     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
555     cameraTest->rc = cameraTest->streamOperator_V1_3->CommitStreams_V1_1(
556         static_cast<OHOS::HDI::Camera::V1_1::OperationMode_V1_1>(OHOS::HDI::Camera::V1_3::VIDEO_MACRO),
557         cameraTest->abilityVec);
558     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
559     // Update settings
560     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
561     float lensFocusDistance = DATA_COUNT;
562     meta->addEntry(OHOS_CONTROL_LENS_FOCUS_DISTANCE, &lensFocusDistance, DATA_COUNT);
563     std::vector<uint8_t> setting;
564     MetadataUtils::ConvertMetadataToVec(meta, setting);
565     cameraTest->rc = (CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
566     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
567     sleep(UT_SECOND_TIMES);
568     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
569     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
570     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
571     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
572     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
573 }
574 
575 /**
576  * @tc.name:SUB_Driver_Camera_DynamicFps_0100
577  * @tc.desc:Dynamic FPS configuration, range setting, streams fps constrain
578  * @tc.size:MediumTest
579  * @tc.type:Function
580 */
581 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_DynamicFps_0100, TestSize.Level1)
582 {
583     // PREVIEW and VIDEO stream
584     cameraTest->intents = {PREVIEW, VIDEO};
585     // This requirement only in VIDEO mode
586     cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::OperationMode::VIDEO);
587     // Bind fps range with preview stream and video stream
588     common_metadata_header_t* data = cameraTest->ability->get();
589     EXPECT_NE(data, nullptr);
590     camera_metadata_item_t entry;
591     cameraTest->rc = FindCameraMetadataItem(data, OHOS_CONTROL_FPS_RANGES, &entry);
592     // The FPS only valid in current release, non backward compatibility
593     int32_t fpsRanges[] = {1, 30};
594     bool result;
595     if (cameraTest->rc != CAM_META_SUCCESS) {
596         std::cout << "Not found TAG[OHOS_CONTROL_FPS_RANGES], insert one" << std::endl;
597         result = cameraTest->ability->addEntry(OHOS_CONTROL_FPS_RANGES,
598             fpsRanges, sizeof(fpsRanges) / sizeof(int32_t));
599         EXPECT_EQ(true, result);
600     } else {
601         std::cout << "Found TAG[OHOS_CONTROL_FPS_RANGES], Update it" << std::endl;
602         result = cameraTest->ability->updateEntry(OHOS_CONTROL_FPS_RANGES,
603             fpsRanges, sizeof(fpsRanges) / sizeof(int32_t));
604         EXPECT_EQ(true, result);
605     }
606     OHOS::Camera::MetadataUtils::ConvertMetadataToVec(cameraTest->ability, cameraTest->abilityVec);
607     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
608     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
609     // Release stream
610     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
611     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
612     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
613 }
614 
615 /**
616  * @tc.name:SUB_Driver_Camera_DynamicFps_0200
617  * @tc.desc:Dynamic FPS configuration, range setting, streams fps constrain
618  * @tc.size:MediumTest
619  * @tc.type:Function
620 */
621 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_DynamicFps_0200, TestSize.Level1)
622 {
623     // PREVIEW and VIDEO stream
624     cameraTest->intents = {PREVIEW, VIDEO};
625     // This requirement only in VIDEO mode
626     cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::OperationMode::VIDEO);
627     // Bind fps range with preview stream and video stream
628     common_metadata_header_t* data = cameraTest->ability->get();
629     EXPECT_NE(data, nullptr);
630     camera_metadata_item_t entry;
631     cameraTest->rc = FindCameraMetadataItem(data, OHOS_CONTROL_FPS_RANGES, &entry);
632     // The FPS only valid in current release, non backward compatibility
633     int32_t fpsRanges[] = {35, 60};
634     bool result;
635     if (cameraTest->rc != CAM_META_SUCCESS) {
636         std::cout << "Not found TAG[OHOS_CONTROL_FPS_RANGES], insert one" << std::endl;
637         result = cameraTest->ability->addEntry(OHOS_CONTROL_FPS_RANGES,
638             fpsRanges, sizeof(fpsRanges) / sizeof(int32_t));
639         EXPECT_EQ(true, result);
640     } else {
641         std::cout << "Found TAG[OHOS_CONTROL_FPS_RANGES], Update it" << std::endl;
642         result = cameraTest->ability->updateEntry(OHOS_CONTROL_FPS_RANGES,
643             fpsRanges, sizeof(fpsRanges) / sizeof(int32_t));
644         EXPECT_EQ(true, result);
645     }
646     OHOS::Camera::MetadataUtils::ConvertMetadataToVec(cameraTest->ability, cameraTest->abilityVec);
647     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
648     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
649     // Release stream
650     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
651     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
652     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
653 }
654 
655 /**
656 + * @tc.name:SUB_Driver_Camera_DynamicFps_0300
657 + * @tc.desc:Dynamic FPS configuration, fixed fps setting, streams fps constrain
658 + * @tc.size:MediumTest
659 + * @tc.type:Function
660 +*/
661 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_DynamicFps_0300, TestSize.Level1)
662 {
663     // PREVIEW and VIDEO stream
664     cameraTest->intents = {PREVIEW, VIDEO};
665     // This requirement only in VIDEO mode
666     cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::OperationMode::VIDEO);
667     // Bind fixed fps with preview stream and video stream, constraint
668     common_metadata_header_t* data = cameraTest->ability->get();
669     EXPECT_NE(data, nullptr);
670     camera_metadata_item_t entry;
671     cameraTest->rc = FindCameraMetadataItem(data, OHOS_CONTROL_FPS_RANGES, &entry);
672     // The FPS only valid in current release, non backward compatibility
673     int32_t previewFixedFps[] = {30, 30};
674     bool result;
675     if (cameraTest->rc != CAM_META_SUCCESS) {
676         std::cout << "Not found TAG[OHOS_CONTROL_FPS_RANGES], insert one" << std::endl;
677         result = cameraTest->ability->addEntry(OHOS_CONTROL_FPS_RANGES,
678             previewFixedFps, sizeof(previewFixedFps) / sizeof(int32_t));
679         EXPECT_EQ(true, result);
680     } else {
681         std::cout << "Found TAG[OHOS_CONTROL_FPS_RANGES], Update it" << std::endl;
682         result = cameraTest->ability->updateEntry(OHOS_CONTROL_FPS_RANGES,
683             previewFixedFps, sizeof(previewFixedFps) / sizeof(int32_t));
684         EXPECT_EQ(true, result);
685     }
686     OHOS::Camera::MetadataUtils::ConvertMetadataToVec(cameraTest->ability, cameraTest->abilityVec);
687     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
688     // Update video fixed fps, constraint relationship
689     int32_t videoFixedFps[] = {60, 60};
690     std::cout << "Update fixed fps for video capture" << std::endl;
691     result = cameraTest->ability->updateEntry(OHOS_CONTROL_FPS_RANGES,
692         videoFixedFps, sizeof(videoFixedFps) / sizeof(int32_t));
693     EXPECT_EQ(true, result);
694     OHOS::Camera::MetadataUtils::ConvertMetadataToVec(cameraTest->ability, cameraTest->abilityVec);
695     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
696     // Release stream
697     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
698     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
699     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
700 }
701 
702 /**
703 + * @tc.name:SUB_Driver_Camera_DynamicFps_0400
704 + * @tc.desc:Dynamic FPS configuration, fixed fps setting, streams fps constrain
705 + * @tc.size:MediumTest
706 + * @tc.type:Function
707 +*/
708 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_DynamicFps_0400, TestSize.Level1)
709 {
710     // PREVIEW and VIDEO stream
711     cameraTest->intents = {PREVIEW, VIDEO};
712     // This requirement only in VIDEO mode
713     cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::OperationMode::VIDEO);
714     // Bind fixed fps with preview stream and video stream, constraint
715     common_metadata_header_t* data = cameraTest->ability->get();
716     EXPECT_NE(data, nullptr);
717     camera_metadata_item_t entry;
718     cameraTest->rc = FindCameraMetadataItem(data, OHOS_CONTROL_FPS_RANGES, &entry);
719     // The FPS only valid in current release, non backward compatibility
720     int32_t previewFixedFps[] = {45, 45};
721     bool result;
722     if (cameraTest->rc != CAM_META_SUCCESS) {
723         std::cout << "Not found TAG[OHOS_CONTROL_FPS_RANGES], insert one" << std::endl;
724         result = cameraTest->ability->addEntry(OHOS_CONTROL_FPS_RANGES,
725             previewFixedFps, sizeof(previewFixedFps) / sizeof(int32_t));
726         EXPECT_EQ(true, result);
727     } else {
728         std::cout << "Found TAG[OHOS_CONTROL_FPS_RANGES], Update it" << std::endl;
729         result = cameraTest->ability->updateEntry(OHOS_CONTROL_FPS_RANGES,
730             previewFixedFps, sizeof(previewFixedFps) / sizeof(int32_t));
731         EXPECT_EQ(true, result);
732     }
733     OHOS::Camera::MetadataUtils::ConvertMetadataToVec(cameraTest->ability, cameraTest->abilityVec);
734     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
735     // Update video fixed fps, constraint relationship
736     int32_t videoFixedFps[] = {15, 15};
737     std::cout << "Update fixed fps for video capture" << std::endl;
738     result = cameraTest->ability->updateEntry(OHOS_CONTROL_FPS_RANGES,
739         videoFixedFps, sizeof(videoFixedFps) / sizeof(int32_t));
740     EXPECT_EQ(true, result);
741     OHOS::Camera::MetadataUtils::ConvertMetadataToVec(cameraTest->ability, cameraTest->abilityVec);
742     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
743     // Release stream
744     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
745     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
746 
747     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
748 }
749 
750 /**
751  * @tc.name:SUB_Driver_Camera_DynamicFps_0500
752  * @tc.desc:Dynamic FPS configuration, range setting, streams fps constrain
753  * @tc.size:MediumTest
754  * @tc.type:Function
755 */
756 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_DynamicFps_0500, TestSize.Level1)
757 {
758     // PREVIEW and VIDEO stream
759     cameraTest->intents = {PREVIEW, VIDEO};
760     // This requirement only in VIDEO mode
761     cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::OperationMode::VIDEO);
762     // Bind fps range with preview stream and video stream
763     common_metadata_header_t* data = cameraTest->ability->get();
764     EXPECT_NE(data, nullptr);
765     camera_metadata_item_t entry;
766     cameraTest->rc = FindCameraMetadataItem(data, OHOS_CONTROL_FPS_RANGES, &entry);
767     // The FPS only valid in current release, non backward compatibility
768     int32_t fpsRanges[] = {30, 30};
769     bool result;
770     if (cameraTest->rc != CAM_META_SUCCESS) {
771         std::cout << "Not found TAG[OHOS_CONTROL_FPS_RANGES], insert one" << std::endl;
772         result = cameraTest->ability->addEntry(OHOS_CONTROL_FPS_RANGES,
773             fpsRanges, sizeof(fpsRanges) / sizeof(int32_t));
774         EXPECT_EQ(true, result);
775     } else {
776         std::cout << "Found TAG[OHOS_CONTROL_FPS_RANGES], Update it" << std::endl;
777         result = cameraTest->ability->updateEntry(OHOS_CONTROL_FPS_RANGES,
778             fpsRanges, sizeof(fpsRanges) / sizeof(int32_t));
779         EXPECT_EQ(true, result);
780     }
781     OHOS::Camera::MetadataUtils::ConvertMetadataToVec(cameraTest->ability, cameraTest->abilityVec);
782     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
783     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
784     // Release stream
785     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
786     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
787     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
788 }
789 /**
790  * @tc.name: SUB_Driver_Camera_HighQuality_0200
791  * @tc.desc: OHOS_CONTROL_HIGH_QUALITY_MODE OHOS_CONTROL_HIGH_QUALITY_MODE_OFF
792  * @tc.size: MediumTest
793  * @tc.type: Function
794  */
795 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_HighQuality_0200, TestSize.Level1)
796 {
797     CAMERA_LOGI("test OHOS_CONTROL_HIGH_QUALITY_MODE_OFF start.");
798     cameraTest->streamOperatorCallbackV1_3 = new OHOS::Camera::Test::TestStreamOperatorCallbackV1_3();
799     cameraTest->rc = cameraTest->cameraDeviceV1_3->GetStreamOperator_V1_3(
800         cameraTest->streamOperatorCallbackV1_3, cameraTest->streamOperator_V1_3);
801     EXPECT_NE(cameraTest->streamOperator_V1_3, nullptr);
802 
803     cameraTest->streamInfoV1_1 = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
804     cameraTest->DefaultInfosPreview(cameraTest->streamInfoV1_1);
805     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoV1_1);
806 
807     cameraTest->streamInfoCapture = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
808     cameraTest->DefaultInfosCapture(cameraTest->streamInfoCapture);
809     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoCapture);
810 
811     std::shared_ptr<CameraSetting> modeSetting = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
812     uint8_t movingPhoto = static_cast<uint8_t>(OHOS_CONTROL_HIGH_QUALITY_MODE_OFF);
813     modeSetting->addEntry(OHOS_CONTROL_HIGH_QUALITY_MODE, &movingPhoto, 1);
814     std::vector<uint8_t> metaVec;
815     MetadataUtils::ConvertMetadataToVec(modeSetting, metaVec);
816     cameraTest->cameraDeviceV1_3->UpdateSettings(metaVec);
817 
818     cameraTest->rc = cameraTest->streamOperator_V1_3->CreateStreams_V1_1(cameraTest->streamInfosV1_1);
819     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
820     cameraTest->rc = cameraTest->streamOperator_V1_3->CommitStreams(OperationMode::NORMAL, cameraTest->abilityVec);
821     EXPECT_EQ(cameraTest->rc, HDI::Camera::V1_0::NO_ERROR);
822 
823     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
824     cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
825     cameraTest->captureIds = {cameraTest->captureIdPreview};
826     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
827     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
828 }
829 
830 /**
831  * @tc.name: SUB_Driver_Camera_HighQuality_0300
832  * @tc.desc: OHOS_CONTROL_HIGH_QUALITY_MODE OHOS_CONTROL_HIGH_QUALITY_MODE_ON
833  * @tc.size: MediumTest
834  * @tc.type: Function
835  */
836 HWTEST_F(CameraHdiTestV1_3, SUB_Driver_Camera_HighQuality_0300, TestSize.Level1)
837 {
838     CAMERA_LOGI("test OHOS_CONTROL_HIGH_QUALITY_MODE_ON start.");
839     cameraTest->streamOperatorCallbackV1_3 = new OHOS::Camera::Test::TestStreamOperatorCallbackV1_3();
840     cameraTest->rc = cameraTest->cameraDeviceV1_3->GetStreamOperator_V1_3(
841         cameraTest->streamOperatorCallbackV1_3, cameraTest->streamOperator_V1_3);
842     EXPECT_NE(cameraTest->streamOperator_V1_3, nullptr);
843 
844     cameraTest->streamInfoV1_1 = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
845     cameraTest->DefaultInfosPreview(cameraTest->streamInfoV1_1);
846     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoV1_1);
847 
848     cameraTest->streamInfoCapture = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
849     cameraTest->DefaultInfosCapture(cameraTest->streamInfoCapture);
850     cameraTest->streamInfosV1_1.push_back(*cameraTest->streamInfoCapture);
851 
852     std::shared_ptr<CameraSetting> modeSetting = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
853     uint8_t movingPhoto = static_cast<uint8_t>(OHOS_CONTROL_HIGH_QUALITY_MODE_ON);
854     modeSetting->addEntry(OHOS_CONTROL_HIGH_QUALITY_MODE, &movingPhoto, 1);
855     std::vector<uint8_t> metaVec;
856     MetadataUtils::ConvertMetadataToVec(modeSetting, metaVec);
857     cameraTest->cameraDeviceV1_3->UpdateSettings(metaVec);
858 
859     cameraTest->rc = cameraTest->streamOperator_V1_3->CreateStreams_V1_1(cameraTest->streamInfosV1_1);
860     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
861     cameraTest->rc = cameraTest->streamOperator_V1_3->CommitStreams(OperationMode::NORMAL, cameraTest->abilityVec);
862     EXPECT_EQ(cameraTest->rc, HDI::Camera::V1_0::NO_ERROR);
863 
864     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
865     cameraTest->StartCapture(cameraTest->streamIdCapture, cameraTest->captureIdCapture, false, false);
866     cameraTest->captureIds = {cameraTest->captureIdPreview};
867     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdCapture};
868     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
869 }
870 
871 /**
872  * @tc.name:SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_RANGE_TYPE_0100
873  * @tc.desc: test TAG OHOS_ABILITY_FOCUS_RANGE_TYPES and OHOS_CONTROL_FOCUS_RANGE_TYPE
874  * @tc.size:MediumTest
875  * @tc.type:Function
876 */
877 HWTEST_F(CameraHdiTestV1_3, SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_RANGE_TYPE_0100, TestSize.Level1)
878 {
879     cameraTest->Close();
880     cameraTest->Open(DEVICE_1); // front camera
881     ASSERT_NE(cameraTest->ability, nullptr);
882     common_metadata_header_t* data = cameraTest->ability->get();
883     ASSERT_NE(data, nullptr);
884     camera_metadata_item_t entry;
885     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_FOCUS_RANGE_TYPES, &entry);
886     if (cameraTest->rc != CAM_META_SUCCESS || entry.count == 0) {
887         CAMERA_LOGE("OHOS_ABILITY_FOCUS_RANGE_TYPES is not supported");
888         return;
889     }
890     for (int i = 0; i < entry.count; i++) {
891         if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_RANGE_NEAR) {
892             CAMERA_LOGI("focus range type OHOS_CAMERA_FOCUS_RANGE_NEAR is supported");
893         } else if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_RANGE_AUTO) {
894             CAMERA_LOGI("focus range type OHOS_CAMERA_FOCUS_RANGE_AUTO is supported");
895         } else {
896             CAMERA_LOGE("focus range type is not supported");
897             return;
898         }
899     }
900     camera_metadata_item_t item;
901     bool status = false;
902     uint8_t metaFocusRangeType = static_cast<uint8_t>(OHOS_CAMERA_FOCUS_RANGE_NEAR);
903     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_RANGE_TYPE, &item);
904     if (ret == CAM_META_ITEM_NOT_FOUND) {
905         status = cameraTest->ability->addEntry(OHOS_CONTROL_FOCUS_RANGE_TYPE, &metaFocusRangeType, DATA_COUNT);
906         CAMERA_LOGI("add OHOS_CAMERA_FOCUS_RANGE_NEAR to ability");
907     } else if (ret == CAM_META_SUCCESS) {
908         status = cameraTest->ability->updateEntry(OHOS_CONTROL_FOCUS_RANGE_TYPE, &metaFocusRangeType, DATA_COUNT);
909         CAMERA_LOGI("update OHOS_CAMERA_FOCUS_RANGE_NEAR to ability");
910     }
911     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
912     std::vector<uint8_t> setting;
913     uint8_t nearType = 1;
914     meta->addEntry(OHOS_CONTROL_FOCUS_RANGE_TYPE, &nearType, DATA_COUNT);
915     MetadataUtils::ConvertMetadataToVec(meta, setting);
916     cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
917     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
918     CAMERA_LOGI("first: update settings success");
919     ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_RANGE_TYPE, &item);
920     EXPECT_EQ(ret, CAM_META_SUCCESS);
921     EXPECT_TRUE(item.data.u8[0] == OHOS_CAMERA_FOCUS_RANGE_NEAR);
922 }
923 
924 /**
925  * @tc.name:SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_RANGE_TYPE_0200
926  * @tc.desc: test TAG OHOS_ABILITY_FOCUS_RANGE_TYPES and OHOS_CONTROL_FOCUS_RANGE_TYPE
927  * @tc.size:MediumTest
928  * @tc.type:Function
929 */
930 HWTEST_F(CameraHdiTestV1_3, SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_RANGE_TYPE_0200, TestSize.Level1)
931 {
932     cameraTest->Close();
933     cameraTest->Open(DEVICE_1); // front camera
934     ASSERT_NE(cameraTest->ability, nullptr);
935     common_metadata_header_t* data = cameraTest->ability->get();
936     ASSERT_NE(data, nullptr);
937     camera_metadata_item_t entry;
938     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_FOCUS_RANGE_TYPES, &entry);
939     if (cameraTest->rc != CAM_META_SUCCESS || entry.count == 0) {
940         CAMERA_LOGE("OHOS_ABILITY_FOCUS_RANGE_TYPES is not supported");
941         return;
942     }
943     for (int i = 0; i < entry.count; i++) {
944         if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_RANGE_NEAR) {
945             CAMERA_LOGI("focus range type OHOS_CAMERA_FOCUS_RANGE_NEAR is supported");
946         } else if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_RANGE_AUTO) {
947             CAMERA_LOGI("focus range type OHOS_CAMERA_FOCUS_RANGE_AUTO is supported");
948         } else {
949             CAMERA_LOGE("focus range type is not supported");
950             return;
951         }
952     }
953     camera_metadata_item_t item;
954     bool status = false;
955     std::vector<uint8_t> setting;
956     uint8_t metaFocusRangeType = static_cast<uint8_t>(OHOS_CAMERA_FOCUS_RANGE_AUTO);
957     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_RANGE_TYPE, &item);
958     if (ret == CAM_META_ITEM_NOT_FOUND) {
959         status = cameraTest->ability->addEntry(OHOS_CONTROL_FOCUS_RANGE_TYPE, &metaFocusRangeType, DATA_COUNT);
960         CAMERA_LOGI("add OHOS_CAMERA_FOCUS_RANGE_AUTO to ability");
961     } else if (ret == CAM_META_SUCCESS) {
962         status = cameraTest->ability->updateEntry(OHOS_CONTROL_FOCUS_RANGE_TYPE, &metaFocusRangeType, DATA_COUNT);
963         CAMERA_LOGI("update OHOS_CAMERA_FOCUS_RANGE_AUTO to ability");
964     }
965     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
966     uint8_t autoType = 0;
967     meta->addEntry(OHOS_CONTROL_FOCUS_RANGE_TYPE, &autoType, DATA_COUNT);
968     MetadataUtils::ConvertMetadataToVec(meta, setting);
969     cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
970     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
971     CAMERA_LOGI("second: update settings success");
972     ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_RANGE_TYPE, &item);
973     EXPECT_EQ(ret, CAM_META_SUCCESS);
974     EXPECT_TRUE(item.data.u8[0] == OHOS_CAMERA_FOCUS_RANGE_AUTO);
975 }
976 
977 /**
978  * @tc.name:SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_DRIVEN_TYPE_0100
979  * @tc.desc: test TAG OHOS_ABILITY_FOCUS_DRIVEN_TYPES and OHOS_CONTROL_FOCUS_DRIVEN_TYPE
980  * @tc.size:MediumTest
981  * @tc.type:Function
982 */
983 HWTEST_F(CameraHdiTestV1_3, SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_DRIVEN_TYPE_0100, TestSize.Level1)
984 {
985     ASSERT_NE(cameraTest->ability, nullptr);
986     common_metadata_header_t* data = cameraTest->ability->get();
987     ASSERT_NE(data, nullptr);
988     camera_metadata_item_t entry;
989     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_FOCUS_DRIVEN_TYPES, &entry);
990     if (cameraTest->rc != CAM_META_SUCCESS || entry.count == 0) {
991         CAMERA_LOGE("OHOS_ABILITY_FOCUS_DRIVEN_TYPES is not supported");
992         return;
993     }
994     for (int i = 0; i < entry.count; i++) {
995         if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_DRIVEN_FACE) {
996             CAMERA_LOGI("focus driven type OHOS_CAMERA_FOCUS_DRIVEN_FACE is supported");
997         } else if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_DRIVEN_AUTO) {
998             CAMERA_LOGI("focus driven type OHOS_CAMERA_FOCUS_DRIVEN_AUTO is supported");
999         } else {
1000             CAMERA_LOGE("focus driven type is not supported");
1001             return;
1002         }
1003     }
1004     camera_metadata_item_t item;
1005     bool status = false;
1006     uint8_t metaFocusDrivenType = static_cast<uint8_t>(OHOS_CAMERA_FOCUS_DRIVEN_FACE);
1007     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &item);
1008     if (ret == CAM_META_ITEM_NOT_FOUND) {
1009         status = cameraTest->ability->addEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &metaFocusDrivenType, DATA_COUNT);
1010         CAMERA_LOGI("add OHOS_CAMERA_FOCUS_DRIVEN_FACE to ability");
1011     } else if (ret == CAM_META_SUCCESS) {
1012         status = cameraTest->ability->updateEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &metaFocusDrivenType, DATA_COUNT);
1013         CAMERA_LOGI("update OHOS_CAMERA_FOCUS_DRIVEN_FACE to ability");
1014     }
1015     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1016     std::vector<uint8_t> setting;
1017     uint8_t faceType = 1;
1018     meta->addEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &faceType, DATA_COUNT);
1019     MetadataUtils::ConvertMetadataToVec(meta, setting);
1020     cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
1021     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
1022     CAMERA_LOGI("first: update settings success");
1023     ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &item);
1024     EXPECT_EQ(ret, CAM_META_SUCCESS);
1025     EXPECT_TRUE(item.data.u8[0] == OHOS_CAMERA_FOCUS_DRIVEN_FACE);
1026 }
1027 
1028 /**
1029  * @tc.name:SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_DRIVEN_TYPE_0200
1030  * @tc.desc: test TAG OHOS_ABILITY_FOCUS_DRIVEN_TYPES and OHOS_CONTROL_FOCUS_DRIVEN_TYPE
1031  * @tc.size:MediumTest
1032  * @tc.type:Function
1033 */
1034 HWTEST_F(CameraHdiTestV1_3, SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_FOCUS_DRIVEN_TYPE_0200, TestSize.Level1)
1035 {
1036     ASSERT_NE(cameraTest->ability, nullptr);
1037     common_metadata_header_t* data = cameraTest->ability->get();
1038     ASSERT_NE(data, nullptr);
1039     camera_metadata_item_t entry;
1040     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_FOCUS_DRIVEN_TYPES, &entry);
1041     if (cameraTest->rc != CAM_META_SUCCESS || entry.count == 0) {
1042         CAMERA_LOGE("OHOS_ABILITY_FOCUS_DRIVEN_TYPES is not supported");
1043         return;
1044     }
1045     for (int i = 0; i < entry.count; i++) {
1046         if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_DRIVEN_FACE) {
1047             CAMERA_LOGI("focus driven type OHOS_CAMERA_FOCUS_DRIVEN_FACE is supported");
1048         } else if (entry.data.u8[i] == OHOS_CAMERA_FOCUS_DRIVEN_AUTO) {
1049             CAMERA_LOGI("focus driven type OHOS_CAMERA_FOCUS_DRIVEN_AUTO is supported");
1050         } else {
1051             CAMERA_LOGE("focus driven type is not supported");
1052             return;
1053         }
1054     }
1055     camera_metadata_item_t item;
1056     bool status = false;
1057     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1058     std::vector<uint8_t> setting;
1059     uint8_t metaFocusDrivenType = static_cast<uint8_t>(OHOS_CAMERA_FOCUS_DRIVEN_AUTO);
1060     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &item);
1061     if (ret == CAM_META_ITEM_NOT_FOUND) {
1062         status = cameraTest->ability->addEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &metaFocusDrivenType, DATA_COUNT);
1063         CAMERA_LOGI("add OHOS_CAMERA_FOCUS_DRIVEN_AUTO to ability");
1064     } else if (ret == CAM_META_SUCCESS) {
1065         status = cameraTest->ability->updateEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &metaFocusDrivenType, DATA_COUNT);
1066         CAMERA_LOGI("update OHOS_CAMERA_FOCUS_DRIVEN_AUTO to ability");
1067     }
1068     meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1069     uint8_t autoType = 0;
1070     meta->addEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &autoType, DATA_COUNT);
1071     MetadataUtils::ConvertMetadataToVec(meta, setting);
1072     cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
1073     EXPECT_EQ(HDI::Camera::V1_0::NO_ERROR, cameraTest->rc);
1074     CAMERA_LOGI("second: update settings success");
1075     ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &item);
1076     EXPECT_EQ(ret, CAM_META_SUCCESS);
1077     EXPECT_TRUE(item.data.u8[0] == OHOS_CAMERA_FOCUS_DRIVEN_AUTO);
1078 }
1079 
SetFocusDrivenType(common_metadata_header_t * data,camera_focus_driven_type_t type,std::shared_ptr<OHOS::Camera::CameraSetting> & meta,std::vector<uint8_t> & setting)1080 bool CameraHdiTestV1_3::SetFocusDrivenType(common_metadata_header_t* data, camera_focus_driven_type_t type,
1081     std::shared_ptr<OHOS::Camera::CameraSetting>& meta, std::vector<uint8_t>& setting)
1082 {
1083     bool result = false;
1084     camera_metadata_item_t entry;
1085     cameraTest->rc = FindCameraMetadataItem(data, OHOS_ABILITY_FOCUS_DRIVEN_TYPES, &entry);
1086     if (cameraTest->rc != CAM_META_SUCCESS || entry.count == 0) {
1087         CAMERA_LOGE("OHOS_ABILITY_FOCUS_DRIVEN_TYPES is not supported");
1088         return result;
1089     }
1090     for (int i = 0; i < entry.count; i++) {
1091         if (entry.data.u8[i] == type) {
1092             result = true;
1093             break;
1094         }
1095     }
1096     if (result == false) {
1097         return result;
1098     }
1099     camera_metadata_item_t item;
1100     bool status = false;
1101     uint8_t metaFocusDrivenType = static_cast<uint8_t>(type);
1102     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &item);
1103     if (ret == CAM_META_ITEM_NOT_FOUND) {
1104         status = cameraTest->ability->addEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &metaFocusDrivenType, DATA_COUNT);
1105     } else if (ret == CAM_META_SUCCESS) {
1106         status = cameraTest->ability->updateEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &metaFocusDrivenType, DATA_COUNT);
1107     }
1108     meta->addEntry(OHOS_CONTROL_FOCUS_DRIVEN_TYPE, &metaFocusDrivenType, DATA_COUNT);
1109     MetadataUtils::ConvertMetadataToVec(meta, setting);
1110     cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->cameraDeviceV1_3->UpdateSettings(setting);
1111     cameraTest->rc == HDI::Camera::V1_0::NO_ERROR ? result = true : result = false;
1112     return result;
1113 }
1114 
FindFocusTrackingResult(common_metadata_header_t * streamData)1115 void FindFocusTrackingResult(common_metadata_header_t* streamData)
1116 {
1117     camera_metadata_item_t modeEntry;
1118     int32_t rc = FindCameraMetadataItem(streamData, OHOS_CONTROL_FOCUS_TRACKING_MODE, &modeEntry);
1119     if (rc == HDI::Camera::V1_0::NO_ERROR) {
1120         if (modeEntry.data.u8 != nullptr && modeEntry.count > 0) {
1121             CAMERA_LOGI("FindDetectResult human face result");
1122         }
1123     }
1124     camera_metadata_item_t rectEntry;
1125     rc = FindCameraMetadataItem(streamData, OHOS_ABILITY_FOCUS_TRACKING_REGION, &rectEntry);
1126     if (rc == HDI::Camera::V1_0::NO_ERROR) {
1127         if (rectEntry.data.i32 != nullptr && rectEntry.count > 0) {
1128             CAMERA_LOGI("FindDetectResult human body result");
1129         }
1130     }
1131 }
1132 
1133 /**
1134  * @tc.name:SUB_MULTIMEDIA_CAMERA_OHOS_FOCUS_TRACKING_0100
1135  * @tc.desc: test TAG OHOS_ABILITY_FOCUS_TRACKING_REGION and OHOS_CONTROL_FOCUS_TRACKING_MODE
1136  * @tc.size:MediumTest
1137  * @tc.type:Function
1138 */
1139 HWTEST_F(CameraHdiTestV1_3, SUB_MULTIMEDIA_CAMERA_OHOS_FOCUS_TRACKING_0100, TestSize.Level1)
1140 {
1141     ASSERT_NE(cameraTest->ability, nullptr);
1142     common_metadata_header_t* data = cameraTest->ability->get();
1143     ASSERT_NE(data, nullptr);
1144     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1145     std::vector<uint8_t> setting;
1146     bool result = SetFocusDrivenType(data, OHOS_CAMERA_FOCUS_DRIVEN_FACE, meta, setting);
1147     if (result == false) {
1148         CAMERA_LOGE("SetFocusDrivenType failed");
1149         return;
1150     }
1151     cameraTest->intents = {PREVIEW, StreamIntent::VIDEO};
1152     cameraTest->StartStream(cameraTest->intents, OHOS::HDI::Camera::V1_3::VIDEO);
1153     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
1154     cameraTest->StartCapture(cameraTest->streamIdVideo, cameraTest->captureIdVideo, false, true);
1155     cameraTest->rc = (OHOS::HDI::Camera::V1_0::CamRetCode)cameraTest->streamOperator_V1_3->EnableResult(
1156         cameraTest->streamIdVideo, setting);
1157     if (cameraTest->rc != HDI::Camera::V1_0::NO_ERROR) {
1158         return;
1159     }
1160     sleep(UT_SECOND_TIMES);
1161     if (cameraTest->streamOperatorCallbackV1_3->streamResultMeta == nullptr) {
1162         CAMERA_LOGI("onresult not be invoked.");
1163         return;
1164     }
1165     common_metadata_header_t* streamData = cameraTest->streamOperatorCallbackV1_3->streamResultMeta->get();
1166     FindFocusTrackingResult(streamData);
1167     cameraTest->captureIds = {cameraTest->captureIdPreview, cameraTest->captureIdVideo};
1168     cameraTest->streamIds = {cameraTest->streamIdPreview, cameraTest->streamIdVideo};
1169     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
1170 }
1171 
1172 /**
1173  * @tc.name:SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_COLOR_RESERVATION_TYPE_0100
1174  * @tc.desc: test TAG OHOS_ABILITY_COLOR_RESERVATION_TYPES and OHOS_CONTROL_COLOR_RESERVATION_TYPE
1175  * @tc.size:MediumTest
1176  * @tc.type:Function
1177 */
1178 HWTEST_F(CameraHdiTestV1_3, SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_COLOR_RESERVATION_TYPE_0100, TestSize.Level1)
1179 {
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_COLOR_RESERVATION_TYPES, &entry);
1185     if (cameraTest->rc != CAM_META_SUCCESS || entry.count == 0) {
1186         CAMERA_LOGE("OHOS_ABILITY_COLOR_RESERVATION_TYPES is not supported");
1187         return;
1188     }
1189     for (int i = 0; i < entry.count; i++) {
1190         if (entry.data.u8[i] == OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT) {
1191             CAMERA_LOGI("color reservation type OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT is supported");
1192         } else if (entry.data.u8[i] == OHOS_CAMERA_COLOR_RESERVATION_NONE) {
1193             CAMERA_LOGI("color reservation type OHOS_CAMERA_COLOR_RESERVATION_NONE is supported");
1194         } else {
1195             CAMERA_LOGE("color reservation type is not supported");
1196             return;
1197         }
1198     }
1199     camera_metadata_item_t item;
1200     bool status = false;
1201     uint8_t metacolorType = static_cast<uint8_t>(OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT);
1202     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_COLOR_RESERVATION_TYPE, &item);
1203     if (ret == CAM_META_ITEM_NOT_FOUND) {
1204         status = cameraTest->ability->addEntry(OHOS_CONTROL_COLOR_RESERVATION_TYPE, &metacolorType, DATA_COUNT);
1205         CAMERA_LOGI("add OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT to ability");
1206     } else if (ret == CAM_META_SUCCESS) {
1207         status = cameraTest->ability->updateEntry(OHOS_CONTROL_COLOR_RESERVATION_TYPE, &metacolorType, DATA_COUNT);
1208         CAMERA_LOGI("update OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT to ability");
1209     }
1210     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(ITEM_CAPACITY, DATA_CAPACITY);
1211     std::vector<uint8_t> setting;
1212     uint8_t portraitType = 1;
1213     meta->addEntry(OHOS_CONTROL_COLOR_RESERVATION_TYPE, &portraitType, 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("first: update settings success");
1218     ret = FindCameraMetadataItem(data, OHOS_CONTROL_COLOR_RESERVATION_TYPE, &item);
1219     EXPECT_EQ(ret, CAM_META_SUCCESS);
1220     EXPECT_TRUE(item.data.u8[0] == OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT);
1221 }
1222 
1223 /**
1224  * @tc.name:SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_COLOR_RESERVATION_TYPE_0200
1225  * @tc.desc: test TAG OHOS_ABILITY_COLOR_RESERVATION_TYPES and OHOS_CONTROL_COLOR_RESERVATION_TYPE
1226  * @tc.size:MediumTest
1227  * @tc.type:Function
1228 */
1229 HWTEST_F(CameraHdiTestV1_3, SUB_MULTIMEDIA_CAMERA_OHOS_CONTROL_COLOR_RESERVATION_TYPE_0200, 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_COLOR_RESERVATION_TYPES, &entry);
1236     if (cameraTest->rc != CAM_META_SUCCESS || entry.count == 0) {
1237         CAMERA_LOGE("OHOS_ABILITY_COLOR_RESERVATION_TYPES is not supported");
1238         return;
1239     }
1240     for (int i = 0; i < entry.count; i++) {
1241         if (entry.data.u8[i] == OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT) {
1242             CAMERA_LOGI("color reservation type OHOS_CAMERA_COLOR_RESERVATION_PORTRAIT is supported");
1243         } else if (entry.data.u8[i] == OHOS_CAMERA_COLOR_RESERVATION_NONE) {
1244             CAMERA_LOGI("color reservation type OHOS_CAMERA_COLOR_RESERVATION_NONE is supported");
1245         } else {
1246             CAMERA_LOGE("color reservation type is not supported");
1247             return;
1248         }
1249     }
1250     camera_metadata_item_t item;
1251     bool status = false;
1252     uint8_t metacolorType = static_cast<uint8_t>(OHOS_CAMERA_COLOR_RESERVATION_NONE);
1253     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_COLOR_RESERVATION_TYPE, &item);
1254     if (ret == CAM_META_ITEM_NOT_FOUND) {
1255         status = cameraTest->ability->addEntry(OHOS_CONTROL_COLOR_RESERVATION_TYPE, &metacolorType, DATA_COUNT);
1256         CAMERA_LOGI("add OHOS_CAMERA_COLOR_RESERVATION_NONE to ability");
1257     } else if (ret == CAM_META_SUCCESS) {
1258         status = cameraTest->ability->updateEntry(OHOS_CONTROL_COLOR_RESERVATION_TYPE, &metacolorType, DATA_COUNT);
1259         CAMERA_LOGI("update OHOS_CAMERA_COLOR_RESERVATION_NONE 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 noneType = 0;
1264     meta->addEntry(OHOS_CONTROL_COLOR_RESERVATION_TYPE, &noneType, 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("second: update settings success");
1269     ret = FindCameraMetadataItem(data, OHOS_CONTROL_COLOR_RESERVATION_TYPE, &item);
1270     EXPECT_EQ(ret, CAM_META_SUCCESS);
1271     EXPECT_TRUE(item.data.u8[0] == OHOS_CAMERA_COLOR_RESERVATION_NONE);
1272 }