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