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}