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}