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_capture_test.h"
16094332d3Sopenharmony_ci
17094332d3Sopenharmony_ciusing namespace testing::ext;
18094332d3Sopenharmony_ci
19094332d3Sopenharmony_civoid CameraCaptureTest::SetUpTestCase(void)
20094332d3Sopenharmony_ci{}
21094332d3Sopenharmony_civoid CameraCaptureTest::TearDownTestCase(void)
22094332d3Sopenharmony_ci{}
23094332d3Sopenharmony_civoid CameraCaptureTest::SetUp(void)
24094332d3Sopenharmony_ci{
25094332d3Sopenharmony_ci    if (cameraBase_ == nullptr)
26094332d3Sopenharmony_ci    cameraBase_ = std::make_shared<TestCameraBase>();
27094332d3Sopenharmony_ci    cameraBase_->Init();
28094332d3Sopenharmony_ci}
29094332d3Sopenharmony_civoid CameraCaptureTest::TearDown(void)
30094332d3Sopenharmony_ci{
31094332d3Sopenharmony_ci    cameraBase_->Close();
32094332d3Sopenharmony_ci}
33094332d3Sopenharmony_ci
34094332d3Sopenharmony_ci/**
35094332d3Sopenharmony_ci  * @tc.name: preview and capture
36094332d3Sopenharmony_ci  * @tc.desc: Commit 2 streams together, Preview and still_capture streams, isStreaming is true.
37094332d3Sopenharmony_ci  * @tc.level: Level1
38094332d3Sopenharmony_ci  * @tc.size: MediumTest
39094332d3Sopenharmony_ci  * @tc.type: Function
40094332d3Sopenharmony_ci  */
41094332d3Sopenharmony_ciHWTEST_F(CameraCaptureTest, camera_capture_001, TestSize.Level1)
42094332d3Sopenharmony_ci{
43094332d3Sopenharmony_ci    // Get the stream manager
44094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
45094332d3Sopenharmony_ci    // start stream
46094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
47094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
48094332d3Sopenharmony_ci    // Get preview
49094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
50094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
51094332d3Sopenharmony_ci    // release stream
52094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
53094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
54094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
55094332d3Sopenharmony_ci}
56094332d3Sopenharmony_ci
57094332d3Sopenharmony_ci/**
58094332d3Sopenharmony_ci  * @tc.name: preview and capture
59094332d3Sopenharmony_ci  * @tc.desc: Preview + capture, then close camera, and preview + capture again.
60094332d3Sopenharmony_ci  * @tc.level: Level1
61094332d3Sopenharmony_ci  * @tc.size: MediumTest
62094332d3Sopenharmony_ci  * @tc.type: Function
63094332d3Sopenharmony_ci  */
64094332d3Sopenharmony_ciHWTEST_F(CameraCaptureTest, camera_capture_002, TestSize.Level1)
65094332d3Sopenharmony_ci{
66094332d3Sopenharmony_ci    CAMERA_LOGD("Preview + capture, then close camera, and preview + capture again.");
67094332d3Sopenharmony_ci    // Get the stream manager
68094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
69094332d3Sopenharmony_ci    // start stream
70094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
71094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
72094332d3Sopenharmony_ci    // Get preview
73094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
74094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
75094332d3Sopenharmony_ci    // release stream
76094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
77094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
78094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
79094332d3Sopenharmony_ci
80094332d3Sopenharmony_ci    // the 2nd time
81094332d3Sopenharmony_ci    // Configure two streams of information
82094332d3Sopenharmony_ci    // Get the stream manager
83094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
84094332d3Sopenharmony_ci    // start stream
85094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
86094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
87094332d3Sopenharmony_ci    // Get preview
88094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
89094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
90094332d3Sopenharmony_ci    // release stream
91094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
92094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
93094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
94094332d3Sopenharmony_ci}
95094332d3Sopenharmony_ci
96094332d3Sopenharmony_ci/**
97094332d3Sopenharmony_ci  * @tc.name: preview and capture
98094332d3Sopenharmony_ci  * @tc.desc: Preview + capture with 3A, success.
99094332d3Sopenharmony_ci  * @tc.level: Level1
100094332d3Sopenharmony_ci  * @tc.size: MediumTest
101094332d3Sopenharmony_ci  * @tc.type: Function
102094332d3Sopenharmony_ci  */
103094332d3Sopenharmony_ciHWTEST_F(CameraCaptureTest, camera_capture_003, TestSize.Level1)
104094332d3Sopenharmony_ci{
105094332d3Sopenharmony_ci    CAMERA_LOGD("Capture with 3A, success.");
106094332d3Sopenharmony_ci    // Get the stream manager
107094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
108094332d3Sopenharmony_ci    // start stream
109094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
110094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
111094332d3Sopenharmony_ci    // Get preview
112094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
113094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
114094332d3Sopenharmony_ci    // Issue 3A parameters to increase exposure
115094332d3Sopenharmony_ci    std::shared_ptr<CameraSetting> meta = std::make_shared<CameraSetting>(100, 2000);
116094332d3Sopenharmony_ci    int32_t expo = 0xa0;
117094332d3Sopenharmony_ci    meta->addEntry(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, &expo, 1);
118094332d3Sopenharmony_ci    const int32_t deviceStreamId = cameraBase_->STREAM_ID_CAPTURE;
119094332d3Sopenharmony_ci    meta->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, 1);
120094332d3Sopenharmony_ci    std::vector<uint8_t> setting;
121094332d3Sopenharmony_ci    MetadataUtils::ConvertMetadataToVec(meta, setting);
122094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->cameraDevice->UpdateSettings(setting);
123094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
124094332d3Sopenharmony_ci        CAMERA_LOGI("UpdateSettings success, for 10s.");
125094332d3Sopenharmony_ci    } else {
126094332d3Sopenharmony_ci        CAMERA_LOGE("UpdateSettings fail, rc = %{public}d", cameraBase_->rc);
127094332d3Sopenharmony_ci    }
128094332d3Sopenharmony_ci    // release stream
129094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
130094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
131094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
132094332d3Sopenharmony_ci}
133094332d3Sopenharmony_ci
134094332d3Sopenharmony_ci/**
135094332d3Sopenharmony_ci  * @tc.name: preview and capture
136094332d3Sopenharmony_ci  * @tc.desc: Preview + capture, then switch to preview + video.
137094332d3Sopenharmony_ci  * @tc.level: Level1
138094332d3Sopenharmony_ci  * @tc.size: MediumTest
139094332d3Sopenharmony_ci  * @tc.type: Function
140094332d3Sopenharmony_ci  */
141094332d3Sopenharmony_ciHWTEST_F(CameraCaptureTest, camera_capture_004, TestSize.Level1)
142094332d3Sopenharmony_ci{
143094332d3Sopenharmony_ci    CAMERA_LOGD("Preview + capture, then switch to preview + video.");
144094332d3Sopenharmony_ci    CAMERA_LOGD("First, create preview + capture.");
145094332d3Sopenharmony_ci    // Get the stream manager
146094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
147094332d3Sopenharmony_ci    // start stream
148094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
149094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
150094332d3Sopenharmony_ci    // Get preview
151094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
152094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
153094332d3Sopenharmony_ci    // release stream
154094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE};
155094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE};
156094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
157094332d3Sopenharmony_ci    sleep(3);
158094332d3Sopenharmony_ci
159094332d3Sopenharmony_ci    CAMERA_LOGD("Next, switch to preview + video, rc = %{public}d", cameraBase_->rc);
160094332d3Sopenharmony_ci    // Get the stream manager
161094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
162094332d3Sopenharmony_ci    // start stream
163094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, VIDEO};
164094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
165094332d3Sopenharmony_ci    // Get preview
166094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
167094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true);
168094332d3Sopenharmony_ci    // release stream
169094332d3Sopenharmony_ci    cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO};
170094332d3Sopenharmony_ci    cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO};
171094332d3Sopenharmony_ci    cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds);
172094332d3Sopenharmony_ci}
173094332d3Sopenharmony_ci
174094332d3Sopenharmony_ci/**
175094332d3Sopenharmony_ci  * @tc.name: preview and capture
176094332d3Sopenharmony_ci  * @tc.desc: Commit 2 streams together, Preview and still_capture streams, isStreaming is false.
177094332d3Sopenharmony_ci  * @tc.level: Level1
178094332d3Sopenharmony_ci  * @tc.size: MediumTest
179094332d3Sopenharmony_ci  * @tc.type: Function
180094332d3Sopenharmony_ci  */
181094332d3Sopenharmony_ciHWTEST_F(CameraCaptureTest, camera_capture_006, TestSize.Level1)
182094332d3Sopenharmony_ci{
183094332d3Sopenharmony_ci    // Get the stream manager
184094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
185094332d3Sopenharmony_ci    // start stream
186094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
187094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
188094332d3Sopenharmony_ci    // Get preview
189094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
190094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, false);
191094332d3Sopenharmony_ci
192094332d3Sopenharmony_ci    sleep(3);
193094332d3Sopenharmony_ci    CAMERA_LOGD("frame off.");
194094332d3Sopenharmony_ci    cameraBase_->streamCustomerPreview_->ReceiveFrameOff();
195094332d3Sopenharmony_ci    cameraBase_->streamCustomerCapture_->ReceiveFrameOff();
196094332d3Sopenharmony_ci
197094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->ReleaseStreams(
198094332d3Sopenharmony_ci        {cameraBase_->STREAM_ID_CAPTURE});
199094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
200094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
201094332d3Sopenharmony_ci        CAMERA_LOGI("ReleaseStreams success.");
202094332d3Sopenharmony_ci    } else {
203094332d3Sopenharmony_ci        CAMERA_LOGE("ReleaseStreams fail, rc = %{public}d", cameraBase_->rc);
204094332d3Sopenharmony_ci    }
205094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->ReleaseStreams(
206094332d3Sopenharmony_ci        {cameraBase_->STREAM_ID_PREVIEW});
207094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
208094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
209094332d3Sopenharmony_ci        CAMERA_LOGI("ReleaseStreams success.");
210094332d3Sopenharmony_ci    } else {
211094332d3Sopenharmony_ci        CAMERA_LOGE("ReleaseStreams fail, rc = %{public}d", cameraBase_->rc);
212094332d3Sopenharmony_ci    }
213094332d3Sopenharmony_ci}
214094332d3Sopenharmony_ci
215094332d3Sopenharmony_ci/**
216094332d3Sopenharmony_ci  * @tc.name: preview and capture
217094332d3Sopenharmony_ci  * @tc.desc: Commit 2 streams in order, Preview and still_capture streams.
218094332d3Sopenharmony_ci  * @tc.level: Level1
219094332d3Sopenharmony_ci  * @tc.size: MediumTest
220094332d3Sopenharmony_ci  * @tc.type: Function
221094332d3Sopenharmony_ci  */
222094332d3Sopenharmony_ciHWTEST_F(CameraCaptureTest, camera_capture_010, TestSize.Level1)
223094332d3Sopenharmony_ci{
224094332d3Sopenharmony_ci    CAMERA_LOGD("Preview and still_capture streams.");
225094332d3Sopenharmony_ci    // Configure two streams of information
226094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->cameraDevice != nullptr);
227094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
228094332d3Sopenharmony_ci    // Configure capture stream information
229094332d3Sopenharmony_ci    cameraBase_->intents = {PREVIEW, STILL_CAPTURE};
230094332d3Sopenharmony_ci    cameraBase_->StartStream(cameraBase_->intents);
231094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true);
232094332d3Sopenharmony_ci    cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true);
233094332d3Sopenharmony_ci    sleep(2);
234094332d3Sopenharmony_ci
235094332d3Sopenharmony_ci    // post-processing
236094332d3Sopenharmony_ci    cameraBase_->streamCustomerPreview_->ReceiveFrameOff();
237094332d3Sopenharmony_ci    cameraBase_->streamCustomerCapture_->ReceiveFrameOff();
238094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CancelCapture(cameraBase_->CAPTURE_ID_CAPTURE);
239094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
240094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
241094332d3Sopenharmony_ci        CAMERA_LOGI("CancelCapture success.");
242094332d3Sopenharmony_ci    } else {
243094332d3Sopenharmony_ci        CAMERA_LOGE("CancelCapture fail, rc = %{public}d", cameraBase_->rc);
244094332d3Sopenharmony_ci    }
245094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CancelCapture(cameraBase_->CAPTURE_ID_PREVIEW);
246094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
247094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
248094332d3Sopenharmony_ci        CAMERA_LOGI("CancelCapture success.");
249094332d3Sopenharmony_ci    } else {
250094332d3Sopenharmony_ci        CAMERA_LOGE("CancelCapture fail, rc = %{public}d", cameraBase_->rc);
251094332d3Sopenharmony_ci    }
252094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->ReleaseStreams(
253094332d3Sopenharmony_ci        {cameraBase_->STREAM_ID_CAPTURE});
254094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
255094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
256094332d3Sopenharmony_ci        CAMERA_LOGI("ReleaseStreams success.");
257094332d3Sopenharmony_ci    } else {
258094332d3Sopenharmony_ci        CAMERA_LOGE("ReleaseStreams fail, rc = %{public}d", cameraBase_->rc);
259094332d3Sopenharmony_ci    }
260094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->ReleaseStreams(
261094332d3Sopenharmony_ci        {cameraBase_->STREAM_ID_PREVIEW});
262094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
263094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
264094332d3Sopenharmony_ci        CAMERA_LOGI("ReleaseStreams success.");
265094332d3Sopenharmony_ci    } else {
266094332d3Sopenharmony_ci        CAMERA_LOGE("ReleaseStreams fail, rc = %{public}d", cameraBase_->rc);
267094332d3Sopenharmony_ci    }
268094332d3Sopenharmony_ci}
269094332d3Sopenharmony_ci
270094332d3Sopenharmony_ci/**
271094332d3Sopenharmony_ci  * @tc.name: Only Still_capture stream
272094332d3Sopenharmony_ci  * @tc.desc: Only Still_capture stream, capture->isStreaming = false.
273094332d3Sopenharmony_ci  * @tc.level: Level1
274094332d3Sopenharmony_ci  * @tc.size: MediumTest
275094332d3Sopenharmony_ci  * @tc.type: Function
276094332d3Sopenharmony_ci  */
277094332d3Sopenharmony_ciHWTEST_F(CameraCaptureTest, camera_capture_020, TestSize.Level1)
278094332d3Sopenharmony_ci{
279094332d3Sopenharmony_ci    CAMERA_LOGD("No preview, only still_capture.");
280094332d3Sopenharmony_ci    // start stream
281094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
282094332d3Sopenharmony_ci    std::shared_ptr<StreamCustomer> streamCustomer = std::make_shared<StreamCustomer>();
283094332d3Sopenharmony_ci    OHOS::sptr<OHOS::IBufferProducer> producer = streamCustomer->CreateProducer();
284094332d3Sopenharmony_ci    producer->SetQueueSize(8); // buffer queue size
285094332d3Sopenharmony_ci    if (producer->GetQueueSize() != 8) { // buffer queue size
286094332d3Sopenharmony_ci        CAMERA_LOGE("~~~~~~~");
287094332d3Sopenharmony_ci    }
288094332d3Sopenharmony_ci    streamCustomer->ReceiveFrameOn([this](const unsigned char *addr, const uint32_t size) {
289094332d3Sopenharmony_ci        cameraBase_->StoreImage(addr, size);
290094332d3Sopenharmony_ci    });
291094332d3Sopenharmony_ci    std::vector<StreamInfo> streamInfos;
292094332d3Sopenharmony_ci    cameraBase_->streamInfo.streamId_ = 1001;
293094332d3Sopenharmony_ci    cameraBase_->streamInfo.width_ = 1280; // picture width
294094332d3Sopenharmony_ci    cameraBase_->streamInfo.height_ = 960; // picture height
295094332d3Sopenharmony_ci    cameraBase_->streamInfo.format_ = PIXEL_FMT_RGBA_8888;
296094332d3Sopenharmony_ci    cameraBase_->streamInfo.dataspace_ = 8; // picture dataspace
297094332d3Sopenharmony_ci    cameraBase_->streamInfo.intent_ = STILL_CAPTURE;
298094332d3Sopenharmony_ci    cameraBase_->streamInfo.tunneledMode_ = 5; // tunnel mode
299094332d3Sopenharmony_ci    cameraBase_->streamInfo.encodeType_ = ENCODE_TYPE_JPEG;
300094332d3Sopenharmony_ci    cameraBase_->streamInfo.bufferQueue_ = new BufferProducerSequenceable(producer);
301094332d3Sopenharmony_ci    ASSERT_NE(cameraBase_->streamInfo.bufferQueue_, nullptr);
302094332d3Sopenharmony_ci    streamInfos.push_back(cameraBase_->streamInfo);
303094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CreateStreams(streamInfos);
304094332d3Sopenharmony_ci    CAMERA_LOGE("CreateStreams! rc:0x%x\n", cameraBase_->rc);
305094332d3Sopenharmony_ci
306094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CommitStreams(NORMAL, cameraBase_->ability_);
307094332d3Sopenharmony_ci    CAMERA_LOGE("CommitStreams! rc:0x%x\n", cameraBase_->rc);
308094332d3Sopenharmony_ci    int captureId = 2001;
309094332d3Sopenharmony_ci    CaptureInfo captureInfo = {};
310094332d3Sopenharmony_ci    captureInfo.streamIds_ = {1001};
311094332d3Sopenharmony_ci    captureInfo.captureSetting_ = cameraBase_->ability_;
312094332d3Sopenharmony_ci    captureInfo.enableShutterCallback_ = false;
313094332d3Sopenharmony_ci
314094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->Capture(captureId, captureInfo, false);
315094332d3Sopenharmony_ci    CAMERA_LOGE("Capture! rc:0x%x\n", cameraBase_->rc);
316094332d3Sopenharmony_ci    sleep(3);
317094332d3Sopenharmony_ci    streamCustomer->ReceiveFrameOff();
318094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CancelCapture(captureId);
319094332d3Sopenharmony_ci    CAMERA_LOGE("CancelCapture! rc:0x%x\n", cameraBase_->rc);
320094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->ReleaseStreams(captureInfo.streamIds_);
321094332d3Sopenharmony_ci    CAMERA_LOGE("ReleaseStreams! rc:0x%x\n", cameraBase_->rc);
322094332d3Sopenharmony_ci}
323094332d3Sopenharmony_ci
324094332d3Sopenharmony_ci/**
325094332d3Sopenharmony_ci  * @tc.name: Only Still_capture stream
326094332d3Sopenharmony_ci  * @tc.desc: Only Still_capture stream, capture->isStreaming = true.
327094332d3Sopenharmony_ci  * @tc.level: Level1
328094332d3Sopenharmony_ci  * @tc.size: MediumTest
329094332d3Sopenharmony_ci  * @tc.type: Function
330094332d3Sopenharmony_ci  */
331094332d3Sopenharmony_ciHWTEST_F(CameraCaptureTest, camera_capture_021, TestSize.Level1)
332094332d3Sopenharmony_ci{
333094332d3Sopenharmony_ci    CAMERA_LOGD("Still_capture stream, capture->isStreaming = true.");
334094332d3Sopenharmony_ci    // start stream
335094332d3Sopenharmony_ci    cameraBase_->AchieveStreamOperator();
336094332d3Sopenharmony_ci    std::shared_ptr<StreamCustomer> streamCustomer = std::make_shared<StreamCustomer>();
337094332d3Sopenharmony_ci    OHOS::sptr<OHOS::IBufferProducer> producer = streamCustomer->CreateProducer();
338094332d3Sopenharmony_ci    producer->SetQueueSize(8); // 8:set bufferqueue size
339094332d3Sopenharmony_ci    if (producer->GetQueueSize() != 8) { // 8:get bufferqueue size
340094332d3Sopenharmony_ci        CAMERA_LOGE("~~~~~~~");
341094332d3Sopenharmony_ci    }
342094332d3Sopenharmony_ci    streamCustomer->ReceiveFrameOn([this](const unsigned char *addr, const uint32_t size) {
343094332d3Sopenharmony_ci        cameraBase_->StoreImage(addr, size);
344094332d3Sopenharmony_ci    });
345094332d3Sopenharmony_ci    std::vector<StreamInfo> streamInfos;
346094332d3Sopenharmony_ci    cameraBase_->streamInfo.streamId_ = 1001;
347094332d3Sopenharmony_ci    cameraBase_->streamInfo.width_ = 1280; // 640:picture width
348094332d3Sopenharmony_ci    cameraBase_->streamInfo.height_ = 960; // 640:picture height
349094332d3Sopenharmony_ci    cameraBase_->streamInfo.format_ = PIXEL_FMT_RGBA_8888;
350094332d3Sopenharmony_ci    cameraBase_->streamInfo.dataspace_ = 8; // 8:picture dataspace
351094332d3Sopenharmony_ci    cameraBase_->streamInfo.intent_ = STILL_CAPTURE;
352094332d3Sopenharmony_ci    cameraBase_->streamInfo.tunneledMode_ = 5; // 5:tunnel mode
353094332d3Sopenharmony_ci    cameraBase_->streamInfo.encodeType_ = ENCODE_TYPE_JPEG;
354094332d3Sopenharmony_ci    cameraBase_->streamInfo.bufferQueue_ = new BufferProducerSequenceable(producer);
355094332d3Sopenharmony_ci    ASSERT_NE(cameraBase_->streamInfo.bufferQueue_, nullptr);
356094332d3Sopenharmony_ci    streamInfos.push_back(cameraBase_->streamInfo);
357094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CreateStreams(streamInfos);
358094332d3Sopenharmony_ci    CAMERA_LOGE("CreateStreams! rc:0x%x\n", cameraBase_->rc);
359094332d3Sopenharmony_ci
360094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CommitStreams(NORMAL, cameraBase_->ability_);
361094332d3Sopenharmony_ci    CAMERA_LOGE("CommitStreams! rc:0x%x\n", cameraBase_->rc);
362094332d3Sopenharmony_ci    int captureId = 2001;
363094332d3Sopenharmony_ci    CaptureInfo captureInfo = {};
364094332d3Sopenharmony_ci    captureInfo.streamIds_ = {1001};
365094332d3Sopenharmony_ci    captureInfo.captureSetting_ = cameraBase_->ability_;
366094332d3Sopenharmony_ci    captureInfo.enableShutterCallback_ = false;
367094332d3Sopenharmony_ci
368094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->Capture(captureId, captureInfo, true);
369094332d3Sopenharmony_ci    CAMERA_LOGE("Capture! rc:0x%x\n", cameraBase_->rc);
370094332d3Sopenharmony_ci    sleep(3);
371094332d3Sopenharmony_ci    streamCustomer->ReceiveFrameOff();
372094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->CancelCapture(captureId);
373094332d3Sopenharmony_ci    CAMERA_LOGE("CancelCapture! rc:0x%x\n", cameraBase_->rc);
374094332d3Sopenharmony_ci    cameraBase_->rc = (CamRetCode)cameraBase_->streamOperator->ReleaseStreams(captureInfo.streamIds_);
375094332d3Sopenharmony_ci    CAMERA_LOGE("ReleaseStreams! rc:0x%x\n", cameraBase_->rc);
376094332d3Sopenharmony_ci    EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR);
377094332d3Sopenharmony_ci    if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) {
378094332d3Sopenharmony_ci        CAMERA_LOGI("ReleaseStreams success.");
379094332d3Sopenharmony_ci    } else {
380094332d3Sopenharmony_ci        CAMERA_LOGE("ReleaseStreams fail, rc = %{public}d", cameraBase_->rc);
381094332d3Sopenharmony_ci    }
382094332d3Sopenharmony_ci}