1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2022 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 "camera_video_test.h"
16094332d3Sopenharmony_ci
17094332d3Sopenharmony_ciusing namespace testing::ext;
18094332d3Sopenharmony_ci
19094332d3Sopenharmony_civoid CameraVideoTest::SetUpTestCase(void)
20094332d3Sopenharmony_ci{}
21094332d3Sopenharmony_civoid CameraVideoTest::TearDownTestCase(void)
22094332d3Sopenharmony_ci{}
23094332d3Sopenharmony_civoid CameraVideoTest::SetUp(void)
24094332d3Sopenharmony_ci{
25094332d3Sopenharmony_ci    if (cameraBase_ == nullptr)
26094332d3Sopenharmony_ci    cameraBase_ = std::make_shared<TestCameraBase>();
27094332d3Sopenharmony_ci    cameraBase_->Init();
28094332d3Sopenharmony_ci}
29094332d3Sopenharmony_civoid CameraVideoTest::TearDown(void)
30094332d3Sopenharmony_ci{
31094332d3Sopenharmony_ci    cameraBase_->Close();
32094332d3Sopenharmony_ci}
33094332d3Sopenharmony_ci
34094332d3Sopenharmony_civoid CameraVideoTest::SetStreamInfo(StreamInfo &streamInfo, const std::shared_ptr<StreamCustomer> &streamCustomer,
35094332d3Sopenharmony_ci    const int streamId, const StreamIntent intent)
36094332d3Sopenharmony_ci{
37094332d3Sopenharmony_ci    sptr<OHOS::IBufferProducer> producer;
38094332d3Sopenharmony_ci    constexpr uint32_t DATA_SPACE = 8;
39094332d3Sopenharmony_ci    constexpr uint32_t TUNNEL_MODE = 5;
40094332d3Sopenharmony_ci    constexpr uint32_t BUFFER_QUEUE_SIZE = 8;
41094332d3Sopenharmony_ci    constexpr uint32_t WIDTH = 1280;
42094332d3Sopenharmony_ci    constexpr uint32_t HEIGHT = 960;
43094332d3Sopenharmony_ci    if (intent == PREVIEW) {
44094332d3Sopenharmony_ci        streamInfo.width_ = PREVIEW_WIDTH;
45094332d3Sopenharmony_ci        streamInfo.height_ = PREVIEW_HEIGHT;
46094332d3Sopenharmony_ci    } else if (intent == STILL_CAPTURE) {
47094332d3Sopenharmony_ci        streamInfo.width_ = WIDTH;
48094332d3Sopenharmony_ci        streamInfo.height_ = HEIGHT;
49094332d3Sopenharmony_ci        streamInfo.encodeType_ = ENCODE_TYPE_JPEG;
50094332d3Sopenharmony_ci    } else if (intent == VIDEO) {
51094332d3Sopenharmony_ci        streamInfo.width_ = WIDTH;
52094332d3Sopenharmony_ci        streamInfo.height_ = HEIGHT;
53094332d3Sopenharmony_ci        streamInfo.encodeType_ = ENCODE_TYPE_H264;
54094332d3Sopenharmony_ci    }
55094332d3Sopenharmony_ci    streamInfo.format_ = PIXEL_FMT_RGBA_8888;
56094332d3Sopenharmony_ci    streamInfo.streamId_ = streamId;
57094332d3Sopenharmony_ci    streamInfo.dataspace_ = DATA_SPACE;
58094332d3Sopenharmony_ci    streamInfo.intent_ = intent;
59094332d3Sopenharmony_ci    streamInfo.tunneledMode_ = TUNNEL_MODE;
60094332d3Sopenharmony_ci    producer = streamCustomer->CreateProducer();
61094332d3Sopenharmony_ci    streamInfo.bufferQueue_ = new BufferProducerSequenceable(producer);
62094332d3Sopenharmony_ci    ASSERT_NE(streamInfo.bufferQueue_, nullptr);
63094332d3Sopenharmony_ci    streamInfo.bufferQueue_->producer_->SetQueueSize(BUFFER_QUEUE_SIZE);
64094332d3Sopenharmony_ci}
65094332d3Sopenharmony_ci
66094332d3Sopenharmony_civoid CameraVideoTest::CreateStream(int streamId, StreamIntent intent)
67094332d3Sopenharmony_ci{
68094332d3Sopenharmony_ci    StreamInfo streamInfo = {};
69094332d3Sopenharmony_ci    if (intent == PREVIEW) {
70094332d3Sopenharmony_ci        if (streamId == cameraBase_->STREAM_ID_PREVIEW) {
71094332d3Sopenharmony_ci            if (streamCustomerPreview_ == nullptr) {
72094332d3Sopenharmony_ci                streamCustomerPreview_ = std::make_shared<StreamCustomer>();
73094332d3Sopenharmony_ci                SetStreamInfo(streamInfo, streamCustomerPreview_, streamId, intent);
74094332d3Sopenharmony_ci            }
75094332d3Sopenharmony_ci        }
76094332d3Sopenharmony_ci    } else if (intent == STILL_CAPTURE) {
77094332d3Sopenharmony_ci        if (streamCustomerSnapshot_ == nullptr) {
78094332d3Sopenharmony_ci            streamCustomerSnapshot_ = std::make_shared<StreamCustomer>();
79094332d3Sopenharmony_ci            SetStreamInfo(streamInfo, streamCustomerSnapshot_, streamId, intent);
80094332d3Sopenharmony_ci        }
81094332d3Sopenharmony_ci    } else if (intent == VIDEO) {
82094332d3Sopenharmony_ci        if (streamCustomerVideo_ == nullptr) {
83094332d3Sopenharmony_ci            streamCustomerVideo_ = std::make_shared<StreamCustomer>();
84094332d3Sopenharmony_ci            SetStreamInfo(streamInfo, streamCustomerVideo_, streamId, intent);
85094332d3Sopenharmony_ci        }
86094332d3Sopenharmony_ci    }
87094332d3Sopenharmony_ci    std::vector<StreamInfo>().swap(streamInfos_);
88094332d3Sopenharmony_ci    streamInfos_.push_back(streamInfo);
89094332d3Sopenharmony_ci    CamRetCode result = (CamRetCode)cameraBase_->streamOperator->CreateStreams(streamInfos_);
90094332d3Sopenharmony_ci    EXPECT_EQ(false, result != HDI::Camera::V1_0::NO_ERROR);
91094332d3Sopenharmony_ci    if (result == HDI::Camera::V1_0::NO_ERROR) {
92094332d3Sopenharmony_ci        CAMERA_LOGI("CreateStreams success.");
93094332d3Sopenharmony_ci    } else {
94094332d3Sopenharmony_ci        CAMERA_LOGE("CreateStreams fail, result = %{public}d", result);
95094332d3Sopenharmony_ci    }
96094332d3Sopenharmony_ci}
97094332d3Sopenharmony_ci
98094332d3Sopenharmony_civoid CameraVideoTest::CommitStream()
99094332d3Sopenharmony_ci{
100094332d3Sopenharmony_ci    CamRetCode result = (CamRetCode)cameraBase_->streamOperator->CommitStreams(NORMAL, cameraBase_->ability_);
101094332d3Sopenharmony_ci    EXPECT_EQ(false, result != HDI::Camera::V1_0::NO_ERROR);
102094332d3Sopenharmony_ci    if (result == HDI::Camera::V1_0::NO_ERROR) {
103094332d3Sopenharmony_ci        CAMERA_LOGI("CommitStreams success.");
104094332d3Sopenharmony_ci    } else {
105094332d3Sopenharmony_ci        CAMERA_LOGE("CommitStreams fail, result = %{public}d", result);
106094332d3Sopenharmony_ci    }
107094332d3Sopenharmony_ci}
108094332d3Sopenharmony_civoid CameraVideoTest::StartCapture(
109094332d3Sopenharmony_ci    int streamId, int captureId, bool shutterCallback, bool isStreaming, const CaptureInfo captureInfo)
110094332d3Sopenharmony_ci{
111094332d3Sopenharmony_ci    captureInfo_.streamIds_ = {streamId};
112094332d3Sopenharmony_ci    captureInfo_.captureSetting_ = cameraBase_->ability_;
113094332d3Sopenharmony_ci    captureInfo_.enableShutterCallback_ = shutterCallback;
114094332d3Sopenharmony_ci    CamRetCode result;
115094332d3Sopenharmony_ci    if (captureInfo.captureSetting_.size() != 0) {
116094332d3Sopenharmony_ci        result = (CamRetCode)cameraBase_->streamOperator->Capture(captureId, captureInfo, isStreaming);
117094332d3Sopenharmony_ci    } else {
118094332d3Sopenharmony_ci        result = (CamRetCode)cameraBase_->streamOperator->Capture(captureId, captureInfo_, isStreaming);
119094332d3Sopenharmony_ci    }
120094332d3Sopenharmony_ci
121094332d3Sopenharmony_ci    EXPECT_EQ(true, result == HDI::Camera::V1_0::NO_ERROR);
122094332d3Sopenharmony_ci    if (result == HDI::Camera::V1_0::NO_ERROR) {
123094332d3Sopenharmony_ci        CAMERA_LOGI("check Capture: Capture success, captureId = %{public}d", captureId);
124094332d3Sopenharmony_ci    } else {
125094332d3Sopenharmony_ci        CAMERA_LOGE("check Capture: Capture fail, captureId = %{public}d, result = %{public}d", captureId, result);
126094332d3Sopenharmony_ci    }
127094332d3Sopenharmony_ci
128094332d3Sopenharmony_ci    if (captureId == cameraBase_->CAPTURE_ID_PREVIEW) {
129094332d3Sopenharmony_ci        streamCustomerPreview_->ReceiveFrameOn([this](const unsigned char *addr, const uint32_t size) {
130094332d3Sopenharmony_ci            CAMERA_LOGI("preview size = %{public}u", size);
131094332d3Sopenharmony_ci        });
132094332d3Sopenharmony_ci    } else if (captureId == cameraBase_->CAPTURE_ID_CAPTURE) {
133094332d3Sopenharmony_ci        streamCustomerSnapshot_->ReceiveFrameOn([this](const unsigned char *addr, const uint32_t size) {
134094332d3Sopenharmony_ci            CAMERA_LOGI("snapshot size = %{public}u", size);
135094332d3Sopenharmony_ci        });
136094332d3Sopenharmony_ci    } else if (captureId == cameraBase_->CAPTURE_ID_VIDEO) {
137094332d3Sopenharmony_ci        streamCustomerVideo_->ReceiveFrameOn([this](const unsigned char *addr, const uint32_t size) {
138094332d3Sopenharmony_ci            CAMERA_LOGI("video size = %{public}u", size);
139094332d3Sopenharmony_ci        });
140094332d3Sopenharmony_ci    } else {
141094332d3Sopenharmony_ci        CAMERA_LOGE("StartCapture ignore command");
142094332d3Sopenharmony_ci    }
143094332d3Sopenharmony_ci}
144094332d3Sopenharmony_ci
145094332d3Sopenharmony_civoid CameraVideoTest::StopStream(std::vector<int> &captureIds, std::vector<int> &streamIds)
146094332d3Sopenharmony_ci{
147094332d3Sopenharmony_ci    constexpr uint32_t TIME_FOR_RECEIVE_FRAME_OFF = 1;
148094332d3Sopenharmony_ci    constexpr uint32_t TIME_FOR_WAIT_IMAGE_PREVIEW = 2;
149094332d3Sopenharmony_ci    sleep(TIME_FOR_WAIT_IMAGE_PREVIEW);
150094332d3Sopenharmony_ci    if (captureIds.size() > 0) {
151094332d3Sopenharmony_ci        for (const auto &captureId : captureIds) {
152094332d3Sopenharmony_ci            if (captureId == cameraBase_->CAPTURE_ID_PREVIEW) {
153094332d3Sopenharmony_ci                streamCustomerPreview_->ReceiveFrameOff();
154094332d3Sopenharmony_ci            } else if (captureId == cameraBase_->CAPTURE_ID_CAPTURE) {
155094332d3Sopenharmony_ci                streamCustomerSnapshot_->ReceiveFrameOff();
156094332d3Sopenharmony_ci            } else if (captureId == cameraBase_->CAPTURE_ID_VIDEO) {
157094332d3Sopenharmony_ci                streamCustomerVideo_->ReceiveFrameOff();
158094332d3Sopenharmony_ci                sleep(TIME_FOR_RECEIVE_FRAME_OFF);
159094332d3Sopenharmony_ci            } else {
160094332d3Sopenharmony_ci                CAMERA_LOGE("StopStream ignore command.");
161094332d3Sopenharmony_ci            }
162094332d3Sopenharmony_ci        }
163094332d3Sopenharmony_ci
164094332d3Sopenharmony_ci        for (auto &captureId : captureIds) {
165094332d3Sopenharmony_ci            CamRetCode result = (CamRetCode)cameraBase_->streamOperator->CancelCapture(captureId);
166094332d3Sopenharmony_ci            sleep(TIME_FOR_WAIT_IMAGE_PREVIEW);
167094332d3Sopenharmony_ci            EXPECT_EQ(true, result == HDI::Camera::V1_0::NO_ERROR);
168094332d3Sopenharmony_ci            if (result == HDI::Camera::V1_0::NO_ERROR) {
169094332d3Sopenharmony_ci                CAMERA_LOGI("check Capture: CancelCapture success, captureId = %{public}d", captureId);
170094332d3Sopenharmony_ci            } else {
171094332d3Sopenharmony_ci                CAMERA_LOGE("check Capture: CancelCapture fail, captureId = %{public}d, result = %{public}d",
172094332d3Sopenharmony_ci                    captureId, result);
173094332d3Sopenharmony_ci            }
174094332d3Sopenharmony_ci        }
175094332d3Sopenharmony_ci    }
176094332d3Sopenharmony_ci    sleep(TIME_FOR_RECEIVE_FRAME_OFF);
177094332d3Sopenharmony_ci}
178094332d3Sopenharmony_ci/**
179094332d3Sopenharmony_ci  * @tc.name: Video
180094332d3Sopenharmony_ci  * @tc.desc: Preview + video, commit together, success.
181094332d3Sopenharmony_ci  * @tc.level: Level1
182094332d3Sopenharmony_ci  * @tc.size: MediumTest
183094332d3Sopenharmony_ci  * @tc.type: Function
184094332d3Sopenharmony_ci  */
185094332d3Sopenharmony_ciHWTEST_F(CameraVideoTest, camera_video_001, TestSize.Level1)
186094332d3Sopenharmony_ci{
187094332d3Sopenharmony_ci    CAMERA_LOGD("Preview + video, commit together, success.");
188094332d3Sopenharmony_ci    // Create and get streamOperator information
189094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
190094332d3Sopenharmony_ci    // start stream
191094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, VIDEO};
192094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
193094332d3Sopenharmony_ci    // Get preview
194094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
195094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
196094332d3Sopenharmony_ci
197094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO};
198094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO};
199094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
200094332d3Sopenharmony_ci}
201094332d3Sopenharmony_ci
202094332d3Sopenharmony_ci/**
203094332d3Sopenharmony_ci  * @tc.name: Video
204094332d3Sopenharmony_ci  * @tc.desc: Preview + video, commit together, set 3A, success.
205094332d3Sopenharmony_ci  * @tc.level: Level1
206094332d3Sopenharmony_ci  * @tc.size: MediumTest
207094332d3Sopenharmony_ci  * @tc.type: Function
208094332d3Sopenharmony_ci  */
209094332d3Sopenharmony_ciHWTEST_F(CameraVideoTest, camera_video_002, TestSize.Level1)
210094332d3Sopenharmony_ci{
211094332d3Sopenharmony_ci    CAMERA_LOGD("Preview + video, commit together, set 3A, success.");
212094332d3Sopenharmony_ci    // Create and get streamOperator information
213094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
214094332d3Sopenharmony_ci
215094332d3Sopenharmony_ci    std::vector<int32_t> resultsList;
216094332d3Sopenharmony_ci    resultsList.push_back(OHOS_CAMERA_STREAM_ID);
217094332d3Sopenharmony_ci    resultsList.push_back(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION);
218094332d3Sopenharmony_ci    cameraBase_->cameraDevice->EnableResult(resultsList);
219094332d3Sopenharmony_ci
220094332d3Sopenharmony_ci    // start stream
221094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, VIDEO};
222094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
223094332d3Sopenharmony_ci    // Get preview
224094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
225094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
226094332d3Sopenharmony_ci    // Issue 3A parameters to increase exposure
227094332d3Sopenharmony_ci    std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(100, 2000);
228094332d3Sopenharmony_ci    int32_t expo = 0xa0;
229094332d3Sopenharmony_ci    meta->addEntry(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, &expo, 1);
230094332d3Sopenharmony_ci    const int32_t deviceStreamId = 0;
231094332d3Sopenharmony_ci    meta->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, 1);
232094332d3Sopenharmony_ci    std::vector<uint8_t> setting;
233094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(meta, setting);
234094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->cameraDevice->UpdateSettings(setting);
235094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
236094332d3Sopenharmony_ci        CAMERA_LOGI("UpdateSettings success, for 5s.");
237094332d3Sopenharmony_ci    } else {
238094332d3Sopenharmony_ci        CAMERA_LOGE("UpdateSettings fail, rc = %{public}d", cameraBase_->rc);
239094332d3Sopenharmony_ci    }
240094332d3Sopenharmony_ci    sleep(3);
241094332d3Sopenharmony_ci
242094332d3Sopenharmony_ci    // release stream
243094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO};
244094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO};
245094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
246094332d3Sopenharmony_ci}
247094332d3Sopenharmony_ci
248094332d3Sopenharmony_ci/**
249094332d3Sopenharmony_ci  * @tc.name: Video
250094332d3Sopenharmony_ci  * @tc.desc: Preview + video, commit together, then close device, and preview + video again.
251094332d3Sopenharmony_ci  * @tc.level: Level1
252094332d3Sopenharmony_ci  * @tc.size: MediumTest
253094332d3Sopenharmony_ci  * @tc.type: Function
254094332d3Sopenharmony_ci  */
255094332d3Sopenharmony_ciHWTEST_F(CameraVideoTest, camera_video_003, TestSize.Level1)
256094332d3Sopenharmony_ci{
257094332d3Sopenharmony_ci    CAMERA_LOGD("Preview + video, commit together, then close device, and preview + video again.");
258094332d3Sopenharmony_ci    // Create and get streamOperator information
259094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
260094332d3Sopenharmony_ci    // start stream
261094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, VIDEO};
262094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
263094332d3Sopenharmony_ci    // Get preview
264094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
265094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
266094332d3Sopenharmony_ci    // release stream
267094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO};
268094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO};
269094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
270094332d3Sopenharmony_ci
271094332d3Sopenharmony_ci    // Turn off the device
272094332d3Sopenharmony_ci    cameraBase_->Close();
273094332d3Sopenharmony_ci    // Turn on the device
274094332d3Sopenharmony_ci    cameraBase_->Init();
275094332d3Sopenharmony_ci    CAMERA_LOGD("The 2nd time.");
276094332d3Sopenharmony_ci
277094332d3Sopenharmony_ci    // Create and get streamOperator information
278094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
279094332d3Sopenharmony_ci    // start stream
280094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, VIDEO};
281094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
282094332d3Sopenharmony_ci    // Get preview
283094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
284094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
285094332d3Sopenharmony_ci    // release stream
286094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO};
287094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO};
288094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
289094332d3Sopenharmony_ci}
290094332d3Sopenharmony_ci
291094332d3Sopenharmony_ci/**
292094332d3Sopenharmony_ci  * @tc.name: Video
293094332d3Sopenharmony_ci  * @tc.desc: Preview + video, commit together, then close device, and preview + capture.
294094332d3Sopenharmony_ci  * @tc.level: Level1
295094332d3Sopenharmony_ci  * @tc.size: MediumTest
296094332d3Sopenharmony_ci  * @tc.type: Function
297094332d3Sopenharmony_ci  */
298094332d3Sopenharmony_ciHWTEST_F(CameraVideoTest, camera_video_004, TestSize.Level1)
299094332d3Sopenharmony_ci{
300094332d3Sopenharmony_ci    CAMERA_LOGD("Preview + video, commit together, then close device, and preview + capture.");
301094332d3Sopenharmony_ci    // Create and get streamOperator information
302094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
303094332d3Sopenharmony_ci    // start stream
304094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, VIDEO};
305094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
306094332d3Sopenharmony_ci    // Get preview
307094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
308094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
309094332d3Sopenharmony_ci    // release stream
310094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO};
311094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO};
312094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
313094332d3Sopenharmony_ci
314094332d3Sopenharmony_ci    // Turn off the device
315094332d3Sopenharmony_ci    cameraBase_->Close();
316094332d3Sopenharmony_ci    CAMERA_LOGD("cameraDevice->Close");
317094332d3Sopenharmony_ci    // Turn on the device
318094332d3Sopenharmony_ci    cameraBase_->Init();
319094332d3Sopenharmony_ci
320094332d3Sopenharmony_ci    // Create and get streamOperator information
321094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
322094332d3Sopenharmony_ci    // start stream
323094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
324094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
325094332d3Sopenharmony_ci    // Get preview
326094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
327094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
328094332d3Sopenharmony_ci    // release stream
329094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
330094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
331094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
332094332d3Sopenharmony_ci}
333094332d3Sopenharmony_ci
334094332d3Sopenharmony_ci/**
335094332d3Sopenharmony_ci  * @tc.name: Video
336094332d3Sopenharmony_ci  * @tc.desc: Preview + video, commit together, success.
337094332d3Sopenharmony_ci  * @tc.level: Level1
338094332d3Sopenharmony_ci  * @tc.size: MediumTest
339094332d3Sopenharmony_ci  * @tc.type: Function
340094332d3Sopenharmony_ci  */
341094332d3Sopenharmony_ciHWTEST_F(CameraVideoTest, camera_video_005, TestSize.Level1)
342094332d3Sopenharmony_ci{
343094332d3Sopenharmony_ci    CAMERA_LOGD("Preview + video, commit together, success.");
344094332d3Sopenharmony_ci    // Create and get streamOperator information
345094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
346094332d3Sopenharmony_ci    // start stream
347094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, VIDEO};
348094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
349094332d3Sopenharmony_ci    // Get preview
350094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
351094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
352094332d3Sopenharmony_ci    // release stream
353094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO};
354094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO};
355094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
356094332d3Sopenharmony_ci}
357094332d3Sopenharmony_ci
358094332d3Sopenharmony_ci/**
359094332d3Sopenharmony_ci  * @tc.name: Video
360094332d3Sopenharmony_ci  * @tc.desc: Video start&stop, for 5 times, success.
361094332d3Sopenharmony_ci  * @tc.level: Level2
362094332d3Sopenharmony_ci  * @tc.size: MediumTest
363094332d3Sopenharmony_ci  * @tc.type: Function
364094332d3Sopenharmony_ci  */
365094332d3Sopenharmony_ciHWTEST_F(CameraVideoTest, camera_video_010, TestSize.Level2)
366094332d3Sopenharmony_ci{
367094332d3Sopenharmony_ci    CAMERA_LOGD("Video start&stop, for 5 times, success.");
368094332d3Sopenharmony_ci    // Create and get streamOperator information
369094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
370094332d3Sopenharmony_ci    for (int i = 0; i < 5; i++) {
371094332d3Sopenharmony_ci    // start stream
372094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, VIDEO};
373094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
374094332d3Sopenharmony_ci    // Get preview
375094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
376094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
377094332d3Sopenharmony_ci    // release stream
378094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO};
379094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO};
380094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
381094332d3Sopenharmony_ci    }
382094332d3Sopenharmony_ci}
383094332d3Sopenharmony_ci
384094332d3Sopenharmony_ci/**
385094332d3Sopenharmony_ci  * @tc.name: Video
386094332d3Sopenharmony_ci  * @tc.desc: Video start&stop, for 5 times, success.
387094332d3Sopenharmony_ci  * @tc.level: Level2
388094332d3Sopenharmony_ci  * @tc.size: MediumTest
389094332d3Sopenharmony_ci  * @tc.type: Function
390094332d3Sopenharmony_ci  */
391094332d3Sopenharmony_ciHWTEST_F(CameraVideoTest, camera_video_011, TestSize.Level2)
392094332d3Sopenharmony_ci{
393094332d3Sopenharmony_ci    CAMERA_LOGD("Video start&stop, for 5 times, success.");
394094332d3Sopenharmony_ci    // Create and get streamOperator information
395094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
396094332d3Sopenharmony_ci    for (int i = 0; i < 5; i++) {
397094332d3Sopenharmony_ci        // start stream
398094332d3Sopenharmony_ci        cameraBase_->intents = {PREVIEW, VIDEO};
399094332d3Sopenharmony_ci        cameraBase_->StartStream(cameraBase_->intents);
400094332d3Sopenharmony_ci
401094332d3Sopenharmony_ci        // Start capture preview
402094332d3Sopenharmony_ci        cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
403094332d3Sopenharmony_ci        // Start capture recording
404094332d3Sopenharmony_ci        cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
405094332d3Sopenharmony_ci
406094332d3Sopenharmony_ci        // post-processing
407094332d3Sopenharmony_ci        cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO};
408094332d3Sopenharmony_ci        cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO};
409094332d3Sopenharmony_ci        cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
410094332d3Sopenharmony_ci    }
411094332d3Sopenharmony_ci}
412094332d3Sopenharmony_ci
413094332d3Sopenharmony_ci/**
414094332d3Sopenharmony_ci  * @tc.name: Video
415094332d3Sopenharmony_ci  * @tc.desc: Dynamic Video mode, preview, success.
416094332d3Sopenharmony_ci  * @tc.level: Level2
417094332d3Sopenharmony_ci  * @tc.size: MediumTest
418094332d3Sopenharmony_ci  * @tc.type: Function
419094332d3Sopenharmony_ci  */
420094332d3Sopenharmony_ciHWTEST_F(CameraVideoTest, camera_video_020, TestSize.Level2)
421094332d3Sopenharmony_ci{
422094332d3Sopenharmony_ci    CAMERA_LOGD("Video mode, preview, success.");
423094332d3Sopenharmony_ci    // Create and get streamOperator information
424094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
425094332d3Sopenharmony_ci    // Create video stream
426094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, VIDEO};
427094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
428094332d3Sopenharmony_ci    // Start capture recording
429094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
430094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
431094332d3Sopenharmony_ci
432094332d3Sopenharmony_ci    // post-processing
433094332d3Sopenharmony_ci    cameraBase_->streamCustomerPreview_->ReceiveFrameOff();
434094332d3Sopenharmony_ci    cameraBase_->streamCustomerVideo_->ReceiveFrameOff();
435094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CancelCapture(cameraBase_->CAPTURE_ID_VIDEO);
436094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
437094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
438094332d3Sopenharmony_ci        CAMERA_LOGI("CancelCapture success, captureId = %{public}d", cameraBase_->CAPTURE_ID_VIDEO);
439094332d3Sopenharmony_ci    } else {
440094332d3Sopenharmony_ci        CAMERA_LOGE("CancelCapture fail, rc = %{public}d", cameraBase_->rc);
441094332d3Sopenharmony_ci    }
442094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CancelCapture(cameraBase_->CAPTURE_ID_PREVIEW);
443094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
444094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
445094332d3Sopenharmony_ci        CAMERA_LOGI("CancelCapture success, captureId = %{public}d", cameraBase_->CAPTURE_ID_PREVIEW);
446094332d3Sopenharmony_ci    } else {
447094332d3Sopenharmony_ci        CAMERA_LOGE("CancelCapture fail, rc = %{public}d", cameraBase_->rc);
448094332d3Sopenharmony_ci    }
449094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->ReleaseStreams(
450094332d3Sopenharmony_ci        {cameraBase_->STREAM_ID_VIDEO});
451094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
452094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
453094332d3Sopenharmony_ci        CAMERA_LOGI("ReleaseStreams success.");
454094332d3Sopenharmony_ci    } else {
455094332d3Sopenharmony_ci        CAMERA_LOGE("ReleaseStreams fail, rc = %{public}d", cameraBase_->rc);
456094332d3Sopenharmony_ci    }
457094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->ReleaseStreams(
458094332d3Sopenharmony_ci        {cameraBase_->STREAM_ID_PREVIEW});
459094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
460094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
461094332d3Sopenharmony_ci        CAMERA_LOGI("ReleaseStreams success.");
462094332d3Sopenharmony_ci    } else {
463094332d3Sopenharmony_ci        CAMERA_LOGE("ReleaseStreams fail, rc = %{public}d", cameraBase_->rc);
464094332d3Sopenharmony_ci    }
465094332d3Sopenharmony_ci}
466094332d3Sopenharmony_ci
467094332d3Sopenharmony_ci/**
468094332d3Sopenharmony_ci  * @tc.name: Video
469094332d3Sopenharmony_ci  * @tc.desc: Video mode, preview, set 3A, success.
470094332d3Sopenharmony_ci  * @tc.level: Level1
471094332d3Sopenharmony_ci  * @tc.size: MediumTest
472094332d3Sopenharmony_ci  * @tc.type: Function
473094332d3Sopenharmony_ci  */
474094332d3Sopenharmony_ciHWTEST_F(CameraVideoTest, camera_video_021, TestSize.Level1)
475094332d3Sopenharmony_ci{
476094332d3Sopenharmony_ci    CAMERA_LOGD("Video mode, preview, set 3A, success.");
477094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->cameraDevice != nullptr);
478094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
479094332d3Sopenharmony_ci
480094332d3Sopenharmony_ci    std::vector<int32_t> resultsList;
481094332d3Sopenharmony_ci    resultsList.push_back(OHOS_CAMERA_STREAM_ID);
482094332d3Sopenharmony_ci    resultsList.push_back(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION);
483094332d3Sopenharmony_ci    cameraBase_->cameraDevice->EnableResult(resultsList);
484094332d3Sopenharmony_ci    // start stream
485094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, VIDEO};
486094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
487094332d3Sopenharmony_ci    // capture
488094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
489094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
490094332d3Sopenharmony_ci    // Issue 3A parameters to increase exposure
491094332d3Sopenharmony_ci    std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(100, 2000);
492094332d3Sopenharmony_ci    int32_t expo = 0xa0;
493094332d3Sopenharmony_ci    meta->addEntry(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, &expo, 1);
494094332d3Sopenharmony_ci    const int32_t deviceStreamId = 0;
495094332d3Sopenharmony_ci    meta->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, 1);
496094332d3Sopenharmony_ci    std::vector<uint8_t> setting;
497094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(meta, setting);
498094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->cameraDevice->UpdateSettings(setting);
499094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
500094332d3Sopenharmony_ci        CAMERA_LOGI("UpdateSettings success, for 5s.");
501094332d3Sopenharmony_ci    } else {
502094332d3Sopenharmony_ci        CAMERA_LOGE("UpdateSettings fail, rc = %{public}d", cameraBase_->rc);
503094332d3Sopenharmony_ci    }
504094332d3Sopenharmony_ci    sleep(3);
505094332d3Sopenharmony_ci
506094332d3Sopenharmony_ci    // post-processing
507094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO};
508094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO};
509094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
510094332d3Sopenharmony_ci}
511094332d3Sopenharmony_ci
512094332d3Sopenharmony_ci/**
513094332d3Sopenharmony_ci  * @tc.name: Video
514094332d3Sopenharmony_ci  * @tc.desc: Video mode without preview, system not support, expected return fail.
515094332d3Sopenharmony_ci  * @tc.level: Level2
516094332d3Sopenharmony_ci  * @tc.size: MediumTest
517094332d3Sopenharmony_ci  * @tc.type: Function
518094332d3Sopenharmony_ci  */
519094332d3Sopenharmony_ciHWTEST_F(CameraVideoTest, camera_video_030, TestSize.Level2)
520094332d3Sopenharmony_ci{
521094332d3Sopenharmony_ci    CAMERA_LOGD("Video mode without preview, system not support, expected return fail.");
522094332d3Sopenharmony_ci
523094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->cameraDevice != nullptr);
524094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
525094332d3Sopenharmony_ci    // Create video stream
526094332d3Sopenharmony_ci    std::shared_ptr<StreamCustomer> streamCustomer = std::make_shared<StreamCustomer>();
527094332d3Sopenharmony_ci    OHOS::sptr<OHOS::IBufferProducer> producer = streamCustomer->CreateProducer();
528094332d3Sopenharmony_ci    producer->SetQueueSize(8); // 8:set bufferQueue size
529094332d3Sopenharmony_ci    if (producer->GetQueueSize() != 8) { // 8:get bufferQueue size
530094332d3Sopenharmony_ci        CAMERA_LOGE("~~~~~~~");
531094332d3Sopenharmony_ci    }
532094332d3Sopenharmony_ci
533094332d3Sopenharmony_ci    std::vector<StreamInfo> streamInfos;
534094332d3Sopenharmony_ci    cameraBase_->streamInfo.streamId_ = cameraBase_->STREAM_ID_VIDEO;
535094332d3Sopenharmony_ci    cameraBase_->streamInfo.width_ = 1280; // 1280:picture width
536094332d3Sopenharmony_ci    cameraBase_->streamInfo.height_ = 960; // 960:picture height
537094332d3Sopenharmony_ci    cameraBase_->streamInfo.format_ = PIXEL_FMT_RGBA_8888;
538094332d3Sopenharmony_ci    cameraBase_->streamInfo.dataspace_ = 10;
539094332d3Sopenharmony_ci    cameraBase_->streamInfo.intent_ = VIDEO;
540094332d3Sopenharmony_ci    cameraBase_->streamInfo.tunneledMode_ = 5; // 5:tunnel mode
541094332d3Sopenharmony_ci    cameraBase_->streamInfo.bufferQueue_ = new BufferProducerSequenceable(producer);
542094332d3Sopenharmony_ci    ASSERT_NE(cameraBase_->streamInfo.bufferQueue_, nullptr);
543094332d3Sopenharmony_ci    streamInfos.push_back(cameraBase_->streamInfo);
544094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CreateStreams(streamInfos);
545094332d3Sopenharmony_ci    EXPECT_EQ(false, cameraBase_->rc == OHOS::Camera::METHOD_NOT_SUPPORTED);
546094332d3Sopenharmony_ci    if (cameraBase_->rc == OHOS::Camera::METHOD_NOT_SUPPORTED) {
547094332d3Sopenharmony_ci        CAMERA_LOGI("CreateStreams METHOD_NOT_SUPPORTED, streamId = %{public}d", cameraBase_->STREAM_ID_VIDEO);
548094332d3Sopenharmony_ci    } else {
549094332d3Sopenharmony_ci        CAMERA_LOGE("CreateStreams fail, rc = %{public}d", cameraBase_->rc);
550094332d3Sopenharmony_ci    }
551094332d3Sopenharmony_ci    std::vector<uint8_t> modeSetting = {};
552094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CommitStreams(NORMAL, modeSetting);
553094332d3Sopenharmony_ci    EXPECT_EQ(false, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
554094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
555094332d3Sopenharmony_ci        CAMERA_LOGI("CommitStreams success.");
556094332d3Sopenharmony_ci    } else {
557094332d3Sopenharmony_ci        CAMERA_LOGE("CommitStreams fail, rc = %{public}d", cameraBase_->rc);
558094332d3Sopenharmony_ci    }
559094332d3Sopenharmony_ci}
560094332d3Sopenharmony_ci
561094332d3Sopenharmony_ci/**
562094332d3Sopenharmony_ci * @tc.name: preview, still_capture and video
563094332d3Sopenharmony_ci * @tc.desc: Commit 3 streams in order, Preview, still_capture and video streams.
564094332d3Sopenharmony_ci * @tc.level: Level1
565094332d3Sopenharmony_ci * @tc.size: MediumTest
566094332d3Sopenharmony_ci * @tc.type: Function
567094332d3Sopenharmony_ci */
568094332d3Sopenharmony_ciHWTEST_F(CameraVideoTest, camera_video_031, TestSize.Level1)
569094332d3Sopenharmony_ci{
570094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
571094332d3Sopenharmony_ci
572094332d3Sopenharmony_ci    CreateStream(cameraBase_->STREAM_ID_PREVIEW, PREVIEW);
573094332d3Sopenharmony_ci    CreateStream(cameraBase_->STREAM_ID_CAPTURE, STILL_CAPTURE);
574094332d3Sopenharmony_ci    CreateStream(cameraBase_->STREAM_ID_VIDEO, VIDEO);
575094332d3Sopenharmony_ci
576094332d3Sopenharmony_ci    CommitStream();
577094332d3Sopenharmony_ci
578094332d3Sopenharmony_ci    CaptureInfo captureInfo = {};
579094332d3Sopenharmony_ci    StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true, captureInfo);
580094332d3Sopenharmony_ci    StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true, captureInfo);
581094332d3Sopenharmony_ci
582094332d3Sopenharmony_ci    constexpr double latitude = 27.987500;  // dummy data: Qomolangma latitde
583094332d3Sopenharmony_ci    constexpr double longitude = 86.927500; // dummy data: Qomolangma longituude
584094332d3Sopenharmony_ci    constexpr double altitude = 8848.86;    // dummy data: Qomolangma altitude
585094332d3Sopenharmony_ci
586094332d3Sopenharmony_ci    constexpr size_t entryCapacity = 100;
587094332d3Sopenharmony_ci    constexpr size_t dataCapacity = 2000;
588094332d3Sopenharmony_ci    std::shared_ptr<CameraSetting> captureSetting =
589094332d3Sopenharmony_ci        std::make_shared<CameraSetting>(entryCapacity, dataCapacity);
590094332d3Sopenharmony_ci    std::vector<double> gps;
591094332d3Sopenharmony_ci    gps.push_back(latitude);
592094332d3Sopenharmony_ci    gps.push_back(longitude);
593094332d3Sopenharmony_ci    gps.push_back(altitude);
594094332d3Sopenharmony_ci    captureSetting->addEntry(OHOS_JPEG_GPS_COORDINATES, gps.data(), gps.size());
595094332d3Sopenharmony_ci
596094332d3Sopenharmony_ci    captureInfo.streamIds_ = {cameraBase_->STREAM_ID_CAPTURE};
597094332d3Sopenharmony_ci    std::vector<uint8_t> setting;
598094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(captureSetting, setting);
599094332d3Sopenharmony_ci    captureInfo.captureSetting_ = setting;
600094332d3Sopenharmony_ci    captureInfo.enableShutterCallback_ = false;
601094332d3Sopenharmony_ci    StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true, captureInfo);
602094332d3Sopenharmony_ci
603094332d3Sopenharmony_ci    constexpr uint32_t TIME_FOR_WAIT_INIT_CAPTUREIDS = 5;
604094332d3Sopenharmony_ci    sleep(TIME_FOR_WAIT_INIT_CAPTUREIDS);
605094332d3Sopenharmony_ci    std::vector<int> captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO,
606094332d3Sopenharmony_ci        cameraBase_->CAPTURE_ID_CAPTURE};
607094332d3Sopenharmony_ci    std::vector<int> streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO,
608094332d3Sopenharmony_ci        cameraBase_->STREAM_ID_CAPTURE};
609094332d3Sopenharmony_ci    StopStream(captureIds, streamIds);
610094332d3Sopenharmony_ci}