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#include "usb_camera_test.h"
16094332d3Sopenharmony_ci
17094332d3Sopenharmony_cibool g_usbCameraExit = false;
18094332d3Sopenharmony_ci
19094332d3Sopenharmony_civoid UtestUSBCameraTest::SetUpTestCase(void)
20094332d3Sopenharmony_ci{}
21094332d3Sopenharmony_civoid UtestUSBCameraTest::TearDownTestCase(void)
22094332d3Sopenharmony_ci{}
23094332d3Sopenharmony_civoid UtestUSBCameraTest::SetUp(void)
24094332d3Sopenharmony_ci{
25094332d3Sopenharmony_ci    if (cameraBase_ == nullptr)
26094332d3Sopenharmony_ci    cameraBase_ = std::make_shared<TestCameraBase>();
27094332d3Sopenharmony_ci    cameraBase_->UsbInit();
28094332d3Sopenharmony_ci}
29094332d3Sopenharmony_civoid UtestUSBCameraTest::TearDown(void)
30094332d3Sopenharmony_ci{
31094332d3Sopenharmony_ci    cameraBase_->Close();
32094332d3Sopenharmony_ci}
33094332d3Sopenharmony_ci
34094332d3Sopenharmony_ci/**
35094332d3Sopenharmony_ci  * @tc.name: USB Camera
36094332d3Sopenharmony_ci  * @tc.desc: USB Camera, getCameraID success.
37094332d3Sopenharmony_ci  * @tc.level: Level0
38094332d3Sopenharmony_ci  * @tc.size: MediumTest
39094332d3Sopenharmony_ci  * @tc.type: Function
40094332d3Sopenharmony_ci  */
41094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0001)
42094332d3Sopenharmony_ci{
43094332d3Sopenharmony_ci    uint32_t rc = 0;
44094332d3Sopenharmony_ci    std::cout << "==========[test log] USB Camera, getCameraID success."<< std::endl;
45094332d3Sopenharmony_ci    std::vector<std::string> cameraIds;
46094332d3Sopenharmony_ci    std::cout << "==========[test log] 1. get current system cameraID."<< std::endl;
47094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(cameraIds);
48094332d3Sopenharmony_ci    std::cout << "==========[test log] First cameraId.size = " << cameraIds.size() << std::endl;
49094332d3Sopenharmony_ci    std::cout << "==========[test log] OnCameraStatus interface has been mobilized" << std::endl;
50094332d3Sopenharmony_ci    for (const auto &cameraId : cameraIds) {
51094332d3Sopenharmony_ci        std::cout << "==========[test log] cameraId = " << cameraId << std::endl;
52094332d3Sopenharmony_ci    }
53094332d3Sopenharmony_ci    std::cout << "==========[test log] 2. please add or delete the usb camera, wait for 10s..."<< std::endl;
54094332d3Sopenharmony_ci    sleep(3); // judging add or delete the usb camera, wait for 3s.
55094332d3Sopenharmony_ci    std::cout << "==========[test log] r u ready? wait for 10s..."<< std::endl;
56094332d3Sopenharmony_ci    sleep(3); // judging r u ready, wait for 3s.
57094332d3Sopenharmony_ci    std::cout << "==========[test log] 3. check the cameraID again... wait for 10s..."<< std::endl;
58094332d3Sopenharmony_ci    sleep(3); // checking the cameraID again, wait for 3s.
59094332d3Sopenharmony_ci    std::cout << "==========[test log] Second cameraId.size = " << cameraIds.size() << std::endl;
60094332d3Sopenharmony_ci    if (cameraIds.size() == 1) {
61094332d3Sopenharmony_ci        cameraIds.clear();
62094332d3Sopenharmony_ci    }
63094332d3Sopenharmony_ci    rc = cameraBase_->cameraHost->GetCameraIds(cameraIds);
64094332d3Sopenharmony_ci    EXPECT_EQ(rc, HDI::Camera::V1_0::NO_ERROR);
65094332d3Sopenharmony_ci    for (const auto &cameraId : cameraIds) {
66094332d3Sopenharmony_ci        std::cout << "cameraId = " << cameraId << std::endl;
67094332d3Sopenharmony_ci    }
68094332d3Sopenharmony_ci    // 1:number of connected cameras
69094332d3Sopenharmony_ci    g_usbCameraExit = cameraIds.size() > 1;
70094332d3Sopenharmony_ci}
71094332d3Sopenharmony_ci
72094332d3Sopenharmony_ci/**
73094332d3Sopenharmony_ci  * @tc.name: USB Camera
74094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_ABILITY_ZOOM_RATIO_RANGE
75094332d3Sopenharmony_ci  * @tc.level: Level0
76094332d3Sopenharmony_ci  * @tc.size: MediumTest
77094332d3Sopenharmony_ci  * @tc.type: Function
78094332d3Sopenharmony_ci  */
79094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0002)
80094332d3Sopenharmony_ci{
81094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
82094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
83094332d3Sopenharmony_ci    }
84094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
85094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
86094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
87094332d3Sopenharmony_ci    camera_metadata_item_t entry;
88094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_ABILITY_ZOOM_RATIO_RANGE, &entry);
89094332d3Sopenharmony_ci    if (ret == CAM_META_SUCCESS) {
90094332d3Sopenharmony_ci        std::cout << "OHOS_ABILITY_ZOOM_RATIO_RANGE: count is " << (int)entry.count << std::endl;
91094332d3Sopenharmony_ci        std::cout << "Zoom ratio range: [" << entry.data.f[0];
92094332d3Sopenharmony_ci        std::cout << "," << entry.data.f[1] << "]" << std::endl;
93094332d3Sopenharmony_ci    } else if (ret == CAM_META_ITEM_NOT_FOUND) {
94094332d3Sopenharmony_ci        std::cout << "OHOS_ABILITY_ZOOM_RATIO_RANGE is not support" << std::endl;
95094332d3Sopenharmony_ci    }
96094332d3Sopenharmony_ci}
97094332d3Sopenharmony_ci
98094332d3Sopenharmony_ci/**
99094332d3Sopenharmony_ci  * @tc.name: USB Camera
100094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_ABILITY_CAMERA_CONNECTION_TYPE
101094332d3Sopenharmony_ci  * @tc.level: Level0
102094332d3Sopenharmony_ci  * @tc.size: MediumTest
103094332d3Sopenharmony_ci  * @tc.type: Function
104094332d3Sopenharmony_ci  */
105094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0003)
106094332d3Sopenharmony_ci{
107094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
108094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
109094332d3Sopenharmony_ci    }
110094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
111094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
112094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
113094332d3Sopenharmony_ci    camera_metadata_item_t entry;
114094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_ABILITY_CAMERA_CONNECTION_TYPE, &entry);
115094332d3Sopenharmony_ci    EXPECT_EQ(ret, CAM_META_SUCCESS);
116094332d3Sopenharmony_ci    std::cout << "OHOS_ABILITY_CAMERA_CONNECTION_TYPE value is "
117094332d3Sopenharmony_ci        << static_cast<int>(entry.data.u8[0]) << std::endl;
118094332d3Sopenharmony_ci    EXPECT_TRUE(entry.data.u8[0] == OHOS_CAMERA_CONNECTION_TYPE_USB_PLUGIN);
119094332d3Sopenharmony_ci}
120094332d3Sopenharmony_ci
121094332d3Sopenharmony_ci/**
122094332d3Sopenharmony_ci  * @tc.name: USB Camera
123094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_ABILITY_CAMERA_POSITION
124094332d3Sopenharmony_ci  * @tc.level: Level0
125094332d3Sopenharmony_ci  * @tc.size: MediumTest
126094332d3Sopenharmony_ci  * @tc.type: Function
127094332d3Sopenharmony_ci  */
128094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0004)
129094332d3Sopenharmony_ci{
130094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
131094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
132094332d3Sopenharmony_ci    }
133094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
134094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
135094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
136094332d3Sopenharmony_ci    camera_metadata_item_t entry;
137094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_ABILITY_CAMERA_POSITION, &entry);
138094332d3Sopenharmony_ci    EXPECT_EQ(ret, CAM_META_SUCCESS);
139094332d3Sopenharmony_ci    std::cout << "OHOS_ABILITY_CAMERA_POSITION value is " << static_cast<int>(entry.data.u8[0]) << std::endl;
140094332d3Sopenharmony_ci    EXPECT_TRUE(entry.data.u8[0] == OHOS_CAMERA_POSITION_FRONT);
141094332d3Sopenharmony_ci}
142094332d3Sopenharmony_ci
143094332d3Sopenharmony_ci/**
144094332d3Sopenharmony_ci  * @tc.name: USB Camera
145094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_ABILITY_FLASH_AVAILABLE
146094332d3Sopenharmony_ci  * @tc.level: Level0
147094332d3Sopenharmony_ci  * @tc.size: MediumTest
148094332d3Sopenharmony_ci  * @tc.type: Function
149094332d3Sopenharmony_ci  */
150094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0005)
151094332d3Sopenharmony_ci{
152094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
153094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
154094332d3Sopenharmony_ci    }
155094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
156094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
157094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
158094332d3Sopenharmony_ci    camera_metadata_item_t entry;
159094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_ABILITY_FLASH_AVAILABLE, &entry);
160094332d3Sopenharmony_ci    EXPECT_EQ(ret, CAM_META_SUCCESS);
161094332d3Sopenharmony_ci    std::cout << "OHOS_ABILITY_FLASH_AVAILABLE value is " << static_cast<int>(entry.data.u8[0]) << std::endl;
162094332d3Sopenharmony_ci}
163094332d3Sopenharmony_ci
164094332d3Sopenharmony_ci/**
165094332d3Sopenharmony_ci  * @tc.name: USB Camera
166094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_ABILITY_VIDEO_STABILIZATION_MODES
167094332d3Sopenharmony_ci  * @tc.level: Level0
168094332d3Sopenharmony_ci  * @tc.size: MediumTest
169094332d3Sopenharmony_ci  * @tc.type: Function
170094332d3Sopenharmony_ci  */
171094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0006)
172094332d3Sopenharmony_ci{
173094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
174094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
175094332d3Sopenharmony_ci    }
176094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
177094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
178094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
179094332d3Sopenharmony_ci    camera_metadata_item_t entry;
180094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_ABILITY_VIDEO_STABILIZATION_MODES, &entry);
181094332d3Sopenharmony_ci    if (ret == CAM_META_SUCCESS) {
182094332d3Sopenharmony_ci        for (int i = 0; i < entry.count; i++) {
183094332d3Sopenharmony_ci            std::cout << "OHOS_ABILITY_VIDEO_STABILIZATION_MODES value is "
184094332d3Sopenharmony_ci                    << static_cast<int>(entry.data.u8[i]) << std::endl;
185094332d3Sopenharmony_ci        }
186094332d3Sopenharmony_ci    } else if (ret == CAM_META_ITEM_NOT_FOUND) {
187094332d3Sopenharmony_ci        std::cout << "OHOS_ABILITY_VIDEO_STABILIZATION_MODES is not support" << std::endl;
188094332d3Sopenharmony_ci    }
189094332d3Sopenharmony_ci}
190094332d3Sopenharmony_ci
191094332d3Sopenharmony_ci/**
192094332d3Sopenharmony_ci  * @tc.name: USB Camera
193094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_ABILITY_FLASH_MODES
194094332d3Sopenharmony_ci  * @tc.level: Level0
195094332d3Sopenharmony_ci  * @tc.size: MediumTest
196094332d3Sopenharmony_ci  * @tc.type: Function
197094332d3Sopenharmony_ci  */
198094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_007)
199094332d3Sopenharmony_ci{
200094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
201094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
202094332d3Sopenharmony_ci    }
203094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
204094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
205094332d3Sopenharmony_ci    camera_metadata_item_t entry;
206094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_ABILITY_FLASH_MODES, &entry);
207094332d3Sopenharmony_ci    if (ret == CAM_META_SUCCESS) {
208094332d3Sopenharmony_ci        std::cout << "supported flash mode list:";
209094332d3Sopenharmony_ci        for (int i = 0; i < entry.count; i++) {
210094332d3Sopenharmony_ci            std::cout << " " << static_cast<int>(entry.data.u8[i]);
211094332d3Sopenharmony_ci        }
212094332d3Sopenharmony_ci        std::cout << std::endl;
213094332d3Sopenharmony_ci    } else if (ret == CAM_META_ITEM_NOT_FOUND) {
214094332d3Sopenharmony_ci        std::cout << "OHOS_ABILITY_FLASH_MODES is not support" << std::endl;
215094332d3Sopenharmony_ci    }
216094332d3Sopenharmony_ci}
217094332d3Sopenharmony_ci
218094332d3Sopenharmony_ci/**
219094332d3Sopenharmony_ci  * @tc.name: USB Camera
220094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_ABILITY_FOCUS_MODES
221094332d3Sopenharmony_ci  * @tc.level: Level0
222094332d3Sopenharmony_ci  * @tc.size: MediumTest
223094332d3Sopenharmony_ci  * @tc.type: Function
224094332d3Sopenharmony_ci  */
225094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_008)
226094332d3Sopenharmony_ci{
227094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
228094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
229094332d3Sopenharmony_ci    }
230094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
231094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
232094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
233094332d3Sopenharmony_ci    camera_metadata_item_t entry;
234094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_ABILITY_FOCUS_MODES, &entry);
235094332d3Sopenharmony_ci    if (ret == CAM_META_SUCCESS) {
236094332d3Sopenharmony_ci        std::cout << "supported focus mode list:";
237094332d3Sopenharmony_ci        for (int i = 0; i < entry.count; i++) {
238094332d3Sopenharmony_ci            std::cout << " " << static_cast<int>(entry.data.u8[i]);
239094332d3Sopenharmony_ci        }
240094332d3Sopenharmony_ci        std::cout << std::endl;
241094332d3Sopenharmony_ci    } else if (ret == CAM_META_ITEM_NOT_FOUND) {
242094332d3Sopenharmony_ci        std::cout << "OHOS_ABILITY_FOCUS_MODES is not support" << std::endl;
243094332d3Sopenharmony_ci    }
244094332d3Sopenharmony_ci}
245094332d3Sopenharmony_ci
246094332d3Sopenharmony_ci/**
247094332d3Sopenharmony_ci  * @tc.name: USB Camera
248094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_ABILITY_EXPOSURE_MODES
249094332d3Sopenharmony_ci  * @tc.level: Level0
250094332d3Sopenharmony_ci  * @tc.size: MediumTest
251094332d3Sopenharmony_ci  * @tc.type: Function
252094332d3Sopenharmony_ci  */
253094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_009)
254094332d3Sopenharmony_ci{
255094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
256094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
257094332d3Sopenharmony_ci    }
258094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
259094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
260094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
261094332d3Sopenharmony_ci    camera_metadata_item_t entry;
262094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_ABILITY_EXPOSURE_MODES, &entry);
263094332d3Sopenharmony_ci    if (ret == CAM_META_SUCCESS) {
264094332d3Sopenharmony_ci        std::cout << "supported exposure mode list:";
265094332d3Sopenharmony_ci        for (int i = 0; i < entry.count; i++) {
266094332d3Sopenharmony_ci            std::cout << " " << static_cast<int>(entry.data.u8[i]);
267094332d3Sopenharmony_ci        }
268094332d3Sopenharmony_ci        std::cout << std::endl;
269094332d3Sopenharmony_ci    } else if (ret == CAM_META_ITEM_NOT_FOUND) {
270094332d3Sopenharmony_ci        std::cout << "OHOS_ABILITY_EXPOSURE_MODES is not support" << std::endl;
271094332d3Sopenharmony_ci    }
272094332d3Sopenharmony_ci}
273094332d3Sopenharmony_ci
274094332d3Sopenharmony_ci/**
275094332d3Sopenharmony_ci  * @tc.name: USB Camera
276094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_CONTROL_CAPTURE_MIRROR_SUPPORTED
277094332d3Sopenharmony_ci  * @tc.level: Level0
278094332d3Sopenharmony_ci  * @tc.size: MediumTest
279094332d3Sopenharmony_ci  * @tc.type: Function
280094332d3Sopenharmony_ci  */
281094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0010)
282094332d3Sopenharmony_ci{
283094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
284094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
285094332d3Sopenharmony_ci    }
286094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
287094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
288094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
289094332d3Sopenharmony_ci    camera_metadata_item_t entry;
290094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_CONTROL_CAPTURE_MIRROR_SUPPORTED, &entry);
291094332d3Sopenharmony_ci    EXPECT_EQ(ret, CAM_META_SUCCESS);
292094332d3Sopenharmony_ci    std::cout << "capture mirror supported is :";
293094332d3Sopenharmony_ci    for (int i = 0; i < entry.count; i++) {
294094332d3Sopenharmony_ci        std::cout << " " << static_cast<int>(entry.data.u8[i]);
295094332d3Sopenharmony_ci    }
296094332d3Sopenharmony_ci    std::cout << std::endl;
297094332d3Sopenharmony_ci}
298094332d3Sopenharmony_ci
299094332d3Sopenharmony_ci/**
300094332d3Sopenharmony_ci  * @tc.name: USB Camera
301094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_ABILITY_MUTE_MODES
302094332d3Sopenharmony_ci  * @tc.level: Level0
303094332d3Sopenharmony_ci  * @tc.size: MediumTest
304094332d3Sopenharmony_ci  * @tc.type: Function
305094332d3Sopenharmony_ci  */
306094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0011)
307094332d3Sopenharmony_ci{
308094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
309094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
310094332d3Sopenharmony_ci    }
311094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
312094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
313094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
314094332d3Sopenharmony_ci    camera_metadata_item_t entry;
315094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_ABILITY_MUTE_MODES, &entry);
316094332d3Sopenharmony_ci    if (ret == CAM_META_SUCCESS) {
317094332d3Sopenharmony_ci        std::cout << "supported mute mode is:";
318094332d3Sopenharmony_ci        for (int i = 0; i < entry.count; i++) {
319094332d3Sopenharmony_ci            std::cout << " " << static_cast<int>(entry.data.u8[i]);
320094332d3Sopenharmony_ci        }
321094332d3Sopenharmony_ci        std::cout << std::endl;
322094332d3Sopenharmony_ci    } else if (ret == CAM_META_ITEM_NOT_FOUND) {
323094332d3Sopenharmony_ci        std::cout << "OHOS_ABILITY_MUTE_MODES is not support" << std::endl;
324094332d3Sopenharmony_ci    }
325094332d3Sopenharmony_ci}
326094332d3Sopenharmony_ci
327094332d3Sopenharmony_ci/**
328094332d3Sopenharmony_ci  * @tc.name: USB Camera
329094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_ABILITY_FPS_RANGES
330094332d3Sopenharmony_ci  * @tc.level: Level0
331094332d3Sopenharmony_ci  * @tc.size: MediumTest
332094332d3Sopenharmony_ci  * @tc.type: Function
333094332d3Sopenharmony_ci  */
334094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0012)
335094332d3Sopenharmony_ci{
336094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
337094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
338094332d3Sopenharmony_ci    }
339094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
340094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
341094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
342094332d3Sopenharmony_ci    camera_metadata_item_t entry;
343094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_ABILITY_FPS_RANGES, &entry);
344094332d3Sopenharmony_ci    EXPECT_EQ(ret, CAM_META_SUCCESS);
345094332d3Sopenharmony_ci    std::cout << "supported fps ranges list: [";
346094332d3Sopenharmony_ci    std::cout << static_cast<int>(entry.data.i32[0]) << "," << static_cast<int>(entry.data.i32[1]) << "]";
347094332d3Sopenharmony_ci    std::cout << std::endl;
348094332d3Sopenharmony_ci}
349094332d3Sopenharmony_ci
350094332d3Sopenharmony_ci/**
351094332d3Sopenharmony_ci  * @tc.name: USB Camera
352094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_ABILITY_CAMERA_TYPE
353094332d3Sopenharmony_ci  * @tc.level: Level0
354094332d3Sopenharmony_ci  * @tc.size: MediumTest
355094332d3Sopenharmony_ci  * @tc.type: Function
356094332d3Sopenharmony_ci  */
357094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0013)
358094332d3Sopenharmony_ci{
359094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
360094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
361094332d3Sopenharmony_ci    }
362094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
363094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
364094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
365094332d3Sopenharmony_ci    camera_metadata_item_t entry;
366094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_ABILITY_CAMERA_TYPE, &entry);
367094332d3Sopenharmony_ci    EXPECT_EQ(ret, CAM_META_SUCCESS);
368094332d3Sopenharmony_ci    std::cout << "OHOS_ABILITY_CAMERA_TYPE value is " << static_cast<int>(entry.data.u8[0]) << std::endl;
369094332d3Sopenharmony_ci    EXPECT_TRUE(entry.data.u8[0] == OHOS_CAMERA_TYPE_UNSPECIFIED);
370094332d3Sopenharmony_ci}
371094332d3Sopenharmony_ci
372094332d3Sopenharmony_ci/**
373094332d3Sopenharmony_ci  * @tc.name: USB Camera
374094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_JPEG_ORIENTATION
375094332d3Sopenharmony_ci  * @tc.level: Level0
376094332d3Sopenharmony_ci  * @tc.size: MediumTest
377094332d3Sopenharmony_ci  * @tc.type: Function
378094332d3Sopenharmony_ci  */
379094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0014)
380094332d3Sopenharmony_ci{
381094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
382094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
383094332d3Sopenharmony_ci    }
384094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
385094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
386094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
387094332d3Sopenharmony_ci    camera_metadata_item_t entry;
388094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_JPEG_ORIENTATION, &entry);
389094332d3Sopenharmony_ci    EXPECT_EQ(ret, CAM_META_SUCCESS);
390094332d3Sopenharmony_ci    std::cout << "OHOS_JPEG_ORIENTATION value is " << static_cast<int>(entry.data.i32[0]) << std::endl;
391094332d3Sopenharmony_ci}
392094332d3Sopenharmony_ci
393094332d3Sopenharmony_ci/**
394094332d3Sopenharmony_ci  * @tc.name: USB Camera
395094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_JPEG_QUALITY
396094332d3Sopenharmony_ci  * @tc.level: Level0
397094332d3Sopenharmony_ci  * @tc.size: MediumTest
398094332d3Sopenharmony_ci  * @tc.type: Function
399094332d3Sopenharmony_ci  */
400094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0015)
401094332d3Sopenharmony_ci{
402094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
403094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
404094332d3Sopenharmony_ci    }
405094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
406094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
407094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
408094332d3Sopenharmony_ci    camera_metadata_item_t entry;
409094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_JPEG_QUALITY, &entry);
410094332d3Sopenharmony_ci    EXPECT_EQ(ret, CAM_META_SUCCESS);
411094332d3Sopenharmony_ci    std::cout << "OHOS_JPEG_ORIENTATION value is " << static_cast<int>(entry.data.u8[0]) << std::endl;
412094332d3Sopenharmony_ci}
413094332d3Sopenharmony_ci
414094332d3Sopenharmony_ci/**
415094332d3Sopenharmony_ci  * @tc.name: USB Camera
416094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_ABILITY_STREAM_AVAILABLE_BASIC_CONFIGURATIONS
417094332d3Sopenharmony_ci  * @tc.level: Level0
418094332d3Sopenharmony_ci  * @tc.size: MediumTest
419094332d3Sopenharmony_ci  * @tc.type: Function
420094332d3Sopenharmony_ci  */
421094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0016)
422094332d3Sopenharmony_ci{
423094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
424094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
425094332d3Sopenharmony_ci    }
426094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
427094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
428094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
429094332d3Sopenharmony_ci    camera_metadata_item_t entry;
430094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_ABILITY_STREAM_AVAILABLE_BASIC_CONFIGURATIONS, &entry);
431094332d3Sopenharmony_ci    EXPECT_EQ(ret, CAM_META_SUCCESS);
432094332d3Sopenharmony_ci    std::cout << "OHOS_ABILITY_STREAM_AVAILABLE_BASIC_CONFIGURATIONS value is "
433094332d3Sopenharmony_ci        << static_cast<int>(entry.data.u8[0]) << std::endl;
434094332d3Sopenharmony_ci    EXPECT_TRUE(entry.data.u8[0] == OHOS_CAMERA_FORMAT_RGBA_8888);
435094332d3Sopenharmony_ci}
436094332d3Sopenharmony_ci
437094332d3Sopenharmony_ci/**
438094332d3Sopenharmony_ci  * @tc.name: USB Camera
439094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_ABILITY_STREAM_AVAILABLE_EXTEND_CONFIGURATIONS
440094332d3Sopenharmony_ci  * @tc.level: Level0
441094332d3Sopenharmony_ci  * @tc.size: MediumTest
442094332d3Sopenharmony_ci  * @tc.type: Function
443094332d3Sopenharmony_ci  */
444094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0017)
445094332d3Sopenharmony_ci{
446094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
447094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
448094332d3Sopenharmony_ci    }
449094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
450094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
451094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
452094332d3Sopenharmony_ci    EXPECT_NE(data, nullptr);
453094332d3Sopenharmony_ci    camera_metadata_item_t entry;
454094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_ABILITY_STREAM_AVAILABLE_EXTEND_CONFIGURATIONS, &entry);
455094332d3Sopenharmony_ci    if (ret == 0 && entry.data.i32 != nullptr && entry.count > 0) {
456094332d3Sopenharmony_ci        std::cout << "print tag<OHOS_ABILITY_STREAM_AVAILABLE_EXTEND_CONFIGURATIONS> value start." << std::endl;
457094332d3Sopenharmony_ci        const size_t STEP = 10; // print step
458094332d3Sopenharmony_ci        std::cout << "count" << entry.count << std::endl;
459094332d3Sopenharmony_ci        for (size_t i = 0; i < entry.count; i++) {
460094332d3Sopenharmony_ci            std::cout << entry.data.i32[i] << " ";
461094332d3Sopenharmony_ci            if ((i != 0) && (i % STEP == 0 || i == entry.count - 1)) {
462094332d3Sopenharmony_ci                std::cout << std::endl;
463094332d3Sopenharmony_ci            }
464094332d3Sopenharmony_ci        }
465094332d3Sopenharmony_ci        std::cout << "print tag<OHOS_ABILITY_STREAM_AVAILABLE_EXTEND_CONFIGURATIONS> value end." << std::endl;
466094332d3Sopenharmony_ci    }
467094332d3Sopenharmony_ci}
468094332d3Sopenharmony_ci
469094332d3Sopenharmony_ci/**
470094332d3Sopenharmony_ci  * @tc.name: USB Camera
471094332d3Sopenharmony_ci  * @tc.desc: Preview stream, expected success.
472094332d3Sopenharmony_ci  * @tc.level: Level0
473094332d3Sopenharmony_ci  * @tc.size: MediumTest
474094332d3Sopenharmony_ci  * @tc.type: Function
475094332d3Sopenharmony_ci  */
476094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0018)
477094332d3Sopenharmony_ci{
478094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
479094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
480094332d3Sopenharmony_ci    }
481094332d3Sopenharmony_ci    // Get the device manager
482094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
483094332d3Sopenharmony_ci    // Get the stream manager
484094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
485094332d3Sopenharmony_ci    // start stream
486094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW};
487094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
488094332d3Sopenharmony_ci    // Get preview
489094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
490094332d3Sopenharmony_ci    // release stream
491094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW};
492094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW};
493094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
494094332d3Sopenharmony_ci}
495094332d3Sopenharmony_ci
496094332d3Sopenharmony_ci/**
497094332d3Sopenharmony_ci  * @tc.name: USB Camera
498094332d3Sopenharmony_ci  * @tc.desc: Preview stream, width = 1280, height = 720, expected success.
499094332d3Sopenharmony_ci  * @tc.level: Level0
500094332d3Sopenharmony_ci  * @tc.size: MediumTest
501094332d3Sopenharmony_ci  * @tc.type: Function
502094332d3Sopenharmony_ci  */
503094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0019)
504094332d3Sopenharmony_ci{
505094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
506094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
507094332d3Sopenharmony_ci    }
508094332d3Sopenharmony_ci    // Get the device manager
509094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
510094332d3Sopenharmony_ci    // Create and get streamOperator information
511094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
512094332d3Sopenharmony_ci    // Create data stream
513094332d3Sopenharmony_ci    if (cameraBase_->streamCustomerPreview_ == nullptr) {
514094332d3Sopenharmony_ci        cameraBase_->streamCustomerPreview_ = std::make_shared<StreamCustomer>();
515094332d3Sopenharmony_ci    }
516094332d3Sopenharmony_ci    OHOS::sptr<OHOS::IBufferProducer> producer = cameraBase_->streamCustomerPreview_->CreateProducer();
517094332d3Sopenharmony_ci    producer->SetQueueSize(8); // 8:set bufferQueue size
518094332d3Sopenharmony_ci
519094332d3Sopenharmony_ci    std::vector<StreamInfo> streamInfos;
520094332d3Sopenharmony_ci    StreamInfo streamInfo = {};
521094332d3Sopenharmony_ci    streamInfo.streamId_ = cameraBase_->STREAM_ID_PREVIEW;
522094332d3Sopenharmony_ci    streamInfo.width_ = 1280; // 1280:picture width
523094332d3Sopenharmony_ci    streamInfo.height_ = 720; // 720:picture height
524094332d3Sopenharmony_ci    streamInfo.format_ = PIXEL_FMT_RGBA_8888;
525094332d3Sopenharmony_ci    streamInfo.dataspace_ = 8; // 8:picture dataspace
526094332d3Sopenharmony_ci    streamInfo.intent_ = PREVIEW;
527094332d3Sopenharmony_ci    streamInfo.tunneledMode_ = 5; // 5:tunnel mode
528094332d3Sopenharmony_ci    streamInfo.bufferQueue_ = new BufferProducerSequenceable(producer);
529094332d3Sopenharmony_ci    ASSERT_NE(streamInfo.bufferQueue_, nullptr);
530094332d3Sopenharmony_ci    std::vector<StreamInfo>().swap(streamInfos);
531094332d3Sopenharmony_ci    streamInfos.push_back(streamInfo);
532094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CreateStreams(streamInfos);
533094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
534094332d3Sopenharmony_ci    // Submit stream information
535094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CommitStreams(NORMAL, cameraBase_->ability_);
536094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
537094332d3Sopenharmony_ci    // capture
538094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
539094332d3Sopenharmony_ci    // release stream
540094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW};
541094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW};
542094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
543094332d3Sopenharmony_ci}
544094332d3Sopenharmony_ci
545094332d3Sopenharmony_ci/**
546094332d3Sopenharmony_ci  * @tc.name: USB Camera
547094332d3Sopenharmony_ci  * @tc.desc: UpdateSettings, fps.
548094332d3Sopenharmony_ci  * @tc.level: Level0
549094332d3Sopenharmony_ci  * @tc.size: MediumTest
550094332d3Sopenharmony_ci  * @tc.type: Function
551094332d3Sopenharmony_ci  */
552094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0020)
553094332d3Sopenharmony_ci{
554094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
555094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
556094332d3Sopenharmony_ci    }
557094332d3Sopenharmony_ci    // Get the device manager
558094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
559094332d3Sopenharmony_ci    // get the stream manager
560094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
561094332d3Sopenharmony_ci
562094332d3Sopenharmony_ci    // start stream
563094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW};
564094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
565094332d3Sopenharmony_ci
566094332d3Sopenharmony_ci    // updateSettings
567094332d3Sopenharmony_ci    const uint32_t ITEM_CAPACITY = 100;
568094332d3Sopenharmony_ci    const uint32_t DATA_CAPACITY = 2000;
569094332d3Sopenharmony_ci    const int32_t FPS_VALUE = 10;
570094332d3Sopenharmony_ci    std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(
571094332d3Sopenharmony_ci        ITEM_CAPACITY, DATA_CAPACITY);
572094332d3Sopenharmony_ci    std::vector<int32_t> fpsRange;
573094332d3Sopenharmony_ci    fpsRange.push_back(FPS_VALUE);
574094332d3Sopenharmony_ci    fpsRange.push_back(FPS_VALUE);
575094332d3Sopenharmony_ci    meta->addEntry(OHOS_CONTROL_FPS_RANGES, fpsRange.data(), fpsRange.size());
576094332d3Sopenharmony_ci    const int32_t DEVICE_STREAM_ID = 0;
577094332d3Sopenharmony_ci    meta->addEntry(OHOS_CAMERA_STREAM_ID, &DEVICE_STREAM_ID, 1);
578094332d3Sopenharmony_ci    std::vector<uint8_t> setting;
579094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(meta, setting);
580094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->cameraDevice->UpdateSettings(setting);
581094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
582094332d3Sopenharmony_ci
583094332d3Sopenharmony_ci    // get preview
584094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
585094332d3Sopenharmony_ci
586094332d3Sopenharmony_ci    // release stream
587094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW};
588094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW};
589094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
590094332d3Sopenharmony_ci}
591094332d3Sopenharmony_ci
592094332d3Sopenharmony_ci/**
593094332d3Sopenharmony_ci  * @tc.name: USB Camera
594094332d3Sopenharmony_ci  * @tc.desc: USB Camera, OnCameraStatus and OnCameraEvent.
595094332d3Sopenharmony_ci  * @tc.level: Level0
596094332d3Sopenharmony_ci  * @tc.size: MediumTest
597094332d3Sopenharmony_ci  * @tc.type: Function
598094332d3Sopenharmony_ci  */
599094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0021)
600094332d3Sopenharmony_ci{
601094332d3Sopenharmony_ci    uint32_t rc = 0;
602094332d3Sopenharmony_ci    std::cout << "==========[test log] USB Camera, getCameraID success."<< std::endl;
603094332d3Sopenharmony_ci    std::vector<std::string> cameraIds;
604094332d3Sopenharmony_ci    std::cout << "==========[test log] 1. get current system cameraID."<< std::endl;
605094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(cameraIds);
606094332d3Sopenharmony_ci    std::cout << "==========[test log] First cameraId.size = " << cameraIds.size() << std::endl;
607094332d3Sopenharmony_ci    std::cout << "==========[test log] OnCameraStatus interface has been mobilized" << std::endl;
608094332d3Sopenharmony_ci    for (const auto &cameraId : cameraIds) {
609094332d3Sopenharmony_ci        std::cout << "==========[test log] cameraId = " << cameraId << std::endl;
610094332d3Sopenharmony_ci    }
611094332d3Sopenharmony_ci    const int count = 4;
612094332d3Sopenharmony_ci    for (int i = 0; i < count; i++) {
613094332d3Sopenharmony_ci        std::cout << "==========[test log] 2. please add or delete the usb camera, wait for 3s..."<< std::endl;
614094332d3Sopenharmony_ci        sleep(3); // judging add or delete the usb camera, wait for 3s.
615094332d3Sopenharmony_ci    }
616094332d3Sopenharmony_ci    std::cout << "==========[test log] 3. check the cameraID again... wait for 3s..."<< std::endl;
617094332d3Sopenharmony_ci    sleep(3); // checking the cameraID again, wait for 3s.
618094332d3Sopenharmony_ci    std::cout << "==========[test log] Second cameraId.size = " << cameraIds.size() << std::endl;
619094332d3Sopenharmony_ci    if (cameraIds.size() == 1) {
620094332d3Sopenharmony_ci        cameraIds.clear();
621094332d3Sopenharmony_ci    }
622094332d3Sopenharmony_ci    rc = cameraBase_->cameraHost->GetCameraIds(cameraIds);
623094332d3Sopenharmony_ci    EXPECT_EQ(rc, HDI::Camera::V1_0::NO_ERROR);
624094332d3Sopenharmony_ci    for (const auto &cameraId : cameraIds) {
625094332d3Sopenharmony_ci        std::cout << "cameraId = " << cameraId << std::endl;
626094332d3Sopenharmony_ci    }
627094332d3Sopenharmony_ci    // 1:number of connected cameras
628094332d3Sopenharmony_ci    g_usbCameraExit = cameraIds.size() > 1;
629094332d3Sopenharmony_ci}
630094332d3Sopenharmony_ci
631094332d3Sopenharmony_ci/**
632094332d3Sopenharmony_ci  * @tc.name: USB Camera
633094332d3Sopenharmony_ci  * @tc.desc: Commit 2 streams together, Preview and still_capture streams, isStreaming is true.
634094332d3Sopenharmony_ci  * @tc.level: Level0
635094332d3Sopenharmony_ci  * @tc.size: MediumTest
636094332d3Sopenharmony_ci  * @tc.type: Function
637094332d3Sopenharmony_ci  */
638094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0022)
639094332d3Sopenharmony_ci{
640094332d3Sopenharmony_ci    // Get the device manager
641094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
642094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
643094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
644094332d3Sopenharmony_ci    }
645094332d3Sopenharmony_ci    // Get the stream manager
646094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
647094332d3Sopenharmony_ci    // start stream
648094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
649094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
650094332d3Sopenharmony_ci    // Get preview
651094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
652094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
653094332d3Sopenharmony_ci    // release stream
654094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
655094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
656094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
657094332d3Sopenharmony_ci}
658094332d3Sopenharmony_ci
659094332d3Sopenharmony_ci/**
660094332d3Sopenharmony_ci  * @tc.name: USB Camera
661094332d3Sopenharmony_ci  * @tc.desc: Commit 2 streams together, width = 1280, height = 720, expected success.
662094332d3Sopenharmony_ci  * @tc.level: Level0
663094332d3Sopenharmony_ci  * @tc.size: MediumTest
664094332d3Sopenharmony_ci  * @tc.type: Function
665094332d3Sopenharmony_ci  */
666094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0023)
667094332d3Sopenharmony_ci{
668094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
669094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
670094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
671094332d3Sopenharmony_ci    }
672094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
673094332d3Sopenharmony_ci    if (cameraBase_->streamCustomerPreview_ == nullptr) {
674094332d3Sopenharmony_ci        cameraBase_->streamCustomerPreview_ = std::make_shared<StreamCustomer>();
675094332d3Sopenharmony_ci    }
676094332d3Sopenharmony_ci    std::vector<StreamInfo> streamInfos;
677094332d3Sopenharmony_ci    StreamInfo streamInfo = {};
678094332d3Sopenharmony_ci    streamInfo.streamId_ = cameraBase_->STREAM_ID_PREVIEW;
679094332d3Sopenharmony_ci    streamInfo.width_ = 1280; // 1280:picture width
680094332d3Sopenharmony_ci    streamInfo.height_ = 720; // 720:picture height
681094332d3Sopenharmony_ci    streamInfo.format_ = PIXEL_FMT_RGBA_8888;
682094332d3Sopenharmony_ci    streamInfo.dataspace_ = 8; // 8:picture dataspace
683094332d3Sopenharmony_ci    streamInfo.intent_ = PREVIEW;
684094332d3Sopenharmony_ci    streamInfo.tunneledMode_ = 5; // 5:tunnel mode
685094332d3Sopenharmony_ci    streamInfo.bufferQueue_ = new BufferProducerSequenceable(cameraBase_->streamCustomerPreview_->CreateProducer());
686094332d3Sopenharmony_ci    ASSERT_NE(streamInfo.bufferQueue_, nullptr);
687094332d3Sopenharmony_ci    streamInfo.bufferQueue_->producer_->SetQueueSize(8); // 8:set bufferQueue size
688094332d3Sopenharmony_ci    streamInfos.push_back(streamInfo);
689094332d3Sopenharmony_ci    if (cameraBase_->streamCustomerCapture_ == nullptr) {
690094332d3Sopenharmony_ci        cameraBase_->streamCustomerCapture_ = std::make_shared<StreamCustomer>();
691094332d3Sopenharmony_ci    }
692094332d3Sopenharmony_ci    StreamInfo streamInfoCapture = {};
693094332d3Sopenharmony_ci    streamInfoCapture.streamId_ = cameraBase_->STREAM_ID_CAPTURE;
694094332d3Sopenharmony_ci    streamInfoCapture.width_ = 1280; // 1280:picture width
695094332d3Sopenharmony_ci    streamInfoCapture.height_ = 720; // 720:picture height
696094332d3Sopenharmony_ci    streamInfoCapture.format_ = PIXEL_FMT_RGBA_8888;
697094332d3Sopenharmony_ci    streamInfoCapture.dataspace_ = 8; // 8:picture dataspace
698094332d3Sopenharmony_ci    streamInfoCapture.intent_ = STILL_CAPTURE;
699094332d3Sopenharmony_ci    streamInfoCapture.encodeType_ = ENCODE_TYPE_JPEG;
700094332d3Sopenharmony_ci    streamInfoCapture.tunneledMode_ = 5; // 5:tunnel mode
701094332d3Sopenharmony_ci    streamInfoCapture.bufferQueue_ = new BufferProducerSequenceable(
702094332d3Sopenharmony_ci        cameraBase_->streamCustomerCapture_->CreateProducer());
703094332d3Sopenharmony_ci    ASSERT_NE(streamInfoCapture.bufferQueue_, nullptr);
704094332d3Sopenharmony_ci    streamInfoCapture.bufferQueue_->producer_->SetQueueSize(8); // 8:set bufferQueue size
705094332d3Sopenharmony_ci    streamInfos.push_back(streamInfoCapture);
706094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CreateStreams(streamInfos);
707094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
708094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CommitStreams(NORMAL, cameraBase_->ability_);
709094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
710094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
711094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
712094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
713094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
714094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
715094332d3Sopenharmony_ci}
716094332d3Sopenharmony_ci
717094332d3Sopenharmony_ci/**
718094332d3Sopenharmony_ci  * @tc.name: preview and capture
719094332d3Sopenharmony_ci  * @tc.desc: Commit 2 streams together, Change the value OHOS_JPEG_ORIENTATION, isStreaming is true.
720094332d3Sopenharmony_ci  * @tc.level: Level0
721094332d3Sopenharmony_ci  * @tc.size: MediumTest
722094332d3Sopenharmony_ci  * @tc.type: Function
723094332d3Sopenharmony_ci  */
724094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0024)
725094332d3Sopenharmony_ci{
726094332d3Sopenharmony_ci    // Get the device manager
727094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
728094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
729094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
730094332d3Sopenharmony_ci    }
731094332d3Sopenharmony_ci    // Get the stream manager
732094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
733094332d3Sopenharmony_ci    std::vector<int32_t> jpegOrientationVector;
734094332d3Sopenharmony_ci    jpegOrientationVector.push_back(OHOS_CAMERA_JPEG_ROTATION_270);
735094332d3Sopenharmony_ci    cameraBase_->ability->updateEntry(OHOS_JPEG_ORIENTATION, jpegOrientationVector.data(),
736094332d3Sopenharmony_ci        jpegOrientationVector.size());
737094332d3Sopenharmony_ci    cameraBase_->ability_.clear();
738094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(cameraBase_->ability, cameraBase_->ability_);
739094332d3Sopenharmony_ci    // start stream
740094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
741094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
742094332d3Sopenharmony_ci
743094332d3Sopenharmony_ci    // Get preview
744094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
745094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
746094332d3Sopenharmony_ci    // release stream
747094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
748094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
749094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
750094332d3Sopenharmony_ci}
751094332d3Sopenharmony_ci
752094332d3Sopenharmony_ci/**
753094332d3Sopenharmony_ci  * @tc.name: preview and capture
754094332d3Sopenharmony_ci  * @tc.desc: Commit 2 streams together, Preview and still_capture streams, isStreaming is true.
755094332d3Sopenharmony_ci  * @tc.level: Level0
756094332d3Sopenharmony_ci  * @tc.size: MediumTest
757094332d3Sopenharmony_ci  * @tc.type: Function
758094332d3Sopenharmony_ci  */
759094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0025)
760094332d3Sopenharmony_ci{
761094332d3Sopenharmony_ci    // Get the device manager
762094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
763094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
764094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
765094332d3Sopenharmony_ci    }
766094332d3Sopenharmony_ci    // Get the stream manager
767094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
768094332d3Sopenharmony_ci    std::vector<int32_t> jpegQualityVector;
769094332d3Sopenharmony_ci    jpegQualityVector.push_back(OHOS_CAMERA_JPEG_LEVEL_LOW);
770094332d3Sopenharmony_ci    cameraBase_->ability->updateEntry(OHOS_JPEG_QUALITY, jpegQualityVector.data(), jpegQualityVector.size());
771094332d3Sopenharmony_ci    cameraBase_->ability_.clear();
772094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(cameraBase_->ability, cameraBase_->ability_);
773094332d3Sopenharmony_ci    // start stream
774094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
775094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
776094332d3Sopenharmony_ci
777094332d3Sopenharmony_ci    // Get preview
778094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
779094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
780094332d3Sopenharmony_ci    // release stream
781094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
782094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
783094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
784094332d3Sopenharmony_ci}
785094332d3Sopenharmony_ci
786094332d3Sopenharmony_ci/**
787094332d3Sopenharmony_ci  * @tc.name: Video
788094332d3Sopenharmony_ci  * @tc.desc: Preview + video, commit together, success.
789094332d3Sopenharmony_ci  * @tc.level: Level0
790094332d3Sopenharmony_ci  * @tc.size: MediumTest
791094332d3Sopenharmony_ci  * @tc.type: Function
792094332d3Sopenharmony_ci  */
793094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0026)
794094332d3Sopenharmony_ci{
795094332d3Sopenharmony_ci    // Get the device manager
796094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
797094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
798094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
799094332d3Sopenharmony_ci    }
800094332d3Sopenharmony_ci    // Create and get streamOperator information
801094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
802094332d3Sopenharmony_ci    // start stream
803094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, VIDEO};
804094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
805094332d3Sopenharmony_ci    // Get preview
806094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
807094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
808094332d3Sopenharmony_ci
809094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO};
810094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO};
811094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
812094332d3Sopenharmony_ci}
813094332d3Sopenharmony_ci
814094332d3Sopenharmony_ci/**
815094332d3Sopenharmony_ci  * @tc.name: USB Camera
816094332d3Sopenharmony_ci  * @tc.desc: Preview stream, width = 1280, height = 720, expected success.
817094332d3Sopenharmony_ci  * @tc.level: Level0
818094332d3Sopenharmony_ci  * @tc.size: MediumTest
819094332d3Sopenharmony_ci  * @tc.type: Function
820094332d3Sopenharmony_ci  */
821094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0027)
822094332d3Sopenharmony_ci{
823094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
824094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
825094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
826094332d3Sopenharmony_ci    }
827094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
828094332d3Sopenharmony_ci    if (cameraBase_->streamCustomerPreview_ == nullptr) {
829094332d3Sopenharmony_ci        cameraBase_->streamCustomerPreview_ = std::make_shared<StreamCustomer>();
830094332d3Sopenharmony_ci    }
831094332d3Sopenharmony_ci    std::vector<StreamInfo> streamInfos;
832094332d3Sopenharmony_ci    StreamInfo streamInfo = {};
833094332d3Sopenharmony_ci    streamInfo.streamId_ = cameraBase_->STREAM_ID_PREVIEW;
834094332d3Sopenharmony_ci    streamInfo.width_ = 1280; // 1280:picture width
835094332d3Sopenharmony_ci    streamInfo.height_ = 720; // 720:picture height
836094332d3Sopenharmony_ci    streamInfo.format_ = PIXEL_FMT_RGBA_8888;
837094332d3Sopenharmony_ci    streamInfo.dataspace_ = 8; // 8:picture dataspace
838094332d3Sopenharmony_ci    streamInfo.intent_ = PREVIEW;
839094332d3Sopenharmony_ci    streamInfo.tunneledMode_ = 5; // 5:tunnel mode
840094332d3Sopenharmony_ci    streamInfo.bufferQueue_ = new BufferProducerSequenceable(cameraBase_->streamCustomerPreview_->CreateProducer());
841094332d3Sopenharmony_ci    ASSERT_NE(streamInfo.bufferQueue_, nullptr);
842094332d3Sopenharmony_ci    streamInfo.bufferQueue_->producer_->SetQueueSize(8); // 8:set bufferQueue size
843094332d3Sopenharmony_ci    streamInfos.push_back(streamInfo);
844094332d3Sopenharmony_ci    if (cameraBase_->streamCustomerVideo_ == nullptr) {
845094332d3Sopenharmony_ci        cameraBase_->streamCustomerVideo_ = std::make_shared<StreamCustomer>();
846094332d3Sopenharmony_ci    }
847094332d3Sopenharmony_ci    StreamInfo streamInfoVideo = {};
848094332d3Sopenharmony_ci    streamInfoVideo.streamId_ = cameraBase_->STREAM_ID_VIDEO;
849094332d3Sopenharmony_ci    streamInfoVideo.width_ = 1280; // 1280:picture width
850094332d3Sopenharmony_ci    streamInfoVideo.height_ = 720; // 720:picture height
851094332d3Sopenharmony_ci    streamInfoVideo.format_ = PIXEL_FMT_RGBA_8888;
852094332d3Sopenharmony_ci    streamInfoVideo.dataspace_ = 8; // 8:picture dataspace
853094332d3Sopenharmony_ci    streamInfoVideo.intent_ = VIDEO;
854094332d3Sopenharmony_ci    streamInfoVideo.encodeType_ = ENCODE_TYPE_H264;
855094332d3Sopenharmony_ci    streamInfoVideo.tunneledMode_ = 5; // 5:tunnel mode
856094332d3Sopenharmony_ci    streamInfoVideo.bufferQueue_ = new BufferProducerSequenceable(cameraBase_->streamCustomerVideo_->CreateProducer());
857094332d3Sopenharmony_ci    ASSERT_NE(streamInfoVideo.bufferQueue_, nullptr);
858094332d3Sopenharmony_ci    streamInfoVideo.bufferQueue_->producer_->SetQueueSize(8); // 8:set bufferQueue size
859094332d3Sopenharmony_ci    streamInfos.push_back(streamInfoVideo);
860094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CreateStreams(streamInfos);
861094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
862094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CommitStreams(NORMAL, cameraBase_->ability_);
863094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
864094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
865094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
866094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO};
867094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO};
868094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
869094332d3Sopenharmony_ci}
870094332d3Sopenharmony_ci
871094332d3Sopenharmony_ci/**
872094332d3Sopenharmony_ci  * @tc.name: USB Camera
873094332d3Sopenharmony_ci  * @tc.desc: UpdateSettings, fps.
874094332d3Sopenharmony_ci  * @tc.level: Level0
875094332d3Sopenharmony_ci  * @tc.size: MediumTest
876094332d3Sopenharmony_ci  * @tc.type: Function
877094332d3Sopenharmony_ci  */
878094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0028)
879094332d3Sopenharmony_ci{
880094332d3Sopenharmony_ci    // Get the device manager
881094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
882094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
883094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
884094332d3Sopenharmony_ci    }
885094332d3Sopenharmony_ci    // get the stream manager
886094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
887094332d3Sopenharmony_ci
888094332d3Sopenharmony_ci    // start stream
889094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, VIDEO};
890094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
891094332d3Sopenharmony_ci
892094332d3Sopenharmony_ci    // updateSettings
893094332d3Sopenharmony_ci    const uint32_t ITEM_CAPACITY = 100;
894094332d3Sopenharmony_ci    const uint32_t DATA_CAPACITY = 2000;
895094332d3Sopenharmony_ci    const int32_t FPS_VALUE = 10;
896094332d3Sopenharmony_ci    std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(
897094332d3Sopenharmony_ci        ITEM_CAPACITY, DATA_CAPACITY);
898094332d3Sopenharmony_ci    std::vector<int32_t> fpsRange;
899094332d3Sopenharmony_ci    fpsRange.push_back(FPS_VALUE);
900094332d3Sopenharmony_ci    fpsRange.push_back(FPS_VALUE);
901094332d3Sopenharmony_ci    meta->addEntry(OHOS_CONTROL_FPS_RANGES, fpsRange.data(), fpsRange.size());
902094332d3Sopenharmony_ci    const int32_t DEVICE_STREAM_ID = 0;
903094332d3Sopenharmony_ci    meta->addEntry(OHOS_CAMERA_STREAM_ID, &DEVICE_STREAM_ID, 1);
904094332d3Sopenharmony_ci    std::vector<uint8_t> setting;
905094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(meta, setting);
906094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->cameraDevice->UpdateSettings(setting);
907094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
908094332d3Sopenharmony_ci
909094332d3Sopenharmony_ci    // get preview
910094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
911094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
912094332d3Sopenharmony_ci
913094332d3Sopenharmony_ci    // release stream
914094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO};
915094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO};
916094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
917094332d3Sopenharmony_ci}
918094332d3Sopenharmony_ci
919094332d3Sopenharmony_ci/**
920094332d3Sopenharmony_ci  * @tc.name: USB Camera
921094332d3Sopenharmony_ci  * @tc.desc: Commit 3 streams together, Preview,Video and still_capture streams, isStreaming is true.
922094332d3Sopenharmony_ci  * @tc.level: Level0
923094332d3Sopenharmony_ci  * @tc.size: MediumTest
924094332d3Sopenharmony_ci  * @tc.type: Function
925094332d3Sopenharmony_ci  */
926094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0029)
927094332d3Sopenharmony_ci{
928094332d3Sopenharmony_ci    // Get the device manager
929094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
930094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
931094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
932094332d3Sopenharmony_ci    }
933094332d3Sopenharmony_ci    // Get the stream manager
934094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
935094332d3Sopenharmony_ci    // start stream
936094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE, VIDEO};
937094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
938094332d3Sopenharmony_ci    // Get preview
939094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
940094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
941094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
942094332d3Sopenharmony_ci    // release stream
943094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE,
944094332d3Sopenharmony_ci        cameraBase_->CAPTURE_ID_VIDEO};
945094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE,
946094332d3Sopenharmony_ci        cameraBase_->STREAM_ID_VIDEO};
947094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
948094332d3Sopenharmony_ci}
949094332d3Sopenharmony_ci
950094332d3Sopenharmony_ci/**
951094332d3Sopenharmony_ci  * @tc.name: USB Camera
952094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_SENSOR_ORIENTATION
953094332d3Sopenharmony_ci  * @tc.level: Level0
954094332d3Sopenharmony_ci  * @tc.size: MediumTest
955094332d3Sopenharmony_ci  * @tc.type: Function
956094332d3Sopenharmony_ci  */
957094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0030)
958094332d3Sopenharmony_ci{
959094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
960094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
961094332d3Sopenharmony_ci    }
962094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
963094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
964094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
965094332d3Sopenharmony_ci    camera_metadata_item_t entry;
966094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_SENSOR_ORIENTATION, &entry);
967094332d3Sopenharmony_ci    EXPECT_EQ(ret, CAM_META_SUCCESS);
968094332d3Sopenharmony_ci    std::cout << "OHOS_SENSOR_ORIENTATION value is " << entry.data.i32[0] << std::endl;
969094332d3Sopenharmony_ci    EXPECT_TRUE(entry.data.i32[0] == 0);
970094332d3Sopenharmony_ci}
971094332d3Sopenharmony_ci
972094332d3Sopenharmony_ci/**
973094332d3Sopenharmony_ci  * @tc.name: USB Camera
974094332d3Sopenharmony_ci  * @tc.desc: get value of OHOS_ABILITY_FOCAL_LENGTH
975094332d3Sopenharmony_ci  * @tc.level: Level0
976094332d3Sopenharmony_ci  * @tc.size: MediumTest
977094332d3Sopenharmony_ci  * @tc.type: Function
978094332d3Sopenharmony_ci  */
979094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0031)
980094332d3Sopenharmony_ci{
981094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
982094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
983094332d3Sopenharmony_ci    }
984094332d3Sopenharmony_ci    ability_ = cameraBase_->GetCameraAbility();
985094332d3Sopenharmony_ci    EXPECT_NE(ability_, nullptr);
986094332d3Sopenharmony_ci    common_metadata_header_t *data = ability_->get();
987094332d3Sopenharmony_ci    camera_metadata_item_t entry;
988094332d3Sopenharmony_ci    int ret = FindCameraMetadataItem(data, OHOS_ABILITY_FOCAL_LENGTH, &entry);
989094332d3Sopenharmony_ci    if (ret == CAM_META_SUCCESS) {
990094332d3Sopenharmony_ci        std::cout << "log OHOS_ABILITY_FOCAL_LENGTH: count is " << (int)entry.count << std::endl;
991094332d3Sopenharmony_ci        std::cout << "log focal length value: " << entry.data.f[0] << std::endl;
992094332d3Sopenharmony_ci    } else if (ret == CAM_META_ITEM_NOT_FOUND) {
993094332d3Sopenharmony_ci        std::cout << "log OHOS_ABILITY_FOCAL_LENGTH is not support" << std::endl;
994094332d3Sopenharmony_ci    }
995094332d3Sopenharmony_ci}
996094332d3Sopenharmony_ci
997094332d3Sopenharmony_ci/**
998094332d3Sopenharmony_ci  * @tc.name: USB Camera
999094332d3Sopenharmony_ci  * @tc.desc: Commit 2 streams together, Preview and still_capture streams, isStreaming is true.
1000094332d3Sopenharmony_ci  * @tc.level: Level0
1001094332d3Sopenharmony_ci  * @tc.size: MediumTest
1002094332d3Sopenharmony_ci  * @tc.type: Function
1003094332d3Sopenharmony_ci  */
1004094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0032)
1005094332d3Sopenharmony_ci{
1006094332d3Sopenharmony_ci    // Get the device manager
1007094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1008094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1009094332d3Sopenharmony_ci    // 1:number of connected cameras
1010094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1011094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1012094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1013094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1014094332d3Sopenharmony_ci        }
1015094332d3Sopenharmony_ci        cameraBase_->rc = cameraBase_->SelectOpenCamera(usbCameraIds[i]);
1016094332d3Sopenharmony_ci        ASSERT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR);
1017094332d3Sopenharmony_ci        // Get the stream manager
1018094332d3Sopenharmony_ci        cameraBase_->AchieveStreamOperator();
1019094332d3Sopenharmony_ci        // start stream
1020094332d3Sopenharmony_ci        cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
1021094332d3Sopenharmony_ci        cameraBase_->StartStream(cameraBase_->intents);
1022094332d3Sopenharmony_ci        // Get preview
1023094332d3Sopenharmony_ci        cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
1024094332d3Sopenharmony_ci        cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
1025094332d3Sopenharmony_ci        // release stream
1026094332d3Sopenharmony_ci        cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
1027094332d3Sopenharmony_ci        cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
1028094332d3Sopenharmony_ci        cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
1029094332d3Sopenharmony_ci    }
1030094332d3Sopenharmony_ci}
1031094332d3Sopenharmony_ci
1032094332d3Sopenharmony_ci/**
1033094332d3Sopenharmony_ci  * @tc.name: USB Camera
1034094332d3Sopenharmony_ci  * @tc.desc: Open the capture stream for both cameras at the same time.
1035094332d3Sopenharmony_ci  * @tc.level: Level0
1036094332d3Sopenharmony_ci  * @tc.size: MediumTest
1037094332d3Sopenharmony_ci  * @tc.type: Function
1038094332d3Sopenharmony_ci  */
1039094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0033)
1040094332d3Sopenharmony_ci{
1041094332d3Sopenharmony_ci    // Get the device manager
1042094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1043094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1044094332d3Sopenharmony_ci    // 1:number of connected cameras
1045094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1046094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1047094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1048094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1049094332d3Sopenharmony_ci        }
1050094332d3Sopenharmony_ci        cameraBase_->rc = cameraBase_->SelectOpenCamera(usbCameraIds[i]);
1051094332d3Sopenharmony_ci        ASSERT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR);
1052094332d3Sopenharmony_ci        // Get the stream manager
1053094332d3Sopenharmony_ci        cameraBase_->AchieveStreamOperator();
1054094332d3Sopenharmony_ci        // start stream
1055094332d3Sopenharmony_ci        cameraBase_->intents = {PREVIEW, STILL_CAPTURE, VIDEO};
1056094332d3Sopenharmony_ci        cameraBase_->StartStream(cameraBase_->intents);
1057094332d3Sopenharmony_ci        // Get preview
1058094332d3Sopenharmony_ci        cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
1059094332d3Sopenharmony_ci        cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
1060094332d3Sopenharmony_ci        cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
1061094332d3Sopenharmony_ci        // release stream
1062094332d3Sopenharmony_ci        cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE,
1063094332d3Sopenharmony_ci        cameraBase_->CAPTURE_ID_VIDEO};
1064094332d3Sopenharmony_ci        cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE,
1065094332d3Sopenharmony_ci        cameraBase_->STREAM_ID_VIDEO};
1066094332d3Sopenharmony_ci        cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
1067094332d3Sopenharmony_ci    }
1068094332d3Sopenharmony_ci}
1069094332d3Sopenharmony_ci
1070094332d3Sopenharmony_ci/**
1071094332d3Sopenharmony_ci  * @tc.name: USB Camera
1072094332d3Sopenharmony_ci  * @tc.desc: One camera starts capturing and the other camera starts recording.
1073094332d3Sopenharmony_ci  * @tc.level: Level0
1074094332d3Sopenharmony_ci  * @tc.size: MediumTest
1075094332d3Sopenharmony_ci  * @tc.type: Function
1076094332d3Sopenharmony_ci  */
1077094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0034)
1078094332d3Sopenharmony_ci{
1079094332d3Sopenharmony_ci    // Get the device manager
1080094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1081094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1082094332d3Sopenharmony_ci    // 1:number of connected cameras
1083094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1084094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
1085094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1086094332d3Sopenharmony_ci    }
1087094332d3Sopenharmony_ci    cameraBase_->rc = cameraBase_->SelectOpenCamera(usbCameraIds[0]);
1088094332d3Sopenharmony_ci    ASSERT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR);
1089094332d3Sopenharmony_ci    // Get the stream manager
1090094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
1091094332d3Sopenharmony_ci    // start stream
1092094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
1093094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
1094094332d3Sopenharmony_ci    // Get preview
1095094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
1096094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
1097094332d3Sopenharmony_ci    // release stream
1098094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
1099094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
1100094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
1101094332d3Sopenharmony_ci
1102094332d3Sopenharmony_ci    cameraBase_->rc = cameraBase_->SelectOpenCamera(usbCameraIds[1]);
1103094332d3Sopenharmony_ci    ASSERT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR);
1104094332d3Sopenharmony_ci    // Get the stream manager
1105094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
1106094332d3Sopenharmony_ci    // start stream
1107094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE, VIDEO};
1108094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
1109094332d3Sopenharmony_ci    // Get preview
1110094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
1111094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
1112094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
1113094332d3Sopenharmony_ci    // release stream
1114094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE,
1115094332d3Sopenharmony_ci    cameraBase_->CAPTURE_ID_VIDEO};
1116094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE,
1117094332d3Sopenharmony_ci    cameraBase_->STREAM_ID_VIDEO};
1118094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
1119094332d3Sopenharmony_ci}
1120094332d3Sopenharmony_ci
1121094332d3Sopenharmony_ci/**
1122094332d3Sopenharmony_ci  * @tc.name: USB Camera
1123094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_ABILITY_ZOOM_RATIO_RANGE
1124094332d3Sopenharmony_ci  * @tc.level: Level0
1125094332d3Sopenharmony_ci  * @tc.size: MediumTest
1126094332d3Sopenharmony_ci  * @tc.type: Function
1127094332d3Sopenharmony_ci  */
1128094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0035)
1129094332d3Sopenharmony_ci{
1130094332d3Sopenharmony_ci    // Get the device manager
1131094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1132094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1133094332d3Sopenharmony_ci    // 1:number of connected cameras
1134094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1135094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1136094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1137094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1138094332d3Sopenharmony_ci        }
1139094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1140094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1141094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1142094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1143094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_ABILITY_ZOOM_RATIO_RANGE, &entry);
1144094332d3Sopenharmony_ci        if (ret == CAM_META_SUCCESS) {
1145094332d3Sopenharmony_ci            CAMERA_LOGD("OHOS_ABILITY_ZOOM_RATIO_RANGE: count is %{public}d ", entry.count);
1146094332d3Sopenharmony_ci            CAMERA_LOGD("Zoom ratio range: [%{public}d,[%{public}d]", entry.data.f[0], entry.data.f[1]);
1147094332d3Sopenharmony_ci        } else if (ret == CAM_META_ITEM_NOT_FOUND) {
1148094332d3Sopenharmony_ci            CAMERA_LOGD("OHOS_ABILITY_ZOOM_RATIO_RANGE is not support");
1149094332d3Sopenharmony_ci        }
1150094332d3Sopenharmony_ci    }
1151094332d3Sopenharmony_ci}
1152094332d3Sopenharmony_ci
1153094332d3Sopenharmony_ci/**
1154094332d3Sopenharmony_ci  * @tc.name: USB Camera
1155094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_ABILITY_FLASH_AVAILABLE
1156094332d3Sopenharmony_ci  * @tc.level: Level0
1157094332d3Sopenharmony_ci  * @tc.size: MediumTest
1158094332d3Sopenharmony_ci  * @tc.type: Function
1159094332d3Sopenharmony_ci  */
1160094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0036)
1161094332d3Sopenharmony_ci{
1162094332d3Sopenharmony_ci    // Get the device manager
1163094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1164094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1165094332d3Sopenharmony_ci    // 1:number of connected cameras
1166094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1167094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1168094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1169094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1170094332d3Sopenharmony_ci        }
1171094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1172094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1173094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1174094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1175094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_ABILITY_FLASH_AVAILABLE, &entry);
1176094332d3Sopenharmony_ci        EXPECT_EQ(ret, CAM_META_SUCCESS);
1177094332d3Sopenharmony_ci        CAMERA_LOGD("OHOS_ABILITY_FLASH_AVAILABLE value is %{public}d", entry.data.u8[0]);
1178094332d3Sopenharmony_ci    }
1179094332d3Sopenharmony_ci}
1180094332d3Sopenharmony_ci
1181094332d3Sopenharmony_ci/**
1182094332d3Sopenharmony_ci  * @tc.name: USB Camera
1183094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_ABILITY_VIDEO_STABILIZATION_MODES
1184094332d3Sopenharmony_ci  * @tc.level: Level0
1185094332d3Sopenharmony_ci  * @tc.size: MediumTest
1186094332d3Sopenharmony_ci  * @tc.type: Function
1187094332d3Sopenharmony_ci  */
1188094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0037)
1189094332d3Sopenharmony_ci{
1190094332d3Sopenharmony_ci    // Get the device manager
1191094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1192094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1193094332d3Sopenharmony_ci    // 1:number of connected cameras
1194094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1195094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1196094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1197094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1198094332d3Sopenharmony_ci        }
1199094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1200094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1201094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1202094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1203094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_ABILITY_VIDEO_STABILIZATION_MODES, &entry);
1204094332d3Sopenharmony_ci        if (ret == CAM_META_SUCCESS) {
1205094332d3Sopenharmony_ci            for (int i = 0; i < entry.count; i++) {
1206094332d3Sopenharmony_ci                CAMERA_LOGD("OHOS_ABILITY_VIDEO_STABILIZATION_MODES value is %{public}d", entry.data.u8[i]);
1207094332d3Sopenharmony_ci            }
1208094332d3Sopenharmony_ci        } else if (ret == CAM_META_ITEM_NOT_FOUND) {
1209094332d3Sopenharmony_ci            CAMERA_LOGD("OHOS_ABILITY_VIDEO_STABILIZATION_MODES is not support");
1210094332d3Sopenharmony_ci        }
1211094332d3Sopenharmony_ci    }
1212094332d3Sopenharmony_ci}
1213094332d3Sopenharmony_ci
1214094332d3Sopenharmony_ci/**
1215094332d3Sopenharmony_ci  * @tc.name: USB Camera
1216094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_ABILITY_FLASH_MODES
1217094332d3Sopenharmony_ci  * @tc.level: Level0
1218094332d3Sopenharmony_ci  * @tc.size: MediumTest
1219094332d3Sopenharmony_ci  * @tc.type: Function
1220094332d3Sopenharmony_ci  */
1221094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0038)
1222094332d3Sopenharmony_ci{
1223094332d3Sopenharmony_ci    // Get the device manager
1224094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1225094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1226094332d3Sopenharmony_ci    // 1:number of connected cameras
1227094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1228094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1229094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1230094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1231094332d3Sopenharmony_ci        }
1232094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1233094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1234094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1235094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_ABILITY_FLASH_MODES, &entry);
1236094332d3Sopenharmony_ci        if (ret == CAM_META_SUCCESS) {
1237094332d3Sopenharmony_ci            CAMERA_LOGD("supported flash mode list:");
1238094332d3Sopenharmony_ci            for (int i = 0; i < entry.count; i++) {
1239094332d3Sopenharmony_ci                CAMERA_LOGD("%{public}d", entry.data.u8[i]);
1240094332d3Sopenharmony_ci            }
1241094332d3Sopenharmony_ci        } else if (ret == CAM_META_ITEM_NOT_FOUND) {
1242094332d3Sopenharmony_ci            CAMERA_LOGD("OHOS_ABILITY_FLASH_MODES is not support");
1243094332d3Sopenharmony_ci        }
1244094332d3Sopenharmony_ci    }
1245094332d3Sopenharmony_ci}
1246094332d3Sopenharmony_ci
1247094332d3Sopenharmony_ci/**
1248094332d3Sopenharmony_ci  * @tc.name: USB Camera
1249094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_ABILITY_FOCUS_MODES
1250094332d3Sopenharmony_ci  * @tc.level: Level0
1251094332d3Sopenharmony_ci  * @tc.size: MediumTest
1252094332d3Sopenharmony_ci  * @tc.type: Function
1253094332d3Sopenharmony_ci  */
1254094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0039)
1255094332d3Sopenharmony_ci{
1256094332d3Sopenharmony_ci    // Get the device manager
1257094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1258094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1259094332d3Sopenharmony_ci    // 1:number of connected cameras
1260094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1261094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1262094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1263094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1264094332d3Sopenharmony_ci        }
1265094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1266094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1267094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1268094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1269094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_ABILITY_FOCUS_MODES, &entry);
1270094332d3Sopenharmony_ci        if (ret == CAM_META_SUCCESS) {
1271094332d3Sopenharmony_ci            CAMERA_LOGD("supported flash mode list:");
1272094332d3Sopenharmony_ci            for (int i = 0; i < entry.count; i++) {
1273094332d3Sopenharmony_ci                CAMERA_LOGD("%{public}d", entry.data.u8[i]);
1274094332d3Sopenharmony_ci            }
1275094332d3Sopenharmony_ci        } else if (ret == CAM_META_ITEM_NOT_FOUND) {
1276094332d3Sopenharmony_ci            CAMERA_LOGD("OHOS_ABILITY_FOCUS_MODES is not support");
1277094332d3Sopenharmony_ci        }
1278094332d3Sopenharmony_ci    }
1279094332d3Sopenharmony_ci}
1280094332d3Sopenharmony_ci
1281094332d3Sopenharmony_ci/**
1282094332d3Sopenharmony_ci  * @tc.name: USB Camera
1283094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_ABILITY_EXPOSURE_MODES
1284094332d3Sopenharmony_ci  * @tc.level: Level0
1285094332d3Sopenharmony_ci  * @tc.size: MediumTest
1286094332d3Sopenharmony_ci  * @tc.type: Function
1287094332d3Sopenharmony_ci  */
1288094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0040)
1289094332d3Sopenharmony_ci{
1290094332d3Sopenharmony_ci    // Get the device manager
1291094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1292094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1293094332d3Sopenharmony_ci    // 1:number of connected cameras
1294094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1295094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1296094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1297094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1298094332d3Sopenharmony_ci        }
1299094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1300094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1301094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1302094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1303094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_ABILITY_EXPOSURE_MODES, &entry);
1304094332d3Sopenharmony_ci        if (ret == CAM_META_SUCCESS) {
1305094332d3Sopenharmony_ci            CAMERA_LOGD("supported flash mode list:");
1306094332d3Sopenharmony_ci            for (int i = 0; i < entry.count; i++) {
1307094332d3Sopenharmony_ci                CAMERA_LOGD("%{public}d ", entry.data.u8[i]);
1308094332d3Sopenharmony_ci            }
1309094332d3Sopenharmony_ci        } else if (ret == CAM_META_ITEM_NOT_FOUND) {
1310094332d3Sopenharmony_ci            CAMERA_LOGD("OHOS_ABILITY_EXPOSURE_MODES is not support");
1311094332d3Sopenharmony_ci        }
1312094332d3Sopenharmony_ci    }
1313094332d3Sopenharmony_ci}
1314094332d3Sopenharmony_ci
1315094332d3Sopenharmony_ci/**
1316094332d3Sopenharmony_ci  * @tc.name: USB Camera
1317094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_CONTROL_CAPTURE_MIRROR_SUPPORTED
1318094332d3Sopenharmony_ci  * @tc.level: Level0
1319094332d3Sopenharmony_ci  * @tc.size: MediumTest
1320094332d3Sopenharmony_ci  * @tc.type: Function
1321094332d3Sopenharmony_ci  */
1322094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0041)
1323094332d3Sopenharmony_ci{
1324094332d3Sopenharmony_ci    // Get the device manager
1325094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1326094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1327094332d3Sopenharmony_ci    // 1:number of connected cameras
1328094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1329094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1330094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1331094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1332094332d3Sopenharmony_ci        }
1333094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1334094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1335094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1336094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1337094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_CONTROL_CAPTURE_MIRROR_SUPPORTED, &entry);
1338094332d3Sopenharmony_ci        EXPECT_EQ(ret, CAM_META_SUCCESS);
1339094332d3Sopenharmony_ci        CAMERA_LOGD("capture mirror supported is :");
1340094332d3Sopenharmony_ci        for (int i = 0; i < entry.count; i++) {
1341094332d3Sopenharmony_ci            CAMERA_LOGD("%{public}d", entry.data.u8[i]);
1342094332d3Sopenharmony_ci        }
1343094332d3Sopenharmony_ci    }
1344094332d3Sopenharmony_ci}
1345094332d3Sopenharmony_ci
1346094332d3Sopenharmony_ci/**
1347094332d3Sopenharmony_ci  * @tc.name: USB Camera
1348094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_ABILITY_MUTE_MODES
1349094332d3Sopenharmony_ci  * @tc.level: Level0
1350094332d3Sopenharmony_ci  * @tc.size: MediumTest
1351094332d3Sopenharmony_ci  * @tc.type: Function
1352094332d3Sopenharmony_ci  */
1353094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0042)
1354094332d3Sopenharmony_ci{
1355094332d3Sopenharmony_ci    // Get the device manager
1356094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1357094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1358094332d3Sopenharmony_ci    // 1:number of connected cameras
1359094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1360094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1361094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1362094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1363094332d3Sopenharmony_ci        }
1364094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1365094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1366094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1367094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1368094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_ABILITY_MUTE_MODES, &entry);
1369094332d3Sopenharmony_ci        if (ret == CAM_META_SUCCESS) {
1370094332d3Sopenharmony_ci            CAMERA_LOGD("supported flash mode list:");
1371094332d3Sopenharmony_ci            for (int i = 0; i < entry.count; i++) {
1372094332d3Sopenharmony_ci                CAMERA_LOGD("%{public}d", entry.data.u8[i]);
1373094332d3Sopenharmony_ci            }
1374094332d3Sopenharmony_ci        } else if (ret == CAM_META_ITEM_NOT_FOUND) {
1375094332d3Sopenharmony_ci            CAMERA_LOGD("OHOS_ABILITY_MUTE_MODES is not support");
1376094332d3Sopenharmony_ci        }
1377094332d3Sopenharmony_ci    }
1378094332d3Sopenharmony_ci}
1379094332d3Sopenharmony_ci
1380094332d3Sopenharmony_ci/**
1381094332d3Sopenharmony_ci  * @tc.name: USB Camera
1382094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_ABILITY_FPS_RANGES
1383094332d3Sopenharmony_ci  * @tc.level: Level0
1384094332d3Sopenharmony_ci  * @tc.size: MediumTest
1385094332d3Sopenharmony_ci  * @tc.type: Function
1386094332d3Sopenharmony_ci  */
1387094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0043)
1388094332d3Sopenharmony_ci{
1389094332d3Sopenharmony_ci    // Get the device manager
1390094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1391094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1392094332d3Sopenharmony_ci    // 1:number of connected cameras
1393094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1394094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1395094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1396094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1397094332d3Sopenharmony_ci        }
1398094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1399094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1400094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1401094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1402094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_ABILITY_FPS_RANGES, &entry);
1403094332d3Sopenharmony_ci        EXPECT_EQ(ret, CAM_META_SUCCESS);
1404094332d3Sopenharmony_ci        CAMERA_LOGD("supported fps ranges list: [ %{public}d, %{public}d ]", entry.data.i32[0], entry.data.i32[1]);
1405094332d3Sopenharmony_ci    }
1406094332d3Sopenharmony_ci}
1407094332d3Sopenharmony_ci
1408094332d3Sopenharmony_ci/**
1409094332d3Sopenharmony_ci  * @tc.name: USB Camera
1410094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_JPEG_ORIENTATION
1411094332d3Sopenharmony_ci  * @tc.level: Level0
1412094332d3Sopenharmony_ci  * @tc.size: MediumTest
1413094332d3Sopenharmony_ci  * @tc.type: Function
1414094332d3Sopenharmony_ci  */
1415094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0044)
1416094332d3Sopenharmony_ci{
1417094332d3Sopenharmony_ci    // Get the device manager
1418094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1419094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1420094332d3Sopenharmony_ci    // 1:number of connected cameras
1421094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1422094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1423094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1424094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1425094332d3Sopenharmony_ci        }
1426094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1427094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1428094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1429094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1430094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_JPEG_ORIENTATION, &entry);
1431094332d3Sopenharmony_ci        EXPECT_EQ(ret, CAM_META_SUCCESS);
1432094332d3Sopenharmony_ci        CAMERA_LOGD("OHOS_JPEG_ORIENTATION value is %{public}d", entry.data.i32[0]);
1433094332d3Sopenharmony_ci    }
1434094332d3Sopenharmony_ci}
1435094332d3Sopenharmony_ci
1436094332d3Sopenharmony_ci/**
1437094332d3Sopenharmony_ci  * @tc.name: USB Camera
1438094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_JPEG_QUALITY
1439094332d3Sopenharmony_ci  * @tc.level: Level0
1440094332d3Sopenharmony_ci  * @tc.size: MediumTest
1441094332d3Sopenharmony_ci  * @tc.type: Function
1442094332d3Sopenharmony_ci  */
1443094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0045)
1444094332d3Sopenharmony_ci{
1445094332d3Sopenharmony_ci    // Get the device manager
1446094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1447094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1448094332d3Sopenharmony_ci    // 1:number of connected cameras
1449094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1450094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1451094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1452094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1453094332d3Sopenharmony_ci        }
1454094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1455094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1456094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1457094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1458094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_JPEG_QUALITY, &entry);
1459094332d3Sopenharmony_ci        EXPECT_EQ(ret, CAM_META_SUCCESS);
1460094332d3Sopenharmony_ci        CAMERA_LOGD("OHOS_JPEG_QUALITY value is %{public}d", entry.data.i32[0]);
1461094332d3Sopenharmony_ci    }
1462094332d3Sopenharmony_ci}
1463094332d3Sopenharmony_ci
1464094332d3Sopenharmony_ci/**
1465094332d3Sopenharmony_ci  * @tc.name: USB Camera
1466094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_ABILITY_STREAM_AVAILABLE_BASIC_CONFIGURATIONS
1467094332d3Sopenharmony_ci  * @tc.level: Level0
1468094332d3Sopenharmony_ci  * @tc.size: MediumTest
1469094332d3Sopenharmony_ci  * @tc.type: Function
1470094332d3Sopenharmony_ci  */
1471094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0046)
1472094332d3Sopenharmony_ci{
1473094332d3Sopenharmony_ci    // Get the device manager
1474094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1475094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1476094332d3Sopenharmony_ci    // 1:number of connected cameras
1477094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1478094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1479094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1480094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1481094332d3Sopenharmony_ci        }
1482094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1483094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1484094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1485094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1486094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_ABILITY_STREAM_AVAILABLE_BASIC_CONFIGURATIONS, &entry);
1487094332d3Sopenharmony_ci        EXPECT_EQ(ret, CAM_META_SUCCESS);
1488094332d3Sopenharmony_ci        CAMERA_LOGD("OHOS_ABILITY_STREAM_AVAILABLE_BASIC_CONFIGURATIONS value is %{public}d", entry.data.u8[0]);
1489094332d3Sopenharmony_ci        EXPECT_TRUE(entry.data.u8[0] == OHOS_CAMERA_FORMAT_RGBA_8888);
1490094332d3Sopenharmony_ci    }
1491094332d3Sopenharmony_ci}
1492094332d3Sopenharmony_ci
1493094332d3Sopenharmony_ci/**
1494094332d3Sopenharmony_ci  * @tc.name: USB Camera
1495094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_ABILITY_STREAM_AVAILABLE_EXTEND_CONFIGURATIONS
1496094332d3Sopenharmony_ci  * @tc.level: Level0
1497094332d3Sopenharmony_ci  * @tc.size: MediumTest
1498094332d3Sopenharmony_ci  * @tc.type: Function
1499094332d3Sopenharmony_ci  */
1500094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0047)
1501094332d3Sopenharmony_ci{
1502094332d3Sopenharmony_ci    // Get the device manager
1503094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1504094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1505094332d3Sopenharmony_ci    // 1:number of connected cameras
1506094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1507094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1508094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1509094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1510094332d3Sopenharmony_ci        }
1511094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1512094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1513094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1514094332d3Sopenharmony_ci        EXPECT_NE(data, nullptr);
1515094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1516094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_ABILITY_STREAM_AVAILABLE_EXTEND_CONFIGURATIONS, &entry);
1517094332d3Sopenharmony_ci        if (ret == 0 && entry.data.i32 != nullptr && entry.count > 0) {
1518094332d3Sopenharmony_ci            CAMERA_LOGD("print tag<OHOS_ABILITY_STREAM_AVAILABLE_EXTEND_CONFIGURATIONS> value start.");
1519094332d3Sopenharmony_ci            const size_t STEP = 10; // print step
1520094332d3Sopenharmony_ci            CAMERA_LOGD("count: %{public}s", entry.count);
1521094332d3Sopenharmony_ci            for (size_t a = 0; a < entry.count; a++) {
1522094332d3Sopenharmony_ci                CAMERA_LOGD("%{public}d", entry.data.i32[a]);
1523094332d3Sopenharmony_ci            }
1524094332d3Sopenharmony_ci            CAMERA_LOGE("print tag<OHOS_ABILITY_STREAM_AVAILABLE_EXTEND_CONFIGURATIONS> value end.");
1525094332d3Sopenharmony_ci        }
1526094332d3Sopenharmony_ci    }
1527094332d3Sopenharmony_ci}
1528094332d3Sopenharmony_ci
1529094332d3Sopenharmony_ci/**
1530094332d3Sopenharmony_ci  * @tc.name: USB Camera
1531094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_ABILITY_FOCAL_LENGTH
1532094332d3Sopenharmony_ci  * @tc.level: Level0
1533094332d3Sopenharmony_ci  * @tc.size: MediumTest
1534094332d3Sopenharmony_ci  * @tc.type: Function
1535094332d3Sopenharmony_ci  */
1536094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0048)
1537094332d3Sopenharmony_ci{
1538094332d3Sopenharmony_ci    // Get the device manager
1539094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1540094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1541094332d3Sopenharmony_ci    // 1:number of connected cameras
1542094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1543094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1544094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1545094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1546094332d3Sopenharmony_ci        }
1547094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1548094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1549094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1550094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1551094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_ABILITY_FOCAL_LENGTH, &entry);
1552094332d3Sopenharmony_ci        if (ret == CAM_META_SUCCESS) {
1553094332d3Sopenharmony_ci            CAMERA_LOGD("log OHOS_ABILITY_FOCAL_LENGTH: count is %{public}s", entry.count);
1554094332d3Sopenharmony_ci            CAMERA_LOGD("log focal length value: %{pubilc}d", entry.data.f[0]);
1555094332d3Sopenharmony_ci        } else if (ret == CAM_META_ITEM_NOT_FOUND) {
1556094332d3Sopenharmony_ci            CAMERA_LOGD("log OHOS_ABILITY_FOCAL_LENGTH is not support");
1557094332d3Sopenharmony_ci        }
1558094332d3Sopenharmony_ci    }
1559094332d3Sopenharmony_ci}
1560094332d3Sopenharmony_ci
1561094332d3Sopenharmony_ci/**
1562094332d3Sopenharmony_ci  * @tc.name: USB Camera
1563094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_SENSOR_ORIENTATION
1564094332d3Sopenharmony_ci  * @tc.level: Level0
1565094332d3Sopenharmony_ci  * @tc.size: MediumTest
1566094332d3Sopenharmony_ci  * @tc.type: Function
1567094332d3Sopenharmony_ci  */
1568094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0049)
1569094332d3Sopenharmony_ci{
1570094332d3Sopenharmony_ci    // Get the device manager
1571094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1572094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1573094332d3Sopenharmony_ci    // 1:number of connected cameras
1574094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1575094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1576094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1577094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1578094332d3Sopenharmony_ci        }
1579094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1580094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1581094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1582094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1583094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_SENSOR_ORIENTATION, &entry);
1584094332d3Sopenharmony_ci        EXPECT_EQ(ret, CAM_META_SUCCESS);
1585094332d3Sopenharmony_ci        CAMERA_LOGD("OHOS_SENSOR_ORIENTATION value is %{pubilc}d", entry.data.i32[0]);
1586094332d3Sopenharmony_ci        EXPECT_TRUE(entry.data.i32[0] == 0);
1587094332d3Sopenharmony_ci    }
1588094332d3Sopenharmony_ci}
1589094332d3Sopenharmony_ci
1590094332d3Sopenharmony_ci/**
1591094332d3Sopenharmony_ci  * @tc.name: USB Camera
1592094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_CAMERA_TYPE_UNSPECIFIED
1593094332d3Sopenharmony_ci  * @tc.level: Level0
1594094332d3Sopenharmony_ci  * @tc.size: MediumTest
1595094332d3Sopenharmony_ci  * @tc.type: Function
1596094332d3Sopenharmony_ci  */
1597094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0050)
1598094332d3Sopenharmony_ci{
1599094332d3Sopenharmony_ci    // Get the device manager
1600094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1601094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1602094332d3Sopenharmony_ci    // 1:number of connected cameras
1603094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1604094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1605094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1606094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1607094332d3Sopenharmony_ci        }
1608094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1609094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1610094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1611094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1612094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_ABILITY_CAMERA_TYPE, &entry);
1613094332d3Sopenharmony_ci        EXPECT_EQ(ret, CAM_META_SUCCESS);
1614094332d3Sopenharmony_ci        CAMERA_LOGD("OHOS_ABILITY_CAMERA_TYPE value is %{pubilc}d", entry.data.u8[0]);
1615094332d3Sopenharmony_ci        EXPECT_TRUE(entry.data.u8[0] == OHOS_CAMERA_TYPE_UNSPECIFIED);
1616094332d3Sopenharmony_ci    }
1617094332d3Sopenharmony_ci}
1618094332d3Sopenharmony_ci
1619094332d3Sopenharmony_ci/**
1620094332d3Sopenharmony_ci  * @tc.name: USB Camera
1621094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_CAMERA_CONNECTION_TYPE_USB_PLUGIN
1622094332d3Sopenharmony_ci  * @tc.level: Level0
1623094332d3Sopenharmony_ci  * @tc.size: MediumTest
1624094332d3Sopenharmony_ci  * @tc.type: Function
1625094332d3Sopenharmony_ci  */
1626094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0051)
1627094332d3Sopenharmony_ci{
1628094332d3Sopenharmony_ci    // Get the device manager
1629094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1630094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1631094332d3Sopenharmony_ci    // 1:number of connected cameras
1632094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1633094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1634094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1635094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1636094332d3Sopenharmony_ci        }
1637094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1638094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1639094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1640094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1641094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_ABILITY_CAMERA_CONNECTION_TYPE, &entry);
1642094332d3Sopenharmony_ci        EXPECT_EQ(ret, CAM_META_SUCCESS);
1643094332d3Sopenharmony_ci        CAMERA_LOGD("OHOS_ABILITY_CAMERA_CONNECTION_TYPE value is %{pubilc}d", entry.data.u8[0]);
1644094332d3Sopenharmony_ci        EXPECT_TRUE(entry.data.u8[0] == OHOS_CAMERA_CONNECTION_TYPE_USB_PLUGIN);
1645094332d3Sopenharmony_ci    }
1646094332d3Sopenharmony_ci}
1647094332d3Sopenharmony_ci
1648094332d3Sopenharmony_ci/**
1649094332d3Sopenharmony_ci  * @tc.name: USB Camera
1650094332d3Sopenharmony_ci  * @tc.desc: Plug in multiple USB cameras,get value of OHOS_ABILITY_CAMERA_POSITION
1651094332d3Sopenharmony_ci  * @tc.level: Level0
1652094332d3Sopenharmony_ci  * @tc.size: MediumTest
1653094332d3Sopenharmony_ci  * @tc.type: Function
1654094332d3Sopenharmony_ci  */
1655094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0052)
1656094332d3Sopenharmony_ci{
1657094332d3Sopenharmony_ci    // Get the device manager
1658094332d3Sopenharmony_ci    std::vector<std::string> usbCameraIds;
1659094332d3Sopenharmony_ci    cameraBase_->cameraHost->GetCameraIds(usbCameraIds);
1660094332d3Sopenharmony_ci    // 1:number of connected cameras
1661094332d3Sopenharmony_ci    g_usbCameraExit = usbCameraIds.size() > 1;
1662094332d3Sopenharmony_ci    for (int i = 0; i < usbCameraIds.size(); i++) {
1663094332d3Sopenharmony_ci        if (!g_usbCameraExit) {
1664094332d3Sopenharmony_ci            GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1665094332d3Sopenharmony_ci        }
1666094332d3Sopenharmony_ci        ability_ = cameraBase_->GetCameraAbilityById(usbCameraIds[i]);
1667094332d3Sopenharmony_ci        EXPECT_NE(ability_, nullptr);
1668094332d3Sopenharmony_ci        common_metadata_header_t *data = ability_->get();
1669094332d3Sopenharmony_ci        camera_metadata_item_t entry;
1670094332d3Sopenharmony_ci        int ret = FindCameraMetadataItem(data, OHOS_ABILITY_CAMERA_POSITION, &entry);
1671094332d3Sopenharmony_ci        CAMERA_LOGD("OHOS_ABILITY_CAMERA_POSITION value is %{pubilc}d", entry.data.u8[0]);
1672094332d3Sopenharmony_ci        EXPECT_TRUE(entry.data.u8[0] == OHOS_CAMERA_POSITION_FRONT);
1673094332d3Sopenharmony_ci    }
1674094332d3Sopenharmony_ci}
1675094332d3Sopenharmony_ci
1676094332d3Sopenharmony_ci/**
1677094332d3Sopenharmony_ci  * @tc.name: USB Camera
1678094332d3Sopenharmony_ci  * @tc.desc: Commit 2 streams together, width = 1280, height = 720, expected success.
1679094332d3Sopenharmony_ci  * @tc.level: Level0
1680094332d3Sopenharmony_ci  * @tc.size: MediumTest
1681094332d3Sopenharmony_ci  * @tc.type: Function
1682094332d3Sopenharmony_ci  */
1683094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0053)
1684094332d3Sopenharmony_ci{
1685094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
1686094332d3Sopenharmony_ci    if (!g_usbCameraExit) {
1687094332d3Sopenharmony_ci        GTEST_SKIP() << "No usb camera plugged in" << std::endl;
1688094332d3Sopenharmony_ci    }
1689094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
1690094332d3Sopenharmony_ci    if (cameraBase_->streamCustomerPreview_ == nullptr) {
1691094332d3Sopenharmony_ci        cameraBase_->streamCustomerPreview_ = std::make_shared<StreamCustomer>();
1692094332d3Sopenharmony_ci    }
1693094332d3Sopenharmony_ci    std::vector<StreamInfo> streamInfos;
1694094332d3Sopenharmony_ci    StreamInfo streamInfo = {};
1695094332d3Sopenharmony_ci    streamInfo.streamId_ = cameraBase_->STREAM_ID_PREVIEW;
1696094332d3Sopenharmony_ci    streamInfo.width_ = 1280; // 1280:picture width
1697094332d3Sopenharmony_ci    streamInfo.height_ = 720; // 720:picture height
1698094332d3Sopenharmony_ci    streamInfo.format_ = PIXEL_FMT_RGBA_8888;
1699094332d3Sopenharmony_ci    streamInfo.dataspace_ = 8; // 8:picture dataspace
1700094332d3Sopenharmony_ci    streamInfo.intent_ = PREVIEW;
1701094332d3Sopenharmony_ci    streamInfo.tunneledMode_ = 5; // 5:tunnel mode
1702094332d3Sopenharmony_ci    streamInfo.bufferQueue_ = new BufferProducerSequenceable(cameraBase_->streamCustomerPreview_->CreateProducer());
1703094332d3Sopenharmony_ci    ASSERT_NE(streamInfo.bufferQueue_, nullptr);
1704094332d3Sopenharmony_ci    streamInfo.bufferQueue_->producer_->SetQueueSize(8); // 8:set bufferQueue size
1705094332d3Sopenharmony_ci    streamInfos.push_back(streamInfo);
1706094332d3Sopenharmony_ci    if (cameraBase_->streamCustomerCapture_ == nullptr) {
1707094332d3Sopenharmony_ci        cameraBase_->streamCustomerCapture_ = std::make_shared<StreamCustomer>();
1708094332d3Sopenharmony_ci    }
1709094332d3Sopenharmony_ci    StreamInfo streamInfoCapture = {};
1710094332d3Sopenharmony_ci    streamInfoCapture.streamId_ = cameraBase_->STREAM_ID_CAPTURE;
1711094332d3Sopenharmony_ci    streamInfoCapture.width_ = 1280; // 1280:picture width
1712094332d3Sopenharmony_ci    streamInfoCapture.height_ = 720; // 720:picture height
1713094332d3Sopenharmony_ci    streamInfoCapture.format_ = PIXEL_FMT_RGBA_8888;
1714094332d3Sopenharmony_ci    streamInfoCapture.dataspace_ = 8; // 8:picture dataspace
1715094332d3Sopenharmony_ci    streamInfoCapture.intent_ = STILL_CAPTURE;
1716094332d3Sopenharmony_ci    streamInfoCapture.encodeType_ = ENCODE_TYPE_JPEG;
1717094332d3Sopenharmony_ci    streamInfoCapture.tunneledMode_ = 5; // 5:tunnel mode
1718094332d3Sopenharmony_ci    streamInfoCapture.bufferQueue_ = new BufferProducerSequenceable(
1719094332d3Sopenharmony_ci        cameraBase_->streamCustomerCapture_->CreateProducer());
1720094332d3Sopenharmony_ci    ASSERT_NE(streamInfoCapture.bufferQueue_, nullptr);
1721094332d3Sopenharmony_ci    streamInfoCapture.bufferQueue_->producer_->SetQueueSize(8); // 8:set bufferQueue size
1722094332d3Sopenharmony_ci    streamInfos.push_back(streamInfoCapture);
1723094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CreateStreams(streamInfos);
1724094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1725094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CommitStreams(NORMAL, cameraBase_->ability_);
1726094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1727094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
1728094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
1729094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
1730094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
1731094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
1732094332d3Sopenharmony_ci}
1733094332d3Sopenharmony_ci
1734094332d3Sopenharmony_civoid StoreFile(const unsigned char *bufStart, const uint32_t size, const char* suffix)
1735094332d3Sopenharmony_ci{
1736094332d3Sopenharmony_ci    static int count = 0;
1737094332d3Sopenharmony_ci    constexpr uint32_t pathLen = 128;
1738094332d3Sopenharmony_ci    char path[pathLen] = {0};
1739094332d3Sopenharmony_ci    char prefix[] = "/data/";
1740094332d3Sopenharmony_ci    struct timeval start = {};
1741094332d3Sopenharmony_ci    gettimeofday(&start, nullptr);
1742094332d3Sopenharmony_ci    std::cout << "suffix = " << suffix << std::endl;
1743094332d3Sopenharmony_ci    if (sprintf_s(path, sizeof(path), "%sfile_%d_%lld_%s", prefix, count++, start.tv_usec, suffix) < 0) {
1744094332d3Sopenharmony_ci        CAMERA_LOGE("%{public}s:StoreFile sprintf  failed", __func__);
1745094332d3Sopenharmony_ci        return;
1746094332d3Sopenharmony_ci    }
1747094332d3Sopenharmony_ci    int fd = open(path, O_RDWR | O_CREAT, 00766); // 00766:file operate permission
1748094332d3Sopenharmony_ci    if (fd < 0) {
1749094332d3Sopenharmony_ci        CAMERA_LOGE("demo test:StoreFile open %s %{public}s failed", path, strerror(errno));
1750094332d3Sopenharmony_ci        return;
1751094332d3Sopenharmony_ci    }
1752094332d3Sopenharmony_ci    int ret = write(fd, bufStart, size);
1753094332d3Sopenharmony_ci    if (ret == -1) {
1754094332d3Sopenharmony_ci        CAMERA_LOGE("demo test:StoreFile write video file error %{public}s.....\n", strerror(errno));
1755094332d3Sopenharmony_ci    }
1756094332d3Sopenharmony_ci    CAMERA_LOGD("demo test:StoreFile size == %{public}d\n", size);
1757094332d3Sopenharmony_ci    std::cout << "Strore File , Path = " << path << ", size = " << size << std::endl;
1758094332d3Sopenharmony_ci    close(fd);
1759094332d3Sopenharmony_ci}
1760094332d3Sopenharmony_ci
1761094332d3Sopenharmony_ci/**
1762094332d3Sopenharmony_ci  * @tc.name: USB Camera
1763094332d3Sopenharmony_ci  * @tc.desc: single video stream, output nv21, expected success.
1764094332d3Sopenharmony_ci  * @tc.level: Level0
1765094332d3Sopenharmony_ci  * @tc.size: MediumTest
1766094332d3Sopenharmony_ci  * @tc.type: Function
1767094332d3Sopenharmony_ci  */
1768094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0054)
1769094332d3Sopenharmony_ci{
1770094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
1771094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
1772094332d3Sopenharmony_ci    auto streamCustomerVideo = std::make_shared<StreamCustomer>();
1773094332d3Sopenharmony_ci
1774094332d3Sopenharmony_ci    uint32_t captureIdVideo = 1;
1775094332d3Sopenharmony_ci    uint32_t streamIdVideo = 1;
1776094332d3Sopenharmony_ci    std::vector<StreamInfo> streamInfos;
1777094332d3Sopenharmony_ci    StreamInfo streamInfo = {};
1778094332d3Sopenharmony_ci    streamInfo.streamId_ = streamIdVideo;
1779094332d3Sopenharmony_ci    streamInfo.width_ = 1280; // 1280:picture width
1780094332d3Sopenharmony_ci    streamInfo.height_ = 720; // 720:picture height
1781094332d3Sopenharmony_ci    streamInfo.format_ = PIXEL_FMT_YCRCB_420_SP;
1782094332d3Sopenharmony_ci    streamInfo.encodeType_ = ENCODE_TYPE_NULL;
1783094332d3Sopenharmony_ci    streamInfo.dataspace_ = 8; // 8:picture dataspace
1784094332d3Sopenharmony_ci    streamInfo.intent_ = VIDEO;
1785094332d3Sopenharmony_ci    streamInfo.tunneledMode_ = 5; // 5:tunnel mode
1786094332d3Sopenharmony_ci    streamInfo.bufferQueue_ = new BufferProducerSequenceable(streamCustomerVideo->CreateProducer());
1787094332d3Sopenharmony_ci    ASSERT_NE(streamInfo.bufferQueue_, nullptr);
1788094332d3Sopenharmony_ci    streamInfo.bufferQueue_->producer_->SetQueueSize(8); // 8:set bufferQueue size
1789094332d3Sopenharmony_ci    streamInfos.push_back(streamInfo);
1790094332d3Sopenharmony_ci
1791094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CreateStreams(streamInfos);
1792094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1793094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CommitStreams(NORMAL, cameraBase_->ability_);
1794094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1795094332d3Sopenharmony_ci
1796094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1797094332d3Sopenharmony_ci    streamCustomerVideo->ReceiveFrameOn([this](const unsigned char *addr, const uint32_t size) {
1798094332d3Sopenharmony_ci        StoreFile(addr, size, "_single_video.yuv");
1799094332d3Sopenharmony_ci    });
1800094332d3Sopenharmony_ci
1801094332d3Sopenharmony_ci    CaptureInfo captureInfoVideo = {
1802094332d3Sopenharmony_ci        .streamIds_ = {streamIdVideo},
1803094332d3Sopenharmony_ci        .captureSetting_ = cameraBase_->ability_,
1804094332d3Sopenharmony_ci        .enableShutterCallback_ = false,
1805094332d3Sopenharmony_ci    };
1806094332d3Sopenharmony_ci    std::cout << "start capture video" <<  std::endl;
1807094332d3Sopenharmony_ci    CAMERA_LOGE("start capture video");
1808094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->Capture(captureIdVideo, captureInfoVideo, true);
1809094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1810094332d3Sopenharmony_ci    sleep(1);
1811094332d3Sopenharmony_ci
1812094332d3Sopenharmony_ci    std::cout << "cancel capture video" <<  std::endl;
1813094332d3Sopenharmony_ci    CAMERA_LOGE("cancel capture video");
1814094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CancelCapture(captureIdVideo);
1815094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1816094332d3Sopenharmony_ci    sleep(1);
1817094332d3Sopenharmony_ci
1818094332d3Sopenharmony_ci    std::cout << "start capture video" <<  std::endl;
1819094332d3Sopenharmony_ci    CAMERA_LOGE("start capture video");
1820094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->Capture(captureIdVideo, captureInfoVideo, true);
1821094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1822094332d3Sopenharmony_ci    sleep(1);
1823094332d3Sopenharmony_ci
1824094332d3Sopenharmony_ci    streamCustomerVideo->ReceiveFrameOff();
1825094332d3Sopenharmony_ci
1826094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CancelCapture({captureIdVideo});
1827094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1828094332d3Sopenharmony_ci    sleep(1);
1829094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->ReleaseStreams({streamIdVideo});
1830094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1831094332d3Sopenharmony_ci}
1832094332d3Sopenharmony_ci
1833094332d3Sopenharmony_ci/**
1834094332d3Sopenharmony_ci  * @tc.name: USB Camera
1835094332d3Sopenharmony_ci  * @tc.desc: single video stream, output jpeg, expected success.
1836094332d3Sopenharmony_ci  * @tc.level: Level0
1837094332d3Sopenharmony_ci  * @tc.size: MediumTest
1838094332d3Sopenharmony_ci  * @tc.type: Function
1839094332d3Sopenharmony_ci  */
1840094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTest, camera_usb_0055)
1841094332d3Sopenharmony_ci{
1842094332d3Sopenharmony_ci    cameraBase_->OpenUsbCamera();
1843094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
1844094332d3Sopenharmony_ci    auto streamCustomerVideo = std::make_shared<StreamCustomer>();
1845094332d3Sopenharmony_ci
1846094332d3Sopenharmony_ci    uint32_t captureIdVideo = 1;
1847094332d3Sopenharmony_ci    uint32_t streamIdVideo = 1;
1848094332d3Sopenharmony_ci    std::vector<StreamInfo> streamInfos;
1849094332d3Sopenharmony_ci    StreamInfo streamInfo = {};
1850094332d3Sopenharmony_ci    streamInfo.streamId_ = streamIdVideo;
1851094332d3Sopenharmony_ci    streamInfo.width_ = 1280; // 1280:picture width
1852094332d3Sopenharmony_ci    streamInfo.height_ = 720; // 720:picture height
1853094332d3Sopenharmony_ci    streamInfo.format_ = PIXEL_FMT_YCRCB_420_SP;
1854094332d3Sopenharmony_ci    streamInfo.encodeType_ = ENCODE_TYPE_JPEG;
1855094332d3Sopenharmony_ci    streamInfo.dataspace_ = 8; // 8:picture dataspace
1856094332d3Sopenharmony_ci    streamInfo.intent_ = VIDEO;
1857094332d3Sopenharmony_ci    streamInfo.tunneledMode_ = 5; // 5:tunnel mode
1858094332d3Sopenharmony_ci    streamInfo.bufferQueue_ = new (std::nothrow) BufferProducerSequenceable(streamCustomerVideo->CreateProducer());
1859094332d3Sopenharmony_ci    ASSERT_NE(streamInfo.bufferQueue_, nullptr);
1860094332d3Sopenharmony_ci    streamInfo.bufferQueue_->producer_->SetQueueSize(8); // 8:set bufferQueue size
1861094332d3Sopenharmony_ci    streamInfos.push_back(streamInfo);
1862094332d3Sopenharmony_ci
1863094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CreateStreams(streamInfos);
1864094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1865094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CommitStreams(NORMAL, cameraBase_->ability_);
1866094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1867094332d3Sopenharmony_ci
1868094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1869094332d3Sopenharmony_ci    streamCustomerVideo->ReceiveFrameOn([this](const unsigned char *addr, const uint32_t size) {
1870094332d3Sopenharmony_ci        StoreFile(addr, size, "_single_video.jpeg");
1871094332d3Sopenharmony_ci    });
1872094332d3Sopenharmony_ci
1873094332d3Sopenharmony_ci    CaptureInfo captureInfoVideo = {
1874094332d3Sopenharmony_ci        .streamIds_ = {streamIdVideo},
1875094332d3Sopenharmony_ci        .captureSetting_ = cameraBase_->ability_,
1876094332d3Sopenharmony_ci        .enableShutterCallback_ = false,
1877094332d3Sopenharmony_ci    };
1878094332d3Sopenharmony_ci    std::cout << "start capture video" <<  std::endl;
1879094332d3Sopenharmony_ci    CAMERA_LOGE("start capture video");
1880094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->Capture(captureIdVideo, captureInfoVideo, true);
1881094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1882094332d3Sopenharmony_ci    sleep(1);
1883094332d3Sopenharmony_ci
1884094332d3Sopenharmony_ci    std::cout << "cancel capture video" <<  std::endl;
1885094332d3Sopenharmony_ci    CAMERA_LOGE("cancel capture video");
1886094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CancelCapture(captureIdVideo);
1887094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1888094332d3Sopenharmony_ci    sleep(1);
1889094332d3Sopenharmony_ci
1890094332d3Sopenharmony_ci    std::cout << "start capture video" <<  std::endl;
1891094332d3Sopenharmony_ci    CAMERA_LOGE("start capture video");
1892094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->Capture(captureIdVideo, captureInfoVideo, true);
1893094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1894094332d3Sopenharmony_ci    sleep(1);
1895094332d3Sopenharmony_ci
1896094332d3Sopenharmony_ci    streamCustomerVideo->ReceiveFrameOff();
1897094332d3Sopenharmony_ci
1898094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CancelCapture({captureIdVideo});
1899094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1900094332d3Sopenharmony_ci    sleep(1);
1901094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->ReleaseStreams({streamIdVideo});
1902094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
1903094332d3Sopenharmony_ci}