1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci
16094332d3Sopenharmony_ci#include "usb_camera_3a_test.h"
17094332d3Sopenharmony_ci
18094332d3Sopenharmony_ciconst TestMetadata CAMERA_3A_TEST_SETS[] = {
19094332d3Sopenharmony_ci    // test OHOS_CONTROL_EXPOSURE_MODE
20094332d3Sopenharmony_ci    {
21094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_EXPOSURE_MODE,
22094332d3Sopenharmony_ci        .value = OHOS_CAMERA_EXPOSURE_MODE_MANUAL
23094332d3Sopenharmony_ci    },
24094332d3Sopenharmony_ci    {
25094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_EXPOSURE_MODE,
26094332d3Sopenharmony_ci        .value = OHOS_CAMERA_EXPOSURE_MODE_CONTINUOUS_AUTO
27094332d3Sopenharmony_ci    },
28094332d3Sopenharmony_ci    {
29094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_EXPOSURE_MODE,
30094332d3Sopenharmony_ci        .value = OHOS_CAMERA_EXPOSURE_MODE_AUTO
31094332d3Sopenharmony_ci    },
32094332d3Sopenharmony_ci    // test OHOS_CONTROL_AE_LOCK
33094332d3Sopenharmony_ci    {
34094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_AE_LOCK,
35094332d3Sopenharmony_ci        .value = OHOS_CAMERA_AE_LOCK_ON
36094332d3Sopenharmony_ci    },
37094332d3Sopenharmony_ci    {
38094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_AE_LOCK,
39094332d3Sopenharmony_ci        .value = OHOS_CAMERA_AE_LOCK_OFF
40094332d3Sopenharmony_ci    },
41094332d3Sopenharmony_ci
42094332d3Sopenharmony_ci    // test OHOS_CONTROL_FOCUS_MODE
43094332d3Sopenharmony_ci    {
44094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_FOCUS_MODE,
45094332d3Sopenharmony_ci        .value = OHOS_CAMERA_FOCUS_MODE_CONTINUOUS_AUTO
46094332d3Sopenharmony_ci    },
47094332d3Sopenharmony_ci    {
48094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_FOCUS_MODE,
49094332d3Sopenharmony_ci        .value = OHOS_CAMERA_FOCUS_MODE_MANUAL
50094332d3Sopenharmony_ci    },
51094332d3Sopenharmony_ci    {
52094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_FOCUS_MODE,
53094332d3Sopenharmony_ci        .value = OHOS_CAMERA_FOCUS_MODE_AUTO
54094332d3Sopenharmony_ci    },
55094332d3Sopenharmony_ci    {
56094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_FOCUS_MODE,
57094332d3Sopenharmony_ci        .value = OHOS_CAMERA_FOCUS_MODE_LOCKED
58094332d3Sopenharmony_ci    },
59094332d3Sopenharmony_ci    // test OHOS_CONTROL_METER_MODE
60094332d3Sopenharmony_ci    {
61094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_METER_MODE,
62094332d3Sopenharmony_ci        .value = OHOS_CAMERA_SPOT_METERING
63094332d3Sopenharmony_ci    },
64094332d3Sopenharmony_ci    {
65094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_METER_MODE,
66094332d3Sopenharmony_ci        .value = OHOS_CAMERA_OVERALL_METERING
67094332d3Sopenharmony_ci    },
68094332d3Sopenharmony_ci
69094332d3Sopenharmony_ci    // test OHOS_CONTROL_AWB_MODE
70094332d3Sopenharmony_ci    {
71094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_AWB_MODE,
72094332d3Sopenharmony_ci        .value = OHOS_CAMERA_AWB_MODE_AUTO
73094332d3Sopenharmony_ci    },
74094332d3Sopenharmony_ci    {
75094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_AWB_MODE,
76094332d3Sopenharmony_ci        .value = OHOS_CAMERA_AWB_MODE_OFF
77094332d3Sopenharmony_ci    },
78094332d3Sopenharmony_ci    {
79094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_AWB_MODE,
80094332d3Sopenharmony_ci        .value = OHOS_CAMERA_AWB_MODE_INCANDESCENT
81094332d3Sopenharmony_ci    },
82094332d3Sopenharmony_ci    {
83094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_AWB_MODE,
84094332d3Sopenharmony_ci        .value = OHOS_CAMERA_AWB_MODE_FLUORESCENT
85094332d3Sopenharmony_ci    },
86094332d3Sopenharmony_ci    {
87094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_AWB_MODE,
88094332d3Sopenharmony_ci        .value = OHOS_CAMERA_AWB_MODE_WARM_FLUORESCENT
89094332d3Sopenharmony_ci    },
90094332d3Sopenharmony_ci    {
91094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_AWB_MODE,
92094332d3Sopenharmony_ci        .value = OHOS_CAMERA_AWB_MODE_TWILIGHT
93094332d3Sopenharmony_ci    },
94094332d3Sopenharmony_ci    {
95094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_AWB_MODE,
96094332d3Sopenharmony_ci        .value = OHOS_CAMERA_AWB_MODE_DAYLIGHT
97094332d3Sopenharmony_ci    },
98094332d3Sopenharmony_ci    {
99094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_AWB_MODE,
100094332d3Sopenharmony_ci        .value = OHOS_CAMERA_AWB_MODE_CLOUDY_DAYLIGHT
101094332d3Sopenharmony_ci    },
102094332d3Sopenharmony_ci    {
103094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_AWB_MODE,
104094332d3Sopenharmony_ci        .value = OHOS_CAMERA_AWB_MODE_SHADE
105094332d3Sopenharmony_ci    },
106094332d3Sopenharmony_ci
107094332d3Sopenharmony_ci    // test OHOS_CONTROL_AWB_LOCK
108094332d3Sopenharmony_ci    {
109094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_AWB_LOCK,
110094332d3Sopenharmony_ci        .value = OHOS_CAMERA_AWB_LOCK_ON
111094332d3Sopenharmony_ci    },
112094332d3Sopenharmony_ci    {
113094332d3Sopenharmony_ci        .tag =OHOS_CONTROL_AWB_LOCK,
114094332d3Sopenharmony_ci        .value = OHOS_CAMERA_AWB_LOCK_OFF
115094332d3Sopenharmony_ci    }
116094332d3Sopenharmony_ci};
117094332d3Sopenharmony_ci
118094332d3Sopenharmony_civoid UtestUSBCamera3ATest::SetUpTestCase(void)
119094332d3Sopenharmony_ci{}
120094332d3Sopenharmony_ci
121094332d3Sopenharmony_civoid UtestUSBCamera3ATest::TearDownTestCase(void)
122094332d3Sopenharmony_ci{}
123094332d3Sopenharmony_ci
124094332d3Sopenharmony_civoid UtestUSBCamera3ATest::SetUp(void)
125094332d3Sopenharmony_ci{
126094332d3Sopenharmony_ci    if (cameraBase_ == nullptr)
127094332d3Sopenharmony_ci    cameraBase_ = std::make_shared<TestCameraBase>();
128094332d3Sopenharmony_ci    cameraBase_->UsbInit();
129094332d3Sopenharmony_ci}
130094332d3Sopenharmony_ci
131094332d3Sopenharmony_civoid UtestUSBCamera3ATest::TearDown(void)
132094332d3Sopenharmony_ci{
133094332d3Sopenharmony_ci    cameraBase_->Close();
134094332d3Sopenharmony_ci}
135094332d3Sopenharmony_ci
136094332d3Sopenharmony_cibool UtestUSBCamera3ATest::RunCamera3AWithCapture(TestMetadata& metadata)
137094332d3Sopenharmony_ci{
138094332d3Sopenharmony_ci    // Get the device manager
139094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
140094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
141094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
142094332d3Sopenharmony_ci
143094332d3Sopenharmony_ci    // Get the stream manager
144094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
145094332d3Sopenharmony_ci
146094332d3Sopenharmony_ci    // start stream
147094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
148094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
149094332d3Sopenharmony_ci
150094332d3Sopenharmony_ci    // updateSettings
151094332d3Sopenharmony_ci    const uint32_t itemCapacity = 100;
152094332d3Sopenharmony_ci    const uint32_t dataCapacity = 2000;
153094332d3Sopenharmony_ci    std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(
154094332d3Sopenharmony_ci        itemCapacity, dataCapacity);
155094332d3Sopenharmony_ci
156094332d3Sopenharmony_ci    int ohosTag = metadata.tag;
157094332d3Sopenharmony_ci    const uint8_t tagVal = metadata.value;
158094332d3Sopenharmony_ci    if (!meta->addEntry(ohosTag, &tagVal, 1)) {
159094332d3Sopenharmony_ci        std::cout << GetCameraMetadataItemName(ohosTag) << " tag(" << ohosTag << ") value(" <<
160094332d3Sopenharmony_ci            static_cast<int>(tagVal) << ") add failed" << std::endl;
161094332d3Sopenharmony_ci        return false;
162094332d3Sopenharmony_ci    }
163094332d3Sopenharmony_ci    std::cout << GetCameraMetadataItemName(ohosTag) << " tag(" << ohosTag << ") value(" << static_cast<int>(tagVal) <<
164094332d3Sopenharmony_ci        ") add succesed" << std::endl;
165094332d3Sopenharmony_ci    const int32_t deviceStreamId = 0;
166094332d3Sopenharmony_ci    meta->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, 1);
167094332d3Sopenharmony_ci    std::vector<uint8_t> setting;
168094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(meta, setting);
169094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->cameraDevice->UpdateSettings(setting);
170094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
171094332d3Sopenharmony_ci        std::cout << "UpdateSettings (" << ohosTag << ")" << " success" << std::endl;
172094332d3Sopenharmony_ci    } else {
173094332d3Sopenharmony_ci        std::cout << "UpdateSettings (" << ohosTag << ")" << " fail" << std::endl;
174094332d3Sopenharmony_ci        return false;
175094332d3Sopenharmony_ci    }
176094332d3Sopenharmony_ci
177094332d3Sopenharmony_ci    // Get preview
178094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
179094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
180094332d3Sopenharmony_ci    // release stream
181094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
182094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
183094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
184094332d3Sopenharmony_ci    return cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR;
185094332d3Sopenharmony_ci}
186094332d3Sopenharmony_ci
187094332d3Sopenharmony_cibool UtestUSBCamera3ATest::RunCamera3AWithVideo(TestMetadata& metadata)
188094332d3Sopenharmony_ci{
189094332d3Sopenharmony_ci    // Get the device manager
190094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
191094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
192094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
193094332d3Sopenharmony_ci
194094332d3Sopenharmony_ci    // Get the stream manager
195094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
196094332d3Sopenharmony_ci
197094332d3Sopenharmony_ci    // start stream
198094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, VIDEO};
199094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
200094332d3Sopenharmony_ci
201094332d3Sopenharmony_ci    // updateSettings
202094332d3Sopenharmony_ci    const uint32_t itemCapacity = 100;
203094332d3Sopenharmony_ci    const uint32_t dataCapacity = 2000;
204094332d3Sopenharmony_ci    std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(
205094332d3Sopenharmony_ci        itemCapacity, dataCapacity);
206094332d3Sopenharmony_ci
207094332d3Sopenharmony_ci    int ohosTag = metadata.tag;
208094332d3Sopenharmony_ci    const uint8_t tagVal = metadata.value;
209094332d3Sopenharmony_ci    if (!meta->addEntry(ohosTag, &tagVal, 1)) {
210094332d3Sopenharmony_ci        std::cout << GetCameraMetadataItemName(ohosTag) << "tag(" << ohosTag << ") value(" <<
211094332d3Sopenharmony_ci            static_cast<int>(tagVal) << ") add failed" << std::endl;
212094332d3Sopenharmony_ci        return false;
213094332d3Sopenharmony_ci    }
214094332d3Sopenharmony_ci    std::cout << GetCameraMetadataItemName(ohosTag) << "tag(" << ohosTag << ") value(" << static_cast<int>(tagVal) <<
215094332d3Sopenharmony_ci        ") add succesed" << std::endl;
216094332d3Sopenharmony_ci    const int32_t deviceStreamId = 0;
217094332d3Sopenharmony_ci    meta->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, 1);
218094332d3Sopenharmony_ci    std::vector<uint8_t> setting;
219094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(meta, setting);
220094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->cameraDevice->UpdateSettings(setting);
221094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
222094332d3Sopenharmony_ci        std::cout << "UpdateSettings (" << ohosTag << ")" << " success" << std::endl;
223094332d3Sopenharmony_ci    } else {
224094332d3Sopenharmony_ci        std::cout << "UpdateSettings (" << ohosTag << ")" << " fail" << std::endl;
225094332d3Sopenharmony_ci        return false;
226094332d3Sopenharmony_ci    }
227094332d3Sopenharmony_ci
228094332d3Sopenharmony_ci    // get preview
229094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
230094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
231094332d3Sopenharmony_ci
232094332d3Sopenharmony_ci    // release stream
233094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO};
234094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO};
235094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
236094332d3Sopenharmony_ci    return cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR;
237094332d3Sopenharmony_ci}
238094332d3Sopenharmony_ci
239094332d3Sopenharmony_ciTEST_P(UtestUSBCamera3ATest, CaptureTest)
240094332d3Sopenharmony_ci{
241094332d3Sopenharmony_ci    TestMetadata params = GetParam();
242094332d3Sopenharmony_ci    bool ret = RunCamera3AWithCapture(params);
243094332d3Sopenharmony_ci    EXPECT_EQ(ret, true);
244094332d3Sopenharmony_ci}
245094332d3Sopenharmony_ci
246094332d3Sopenharmony_ciTEST_P(UtestUSBCamera3ATest, VideoTest)
247094332d3Sopenharmony_ci{
248094332d3Sopenharmony_ci    TestMetadata params = GetParam();
249094332d3Sopenharmony_ci    bool ret = RunCamera3AWithVideo(params);
250094332d3Sopenharmony_ci    EXPECT_EQ(ret, true);
251094332d3Sopenharmony_ci}
252094332d3Sopenharmony_ci
253094332d3Sopenharmony_ciINSTANTIATE_TEST_SUITE_P(Test3A, UtestUSBCamera3ATest, ::testing::ValuesIn(CAMERA_3A_TEST_SETS));
254094332d3Sopenharmony_ci
255094332d3Sopenharmony_ci/**
256094332d3Sopenharmony_ci  * @tc.name: USB Camera 3A
257094332d3Sopenharmony_ci  * @tc.desc: set OHOS_SENSOR_EXPOSURE_TIME
258094332d3Sopenharmony_ci  * @tc.level: Level0
259094332d3Sopenharmony_ci  * @tc.size: MediumTest
260094332d3Sopenharmony_ci  * @tc.type: Function
261094332d3Sopenharmony_ci  */
262094332d3Sopenharmony_ciTEST_F(UtestUSBCamera3ATest, usb_camera_3a_001)
263094332d3Sopenharmony_ci{
264094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
265094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
266094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
267094332d3Sopenharmony_ci
268094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
269094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
270094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
271094332d3Sopenharmony_ci
272094332d3Sopenharmony_ci    const uint32_t itemCapacity = 100;
273094332d3Sopenharmony_ci    const uint32_t dataCapacity = 2000;
274094332d3Sopenharmony_ci    std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(itemCapacity, dataCapacity);
275094332d3Sopenharmony_ci
276094332d3Sopenharmony_ci    int ohosTag = OHOS_SENSOR_EXPOSURE_TIME;
277094332d3Sopenharmony_ci    const int tagVal = 100;
278094332d3Sopenharmony_ci    if (!meta->addEntry(ohosTag, &tagVal, 1)) {
279094332d3Sopenharmony_ci        GTEST_SKIP();
280094332d3Sopenharmony_ci    }
281094332d3Sopenharmony_ci    const int32_t deviceStreamId = 0;
282094332d3Sopenharmony_ci    meta->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, 1);
283094332d3Sopenharmony_ci    std::vector<uint8_t> setting;
284094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(meta, setting);
285094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->cameraDevice->UpdateSettings(setting);
286094332d3Sopenharmony_ci    if (cameraBase_->rc != HDI::Camera::V1_0::NO_ERROR) {
287094332d3Sopenharmony_ci        GTEST_SKIP();
288094332d3Sopenharmony_ci    }
289094332d3Sopenharmony_ci
290094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
291094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
292094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
293094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
294094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
295094332d3Sopenharmony_ci    EXPECT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR);
296094332d3Sopenharmony_ci}
297094332d3Sopenharmony_ci
298094332d3Sopenharmony_ci/**
299094332d3Sopenharmony_ci  * @tc.name: USB Camera 3A
300094332d3Sopenharmony_ci  * @tc.desc: set OHOS_CAMERA_SPOT_METERING first, then set OHOS_CAMERA_REGION_METERING
301094332d3Sopenharmony_ci  * @tc.level: Level0
302094332d3Sopenharmony_ci  * @tc.size: MediumTest
303094332d3Sopenharmony_ci  * @tc.type: Function
304094332d3Sopenharmony_ci  */
305094332d3Sopenharmony_ciTEST_F(UtestUSBCamera3ATest, usb_camera_3a_002)
306094332d3Sopenharmony_ci{
307094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
308094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
309094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
310094332d3Sopenharmony_ci
311094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
312094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
313094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
314094332d3Sopenharmony_ci
315094332d3Sopenharmony_ci    const uint32_t itemCapacity = 100;
316094332d3Sopenharmony_ci    const uint32_t dataCapacity = 2000;
317094332d3Sopenharmony_ci    std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(
318094332d3Sopenharmony_ci        itemCapacity, dataCapacity);
319094332d3Sopenharmony_ci
320094332d3Sopenharmony_ci    int ohosTag = OHOS_CONTROL_METER_MODE;
321094332d3Sopenharmony_ci    uint8_t tagVal = OHOS_CAMERA_OVERALL_METERING;
322094332d3Sopenharmony_ci    if (!meta->addEntry(ohosTag, &tagVal, 1)) {
323094332d3Sopenharmony_ci        GTEST_SKIP();
324094332d3Sopenharmony_ci    }
325094332d3Sopenharmony_ci
326094332d3Sopenharmony_ci    const int32_t deviceStreamId = 0;
327094332d3Sopenharmony_ci    meta->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, 1);
328094332d3Sopenharmony_ci    std::vector<uint8_t> setting;
329094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(meta, setting);
330094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->cameraDevice->UpdateSettings(setting);
331094332d3Sopenharmony_ci    if (cameraBase_->rc != HDI::Camera::V1_0::NO_ERROR) {
332094332d3Sopenharmony_ci        GTEST_SKIP();
333094332d3Sopenharmony_ci    }
334094332d3Sopenharmony_ci
335094332d3Sopenharmony_ci    tagVal = OHOS_CAMERA_REGION_METERING;
336094332d3Sopenharmony_ci    std::vector<uint8_t> valVector;
337094332d3Sopenharmony_ci    valVector.push_back(tagVal);
338094332d3Sopenharmony_ci    if (!meta->updateEntry(ohosTag, valVector.data(), valVector.size())) {
339094332d3Sopenharmony_ci        CAMERA_LOGE("update %{public}s failed", GetCameraMetadataItemName(ohosTag));
340094332d3Sopenharmony_ci    }
341094332d3Sopenharmony_ci
342094332d3Sopenharmony_ci    setting.clear();
343094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(meta, setting);
344094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->cameraDevice->UpdateSettings(setting);
345094332d3Sopenharmony_ci    if (cameraBase_->rc != HDI::Camera::V1_0::NO_ERROR) {
346094332d3Sopenharmony_ci        GTEST_SKIP();
347094332d3Sopenharmony_ci    }
348094332d3Sopenharmony_ci
349094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
350094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
351094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
352094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
353094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
354094332d3Sopenharmony_ci    EXPECT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR);
355094332d3Sopenharmony_ci}
356094332d3Sopenharmony_ci
357094332d3Sopenharmony_ci/**
358094332d3Sopenharmony_ci  * @tc.name: USB Camera 3A
359094332d3Sopenharmony_ci  * @tc.desc: set OHOS_CONTROL_AE_LOCK first, then set OHOS_CAMERA_EXPOSURE_MODE_LOCKED
360094332d3Sopenharmony_ci  * @tc.level: Level0
361094332d3Sopenharmony_ci  * @tc.size: MediumTest
362094332d3Sopenharmony_ci  * @tc.type: Function
363094332d3Sopenharmony_ci  */
364094332d3Sopenharmony_ciTEST_F(UtestUSBCamera3ATest, usb_camera_3a_003)
365094332d3Sopenharmony_ci{
366094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
367094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
368094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
369094332d3Sopenharmony_ci
370094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
371094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
372094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
373094332d3Sopenharmony_ci
374094332d3Sopenharmony_ci    const uint32_t itemCapacity = 100;
375094332d3Sopenharmony_ci    const uint32_t dataCapacity = 2000;
376094332d3Sopenharmony_ci    std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(itemCapacity, dataCapacity);
377094332d3Sopenharmony_ci
378094332d3Sopenharmony_ci    int ohosTag = OHOS_CONTROL_AE_LOCK;
379094332d3Sopenharmony_ci    const uint8_t tagVal = OHOS_CAMERA_AE_LOCK_OFF;
380094332d3Sopenharmony_ci    if (!meta->addEntry(ohosTag, &tagVal, 1)) {
381094332d3Sopenharmony_ci        GTEST_SKIP();
382094332d3Sopenharmony_ci    }
383094332d3Sopenharmony_ci
384094332d3Sopenharmony_ci    const int32_t deviceStreamId = 0;
385094332d3Sopenharmony_ci    meta->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, 1);
386094332d3Sopenharmony_ci    std::vector<uint8_t> setting;
387094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(meta, setting);
388094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->cameraDevice->UpdateSettings(setting);
389094332d3Sopenharmony_ci    if (cameraBase_->rc != HDI::Camera::V1_0::NO_ERROR) {
390094332d3Sopenharmony_ci        GTEST_SKIP();
391094332d3Sopenharmony_ci    }
392094332d3Sopenharmony_ci
393094332d3Sopenharmony_ci    ohosTag = OHOS_CONTROL_EXPOSURE_MODE;
394094332d3Sopenharmony_ci    const uint8_t newTagVal = OHOS_CAMERA_EXPOSURE_MODE_LOCKED;
395094332d3Sopenharmony_ci    if (!meta->addEntry(ohosTag, &newTagVal, 1)) {
396094332d3Sopenharmony_ci        GTEST_SKIP();
397094332d3Sopenharmony_ci    }
398094332d3Sopenharmony_ci
399094332d3Sopenharmony_ci    setting.clear();
400094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(meta, setting);
401094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->cameraDevice->UpdateSettings(setting);
402094332d3Sopenharmony_ci    if (cameraBase_->rc != HDI::Camera::V1_0::NO_ERROR) {
403094332d3Sopenharmony_ci        GTEST_SKIP();
404094332d3Sopenharmony_ci    }
405094332d3Sopenharmony_ci
406094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
407094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
408094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
409094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
410094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
411094332d3Sopenharmony_ci    EXPECT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR);
412094332d3Sopenharmony_ci}
413094332d3Sopenharmony_ci
414094332d3Sopenharmony_ci/**
415094332d3Sopenharmony_ci  * @tc.name: USB Camera 3A
416094332d3Sopenharmony_ci  * @tc.desc: set OHOS_CAMERA_FOCUS_MODE_CONTINUOUS_AUTO first, then set OHOS_CAMERA_FOCUS_MODE_MANUAL
417094332d3Sopenharmony_ci  * @tc.level: Level0
418094332d3Sopenharmony_ci  * @tc.size: MediumTest
419094332d3Sopenharmony_ci  * @tc.type: Function
420094332d3Sopenharmony_ci  */
421094332d3Sopenharmony_ciTEST_F(UtestUSBCamera3ATest, usb_camera_3a_004)
422094332d3Sopenharmony_ci{
423094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
424094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
425094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
426094332d3Sopenharmony_ci
427094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
428094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
429094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
430094332d3Sopenharmony_ci
431094332d3Sopenharmony_ci    const uint32_t itemCapacity = 100;
432094332d3Sopenharmony_ci    const uint32_t dataCapacity = 2000;
433094332d3Sopenharmony_ci    std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(
434094332d3Sopenharmony_ci        itemCapacity, dataCapacity);
435094332d3Sopenharmony_ci
436094332d3Sopenharmony_ci    int ohosTag = OHOS_CONTROL_FOCUS_MODE;
437094332d3Sopenharmony_ci    uint8_t tagVal = OHOS_CAMERA_FOCUS_MODE_CONTINUOUS_AUTO;
438094332d3Sopenharmony_ci    if (!meta->addEntry(ohosTag, &tagVal, 1)) {
439094332d3Sopenharmony_ci        GTEST_SKIP();
440094332d3Sopenharmony_ci    }
441094332d3Sopenharmony_ci
442094332d3Sopenharmony_ci    const int32_t deviceStreamId = 0;
443094332d3Sopenharmony_ci    meta->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, 1);
444094332d3Sopenharmony_ci    std::vector<uint8_t> setting;
445094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(meta, setting);
446094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->cameraDevice->UpdateSettings(setting);
447094332d3Sopenharmony_ci    if (cameraBase_->rc != HDI::Camera::V1_0::NO_ERROR) {
448094332d3Sopenharmony_ci        GTEST_SKIP();
449094332d3Sopenharmony_ci    }
450094332d3Sopenharmony_ci
451094332d3Sopenharmony_ci    tagVal = OHOS_CAMERA_FOCUS_MODE_MANUAL;
452094332d3Sopenharmony_ci    std::vector<uint8_t> valVector;
453094332d3Sopenharmony_ci    valVector.push_back(tagVal);
454094332d3Sopenharmony_ci    if (!meta->updateEntry(ohosTag, valVector.data(), valVector.size())) {
455094332d3Sopenharmony_ci        CAMERA_LOGE("update %{public}s failed", GetCameraMetadataItemName(ohosTag));
456094332d3Sopenharmony_ci    }
457094332d3Sopenharmony_ci
458094332d3Sopenharmony_ci    setting.clear();
459094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(meta, setting);
460094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->cameraDevice->UpdateSettings(setting);
461094332d3Sopenharmony_ci    if (cameraBase_->rc != HDI::Camera::V1_0::NO_ERROR) {
462094332d3Sopenharmony_ci        GTEST_SKIP();
463094332d3Sopenharmony_ci    }
464094332d3Sopenharmony_ci
465094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
466094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
467094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
468094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
469094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
470094332d3Sopenharmony_ci    EXPECT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR);
471094332d3Sopenharmony_ci}