1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file expected in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "camera_3a_uttest.h"
16 
17 using namespace OHOS;
18 using namespace std;
19 using namespace testing::ext;
20 using namespace OHOS::Camera;
21 
SetUpTestCase(void)22 void Camera3AUtTest::SetUpTestCase(void) {}
TearDownTestCase(void)23 void Camera3AUtTest::TearDownTestCase(void) {}
SetUp(void)24 void Camera3AUtTest::SetUp(void)
25 {
26     cameraTest = std::make_shared<OHOS::Camera::Test>();
27     cameraTest->Init();
28     cameraTest->Open();
29 }
30 
TearDown(void)31 void Camera3AUtTest::TearDown(void)
32 {
33     cameraTest->Close();
34 }
35 
36 /**
37  * @tc.name: updateSetting AE
38  * @tc.desc: preview, updateSetting OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, success
39  * @tc.size: MediumTest
40  * @tc.type: Function
41  */
42 HWTEST_F(Camera3AUtTest, Camera_3a_001, TestSize.Level1)
43 {
44     cameraTest->intents = {PREVIEW};
45     cameraTest->StartStream(cameraTest->intents);
46     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
47     std::shared_ptr<CameraMetadata> meta = std::make_shared<CameraSetting>(100, 200);
48     int32_t expo = 0xa0;
49     meta->addEntry(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, &expo, 1);
50     std::vector<uint8_t> metaVec;
51     MetadataUtils::ConvertMetadataToVec(meta, metaVec);
52     cameraTest->cameraDevice->UpdateSettings(metaVec);
53     sleep(1);
54     cameraTest->GetCameraMetadata();
55     cameraTest->captureIds = {cameraTest->captureIdPreview};
56     cameraTest->streamIds = {cameraTest->streamIdPreview};
57     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
58 }
59 
60 /**
61  * @tc.name: updateSetting AE
62  * @tc.desc: preview, updateSetting OHOS_CAMERA_AWB_MODE_AUTO, success
63  * @tc.size: MediumTest
64  * @tc.type: Function
65  */
66 HWTEST_F(Camera3AUtTest, Camera_3a_002, TestSize.Level1)
67 {
68     cameraTest->intents = {PREVIEW};
69     cameraTest->StartStream(cameraTest->intents);
70     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
71     std::shared_ptr<CameraMetadata> meta = std::make_shared<CameraSetting>(100, 200);
72     uint8_t awbMode = OHOS_CAMERA_AWB_MODE_AUTO;
73     meta->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode, 1);
74     std::vector<uint8_t> metaVec;
75     MetadataUtils::ConvertMetadataToVec(meta, metaVec);
76     cameraTest->cameraDevice->UpdateSettings(metaVec);
77     sleep(1);
78     cameraTest->GetCameraMetadata();
79     cameraTest->captureIds = {cameraTest->captureIdPreview};
80     cameraTest->streamIds = {cameraTest->streamIdPreview};
81     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
82 }
83 
84 /**
85  * @tc.name: updateSetting AE
86  * @tc.desc: preview, updateSetting OHOS_CAMERA_AWB_MODE_INCANDESCENT, success
87  * @tc.size: MediumTest
88  * @tc.type: Function
89  */
90 HWTEST_F(Camera3AUtTest, Camera_3a_003, TestSize.Level1)
91 {
92     cameraTest->intents = {PREVIEW};
93     cameraTest->StartStream(cameraTest->intents);
94     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
95     std::shared_ptr<CameraMetadata> meta = std::make_shared<CameraSetting>(100, 200);
96     uint8_t awbMode = OHOS_CAMERA_AWB_MODE_INCANDESCENT;
97     meta->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode, 1);
98     std::vector<uint8_t> metaVec;
99     MetadataUtils::ConvertMetadataToVec(meta, metaVec);
100     cameraTest->cameraDevice->UpdateSettings(metaVec);
101     sleep(1);
102     cameraTest->GetCameraMetadata();
103     cameraTest->captureIds = {cameraTest->captureIdPreview};
104     cameraTest->streamIds = {cameraTest->streamIdPreview};
105     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
106 }
107 
108 /**
109  * @tc.name: updateSetting AE
110  * @tc.desc: preview, updateSetting OHOS_CAMERA_AWB_MODE_FLUORESENT, success
111  * @tc.size: MediumTest
112  * @tc.type: Function
113  */
114 HWTEST_F(Camera3AUtTest, Camera_3a_004, TestSize.Level1)
115 {
116     cameraTest->intents = {PREVIEW};
117     cameraTest->StartStream(cameraTest->intents);
118     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
119     std::shared_ptr<CameraMetadata> meta = std::make_shared<CameraSetting>(100, 200);
120     uint8_t awbMode = OHOS_CAMERA_AWB_MODE_FLUORESCENT;
121     meta->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode, 1);
122     std::vector<uint8_t> metaVec;
123     MetadataUtils::ConvertMetadataToVec(meta, metaVec);
124     cameraTest->cameraDevice->UpdateSettings(metaVec);
125     sleep(1);
126     cameraTest->GetCameraMetadata();
127     cameraTest->captureIds = {cameraTest->captureIdPreview};
128     cameraTest->streamIds = {cameraTest->streamIdPreview};
129     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
130 }
131 
132 /**
133  * @tc.name: updateSetting AE
134  * @tc.desc: preview, updateSetting OHOS_CAMERA_AWB_MODE_DAYLIGHT, success
135  * @tc.size: MediumTest
136  * @tc.type: Function
137  */
138 HWTEST_F(Camera3AUtTest, Camera_3a_005, TestSize.Level1)
139 {
140     cameraTest->intents = {PREVIEW};
141     cameraTest->StartStream(cameraTest->intents);
142     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
143     std::shared_ptr<CameraMetadata> meta = std::make_shared<CameraSetting>(100, 200);
144     uint8_t awbMode = OHOS_CAMERA_AWB_MODE_DAYLIGHT;
145     meta->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode, 1);
146     std::vector<uint8_t> metaVec;
147     MetadataUtils::ConvertMetadataToVec(meta, metaVec);
148     cameraTest->cameraDevice->UpdateSettings(metaVec);
149     sleep(1);
150     cameraTest->GetCameraMetadata();
151     cameraTest->captureIds = {cameraTest->captureIdPreview};
152     cameraTest->streamIds = {cameraTest->streamIdPreview};
153     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
154 }
155 
156 /**
157  * @tc.name: updateSetting AE
158  * @tc.desc: preview, updateSetting OHOS_CAMERA_AWB_MODE_CLOUDY_DAYLIGHT, success
159  * @tc.size: MediumTest
160  * @tc.type: Function
161  */
162 HWTEST_F(Camera3AUtTest, Camera_3a_006, TestSize.Level1)
163 {
164     cameraTest->intents = {PREVIEW};
165     cameraTest->StartStream(cameraTest->intents);
166     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
167     std::shared_ptr<CameraMetadata> meta = std::make_shared<CameraSetting>(100, 200);
168     uint8_t awbMode = OHOS_CAMERA_AWB_MODE_CLOUDY_DAYLIGHT;
169     meta->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode, 1);
170     std::vector<uint8_t> metaVec;
171     MetadataUtils::ConvertMetadataToVec(meta, metaVec);
172     cameraTest->cameraDevice->UpdateSettings(metaVec);
173     sleep(1);
174     cameraTest->GetCameraMetadata();
175     cameraTest->captureIds = {cameraTest->captureIdPreview};
176     cameraTest->streamIds = {cameraTest->streamIdPreview};
177     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
178 }
179 
180 /**
181  * @tc.name: updateSetting AE
182  * @tc.desc: preview, updateSetting OHOS_CAMERA_AWB_MODE_TWILIGHT, success
183  * @tc.size: MediumTest
184  * @tc.type: Function
185  */
186 HWTEST_F(Camera3AUtTest, Camera_3a_007, TestSize.Level1)
187 {
188     cameraTest->intents = {PREVIEW};
189     cameraTest->StartStream(cameraTest->intents);
190     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
191     std::shared_ptr<CameraMetadata> meta = std::make_shared<CameraSetting>(100, 200);
192     uint8_t awbMode = OHOS_CAMERA_AWB_MODE_TWILIGHT;
193     meta->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode, 1);
194     std::vector<uint8_t> metaVec;
195     MetadataUtils::ConvertMetadataToVec(meta, metaVec);
196     cameraTest->cameraDevice->UpdateSettings(metaVec);
197     sleep(1);
198     cameraTest->GetCameraMetadata();
199     cameraTest->captureIds = {cameraTest->captureIdPreview};
200     cameraTest->streamIds = {cameraTest->streamIdPreview};
201     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
202 }
203 
204 /**
205  * @tc.name: updateSetting AE
206  * @tc.desc: preview, updateSetting OHOS_CAMERA_AWB_MODE_SHADE, success
207  * @tc.size: MediumTest
208  * @tc.type: Function
209  */
210 HWTEST_F(Camera3AUtTest, Camera_3a_008, TestSize.Level1)
211 {
212     cameraTest->intents = {PREVIEW};
213     cameraTest->StartStream(cameraTest->intents);
214     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
215     std::shared_ptr<CameraMetadata> meta = std::make_shared<CameraSetting>(100, 200);
216     uint8_t awbMode = OHOS_CAMERA_AWB_MODE_SHADE;
217     meta->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode, 1);
218     std::vector<uint8_t> metaVec;
219     MetadataUtils::ConvertMetadataToVec(meta, metaVec);
220     cameraTest->cameraDevice->UpdateSettings(metaVec);
221     sleep(1);
222     cameraTest->GetCameraMetadata();
223     cameraTest->captureIds = {cameraTest->captureIdPreview};
224     cameraTest->streamIds = {cameraTest->streamIdPreview};
225     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
226 }
227 
228 /**
229  * @tc.name: updateSetting AE
230  * @tc.desc: preview, updateSetting OHOS_CAMERA_AWB_MODE_OFF, success
231  * @tc.size: MediumTest
232  * @tc.type: Function
233  */
234 HWTEST_F(Camera3AUtTest, Camera_3a_009, TestSize.Level1)
235 {
236     cameraTest->intents = {PREVIEW};
237     cameraTest->StartStream(cameraTest->intents);
238     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
239     std::shared_ptr<CameraMetadata> meta = std::make_shared<CameraSetting>(100, 200);
240     uint8_t awbMode = OHOS_CAMERA_AWB_MODE_OFF;
241     meta->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode, 1);
242     std::vector<uint8_t> metaVec;
243     MetadataUtils::ConvertMetadataToVec(meta, metaVec);
244     cameraTest->cameraDevice->UpdateSettings(metaVec);
245     sleep(1);
246     cameraTest->GetCameraMetadata();
247     cameraTest->captureIds = {cameraTest->captureIdPreview};
248     cameraTest->streamIds = {cameraTest->streamIdPreview};
249     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
250 }
251 
252 /**
253  * @tc.name: updateSetting AE
254  * @tc.desc: preview, updateSetting OHOS_CAMERA_AWB_MODE_OFF, success
255  * @tc.size: MediumTest
256  * @tc.type: Function
257  */
258 HWTEST_F(Camera3AUtTest, Camera_3a_010, TestSize.Level1)
259 {
260     cameraTest->intents = {PREVIEW};
261     cameraTest->StartStream(cameraTest->intents);
262     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
263     std::shared_ptr<CameraMetadata> meta = std::make_shared<CameraSetting>(100, 200);
264     uint8_t awbMode = OHOS_CAMERA_AE_MODE_ON_ALWAYS_FLASH;
265     meta->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode, 1);
266     std::vector<uint8_t> metaVec;
267     MetadataUtils::ConvertMetadataToVec(meta, metaVec);
268     cameraTest->cameraDevice->UpdateSettings(metaVec);
269     sleep(1);
270     cameraTest->GetCameraMetadata();
271     cameraTest->captureIds = {cameraTest->captureIdPreview};
272     cameraTest->streamIds = {cameraTest->streamIdPreview};
273     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
274 }
275 
276 /**
277  * @tc.name: updateSetting AE
278  * @tc.desc: preview set 3A, then close device, and preview, 3A is reset
279  * @tc.size: MediumTest
280  * @tc.type: Function
281  */
282 HWTEST_F(Camera3AUtTest, Camera_3a_011, TestSize.Level1)
283 {
284     cameraTest->intents = {PREVIEW};
285     cameraTest->StartStream(cameraTest->intents);
286     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
287     std::shared_ptr<CameraMetadata> meta = std::make_shared<CameraSetting>(100, 200);
288     int32_t expo = 0xa0;
289     meta->addEntry(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, &expo, 1);
290     std::vector<uint8_t> metaVec;
291     MetadataUtils::ConvertMetadataToVec(meta, metaVec);
292     cameraTest->cameraDevice->UpdateSettings(metaVec);
293     cameraTest->captureIds = {cameraTest->captureIdPreview};
294     cameraTest->streamIds = {cameraTest->streamIdPreview};
295     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
296     cameraTest->cameraDevice->Close();
297     cameraTest->consumerMap_.clear();
298     cameraTest = std::make_shared<OHOS::Camera::Test>();
299     cameraTest->Init();
300     cameraTest->Open();
301     cameraTest->intents = {PREVIEW};
302     cameraTest->StartStream(cameraTest->intents);
303     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
304     cameraTest->captureIds = {cameraTest->captureIdPreview};
305     cameraTest->streamIds = {cameraTest->streamIdPreview};
306     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
307 }
308 
309 
310 /**
311  * @tc.name: updateSetting AE
312  * @tc.desc: preview , updatesetting different 3A params together
313  * @tc.size: MediumTest
314  * @tc.type: Function
315  */
316 HWTEST_F(Camera3AUtTest, Camera_3a_012, TestSize.Level1)
317 {
318     cameraTest->intents = {PREVIEW};
319     cameraTest->StartStream(cameraTest->intents);
320     cameraTest->StartCapture(cameraTest->streamIdPreview, cameraTest->captureIdPreview, false, true);
321     std::shared_ptr<CameraMetadata> meta = std::make_shared<CameraSetting>(100, 200);
322     int32_t expo = 0xa0;
323     meta->addEntry(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, &expo, 1);
324     uint8_t awbMode = OHOS_CAMERA_AWB_MODE_TWILIGHT;
325     meta->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode, 1);
326     std::vector<uint8_t> metaVec;
327     MetadataUtils::ConvertMetadataToVec(meta, metaVec);
328     cameraTest->cameraDevice->UpdateSettings(metaVec);
329     sleep(3); // sleep for 3 seconds
330     cameraTest->captureIds = {cameraTest->captureIdPreview};
331     cameraTest->streamIds = {cameraTest->streamIdPreview};
332     cameraTest->StopStream(cameraTest->captureIds, cameraTest->streamIds);
333 }
334 
335 /**
336  * @tc.name: updateSetting AE without preview
337  * @tc.desc: updatesetting OHOS_CAMERA_AE_EXMPENSATION, without preview, success
338  * @tc.size: MediumTest
339  * @tc.type: Function
340  */
341 HWTEST_F(Camera3AUtTest, Camera_3a_013, TestSize.Level1)
342 {
343     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(100, 2000);
344     int32_t expo = 0xa0;
345     meta->addEntry(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, &expo, 1);
346     std::vector<uint8_t> metaVec;
347     MetadataUtils::ConvertMetadataToVec(meta, metaVec);
348     cameraTest->rc = cameraTest->cameraDevice->UpdateSettings(metaVec);
349     EXPECT_EQ(cameraTest->rc, HDI::Camera::V1_0::NO_ERROR);
350 }
351 
352 /**
353  * @tc.name: updateSetting AE without preview
354  * @tc.desc: updatesetting OHOS_CAMERA_AE_EXMPENSATION, without preview, success
355  * @tc.size: MediumTest
356  * @tc.type: Function
357  */
358 HWTEST_F(Camera3AUtTest, Camera_3a_014, TestSize.Level1)
359 {
360     std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(100, 2000);
361     int32_t awbMode = OHOS_CAMERA_AWB_MODE_AUTO;
362     meta->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode, 1);
363     std::vector<uint8_t> metaVec;
364     MetadataUtils::ConvertMetadataToVec(meta, metaVec);
365     cameraTest->rc = cameraTest->cameraDevice->UpdateSettings(metaVec);
366     EXPECT_EQ(cameraTest->rc, HDI::Camera::V1_0::NO_ERROR);
367 }