1/* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15#include "preview_test.h" 16 17using namespace OHOS; 18using namespace std; 19using namespace testing::ext; 20using namespace OHOS::Camera; 21 22void PreviewTest::SetUpTestCase(void) {} 23void PreviewTest::TearDownTestCase(void) {} 24void PreviewTest::SetUp(void) 25{ 26 Test_ = std::make_shared<OHOS::Camera::Test>(); 27 Test_->Init(); 28 Test_->Open(); 29} 30void PreviewTest::TearDown(void) 31{ 32 Test_->Close(); 33} 34 35/** 36 * @tc.name: Preview 37 * @tc.desc: Preview stream, 640*480, expected success. 38 * @tc.size: MediumTest 39 * @tc.type: Function 40 */ 41HWTEST_F(PreviewTest, Camera_Preview_0001, TestSize.Level0) 42{ 43 std::cout << "==========[test log]Preview stream, 640*480, expected success." << std::endl; 44 // Start stream 45 Test_->intents = {Camera::PREVIEW}; 46 Test_->StartStream(Test_->intents); 47 // Get preview 48 Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true); 49 // Release stream 50 Test_->captureIds = {Test_->captureId_preview}; 51 Test_->streamIds = {Test_->streamId_preview}; 52 Test_->StopStream(Test_->captureIds, Test_->streamIds); 53 Test_->StopConsumer(Test_->intents); 54} 55 56/** 57 * @tc.name: Preview 58 * @tc.desc: Preview stream, 1280*960, expected success. 59 * @tc.size: MediumTest 60 * @tc.type: Function 61 */ 62HWTEST_F(PreviewTest, Camera_Preview_0004, TestSize.Level2) 63{ 64 std::cout << "==========[test log]Preview stream, 1280*960, expected success." << std::endl; 65 66 // Create and get streamOperator information 67 Test_->CreateStreamOperatorCallback(); 68 Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator); 69 EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 70 // Create data flow 71 Test_->streamInfo = std::make_shared<StreamInfo>(); 72 Test_->streamInfo->streamId_ = Test_->streamId_preview; 73 Test_->streamInfo->width_ = 1280; 74 Test_->streamInfo->height_ = 960; 75 Test_->streamInfo->dataspace_ = 8; 76 Test_->StreamInfoFormat(); 77 Test_->streamInfo->intent_ = Camera::PREVIEW; 78 std::shared_ptr<OHOS::Camera::Test::StreamConsumer> preview_consumer = 79 std::make_shared<OHOS::Camera::Test::StreamConsumer>(); 80#ifdef CAMERA_BUILT_ON_OHOS_LITE 81 Test_->streamInfo->bufferQueue_ = preview_consumer->CreateProducer([this](OHOS::SurfaceBuffer* buffer) { 82 Test_->SaveYUV("preview", buffer->GetVirAddr(), buffer->GetSize()); 83 }); 84#else 85 Test_->streamInfo->bufferQueue_ = preview_consumer->CreateProducer([this](void* addr, uint32_t size) { 86 Test_->SaveYUV("preview", addr, size); 87 }); 88#endif 89 Test_->streamInfo->bufferQueue_->SetQueueSize(8); 90 Test_->consumerMap_[Camera::PREVIEW] = preview_consumer; 91 Test_->streamInfo->tunneledMode_ = 5; 92 std::vector<std::shared_ptr<StreamInfo>>().swap(Test_->streamInfos); 93 Test_->streamInfos.push_back(Test_->streamInfo); 94 Test_->rc = Test_->streamOperator->CreateStreams(Test_->streamInfos); 95 EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 96 // Flow distribution 97 Test_->rc = Test_->streamOperator->CommitStreams(Camera::NORMAL, Test_->ability); 98 EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 99 // Get preview 100 Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true); 101 // Release stream 102 Test_->captureIds = {Test_->captureId_preview}; 103 Test_->streamIds = {Test_->streamId_preview}; 104 Test_->StopStream(Test_->captureIds, Test_->streamIds); 105 Test_->StopConsumer(Test_->intents); 106} 107 108/** 109 * @tc.name: Preview 110 * @tc.desc: GetStreamOperator success. 111 * @tc.size: MediumTest 112 * @tc.type: Function 113 */ 114HWTEST_F(PreviewTest, Camera_Preview_0010, TestSize.Level0) 115{ 116 std::cout << "==========[test log]GetStreamOperator success." << std::endl; 117 // Create and get streamOperator information 118 Test_->CreateStreamOperatorCallback(); 119 Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator); 120 EXPECT_EQ(false, Test_->rc != Camera::NO_ERROR || Test_->streamOperator == nullptr); 121} 122 123/** 124 * @tc.name: Preview 125 * @tc.desc: GetStreamOperator, input nullptr. 126 * @tc.size: MediumTest 127 * @tc.type: Function 128 */ 129HWTEST_F(PreviewTest, Camera_Preview_0011, TestSize.Level2) 130{ 131 std::cout << "==========[test log]GetStreamOperator, input nullptr." << std::endl; 132 // Create and get streamOperator information 133 Test_->rc = Test_->cameraDevice->GetStreamOperator(nullptr, Test_->streamOperator); 134 std::cout << "GetStreamOperator's rc " << Test_->rc << std::endl; 135 EXPECT_EQ(Camera::CamRetCode::INVALID_ARGUMENT, Test_->rc); 136} 137 138/** 139 * @tc.name: Preview 140 * @tc.desc: Preview, CommitStreams Metadata = nullptr. 141 * @tc.size: MediumTest 142 * @tc.type: Function 143 */ 144HWTEST_F(PreviewTest, Camera_Preview_0040, TestSize.Level2) 145{ 146 std::cout << "==========[test log]Preview, CommitStreams Metadata = nullptr." << std::endl; 147 // Create and get streamOperator information 148 Test_->CreateStreamOperatorCallback(); 149 Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator); 150 EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 151 // Flow distribution 152 Test_->rc = Test_->streamOperator->CommitStreams(Camera::NORMAL, nullptr); 153 EXPECT_EQ(true, Test_->rc == INVALID_ARGUMENT); 154} 155 156/** 157 * @tc.name: Preview 158 * @tc.desc: Preview, CommitStreams without CreateStreams, expected fail. 159 * @tc.size: MediumTest 160 * @tc.type: Function 161 */ 162HWTEST_F(PreviewTest, Camera_Preview_0050, TestSize.Level2) 163{ 164 std::cout << "==========[test log]Preview, CommitStreams no CreateStreams, expected fail." << std::endl; 165 // Create and get streamOperator information 166 Test_->CreateStreamOperatorCallback(); 167 Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator); 168 EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 169 // Flow distribution 170 Test_->rc = Test_->streamOperator->CommitStreams(Camera::NORMAL, Test_->ability); 171 std::cout << "streamOperator->CommitStreams's rc " << Test_->rc << std::endl; 172 EXPECT_EQ(true, Test_->rc == INVALID_ARGUMENT); 173} 174 175/** 176 * @tc.name: Preview 177 * @tc.desc: Preview and release streams, success. 178 * @tc.size: MediumTest 179 * @tc.type: Function 180 */ 181HWTEST_F(PreviewTest, Camera_Preview_0060, TestSize.Level1) 182{ 183 std::cout << "==========[test log]Preview and release streams, success." << std::endl; 184 // Start stream 185 Test_->intents = {Camera::PREVIEW}; 186 Test_->StartStream(Test_->intents); 187 // Get preview 188 Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, true); 189 // Release stream 190 Test_->captureIds = {Test_->captureId_preview}; 191 Test_->streamIds = {Test_->streamId_preview}; 192 Test_->StopStream(Test_->captureIds, Test_->streamIds); 193 Test_->StopConsumer(Test_->intents); 194} 195 196/** 197 * @tc.name: Preview 198 * @tc.desc: ReleaseStreams no exist streamID, expect success. 199 * @tc.size: MediumTest 200 * @tc.type: Function 201 */ 202HWTEST_F(PreviewTest, Camera_Preview_0062, TestSize.Level2) 203{ 204 std::cout << "==========[test log]ReleaseStreams no exist streamID, expect success." << std::endl; 205 // Create and get streamOperator information 206 Test_->CreateStreamOperatorCallback(); 207 Test_->rc = Test_->cameraDevice->GetStreamOperator(Test_->streamOperatorCallback, Test_->streamOperator); 208 EXPECT_EQ(false, Test_->rc != Camera::NO_ERROR || Test_->streamOperator == nullptr); 209 Test_->streamInfo = std::make_shared<StreamInfo>(); 210 Test_->rc = Test_->streamOperator->ReleaseStreams({9999}); 211 std::cout << "streamOperator->ReleaseStreams's rc " << Test_->rc << std::endl; 212 EXPECT_EQ(true, Test_->rc == Camera::NO_ERROR); 213} 214 215/** 216 * @tc.name: Preview 217 * @tc.desc: CancelCapture without Create capture. 218 * @tc.size: MediumTest 219 * @tc.type: Function 220 */ 221HWTEST_F(PreviewTest, Camera_Preview_0090, TestSize.Level2) 222{ 223 std::cout << "==========[test log]CancelCapture without Create capture ." << std::endl; 224 // Start stream 225 Test_->intents = {Camera::PREVIEW}; 226 Test_->StartStream(Test_->intents); 227 // Do not capture the preview image, directly cancel the capture 228 int captureId = 100; 229 Test_->rc = Test_->streamOperator->CancelCapture(captureId); 230 EXPECT_EQ(true, Test_->rc == Camera::INVALID_ARGUMENT); 231 if (Test_->rc == Camera::NO_ERROR) { 232 std::cout << "==========[test log]CancelCapture success." << std::endl; 233 } else { 234 std::cout << "==========[test log]CancelCapture fail, rc = " << Test_->rc << std::endl; 235 } 236 // Release stream 237 Test_->rc = Test_->streamOperator->ReleaseStreams({Test_->streamId_preview}); 238 EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 239 if (Test_->rc == Camera::NO_ERROR) { 240 std::cout << "==========[test log]ReleaseStreams success." << std::endl; 241 } else { 242 std::cout << "==========[test log]ReleaseStreams fail, rc = " << Test_->rc << std::endl; 243 } 244} 245 246/** 247 * @tc.name: Preview 248 * @tc.desc: Release streams, then creatCapture. 249 * @tc.size: MediumTest 250 * @tc.type: Function 251 */ 252HWTEST_F(PreviewTest, Camera_Preview_0091, TestSize.Level2) 253{ 254 std::cout << "==========[test log]Create capture, then release streams." << std::endl; 255 // Start stream 256 Test_->intents = {Camera::PREVIEW}; 257 Test_->StartStream(Test_->intents); 258 // Release stream 259 Test_->rc = Test_->streamOperator->ReleaseStreams({Test_->streamId_preview}); 260 EXPECT_EQ(Test_->rc, Camera::NO_ERROR); 261 if (Test_->rc == Camera::NO_ERROR) { 262 std::cout << "==========[test log]ReleaseStreams success." << std::endl; 263 } else { 264 std::cout << "==========[test log]ReleaseStreams fail, rc = " << Test_->rc << std::endl; 265 } 266 267 // Get preview 268 int captureId = 100; 269 Test_->captureInfo = std::make_shared<CaptureInfo>(); 270 Test_->captureInfo->streamIds_ = {Test_->streamId_preview}; 271 Test_->captureInfo->captureSetting_ = Test_->ability; 272 Test_->captureInfo->enableShutterCallback_ = false; 273 bool isStreaming = true; 274 Test_->rc = Test_->streamOperator->Capture(captureId, Test_->captureInfo, isStreaming); 275 EXPECT_EQ(Test_->rc, Camera::INVALID_ARGUMENT); 276 // Turn off the device 277 Test_->cameraDevice->Close(); 278 std::cout << "cameraDevice->Close" << std::endl; 279} 280 281/** 282 * @tc.name: Preview 283 * @tc.desc: The same CaptureID, Create capture twice, expected failed. 284 * @tc.size: MediumTest 285 * @tc.type: Function 286 */ 287HWTEST_F(PreviewTest, Camera_Preview_0092, TestSize.Level2) 288{ 289 std::cout << "==========[test log]The same CaptureID, Create capture twice, expected failed." << std::endl; 290 // Start stream 291 Test_->intents = {Camera::PREVIEW}; 292 Test_->StartStream(Test_->intents); 293 // Get preview 294 Test_->captureInfo = std::make_shared<Camera::CaptureInfo>(); 295 Test_->captureInfo->streamIds_ = {Test_->streamId_preview}; 296 Test_->captureInfo->captureSetting_ = Test_->ability; 297 Test_->captureInfo->enableShutterCallback_ = true; 298 // The same captureId, the first time to take a photo 299 Test_->rc = Test_->streamOperator->Capture(Test_->captureId_preview, Test_->captureInfo, true); 300 EXPECT_EQ(true, Test_->rc == Camera::NO_ERROR); 301 if (Test_->rc == Camera::NO_ERROR) { 302 std::cout << "==========[test log]check Capture: Capture success, " << Test_->captureId_preview << std::endl; 303 } else { 304 std::cout << "==========[test log]check Capture: Capture fail, rc = " << Test_->rc << std::endl; 305 } 306 sleep(1); 307 // The same captureId, take the second photo 308 Test_->rc = Test_->streamOperator->Capture(Test_->captureId_preview, Test_->captureInfo, true); 309 EXPECT_EQ(false, Test_->rc == Camera::NO_ERROR); 310 if (Test_->rc == Camera::NO_ERROR) { 311 std::cout << "==========[test log]check Capture: Capture success, " << Test_->captureId_preview << std::endl; 312 } else { 313 std::cout << "==========[test log]check Capture: Capture fail, rc = " << Test_->rc << std::endl; 314 } 315 sleep(1); 316 Test_->rc = Test_->streamOperator->CancelCapture(Test_->captureId_preview); 317 EXPECT_EQ(true, Test_->rc == Camera::NO_ERROR); 318 if (Test_->rc == Camera::NO_ERROR) { 319 std::cout << "======[test log]check Capture: CancelCapture success," << Test_->captureId_preview << std::endl; 320 } else { 321 std::cout << "==========[test log]check Capture: CancelCapture fail, rc = " << Test_->rc << std::endl; 322 std::cout << "captureId = " << Test_->captureId_preview << std::endl; 323 } 324 // Release stream 325 Test_->streamIds = {Test_->streamId_preview}; 326 std::cout << "Test_->streamIds size = " << Test_->streamIds.size() << std::endl; 327 Test_->rc = Test_->streamOperator->ReleaseStreams(Test_->streamIds); 328 if (Test_->rc == Camera::NO_ERROR) { 329 std::cout << "==========[test log]check Capture: ReleaseStreams success." << std::endl; 330 } else { 331 std::cout << "==========[test log]check Capture: ReleaseStreams fail, rc = " << Test_->rc << std::endl; 332 } 333 EXPECT_EQ(true, Test_->rc == Camera::NO_ERROR); 334} 335 336/** 337 * @tc.name: Preview 338 * @tc.desc: Different captureIDs, Create capture,expected success. 339 * @tc.size: MediumTest 340 * @tc.type: Function 341 */ 342HWTEST_F(PreviewTest, Camera_Preview_0093, TestSize.Level2) 343{ 344 std::cout << "==========[test log]Different captureIDs, Create capture,expected success." << std::endl; 345 // Start stream 346 Test_->intents = {Camera::PREVIEW}; 347 Test_->StartStream(Test_->intents); 348 // Get preview 349 Test_->StartCapture(Test_->streamId_preview, Test_->captureId_preview, false, false); 350 Test_->StartCapture(Test_->streamId_preview, Test_->captureId_capture, false, false); 351 // Release stream 352 Test_->captureIds = {}; 353 Test_->streamIds = {Test_->streamId_preview}; 354 Test_->StopStream(Test_->captureIds, Test_->streamIds); 355 Test_->StopConsumer(Test_->intents); 356} 357