1/*
2 * Copyright (c) 2021 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
16#include "video_test.h"
17
18using namespace OHOS;
19using namespace std;
20using namespace testing::ext;
21using namespace OHOS::Camera;
22
23void VideoTest::SetUpTestCase(void) {}
24void VideoTest::TearDownTestCase(void) {}
25void VideoTest::SetUp(void)
26{
27    Test_ = std::make_shared<OHOS::Camera::Test>();
28    Test_->Init();
29    Test_->Open();
30}
31void VideoTest::TearDown(void)
32{
33    Test_->Close();
34}
35
36/**
37  * @tc.name: Video
38  * @tc.desc: Preview and video streams, Commit 2 streams together, capture in order.
39  * @tc.size: MediumTest
40  * @tc.type: Function
41  */
42HWTEST_F(VideoTest, Camera_Video_0001, TestSize.Level0)
43{
44    std::cout << "==========[test log]Check video: Preview and video streams, ";
45    std::cout << "Commit 2 streams together, capture in order." << std::endl;
46    // Configure two stream information
47    Test_->intents = {Camera::PREVIEW, Camera::VIDEO};
48    Test_->StartStream(Test_->intents);
49    // Capture preview stream
50    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
51    // Capture video stream
52    Test_->StartCapture(Test_->streamId_video, Test_->captureId_video, false, true);
53    // Post-processing
54    sleep(3); // sleep for 3 seconds
55    Test_->captureIds = {Test_->captureId_preview, Test_->captureId_video};
56    Test_->streamIds.push_back(Test_->streamId_preview);
57    Test_->streamIds.push_back(Test_->streamId_video);
58    Test_->StopStream(Test_->captureIds, Test_->streamIds);
59    Test_->StopConsumer(Test_->intents);
60}
61
62/**
63  * @tc.name: Video
64  * @tc.desc: Preview and video streams + 3A, Commit 2 streams together, capture in order.
65  * @tc.size: MediumTest
66  * @tc.type: Function
67  */
68HWTEST_F(VideoTest, Camera_Video_0002, TestSize.Level1)
69{
70    std::cout << "==========[test log]Check video: Preview and video streams + 3A, ";
71    std::cout << "Commit 2 streams together, capture in order." << std::endl;
72    // Configure two stream information
73    Test_->intents = {Camera::PREVIEW, Camera::VIDEO};
74    Test_->StartStream(Test_->intents);
75    // Capture preview stream
76    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
77    // Issue 3A parameters to increase exposure
78    std::shared_ptr<Camera::CameraSetting> meta = std::make_shared<Camera::CameraSetting>(100, 2000);
79    int32_t expo = 0xb0;
80    meta->addEntry(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, &expo, 1);
81    Test_->rc = Test_->cameraDevice->UpdateSettings(meta);
82    if (Test_->rc == Camera::NO_ERROR) {
83        std::cout << "==========[test log]check Capture: UpdateSettings success, for 10s." << std::endl;
84    } else {
85        std::cout << "==========[test log]check Capture: UpdateSettings fail, rc = " << Test_->rc << std::endl;
86    }
87    // Capture video stream
88    Test_->StartCapture(Test_->streamId_video, Test_->captureId_video, false, true);
89    sleep(3); // sleep for 3 seconds
90    // Post-processing
91    Test_->captureIds = {Test_->captureId_preview, Test_->captureId_video};
92    Test_->streamIds = {Test_->streamId_preview, Test_->streamId_video};
93    Test_->StopStream(Test_->captureIds, Test_->streamIds);
94    Test_->StopConsumer(Test_->intents);
95}
96
97/**
98  * @tc.name: Video
99  * @tc.desc: Preview + video, commit together, then close device, and preview + video again.
100  * @tc.size: MediumTest
101  * @tc.type: Function
102  */
103HWTEST_F(VideoTest, Camera_Video_0003, TestSize.Level1)
104{
105    std::cout << "==========[test log]Check video: Preview + video, ";
106    std::cout << "commit together, then close device, and preview + video again." << std::endl;
107    // Configure two stream information
108    Test_->intents = {Camera::PREVIEW, Camera::VIDEO};
109    Test_->StartStream(Test_->intents);
110    // Capture preview stream
111    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
112    // Capture video stream
113    Test_->StartCapture(Test_->streamId_video, Test_->captureId_video, false, true);
114    // Post-processing
115    Test_->captureIds = {Test_->captureId_preview, Test_->captureId_video};
116    Test_->streamIds = {Test_->streamId_preview, Test_->streamId_video};
117    Test_->StopStream(Test_->captureIds, Test_->streamIds);
118    Test_->consumerMap_.clear();
119    std::cout << "==========[test log]Check video: The 2nd time." << std::endl;
120    // second Configure two stream information
121    // Configure two stream information
122    Test_->intents = {Camera::PREVIEW, Camera::VIDEO};
123    Test_->StartStream(Test_->intents);
124    // Capture preview stream
125    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
126    // Capture video stream
127    Test_->StartCapture(Test_->streamId_video, Test_->captureId_video, false, true);
128    // Post-processing
129    Test_->captureIds = {Test_->captureId_preview, Test_->captureId_video};
130    Test_->streamIds = {Test_->streamId_preview, Test_->streamId_video};
131    Test_->StopStream(Test_->captureIds, Test_->streamIds);
132    Test_->StopConsumer(Test_->intents);
133}
134
135/**
136  * @tc.name: Video
137  * @tc.desc: Preview + video, commit together, then close device, and preview + capture.
138  * @tc.size: MediumTest
139  * @tc.type: Function
140  */
141HWTEST_F(VideoTest, Camera_Video_0004, TestSize.Level1)
142{
143    std::cout << "==========[test log]Check video: Preview + video, ";
144    std::cout << "commit together, then close device, and preview + capture." << std::endl;
145    // Configure two stream information
146    Test_->intents = {Camera::PREVIEW, Camera::VIDEO};
147    Test_->StartStream(Test_->intents);
148    // Capture preview stream
149    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
150    // Capture video stream
151    Test_->StartCapture(Test_->streamId_video, Test_->captureId_video, false, true);
152    // Post-processing
153    Test_->captureIds = {Test_->captureId_preview, Test_->captureId_video};
154    Test_->streamIds = {Test_->streamId_preview, Test_->streamId_video};
155    Test_->StopStream(Test_->captureIds, Test_->streamIds);
156    Test_->consumerMap_.clear();
157
158    std::cout << "==========[test log]Check video: The 2nd time." << std::endl;
159    // Configure two stream information
160    Test_->intents = {Camera::PREVIEW, Camera::STILL_CAPTURE};
161    Test_->StartStream(Test_->intents);
162    // Capture preview stream
163    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
164    // Capture camera stream, continuous capture
165    Test_->StartCapture(Test_->streamId_capture, Test_->captureId_capture, false, true);
166    // Post-processing
167    Test_->captureIds = {Test_->captureId_preview, Test_->captureId_capture};
168    Test_->streamIds = {Test_->streamId_preview, Test_->streamId_capture};
169    Test_->StopStream(Test_->captureIds, Test_->streamIds);
170    Test_->StopConsumer(Test_->intents);
171}
172
173/**
174  * @tc.name: Video
175  * @tc.desc: Preview + video, commit together, success.
176  * @tc.size: MediumTest
177  * @tc.type: Function
178  */
179HWTEST_F(VideoTest, Camera_Video_0005, TestSize.Level0)
180{
181    std::cout << "==========[test log]Check video: Preview + video, commit together, success." << std::endl;
182    // Configure two stream information
183    Test_->intents = {Camera::PREVIEW, Camera::VIDEO};
184    Test_->StartStream(Test_->intents);
185    // Capture preview stream
186    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
187    // Capture video stream
188    Test_->StartCapture(Test_->streamId_video, Test_->captureId_video, false, true);
189    // Post-processing
190    Test_->captureIds = {Test_->captureId_preview, Test_->captureId_video};
191    Test_->streamIds = {Test_->streamId_preview, Test_->streamId_video};
192    Test_->StopStream(Test_->captureIds, Test_->streamIds);
193    Test_->StopConsumer(Test_->intents);
194}
195
196/**
197  * @tc.name: Video
198  * @tc.desc: Dynamic Video mode, preview, success.
199  * @tc.size: MediumTest
200  * @tc.type: Function
201  */
202HWTEST_F(VideoTest, Camera_Video_0020, TestSize.Level1)
203{
204    std::cout << "==========[test log]Check video: Video mode, preview, success." << std::endl;
205    // Start preview stream
206    Test_->intents = {Camera::PREVIEW};
207    Test_->StartStream(Test_->intents);
208    // Get preview
209    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
210    // Start stream
211    Test_->intents = {Camera::VIDEO};
212    Test_->StartStream(Test_->intents);
213    // Start capture
214    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
215    Test_->StartCapture(Test_->streamId_video, Test_->captureId_video, false, true);
216    // Release stream
217    Test_->captureIds = {Test_->captureId_preview, Test_->captureId_video};
218    Test_->streamIds = {Test_->streamId_preview, Test_->streamId_video};
219    Test_->intents = {Camera::PREVIEW, Camera::VIDEO};
220    Test_->StopStream(Test_->captureIds, Test_->streamIds);
221    Test_->StopConsumer(Test_->intents);
222}
223
224/**
225  * @tc.name: Video
226  * @tc.desc: Video mode, preview, set 3A, success.
227  * @tc.size: MediumTest
228  * @tc.type: Function
229  */
230HWTEST_F(VideoTest, Camera_Video_0021, TestSize.Level1)
231{
232    std::cout << "==========[test log]Check video: Video mode, preview, set 3A, success." << std::endl;
233    // Configure two stream information
234    Test_->intents = {Camera::PREVIEW, Camera::VIDEO};
235    Test_->StartStream(Test_->intents);
236    // Capture preview stream
237    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
238    // Issue 3A parameters to increase exposure
239    std::shared_ptr<Camera::CameraSetting> meta = std::make_shared<Camera::CameraSetting>(100, 2000);
240    int32_t expo = 0xc0;
241    meta->addEntry(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, &expo, 1);
242    Test_->rc = Test_->cameraDevice->UpdateSettings(meta);
243    if (Test_->rc == Camera::NO_ERROR) {
244        std::cout << "==========[test log]check Capture: UpdateSettings success, for 10s." << std::endl;
245    } else {
246        std::cout << "==========[test log]check Capture: UpdateSettings fail, rc = " << Test_->rc << std::endl;
247    }
248    // Capture preview stream
249    Test_->StartCapture(Test_->streamId_video, Test_->captureId_video, false, true);
250    sleep(3); // sleep for 3 seconds
251    // Post-processing
252    Test_->captureIds = {Test_->captureId_preview, Test_->captureId_video};
253    Test_->streamIds = {Test_->streamId_preview, Test_->streamId_video};
254    Test_->StopStream(Test_->captureIds, Test_->streamIds);
255    Test_->StopConsumer(Test_->intents);
256}
257
258/**
259  * @tc.name: Video
260  * @tc.desc: Preview and video streams + 3A, Commit 2 streams together, video in order.
261  * @tc.size: MediumTest
262  * @tc.type: Function
263  */
264HWTEST_F(VideoTest, Camera_Video_0022, TestSize.Level2)
265{
266    std::cout << "==========[test log]Check video: Preview and video streams + 3A, ";
267    std::cout << "Commit 2 streams together, capture in order." << std::endl;
268    // Configure two stream information
269    Test_->intents = {Camera::PREVIEW, Camera::VIDEO};
270    Test_->StartStream(Test_->intents);
271    Test_->StopConsumer({Camera::VIDEO});
272    // Capture preview stream
273    Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true);
274    // Issue 3A parameters to increase exposure
275    std::shared_ptr<Camera::CameraSetting> meta = std::make_shared<Camera::CameraSetting>(100, 2000);
276    int32_t expo = 0xb0;
277    meta->addEntry(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, &expo, 1);
278    Test_->rc = Test_->cameraDevice->UpdateSettings(meta);
279    if (Test_->rc == Camera::NO_ERROR) {
280        std::cout << "==========[test log]check Capture: UpdateSettings success, for 10s." << std::endl;
281    } else {
282        std::cout << "==========[test log]check Capture: UpdateSettings fail, rc = " << Test_->rc << std::endl;
283    }
284    // Capture video stream
285    Test_->StartCapture(Test_->streamId_video, Test_->captureId_video, false, true);
286    sleep(3); // sleep for 3 seconds
287    // Post-processing
288    Test_->captureIds = {Test_->captureId_preview, Test_->captureId_video};
289    Test_->streamIds = {Test_->streamId_preview, Test_->streamId_video};
290    Test_->StopStream(Test_->captureIds, Test_->streamIds);
291}