1 /*
2 * Copyright (c) 2024-2025 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
16 #include "camera_session_moduletest.h"
17
18 #include <algorithm>
19 #include <cinttypes>
20 #include <cstdint>
21 #include <memory>
22 #include <vector>
23 #include <thread>
24
25 using namespace testing::ext;
26
27 namespace OHOS {
28 namespace CameraStandard {
29
30 std::bitset<static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_MAX_EVENT)> g_photoEvents;
31 std::bitset<static_cast<unsigned int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_MAX_EVENT)> g_previewEvents;
32 std::bitset<static_cast<unsigned int>(CAM_VIDEO_EVENTS::CAM_VIDEO_MAX_EVENT)> g_videoEvents;
33 std::bitset<static_cast<unsigned int>(CAM_MACRO_DETECT_EVENTS::CAM_MACRO_EVENT_MAX_EVENT)> g_macroEvents;
34 std::bitset<static_cast<unsigned int>(CAM_MOON_CAPTURE_BOOST_EVENTS::CAM_MOON_CAPTURE_BOOST_EVENT_MAX_EVENT)>
35 g_moonCaptureBoostEvents;
36 std::unordered_map<std::string, int> g_camStatusMap;
37 std::unordered_map<std::string, bool> g_camFlashMap;
38 std::shared_ptr<OHOS::Camera::CameraMetadata> g_metaResult = nullptr;
39 std::list<int32_t> g_sketchStatus;
40 TorchStatusInfo g_torchInfo;
41 int32_t g_previewFd = -1;
42 int32_t g_photoFd = -1;
43 int32_t g_videoFd = -1;
44 int32_t g_sketchFd = -1;
45 bool g_camInputOnError = false;
46 bool g_sessionclosed = false;
47 bool g_brightnessStatusChanged = false;
48 bool g_slowMotionStatusChanged = false;
49
OnCameraStatusChanged(const CameraStatusInfo & cameraDeviceInfo) const50 void AppCallback::OnCameraStatusChanged(const CameraStatusInfo& cameraDeviceInfo) const
51 {
52 const std::string cameraID = cameraDeviceInfo.cameraDevice->GetID();
53 const CameraStatus cameraStatus = cameraDeviceInfo.cameraStatus;
54 EXPECT_TRUE(true)<<"OnCameraStatusChanged:CameraId="<<cameraID<<",CameraStatus="<<cameraDeviceInfo.cameraStatus
55 <<",bundleName="<<cameraDeviceInfo.bundleName<<endl;
56 switch (cameraStatus) {
57 case CAMERA_STATUS_UNAVAILABLE: {
58 MEDIA_DEBUG_LOG(
59 "AppCallback::OnCameraStatusChanged %{public}s: CAMERA_STATUS_UNAVAILABLE", cameraID.c_str());
60 g_camStatusMap[cameraID] = CAMERA_STATUS_UNAVAILABLE;
61 break;
62 }
63 case CAMERA_STATUS_AVAILABLE: {
64 MEDIA_DEBUG_LOG(
65 "AppCallback::OnCameraStatusChanged %{public}s: CAMERA_STATUS_AVAILABLE", cameraID.c_str());
66 g_camStatusMap[cameraID] = CAMERA_STATUS_AVAILABLE;
67 break;
68 }
69 default: {
70 MEDIA_DEBUG_LOG("AppCallback::OnCameraStatusChanged %{public}s: unknown", cameraID.c_str());
71 EXPECT_TRUE(false);
72 }
73 }
74 return;
75 }
76
OnFlashlightStatusChanged(const std::string & cameraID,const FlashStatus flashStatus) const77 void AppCallback::OnFlashlightStatusChanged(const std::string& cameraID, const FlashStatus flashStatus) const
78 {
79 MEDIA_DEBUG_LOG("AppCallback::OnFlashlightStatusChanged() is called!");
80 switch (flashStatus) {
81 case FLASH_STATUS_OFF: {
82 MEDIA_DEBUG_LOG(
83 "AppCallback::OnFlashlightStatusChanged %{public}s: FLASH_STATUS_OFF", cameraID.c_str());
84 g_camFlashMap[cameraID] = false;
85 break;
86 }
87 case FLASH_STATUS_ON: {
88 MEDIA_DEBUG_LOG("AppCallback::OnFlashlightStatusChanged %{public}s: FLASH_STATUS_ON", cameraID.c_str());
89 g_camFlashMap[cameraID] = true;
90 break;
91 }
92 case FLASH_STATUS_UNAVAILABLE: {
93 MEDIA_DEBUG_LOG(
94 "AppCallback::OnFlashlightStatusChanged %{public}s: FLASH_STATUS_UNAVAILABLE", cameraID.c_str());
95 g_camFlashMap.erase(cameraID);
96 break;
97 }
98 default: {
99 MEDIA_DEBUG_LOG("AppCallback::OnFlashlightStatusChanged %{public}s: unknown", cameraID.c_str());
100 EXPECT_TRUE(false);
101 }
102 }
103 return;
104 }
105
OnTorchStatusChange(const TorchStatusInfo & torchStatusInfo) const106 void AppCallback::OnTorchStatusChange(const TorchStatusInfo &torchStatusInfo) const
107 {
108 MEDIA_DEBUG_LOG("TorchListener::OnTorchStatusChange called %{public}d %{public}d %{public}f",
109 torchStatusInfo.isTorchAvailable, torchStatusInfo.isTorchActive, torchStatusInfo.torchLevel);
110 g_torchInfo = torchStatusInfo;
111 return;
112 }
113
OnError(const int32_t errorType,const int32_t errorMsg) const114 void AppCallback::OnError(const int32_t errorType, const int32_t errorMsg) const
115 {
116 MEDIA_DEBUG_LOG("AppCallback::OnError errorType: %{public}d, errorMsg: %{public}d", errorType, errorMsg);
117 g_camInputOnError = true;
118 if (errorType == CAMERA_DEVICE_PREEMPTED) {
119 g_sessionclosed = true;
120 }
121 return;
122 }
123
OnResult(const uint64_t timestamp,const std::shared_ptr<OHOS::Camera::CameraMetadata> & result) const124 void AppCallback::OnResult(const uint64_t timestamp, const std::shared_ptr<OHOS::Camera::CameraMetadata>& result) const
125 {
126 MEDIA_INFO_LOG("CameraDeviceServiceCallback::OnResult() is called!");
127
128 if (result != nullptr) {
129 g_metaResult = result;
130 common_metadata_header_t* data = result->get();
131 std::vector<int32_t> fpsRange;
132 camera_metadata_item_t entry;
133 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_ABILITY_FPS_RANGES, &entry);
134 MEDIA_INFO_LOG("CameraDeviceServiceCallback::FindCameraMetadataItem() %{public}d", ret);
135 if (ret != 0) {
136 MEDIA_INFO_LOG("demo test: get OHOS_ABILITY_FPS_RANGES error");
137 }
138 uint32_t count = entry.count;
139 MEDIA_INFO_LOG("demo test: fpsRange count %{public}d", count);
140 for (uint32_t i = 0; i < count; i++) {
141 fpsRange.push_back(*(entry.data.i32 + i));
142 }
143 for (auto it = fpsRange.begin(); it != fpsRange.end(); it++) {
144 MEDIA_INFO_LOG("demo test: fpsRange %{public}d ", *it);
145 }
146 }
147 }
148
OnCaptureStarted(const int32_t captureId) const149 void AppCallback::OnCaptureStarted(const int32_t captureId) const
150 {
151 MEDIA_DEBUG_LOG("AppCallback::OnCaptureStarted captureId: %{public}d", captureId);
152 g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_CAPTURE_START)] = 1;
153 return;
154 }
155
OnCaptureStarted(const int32_t captureId,uint32_t exposureTime) const156 void AppCallback::OnCaptureStarted(const int32_t captureId, uint32_t exposureTime) const
157 {
158 MEDIA_DEBUG_LOG("AppCallback::OnCaptureStarted captureId: %{public}d", captureId);
159 g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_CAPTURE_START)] = 1;
160 return;
161 }
162
OnCaptureEnded(const int32_t captureId,const int32_t frameCount) const163 void AppCallback::OnCaptureEnded(const int32_t captureId, const int32_t frameCount) const
164 {
165 MEDIA_DEBUG_LOG("AppCallback::OnCaptureEnded captureId: %{public}d, frameCount: %{public}d",
166 captureId, frameCount);
167 g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_CAPTURE_END)] = 1;
168 return;
169 }
170
OnFrameShutter(const int32_t captureId,const uint64_t timestamp) const171 void AppCallback::OnFrameShutter(const int32_t captureId, const uint64_t timestamp) const
172 {
173 MEDIA_DEBUG_LOG(
174 "AppCallback::OnFrameShutter captureId: %{public}d, timestamp: %{public}" PRIu64, captureId, timestamp);
175 g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_FRAME_SHUTTER)] = 1;
176 return;
177 }
178
OnFrameShutterEnd(const int32_t captureId,const uint64_t timestamp) const179 void AppCallback::OnFrameShutterEnd(const int32_t captureId, const uint64_t timestamp) const
180 {
181 MEDIA_DEBUG_LOG(
182 "AppCallback::OnFrameShutterEnd captureId: %{public}d, timestamp: %{public}" PRIu64, captureId, timestamp);
183 g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_FRAME_SHUTTER_END)] = 1;
184 return;
185 }
186
OnCaptureReady(const int32_t captureId,const uint64_t timestamp) const187 void AppCallback::OnCaptureReady(const int32_t captureId, const uint64_t timestamp) const
188 {
189 MEDIA_DEBUG_LOG(
190 "AppCallback::OnCaptureReady captureId: %{public}d, timestamp: %{public}" PRIu64, captureId, timestamp);
191 g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_CAPTURE_READY)] = 1;
192 return;
193 }
194
OnEstimatedCaptureDuration(const int32_t duration) const195 void AppCallback::OnEstimatedCaptureDuration(const int32_t duration) const
196 {
197 MEDIA_DEBUG_LOG("AppCallback::OnEstimatedCaptureDuration duration: %{public}d", duration);
198 g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_ESTIMATED_CAPTURE_DURATION)] = 1;
199 return;
200 }
201
OnCaptureError(const int32_t captureId,const int32_t errorCode) const202 void AppCallback::OnCaptureError(const int32_t captureId, const int32_t errorCode) const
203 {
204 MEDIA_DEBUG_LOG(
205 "AppCallback::OnCaptureError captureId: %{public}d, errorCode: %{public}d", captureId, errorCode);
206 g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_CAPTURE_ERR)] = 1;
207 return;
208 }
209
OnFrameStarted() const210 void AppCallback::OnFrameStarted() const
211 {
212 MEDIA_DEBUG_LOG("AppCallback::OnFrameStarted");
213 g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_FRAME_START)] = 1;
214 return;
215 }
OnFrameEnded(const int32_t frameCount) const216 void AppCallback::OnFrameEnded(const int32_t frameCount) const
217 {
218 MEDIA_DEBUG_LOG("AppCallback::OnFrameEnded frameCount: %{public}d", frameCount);
219 g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_FRAME_END)] = 1;
220 return;
221 }
OnError(const int32_t errorCode) const222 void AppCallback::OnError(const int32_t errorCode) const
223 {
224 MEDIA_DEBUG_LOG("AppCallback::OnError errorCode: %{public}d", errorCode);
225 g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_FRAME_ERR)] = 1;
226 return;
227 }
228
OnOfflineDeliveryFinished(const int32_t captureId) const229 void AppCallback::OnOfflineDeliveryFinished(const int32_t captureId) const
230 {
231 MEDIA_DEBUG_LOG("AppCallback::OnOfflineDeliveryFinished captureId: %{public}d", captureId);
232 g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_OFFLINE_PHOTOOUTPUT)] = 1;
233 return;
234 }
235
OnSketchStatusDataChanged(const SketchStatusData & statusData) const236 void AppCallback::OnSketchStatusDataChanged(const SketchStatusData& statusData) const
237 {
238 MEDIA_DEBUG_LOG("AppCallback::OnSketchStatusDataChanged");
239 g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)] = 1;
240 g_sketchStatus.push_back(static_cast<int32_t>(statusData.status));
241 return;
242 }
OnMacroStatusChanged(MacroStatus status)243 void AppCallback::OnMacroStatusChanged(MacroStatus status)
244 {
245 MEDIA_DEBUG_LOG("AppCallback::OnMacroStatusChanged");
246 if (status == MacroStatus::IDLE) {
247 g_macroEvents[static_cast<int>(CAM_MACRO_DETECT_EVENTS::CAM_MACRO_EVENT_IDLE)] = 1;
248 g_macroEvents[static_cast<int>(CAM_MACRO_DETECT_EVENTS::CAM_MACRO_EVENT_ACTIVE)] = 0;
249 } else if (status == MacroStatus::ACTIVE) {
250 g_macroEvents[static_cast<int>(CAM_MACRO_DETECT_EVENTS::CAM_MACRO_EVENT_ACTIVE)] = 1;
251 g_macroEvents[static_cast<int>(CAM_MACRO_DETECT_EVENTS::CAM_MACRO_EVENT_IDLE)] = 0;
252 }
253 return;
254 }
255
OnFeatureDetectionStatusChanged(SceneFeature feature,FeatureDetectionStatus status)256 void AppCallback::OnFeatureDetectionStatusChanged(SceneFeature feature, FeatureDetectionStatus status)
257 {
258 MEDIA_DEBUG_LOG("AppCallback::OnFeatureDetectionStatusChanged");
259 if (feature == SceneFeature::FEATURE_MOON_CAPTURE_BOOST) {
260 if (status == FeatureDetectionStatus::IDLE) {
261 g_moonCaptureBoostEvents[static_cast<int>(
262 CAM_MOON_CAPTURE_BOOST_EVENTS::CAM_MOON_CAPTURE_BOOST_EVENT_IDLE)] = 1;
263 g_moonCaptureBoostEvents[static_cast<int>(
264 CAM_MOON_CAPTURE_BOOST_EVENTS::CAM_MOON_CAPTURE_BOOST_EVENT_ACTIVE)] = 0;
265 } else if (status == FeatureDetectionStatus::ACTIVE) {
266 g_moonCaptureBoostEvents[static_cast<int>(
267 CAM_MOON_CAPTURE_BOOST_EVENTS::CAM_MOON_CAPTURE_BOOST_EVENT_ACTIVE)] = 1;
268 g_moonCaptureBoostEvents[static_cast<int>(
269 CAM_MOON_CAPTURE_BOOST_EVENTS::CAM_MOON_CAPTURE_BOOST_EVENT_IDLE)] = 0;
270 }
271 }
272 }
273
IsFeatureSubscribed(SceneFeature feature)274 bool AppCallback::IsFeatureSubscribed(SceneFeature feature)
275 {
276 return true;
277 }
278
OnBrightnessStatusChanged(bool state)279 void AppCallback::OnBrightnessStatusChanged(bool state)
280 {
281 MEDIA_DEBUG_LOG("AppCallback::OnBrightnessStatusChanged");
282 g_brightnessStatusChanged = true;
283 }
284
OnSlowMotionState(const SlowMotionState state)285 void AppCallback::OnSlowMotionState(const SlowMotionState state)
286 {
287 MEDIA_DEBUG_LOG("AppCallback::OnSlowMotionState");
288 g_slowMotionStatusChanged = true;
289 }
OnFoldStatusChanged(const FoldStatusInfo & foldStatusInfo) const290 void AppCallback::OnFoldStatusChanged(const FoldStatusInfo &foldStatusInfo) const
291 {
292 MEDIA_DEBUG_LOG("AppCallback::OnFoldStatusChanged");
293 return;
294 }
OnLcdFlashStatusChanged(LcdFlashStatusInfo lcdFlashStatusInfo)295 void AppCallback::OnLcdFlashStatusChanged(LcdFlashStatusInfo lcdFlashStatusInfo)
296 {
297 MEDIA_DEBUG_LOG("AppCallback::OnLcdFlashStatusChanged");
298 }
299
OnFrameStarted() const300 void AppVideoCallback::OnFrameStarted() const
301 {
302 MEDIA_DEBUG_LOG("AppVideoCallback::OnFrameStarted");
303 g_videoEvents[static_cast<int>(CAM_VIDEO_EVENTS::CAM_VIDEO_FRAME_START)] = 1;
304 return;
305 }
OnFrameEnded(const int32_t frameCount) const306 void AppVideoCallback::OnFrameEnded(const int32_t frameCount) const
307 {
308 MEDIA_DEBUG_LOG("AppVideoCallback::OnFrameEnded frameCount: %{public}d", frameCount);
309 g_videoEvents[static_cast<int>(CAM_VIDEO_EVENTS::CAM_VIDEO_FRAME_END)] = 1;
310 return;
311 }
OnError(const int32_t errorCode) const312 void AppVideoCallback::OnError(const int32_t errorCode) const
313 {
314 MEDIA_DEBUG_LOG("AppVideoCallback::OnError errorCode: %{public}d", errorCode);
315 g_videoEvents[static_cast<int>(CAM_VIDEO_EVENTS::CAM_VIDEO_FRAME_ERR)] = 1;
316 return;
317 }
OnDeferredVideoEnhancementInfo(const CaptureEndedInfoExt info) const318 void AppVideoCallback::OnDeferredVideoEnhancementInfo(const CaptureEndedInfoExt info) const
319 {
320 MEDIA_DEBUG_LOG("AppVideoCallback::OnDeferredVideoEnhancementInfo");
321 return;
322 }
323
OnMetadataObjectsAvailable(std::vector<sptr<MetadataObject>> metaObjects) const324 void AppMetadataCallback::OnMetadataObjectsAvailable(std::vector<sptr<MetadataObject>> metaObjects) const
325 {
326 MEDIA_DEBUG_LOG("AppMetadataCallback::OnMetadataObjectsAvailable received");
327 }
OnError(int32_t errorCode) const328 void AppMetadataCallback::OnError(int32_t errorCode) const
329 {
330 MEDIA_DEBUG_LOG("AppMetadataCallback::OnError %{public}d", errorCode);
331 }
332
OnError(int32_t errorCode)333 void AppSessionCallback::OnError(int32_t errorCode)
334 {
335 MEDIA_DEBUG_LOG("AppMetadataCallback::OnError %{public}d", errorCode);
336 return;
337 }
338
CreatePhotoOutput(int32_t width,int32_t height)339 sptr<CaptureOutput> CameraSessionModuleTest::CreatePhotoOutput(int32_t width, int32_t height)
340 {
341 sptr<IConsumerSurface> surface = IConsumerSurface::Create();
342 CameraFormat photoFormat = photoFormat_;
343 Size photoSize;
344 photoSize.width = width;
345 photoSize.height = height;
346 Profile photoProfile = Profile(photoFormat, photoSize);
347 sptr<CaptureOutput> photoOutput = nullptr;
348 sptr<IBufferProducer> surfaceProducer = surface->GetProducer();
349 manager_->CreatePhotoOutput(surfaceProducer);
350 photoOutput = manager_->CreatePhotoOutput(photoProfile, surfaceProducer);
351 return photoOutput;
352 }
353
CreatePhotoOutput()354 sptr<CaptureOutput> CameraSessionModuleTest::CreatePhotoOutput()
355 {
356 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoWidth_, photoHeight_);
357 return photoOutput;
358 }
359
CreatePreviewOutput(int32_t width,int32_t height)360 sptr<CaptureOutput> CameraSessionModuleTest::CreatePreviewOutput(int32_t width, int32_t height)
361 {
362 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
363 sptr<SurfaceListener> listener = new SurfaceListener("Preview", SurfaceType::PREVIEW, g_previewFd, previewSurface);
364 previewSurface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)listener);
365 Size previewSize;
366 previewSize.width = previewProfiles_[0].GetSize().width;
367 previewSize.height = previewProfiles_[0].GetSize().height;
368 previewSurface->SetUserData(CameraManager::surfaceFormat, std::to_string(previewProfiles_[0].GetCameraFormat()));
369 previewSurface->SetDefaultWidthAndHeight(previewSize.width, previewSize.height);
370
371 sptr<IBufferProducer> bp = previewSurface->GetProducer();
372 sptr<Surface> pSurface = Surface::CreateSurfaceAsProducer(bp);
373
374 sptr<CaptureOutput> previewOutput = nullptr;
375 previewOutput = manager_->CreatePreviewOutput(previewProfiles_[0], pSurface);
376 return previewOutput;
377 }
378
GetSketchPreviewProfile()379 std::shared_ptr<Profile> CameraSessionModuleTest::GetSketchPreviewProfile()
380 {
381 std::shared_ptr<Profile> returnProfile;
382 Size size720P { 1280, 720 };
383 Size size1080P { 1920, 1080 };
384 for (const auto& profile : previewProfiles_) {
385 if (profile.format_ != CAMERA_FORMAT_YUV_420_SP) {
386 continue;
387 }
388 if (profile.size_.width == size720P.width && profile.size_.height == size720P.height) {
389 returnProfile = std::make_shared<Profile>(profile);
390 return returnProfile;
391 }
392 if (profile.size_.width == size1080P.width && profile.size_.height == size1080P.height) {
393 returnProfile = std::make_shared<Profile>(profile);
394 return returnProfile;
395 }
396 if (profile.size_.height < SKETCH_PREVIEW_MIN_HEIGHT || profile.size_.width > SKETCH_PREVIEW_MAX_WIDTH) {
397 continue;
398 }
399 if (returnProfile == nullptr) {
400 returnProfile = std::make_shared<Profile>(profile);
401 continue;
402 }
403 if (profile.size_.width > returnProfile->size_.width) {
404 returnProfile = std::make_shared<Profile>(profile);
405 }
406 }
407 return returnProfile;
408 }
409
CreatePreviewOutput(Profile & profile)410 sptr<CaptureOutput> CameraSessionModuleTest::CreatePreviewOutput(Profile& profile)
411 {
412 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
413 sptr<SurfaceListener> listener = new SurfaceListener("Preview", SurfaceType::PREVIEW, g_previewFd, previewSurface);
414 previewSurface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)listener);
415 Size previewSize = profile.GetSize();
416 previewSurface->SetUserData(CameraManager::surfaceFormat, std::to_string(profile.GetCameraFormat()));
417 previewSurface->SetDefaultWidthAndHeight(previewSize.width, previewSize.height);
418
419 sptr<IBufferProducer> bp = previewSurface->GetProducer();
420 sptr<Surface> pSurface = Surface::CreateSurfaceAsProducer(bp);
421
422 sptr<CaptureOutput> previewOutput = nullptr;
423 previewOutput = manager_->CreatePreviewOutput(profile, pSurface);
424 return previewOutput;
425 }
426
CreateSketchSurface(CameraFormat cameraFormat)427 sptr<Surface> CameraSessionModuleTest::CreateSketchSurface(CameraFormat cameraFormat)
428 {
429 sptr<IConsumerSurface> sketchSurface = IConsumerSurface::Create();
430 sptr<SurfaceListener> listener = new SurfaceListener("Sketch", SurfaceType::SKETCH, g_sketchFd, sketchSurface);
431 sketchSurface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)listener);
432 sketchSurface->SetUserData(CameraManager::surfaceFormat, std::to_string(cameraFormat));
433 sketchSurface->SetDefaultWidthAndHeight(SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT);
434 sptr<IBufferProducer> bp = sketchSurface->GetProducer();
435 return Surface::CreateSurfaceAsProducer(bp);
436 }
437
CreatePreviewOutput()438 sptr<CaptureOutput> CameraSessionModuleTest::CreatePreviewOutput()
439 {
440 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewWidth_, previewHeight_);
441 return previewOutput;
442 }
443
CreateVideoOutput(int32_t width,int32_t height)444 sptr<CaptureOutput> CameraSessionModuleTest::CreateVideoOutput(int32_t width, int32_t height)
445 {
446 sptr<IConsumerSurface> surface = IConsumerSurface::Create();
447 sptr<SurfaceListener> videoSurfaceListener =
448 new (std::nothrow) SurfaceListener("Video", SurfaceType::VIDEO, g_videoFd, surface);
449 if (videoSurfaceListener == nullptr) {
450 MEDIA_ERR_LOG("Failed to create new SurfaceListener");
451 return nullptr;
452 }
453 surface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)videoSurfaceListener);
454 sptr<IBufferProducer> videoProducer = surface->GetProducer();
455 sptr<Surface> videoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
456 VideoProfile videoProfile = videoProfiles_[0];
457 sptr<CaptureOutput> videoOutput = nullptr;
458 videoOutput = manager_->CreateVideoOutput(videoProfile, videoSurface);
459 return videoOutput;
460 }
461
CreateVideoOutput(VideoProfile & videoProfile)462 sptr<CaptureOutput> CameraSessionModuleTest::CreateVideoOutput(VideoProfile& videoProfile)
463 {
464 sptr<IConsumerSurface> surface = IConsumerSurface::Create();
465 sptr<SurfaceListener> videoSurfaceListener =
466 new (std::nothrow) SurfaceListener("Video", SurfaceType::VIDEO, g_videoFd, surface);
467 if (videoSurfaceListener == nullptr) {
468 MEDIA_ERR_LOG("Failed to create new SurfaceListener");
469 return nullptr;
470 }
471 surface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)videoSurfaceListener);
472 sptr<IBufferProducer> videoProducer = surface->GetProducer();
473 sptr<Surface> videoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
474 sptr<CaptureOutput> videoOutput = nullptr;
475 videoOutput = manager_->CreateVideoOutput(videoProfile, videoSurface);
476 return videoOutput;
477 }
478
CreateVideoOutput()479 sptr<CaptureOutput> CameraSessionModuleTest::CreateVideoOutput()
480 {
481 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoWidth_, videoHeight_);
482 return videoOutput;
483 }
484
CreatePhotoOutput(Profile profile)485 sptr<CaptureOutput> CameraSessionModuleTest::CreatePhotoOutput(Profile profile)
486 {
487 sptr<IConsumerSurface> surface = IConsumerSurface::Create();
488 Size photoSize;
489 photoSize.width = profile.GetSize().width;
490 photoSize.height = profile.GetSize().height;
491 sptr<CaptureOutput> photoOutput = nullptr;
492 sptr<IBufferProducer> surfaceProducer = surface->GetProducer();
493 photoOutput = manager_->CreatePhotoOutput(profile, surfaceProducer);
494 return photoOutput;
495 }
496
ConfigScanSession(sptr<CaptureOutput> & previewOutput_1,sptr<CaptureOutput> & previewOutput_2)497 void CameraSessionModuleTest::ConfigScanSession(sptr<CaptureOutput> &previewOutput_1,
498 sptr<CaptureOutput> &previewOutput_2)
499 {
500 if (session_) {
501 MEDIA_INFO_LOG("old session exist, need release");
502 session_->Release();
503 }
504 scanSession_ = manager_ -> CreateCaptureSession(SceneMode::SCAN);
505 ASSERT_NE(scanSession_, nullptr);
506
507 int32_t intResult = scanSession_->BeginConfig();
508 EXPECT_EQ(intResult, 0);
509
510 intResult = scanSession_->AddInput(input_);
511 EXPECT_EQ(intResult, 0);
512
513 previewOutput_1 = CreatePreviewOutput();
514 ASSERT_NE(previewOutput_1, nullptr);
515
516 intResult = scanSession_->AddOutput(previewOutput_1);
517 EXPECT_EQ(intResult, 0);
518
519 previewOutput_2 = CreatePreviewOutput();
520 ASSERT_NE(previewOutput_2, nullptr);
521
522 intResult = scanSession_->AddOutput(previewOutput_2);
523 EXPECT_EQ(intResult, 0);
524
525 intResult = scanSession_->CommitConfig();
526 EXPECT_EQ(intResult, 0);
527 }
528
ConfigSlowMotionSession(sptr<CaptureOutput> & previewOutput_frame,sptr<CaptureOutput> & videoOutput_frame)529 void CameraSessionModuleTest::ConfigSlowMotionSession(sptr<CaptureOutput> &previewOutput_frame,
530 sptr<CaptureOutput> &videoOutput_frame)
531 {
532 if (session_) {
533 MEDIA_INFO_LOG("old session exist, need release");
534 session_->Release();
535 }
536 sptr<CaptureSession> captureSession = manager_->CreateCaptureSession(SceneMode::SLOW_MOTION);
537 slowMotionSession_ = static_cast<SlowMotionSession*>(captureSession.GetRefPtr());
538 slowMotionSession_->SetCallback(std::make_shared<AppCallback>());
539 ASSERT_NE(slowMotionSession_, nullptr);
540
541 int32_t intResult = slowMotionSession_->BeginConfig();
542 EXPECT_EQ(intResult, 0);
543
544 intResult = slowMotionSession_->AddInput(input_);
545 EXPECT_EQ(intResult, 0);
546
547 Profile previewProfile = previewProfiles_[0];
548 const int32_t sizeOfWidth = 1920;
549 const int32_t sizeOfHeight = 1080;
550 for (auto item : previewProfiles_) {
551 if (item.GetSize().width == sizeOfWidth && item.GetSize().height == sizeOfHeight) {
552 previewProfile = item;
553 break;
554 }
555 }
556 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
557 sptr<SurfaceListener> listener = new SurfaceListener("Preview", SurfaceType::PREVIEW, g_previewFd, previewSurface);
558 previewSurface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)listener);
559 Size previewSize;
560 previewSize.width = previewProfile.GetSize().width;
561 previewSize.height = previewProfile.GetSize().height;
562 previewSurface->SetUserData(CameraManager::surfaceFormat, std::to_string(previewProfile.GetCameraFormat()));
563 previewSurface->SetDefaultWidthAndHeight(previewSize.width, previewSize.height);
564 sptr<IBufferProducer> bp = previewSurface->GetProducer();
565 sptr<Surface> pSurface = Surface::CreateSurfaceAsProducer(bp);
566 sptr<CaptureOutput> previewOutput = nullptr;
567 previewOutput_frame = manager_->CreatePreviewOutput(previewProfile, pSurface);
568 ASSERT_NE(previewOutput_frame, nullptr);
569
570 sptr<IConsumerSurface> surface = IConsumerSurface::Create();
571 sptr<SurfaceListener> videoSurfaceListener =
572 new (std::nothrow) SurfaceListener("Video", SurfaceType::VIDEO, g_videoFd, surface);
573 surface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)videoSurfaceListener);
574 ASSERT_NE(videoSurfaceListener, nullptr);
575
576 sptr<IBufferProducer> videoProducer = surface->GetProducer();
577 sptr<Surface> videoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
578 std::vector<int32_t> fps = {120, 120};
579 Size size = {.width = 1920, .height = 1080};
580 VideoProfile videoProfile = VideoProfile(CameraFormat::CAMERA_FORMAT_YUV_420_SP, size, fps);
581 videoOutput_frame = manager_->CreateVideoOutput(videoProfile, videoSurface);
582 ASSERT_NE(videoOutput_frame, nullptr);
583 }
584
ConfigVideoSession(sptr<CaptureOutput> & previewOutput_frame,sptr<CaptureOutput> & videoOutput_frame)585 void CameraSessionModuleTest::ConfigVideoSession(sptr<CaptureOutput> &previewOutput_frame,
586 sptr<CaptureOutput> &videoOutput_frame)
587 {
588 if (session_) {
589 MEDIA_INFO_LOG("old session exist, need release");
590 session_->Release();
591 }
592 videoSession_ = manager_ -> CreateCaptureSession(SceneMode::VIDEO);
593 ASSERT_NE(videoSession_, nullptr);
594
595 int32_t intResult = videoSession_->BeginConfig();
596 EXPECT_EQ(intResult, 0);
597
598 intResult = videoSession_->AddInput(input_);
599 EXPECT_EQ(intResult, 0);
600
601 Profile previewProfile = previewProfiles_[0];
602 const int32_t sizeOfWidth = 1920;
603 const int32_t sizeOfHeight = 1080;
604 for (auto item : previewProfiles_) {
605 if (item.GetSize().width == sizeOfWidth && item.GetSize().height == sizeOfHeight) {
606 previewProfile = item;
607 break;
608 }
609 }
610 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
611 sptr<SurfaceListener> listener = new SurfaceListener("Preview", SurfaceType::PREVIEW, g_previewFd, previewSurface);
612 previewSurface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)listener);
613 Size previewSize;
614 previewSize.width = previewProfile.GetSize().width;
615 previewSize.height = previewProfile.GetSize().height;
616 previewSurface->SetUserData(CameraManager::surfaceFormat, std::to_string(previewProfile.GetCameraFormat()));
617 previewSurface->SetDefaultWidthAndHeight(previewSize.width, previewSize.height);
618 sptr<IBufferProducer> bp = previewSurface->GetProducer();
619 sptr<Surface> pSurface = Surface::CreateSurfaceAsProducer(bp);
620 sptr<CaptureOutput> previewOutput = nullptr;
621 previewOutput_frame = manager_->CreatePreviewOutput(previewProfile, pSurface);
622 ASSERT_NE(previewOutput_frame, nullptr);
623
624 sptr<IConsumerSurface> surface = IConsumerSurface::Create();
625 sptr<SurfaceListener> videoSurfaceListener =
626 new (std::nothrow) SurfaceListener("Video", SurfaceType::VIDEO, g_videoFd, surface);
627 ASSERT_NE(videoSurfaceListener, nullptr);
628 surface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)videoSurfaceListener);
629
630 sptr<IBufferProducer> videoProducer = surface->GetProducer();
631 sptr<Surface> videoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
632 VideoProfile videoProfile = videoProfiles_[0];
633 for (auto item : videoProfiles_) {
634 if (item.GetSize().width == sizeOfWidth && item.GetSize().height == sizeOfHeight) {
635 videoProfile = item;
636 break;
637 }
638 }
639 videoOutput_frame = manager_->CreateVideoOutput(videoProfile, videoSurface);
640 ASSERT_NE(videoOutput_frame, nullptr);
641 }
642
GetSupportedOutputCapability()643 void CameraSessionModuleTest::GetSupportedOutputCapability()
644 {
645 sptr<CameraManager> camManagerObj = CameraManager::GetInstance();
646 std::vector<sptr<CameraDevice>> cameraObjList = camManagerObj->GetSupportedCameras();
647 ASSERT_GE(cameraObjList.size(), CAMERA_NUMBER);
648 sptr<CameraOutputCapability> outputcapability = camManagerObj->GetSupportedOutputCapability(cameraObjList[1]);
649 previewProfiles_ = outputcapability->GetPreviewProfiles();
650 ASSERT_TRUE(!previewProfiles_.empty());
651
652 photoProfiles_ = outputcapability->GetPhotoProfiles();
653 ASSERT_TRUE(!photoProfiles_.empty());
654
655 videoProfiles_ = outputcapability->GetVideoProfiles();
656 ASSERT_TRUE(!videoProfiles_.empty());
657 return;
658 }
659
SelectProfileByRatioAndFormat(sptr<CameraOutputCapability> & modeAbility,camera_rational_t ratio,CameraFormat format)660 Profile CameraSessionModuleTest::SelectProfileByRatioAndFormat(sptr<CameraOutputCapability>& modeAbility,
661 camera_rational_t ratio, CameraFormat format)
662 {
663 uint32_t width;
664 uint32_t height;
665 Profile profile;
666 std::vector<Profile> profiles;
667
668 if (format == photoFormat_) {
669 profiles = modeAbility->GetPhotoProfiles();
670 } else if (format == previewFormat_) {
671 profiles = modeAbility->GetPreviewProfiles();
672 }
673
674 for (int i = 0; i < profiles.size(); ++i) {
675 width = profiles[i].GetSize().width;
676 height = profiles[i].GetSize().height;
677 if ((width % ratio.numerator == 0) && (height % ratio.denominator == 0)) {
678 profile = profiles[i];
679 break;
680 }
681 }
682 MEDIA_ERR_LOG("SelectProfileByRatioAndFormat format:%{public}d width:%{public}d height:%{public}d",
683 profile.format_, profile.size_.width, profile.size_.height);
684 return profile;
685 }
686
GetPreviewProfileByFormat(sptr<CameraOutputCapability> & modeAbility,uint32_t width,uint32_t height,CameraFormat format)687 std::optional<Profile> CameraSessionModuleTest::GetPreviewProfileByFormat(
688 sptr<CameraOutputCapability> &modeAbility, uint32_t width, uint32_t height, CameraFormat format)
689 {
690 std::vector<Profile> profiles = modeAbility->GetPreviewProfiles();
691 auto it = std::find_if(profiles.begin(), profiles.end(), [width, height, format](Profile &profile) {
692 return profile.GetSize().width == width && profile.GetSize().height == height &&
693 profile.GetCameraFormat() == format;
694 });
695 if (it != profiles.end()) {
696 MEDIA_ERR_LOG("GetPreviewProfileByFormat format:%{public}d width:%{public}d height:%{public}d",
697 it->GetCameraFormat(),
698 it->GetSize().width,
699 it->GetSize().height);
700 return *it;
701 } else {
702 MEDIA_ERR_LOG(
703 "No profile found for format:%{public}d width:%{public}d height:%{public}d", format, width, height);
704 return std::nullopt;
705 }
706 }
707
GetVideoProfileByFormat(sptr<CameraOutputCapability> & modeAbility,uint32_t width,uint32_t height,CameraFormat videoFormat,uint32_t maxFps)708 std::optional<VideoProfile> CameraSessionModuleTest::GetVideoProfileByFormat(
709 sptr<CameraOutputCapability> &modeAbility, uint32_t width, uint32_t height, CameraFormat videoFormat,
710 uint32_t maxFps)
711 {
712 std::vector<VideoProfile> profiles = modeAbility->GetVideoProfiles();
713 auto it =
714 std::find_if(profiles.begin(), profiles.end(), [width, height, videoFormat, maxFps](VideoProfile &profile) {
715 std::cout << "videoProfile found format: " << profile.GetCameraFormat()
716 << " width: " << profile.GetSize().width << " height: " << profile.GetSize().height
717 << " maxFps: " << profile.GetFrameRates()[1] << std::endl;
718 return profile.GetSize().width == width && profile.GetSize().height == height &&
719 profile.GetCameraFormat() == videoFormat && profile.GetFrameRates()[1] == maxFps;
720 });
721 if (it != profiles.end()) {
722 MEDIA_ERR_LOG("videoProfile found format:%{public}d width:%{public}d height:%{public}d maxFps:%{public}d",
723 it->GetCameraFormat(),
724 it->GetSize().width,
725 it->GetSize().height,
726 it->GetFrameRates()[1]);
727 return *it;
728 } else {
729 MEDIA_ERR_LOG("No videoProfile for format:%{public}d width:%{public}d height:%{public}d maxFps:%{public}d",
730 videoFormat,
731 width,
732 height,
733 maxFps);
734 return std::nullopt;
735 }
736 }
737
IsSupportNow()738 bool CameraSessionModuleTest::IsSupportNow()
739 {
740 const char* deviveTypeString = GetDeviceType();
741 std::string deviveType = std::string(deviveTypeString);
742 if (deviveType.compare("default") == 0 ||
743 (cameras_[0] != nullptr && cameras_[0]->GetConnectionType() == CAMERA_CONNECTION_USB_PLUGIN)) {
744 return false;
745 }
746 return true;
747 }
748
SetUpTestCase(void)749 void CameraSessionModuleTest::SetUpTestCase(void)
750 {
751 MEDIA_INFO_LOG("SetUpTestCase of camera test case!");
752 }
753
TearDownTestCase(void)754 void CameraSessionModuleTest::TearDownTestCase(void)
755 {
756 MEDIA_INFO_LOG("TearDownTestCase of camera test case!");
757 }
758
SetUpInit()759 void CameraSessionModuleTest::SetUpInit()
760 {
761 MEDIA_INFO_LOG("SetUpInit of camera test case!");
762 g_photoEvents.reset();
763 g_previewEvents.reset();
764 g_videoEvents.reset();
765 g_moonCaptureBoostEvents.reset();
766 g_macroEvents.reset();
767 g_camStatusMap.clear();
768 g_camFlashMap.clear();
769 g_sketchStatus.clear();
770 g_camInputOnError = false;
771 g_videoFd = -1;
772 g_previewFd = -1;
773 previewFormat_ = CAMERA_FORMAT_YUV_420_SP;
774 videoFormat_ = CAMERA_FORMAT_YUV_420_SP;
775 photoFormat_ = CAMERA_FORMAT_JPEG;
776 previewWidth_ = PREVIEW_DEFAULT_WIDTH;
777 previewHeight_ = PREVIEW_DEFAULT_HEIGHT;
778 photoWidth_ = PHOTO_DEFAULT_WIDTH;
779 photoHeight_ = PHOTO_DEFAULT_HEIGHT;
780 videoWidth_ = VIDEO_DEFAULT_WIDTH;
781 videoHeight_ = VIDEO_DEFAULT_HEIGHT;
782 }
783
SetUp()784 void CameraSessionModuleTest::SetUp()
785 {
786 MEDIA_INFO_LOG("SetUp");
787 // set native token
788 SetNativeToken();
789
790 SetUpInit();
791 manager_ = CameraManager::GetInstance();
792 ASSERT_NE(manager_, nullptr);
793 manager_->SetCallback(std::make_shared<AppCallback>());
794
795 cameras_ = manager_->GetSupportedCameras();
796 ASSERT_TRUE(cameras_.size() != 0);
797
798 input_ = manager_->CreateCameraInput(cameras_[0]);
799 ASSERT_NE(input_, nullptr);
800
801 sptr<CameraManager> camManagerObj = CameraManager::GetInstance();
802 std::vector<sptr<CameraDevice>> cameraObjList = camManagerObj->GetSupportedCameras();
803 sptr<CameraOutputCapability> outputcapability = camManagerObj->GetSupportedOutputCapability(cameraObjList[0]);
804
805 ProcessPreviewProfiles(outputcapability);
806 ASSERT_TRUE(!previewFormats_.empty());
807 ASSERT_TRUE(!previewSizes_.empty());
808 if (std::find(previewFormats_.begin(), previewFormats_.end(), CAMERA_FORMAT_YUV_420_SP) != previewFormats_.end()) {
809 previewFormat_ = CAMERA_FORMAT_YUV_420_SP;
810 } else {
811 previewFormat_ = previewFormats_[0];
812 }
813 photoProfiles_ = outputcapability->GetPhotoProfiles();
814
815 for (auto i : photoProfiles_) {
816 photoFormats_.push_back(i.GetCameraFormat());
817 photoSizes_.push_back(i.GetSize());
818 }
819 ASSERT_TRUE(!photoFormats_.empty());
820 ASSERT_TRUE(!photoSizes_.empty());
821 photoFormat_ = photoFormats_[0];
822 videoProfiles_ = outputcapability->GetVideoProfiles();
823
824 for (auto i : videoProfiles_) {
825 videoFormats_.push_back(i.GetCameraFormat());
826 videoSizes_.push_back(i.GetSize());
827 videoFrameRates_ = i.GetFrameRates();
828 }
829 ASSERT_TRUE(!videoFormats_.empty());
830 ASSERT_TRUE(!videoSizes_.empty());
831 ASSERT_TRUE(!videoFrameRates_.empty());
832 if (std::find(videoFormats_.begin(), videoFormats_.end(), CAMERA_FORMAT_YUV_420_SP) != videoFormats_.end()) {
833 videoFormat_ = CAMERA_FORMAT_YUV_420_SP;
834 } else {
835 videoFormat_ = videoFormats_[0];
836 }
837 ProcessSize();
838 }
839
TearDown()840 void CameraSessionModuleTest::TearDown()
841 {
842 MEDIA_INFO_LOG("TearDown start");
843 if (session_) {
844 session_->Release();
845 }
846 if (scanSession_) {
847 scanSession_->Release();
848 }
849 if (input_) {
850 sptr<CameraInput> camInput = (sptr<CameraInput>&)input_;
851 camInput->Close();
852 input_->Release();
853 }
854 MEDIA_INFO_LOG("TearDown end");
855 }
856
SetNativeToken()857 void CameraSessionModuleTest::SetNativeToken()
858 {
859 uint64_t tokenId;
860 const char* perms[2];
861 perms[0] = "ohos.permission.DISTRIBUTED_DATASYNC";
862 perms[1] = "ohos.permission.CAMERA";
863 NativeTokenInfoParams infoInstance = {
864 .dcapsNum = 0,
865 .permsNum = 2,
866 .aclsNum = 0,
867 .dcaps = NULL,
868 .perms = perms,
869 .acls = NULL,
870 .processName = "native_camera_tdd",
871 .aplStr = "system_basic",
872 };
873 tokenId = GetAccessTokenId(&infoInstance);
874 SetSelfTokenID(tokenId);
875 OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
876 }
877
IsSceneModeSupported(SceneMode mode)878 bool CameraSessionModuleTest::IsSceneModeSupported(SceneMode mode)
879 {
880 MEDIA_INFO_LOG("IsSceneModeSupported start");
881 std::vector<SceneMode> modes = manager_->GetSupportedModes(cameras_[0]);
882 if (modes.size() == 0) {
883 MEDIA_ERR_LOG("IsSceneModeSupported: device does not support any scene mode!");
884 return false;
885 }
886 bool supportMode = false;
887 for (auto &it : modes) {
888 if (it == mode) {
889 supportMode = true;
890 break;
891 }
892 }
893 return supportMode;
894 }
895
FilterPreviewProfiles(std::vector<Profile> & previewProfiles)896 void CameraSessionModuleTest::FilterPreviewProfiles(std::vector<Profile> &previewProfiles)
897 {
898 std::vector<Profile>::iterator itr = previewProfiles.begin();
899 while (itr != previewProfiles.end()) {
900 Profile profile = *itr;
901 if ((profile.size_.width == PRVIEW_WIDTH_176 && profile.size_.height == PRVIEW_HEIGHT_144) ||
902 (profile.size_.width == PRVIEW_WIDTH_480 && profile.size_.height == PRVIEW_HEIGHT_480) ||
903 (profile.size_.width == PRVIEW_WIDTH_640 && profile.size_.height == PRVIEW_WIDTH_640) ||
904 (profile.size_.width == PRVIEW_WIDTH_4096 && profile.size_.height == PRVIEW_HEIGHT_3072) ||
905 (profile.size_.width == PRVIEW_WIDTH_4160 && profile.size_.height == PRVIEW_HEIGHT_3120) ||
906 (profile.size_.width == PRVIEW_WIDTH_8192 && profile.size_.height == PRVIEW_HEIGHT_6144)) {
907 itr = previewProfiles.erase(itr);
908 } else {
909 itr++;
910 }
911 }
912 }
913
ProcessPreviewProfiles(sptr<CameraOutputCapability> & outputcapability)914 void CameraSessionModuleTest::ProcessPreviewProfiles(sptr<CameraOutputCapability>& outputcapability)
915 {
916 previewProfiles_.clear();
917 std::vector<Profile> tempPreviewProfiles = outputcapability->GetPreviewProfiles();
918 for (const auto& profile : tempPreviewProfiles) {
919 if ((profile.size_.width == PRVIEW_WIDTH_176 && profile.size_.height == PRVIEW_HEIGHT_144) ||
920 (profile.size_.width == PRVIEW_WIDTH_480 && profile.size_.height == PRVIEW_HEIGHT_480) ||
921 (profile.size_.width == PRVIEW_WIDTH_640 && profile.size_.height == PRVIEW_WIDTH_640) ||
922 (profile.size_.width == PRVIEW_WIDTH_4096 && profile.size_.height == PRVIEW_HEIGHT_3072) ||
923 (profile.size_.width == PRVIEW_WIDTH_4160 && profile.size_.height == PRVIEW_HEIGHT_3120) ||
924 (profile.size_.width == PRVIEW_WIDTH_8192 && profile.size_.height == PRVIEW_HEIGHT_6144)) {
925 MEDIA_DEBUG_LOG("SetUp skip previewProfile width:%{public}d height:%{public}d",
926 profile.size_.width, profile.size_.height);
927 continue;
928 }
929 previewProfiles_.push_back(profile);
930 }
931
932 for (auto i : previewProfiles_) {
933 MEDIA_DEBUG_LOG("SetUp previewProfiles_ width:%{public}d height:%{public}d", i.size_.width, i.size_.height);
934 previewFormats_.push_back(i.GetCameraFormat());
935 previewSizes_.push_back(i.GetSize());
936 }
937 }
938
ProcessSize()939 void CameraSessionModuleTest::ProcessSize()
940 {
941 Size size = previewSizes_.back();
942 previewWidth_ = size.width;
943 previewHeight_ = size.height;
944 size = photoSizes_.back();
945 photoWidth_ = size.width;
946 photoHeight_ = size.height;
947 size = videoSizes_.back();
948 videoWidth_ = size.width;
949 videoHeight_ = size.height;
950
951 sptr<CameraInput> camInput = (sptr<CameraInput>&)input_;
952 camInput->Open();
953 session_ = manager_->CreateCaptureSession();
954 ASSERT_NE(session_, nullptr);
955 }
956
957 /*
958 * Feature: Framework
959 * Function: Test aperture video session with photo output
960 * SubFunction: NA
961 * FunctionPoints: NA
962 * EnvConditions: NA
963 * CaseDescription: Test can not add photo output into aperture video session
964 */
965 HWTEST_F(CameraSessionModuleTest, aperture_video_session_moduletest_001, TestSize.Level0)
966 {
967 if (!IsSceneModeSupported(SceneMode::APERTURE_VIDEO)) {
968 return;
969 }
970
971 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::APERTURE_VIDEO);
972 ASSERT_NE(outputCapability, nullptr);
973 auto previewProfiles = outputCapability->GetPreviewProfiles();
974 ASSERT_FALSE(previewProfiles.empty());
975 auto photoProfiles = outputCapability->GetPhotoProfiles();
976 ASSERT_TRUE(photoProfiles.empty());
977 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
978 ASSERT_NE(outputCapabilityBase, nullptr);
979 auto photoProfilesBase = outputCapabilityBase->GetPhotoProfiles();
980 ASSERT_FALSE(photoProfilesBase.empty());
981
982 auto captureSession = manager_->CreateCaptureSession(SceneMode::APERTURE_VIDEO);
983 auto apertureVideoSession = static_cast<ApertureVideoSession*>(captureSession.GetRefPtr());
984 ASSERT_NE(apertureVideoSession, nullptr);
985 int32_t res = apertureVideoSession->BeginConfig();
986 EXPECT_EQ(res, 0);
987
988 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
989 ASSERT_NE(input, nullptr);
990 input->Open();
991 res = apertureVideoSession->AddInput(input);
992 EXPECT_EQ(res, 0);
993 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
994 ASSERT_NE(previewOutput, nullptr);
995 EXPECT_TRUE(apertureVideoSession->CanAddOutput(previewOutput));
996 res = apertureVideoSession->AddOutput(previewOutput);
997 EXPECT_EQ(res, 0);
998 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfilesBase[0]);
999 ASSERT_NE(photoOutput, nullptr);
1000 EXPECT_FALSE(apertureVideoSession->CanAddOutput(photoOutput));
1001 }
1002
1003 /*
1004 * Feature: Framework
1005 * Function: Test aperture video session with video output
1006 * SubFunction: NA
1007 * FunctionPoints: NA
1008 * EnvConditions: NA
1009 * CaseDescription: Test can add video output into aperture video session
1010 */
1011 HWTEST_F(CameraSessionModuleTest, aperture_video_session_moduletest_002, TestSize.Level0)
1012 {
1013 if (!IsSceneModeSupported(SceneMode::APERTURE_VIDEO)) {
1014 return;
1015 }
1016
1017 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::APERTURE_VIDEO);
1018 ASSERT_NE(outputCapability, nullptr);
1019 auto previewProfiles = outputCapability->GetPreviewProfiles();
1020 ASSERT_FALSE(previewProfiles.empty());
1021 auto videoProfiles = outputCapability->GetVideoProfiles();
1022 ASSERT_FALSE(videoProfiles.empty());
1023
1024 auto captureSession = manager_->CreateCaptureSession(SceneMode::APERTURE_VIDEO);
1025 auto apertureVideoSession = static_cast<ApertureVideoSession*>(captureSession.GetRefPtr());
1026 ASSERT_NE(apertureVideoSession, nullptr);
1027 int32_t res = apertureVideoSession->BeginConfig();
1028 EXPECT_EQ(res, 0);
1029
1030 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1031 ASSERT_NE(input, nullptr);
1032 input->Open();
1033 res = apertureVideoSession->AddInput(input);
1034 EXPECT_EQ(res, 0);
1035 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1036 ASSERT_NE(previewOutput, nullptr);
1037 EXPECT_TRUE(apertureVideoSession->CanAddOutput(previewOutput));
1038 res = apertureVideoSession->AddOutput(previewOutput);
1039 EXPECT_EQ(res, 0);
1040 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
1041 ASSERT_NE(videoOutput, nullptr);
1042 EXPECT_TRUE(apertureVideoSession->CanAddOutput(videoOutput));
1043 res = apertureVideoSession->AddOutput(videoOutput);
1044 EXPECT_EQ(res, 0);
1045
1046 res = apertureVideoSession->CommitConfig();
1047 EXPECT_EQ(res, 0);
1048 res = apertureVideoSession->Start();
1049 EXPECT_EQ(res, 0);
1050 sleep(WAIT_TIME_AFTER_START);
1051 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
1052 EXPECT_EQ(res, 0);
1053 sleep(WAIT_TIME_AFTER_START);
1054 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
1055 EXPECT_EQ(res, 0);
1056 res = apertureVideoSession->Stop();
1057 EXPECT_EQ(res, 0);
1058 res = apertureVideoSession->Release();
1059 EXPECT_EQ(res, 0);
1060 }
1061
1062 /*
1063 * Feature: Framework
1064 * Function: Test fluorescence photo session with photo output
1065 * SubFunction: NA
1066 * FunctionPoints: NA
1067 * EnvConditions: NA
1068 * CaseDescription: Test can add photo output into fluorescence photo session
1069 */
1070 HWTEST_F(CameraSessionModuleTest, fluorescence_photo_session_moduletest_001, TestSize.Level0)
1071 {
1072 if (!IsSceneModeSupported(SceneMode::FLUORESCENCE_PHOTO)) {
1073 return;
1074 }
1075
1076 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::FLUORESCENCE_PHOTO);
1077 ASSERT_NE(outputCapability, nullptr);
1078 auto previewProfiles = outputCapability->GetPreviewProfiles();
1079 ASSERT_FALSE(previewProfiles.empty());
1080 auto photoProfiles = outputCapability->GetPhotoProfiles();
1081 ASSERT_FALSE(photoProfiles.empty());
1082
1083 auto captureSession = manager_->CreateCaptureSession(SceneMode::FLUORESCENCE_PHOTO);
1084 auto fluorescencePhotoSession = static_cast<FluorescencePhotoSession*>(captureSession.GetRefPtr());
1085 ASSERT_NE(fluorescencePhotoSession, nullptr);
1086 int32_t res = fluorescencePhotoSession->BeginConfig();
1087 EXPECT_EQ(res, 0);
1088
1089 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1090 ASSERT_NE(input, nullptr);
1091 input->Open();
1092 res = fluorescencePhotoSession->AddInput(input);
1093 EXPECT_EQ(res, 0);
1094 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1095 ASSERT_NE(previewOutput, nullptr);
1096 EXPECT_TRUE(fluorescencePhotoSession->CanAddOutput(previewOutput));
1097 res = fluorescencePhotoSession->AddOutput(previewOutput);
1098 EXPECT_EQ(res, 0);
1099 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
1100 ASSERT_NE(photoOutput, nullptr);
1101 EXPECT_TRUE(fluorescencePhotoSession->CanAddOutput(photoOutput));
1102 res = fluorescencePhotoSession->AddOutput(photoOutput);
1103 EXPECT_EQ(res, 0);
1104
1105 res = fluorescencePhotoSession->CommitConfig();
1106 EXPECT_EQ(res, 0);
1107 res = fluorescencePhotoSession->Start();
1108 EXPECT_EQ(res, 0);
1109 sleep(WAIT_TIME_AFTER_START);
1110 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
1111 EXPECT_EQ(res, 0);
1112 sleep(WAIT_TIME_AFTER_CAPTURE);
1113 res = fluorescencePhotoSession->Stop();
1114 EXPECT_EQ(res, 0);
1115 res = fluorescencePhotoSession->Release();
1116 EXPECT_EQ(res, 0);
1117 }
1118
1119 /*
1120 * Feature: Framework
1121 * Function: Test fluorescence photo session with video output
1122 * SubFunction: NA
1123 * FunctionPoints: NA
1124 * EnvConditions: NA
1125 * CaseDescription: Test can not add video output into fluorescence photo session
1126 */
1127 HWTEST_F(CameraSessionModuleTest, fluorescence_photo_session_moduletest_002, TestSize.Level0)
1128 {
1129 if (!IsSceneModeSupported(SceneMode::FLUORESCENCE_PHOTO)) {
1130 return;
1131 }
1132
1133 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::FLUORESCENCE_PHOTO);
1134 ASSERT_NE(outputCapability, nullptr);
1135 auto previewProfiles = outputCapability->GetPreviewProfiles();
1136 ASSERT_FALSE(previewProfiles.empty());
1137 auto videoProfiles = outputCapability->GetVideoProfiles();
1138 ASSERT_FALSE(videoProfiles.empty());
1139
1140 auto captureSession = manager_->CreateCaptureSession(SceneMode::FLUORESCENCE_PHOTO);
1141 auto fluorescencePhotoSession = static_cast<FluorescencePhotoSession*>(captureSession.GetRefPtr());
1142 ASSERT_NE(fluorescencePhotoSession, nullptr);
1143 int32_t res = fluorescencePhotoSession->BeginConfig();
1144 EXPECT_EQ(res, 0);
1145
1146 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1147 ASSERT_NE(input, nullptr);
1148 input->Open();
1149 res = fluorescencePhotoSession->AddInput(input);
1150 EXPECT_EQ(res, 0);
1151 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1152 ASSERT_NE(previewOutput, nullptr);
1153 EXPECT_TRUE(fluorescencePhotoSession->CanAddOutput(previewOutput));
1154 res = fluorescencePhotoSession->AddOutput(previewOutput);
1155 EXPECT_EQ(res, 0);
1156 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
1157 ASSERT_NE(videoOutput, nullptr);
1158 EXPECT_FALSE(fluorescencePhotoSession->CanAddOutput(videoOutput));
1159 }
1160
1161 /*
1162 * Feature: Framework
1163 * Function: Test high res photo session with photo output
1164 * SubFunction: NA
1165 * FunctionPoints: NA
1166 * EnvConditions: NA
1167 * CaseDescription: Test can add photo output into high res photo session
1168 */
1169 HWTEST_F(CameraSessionModuleTest, high_res_photo_session_moduletest_001, TestSize.Level0)
1170 {
1171 if (!IsSceneModeSupported(SceneMode::HIGH_RES_PHOTO)) {
1172 return;
1173 }
1174
1175 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::HIGH_RES_PHOTO);
1176 ASSERT_NE(outputCapability, nullptr);
1177 auto previewProfiles = outputCapability->GetPreviewProfiles();
1178 ASSERT_FALSE(previewProfiles.empty());
1179 auto photoProfiles = outputCapability->GetPhotoProfiles();
1180 ASSERT_FALSE(photoProfiles.empty());
1181
1182 auto captureSession = manager_->CreateCaptureSession(SceneMode::HIGH_RES_PHOTO);
1183 auto highResPhotoSession = static_cast<HighResPhotoSession*>(captureSession.GetRefPtr());
1184 ASSERT_NE(highResPhotoSession, nullptr);
1185 int32_t res = highResPhotoSession->BeginConfig();
1186 EXPECT_EQ(res, 0);
1187
1188 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1189 ASSERT_NE(input, nullptr);
1190 input->Open();
1191 res = highResPhotoSession->AddInput(input);
1192 EXPECT_EQ(res, 0);
1193 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1194 ASSERT_NE(previewOutput, nullptr);
1195 EXPECT_TRUE(highResPhotoSession->CanAddOutput(previewOutput));
1196 res = highResPhotoSession->AddOutput(previewOutput);
1197 EXPECT_EQ(res, 0);
1198 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
1199 ASSERT_NE(photoOutput, nullptr);
1200 EXPECT_TRUE(highResPhotoSession->CanAddOutput(photoOutput));
1201 res = highResPhotoSession->AddOutput(photoOutput);
1202 EXPECT_EQ(res, 0);
1203
1204 res = highResPhotoSession->CommitConfig();
1205 EXPECT_EQ(res, 0);
1206 res = highResPhotoSession->Start();
1207 EXPECT_EQ(res, 0);
1208 sleep(WAIT_TIME_AFTER_START);
1209 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
1210 EXPECT_EQ(res, 0);
1211 sleep(WAIT_TIME_AFTER_CAPTURE);
1212 res = highResPhotoSession->Stop();
1213 EXPECT_EQ(res, 0);
1214 res = highResPhotoSession->Release();
1215 EXPECT_EQ(res, 0);
1216 }
1217
1218 /*
1219 * Feature: Framework
1220 * Function: Test high res photo session with video output
1221 * SubFunction: NA
1222 * FunctionPoints: NA
1223 * EnvConditions: NA
1224 * CaseDescription: Test can not add video output into high res photo session
1225 */
1226 HWTEST_F(CameraSessionModuleTest, high_res_photo_session_moduletest_002, TestSize.Level0)
1227 {
1228 if (!IsSceneModeSupported(SceneMode::HIGH_RES_PHOTO)) {
1229 return;
1230 }
1231
1232 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::HIGH_RES_PHOTO);
1233 ASSERT_NE(outputCapability, nullptr);
1234 auto previewProfiles = outputCapability->GetPreviewProfiles();
1235 ASSERT_FALSE(previewProfiles.empty());
1236 auto videoProfiles = outputCapability->GetVideoProfiles();
1237 ASSERT_TRUE(videoProfiles.empty());
1238 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
1239 ASSERT_NE(outputCapabilityBase, nullptr);
1240 auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
1241 ASSERT_FALSE(videoProfilesBase.empty());
1242
1243 auto captureSession = manager_->CreateCaptureSession(SceneMode::HIGH_RES_PHOTO);
1244 auto highResPhotoSession = static_cast<HighResPhotoSession*>(captureSession.GetRefPtr());
1245 ASSERT_NE(highResPhotoSession, nullptr);
1246 int32_t res = highResPhotoSession->BeginConfig();
1247 EXPECT_EQ(res, 0);
1248
1249 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1250 ASSERT_NE(input, nullptr);
1251 input->Open();
1252 res = highResPhotoSession->AddInput(input);
1253 EXPECT_EQ(res, 0);
1254 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1255 ASSERT_NE(previewOutput, nullptr);
1256 EXPECT_TRUE(highResPhotoSession->CanAddOutput(previewOutput));
1257 res = highResPhotoSession->AddOutput(previewOutput);
1258 EXPECT_EQ(res, 0);
1259 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
1260 ASSERT_NE(videoOutput, nullptr);
1261 EXPECT_FALSE(highResPhotoSession->CanAddOutput(videoOutput));
1262 }
1263
1264 /*
1265 * Feature: Framework
1266 * Function: Test light painting session with photo output
1267 * SubFunction: NA
1268 * FunctionPoints: NA
1269 * EnvConditions: NA
1270 * CaseDescription: Test can add photo output into light painting session
1271 */
1272 HWTEST_F(CameraSessionModuleTest, light_painting_session_moduletest_001, TestSize.Level0)
1273 {
1274 if (!IsSceneModeSupported(SceneMode::LIGHT_PAINTING)) {
1275 return;
1276 }
1277
1278 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::LIGHT_PAINTING);
1279 ASSERT_NE(outputCapability, nullptr);
1280 auto previewProfiles = outputCapability->GetPreviewProfiles();
1281 ASSERT_FALSE(previewProfiles.empty());
1282 auto photoProfiles = outputCapability->GetPhotoProfiles();
1283 ASSERT_FALSE(photoProfiles.empty());
1284
1285 auto captureSession = manager_->CreateCaptureSession(SceneMode::LIGHT_PAINTING);
1286 auto lightPaintingSession = static_cast<LightPaintingSession*>(captureSession.GetRefPtr());
1287 ASSERT_NE(lightPaintingSession, nullptr);
1288 int32_t res = lightPaintingSession->BeginConfig();
1289 EXPECT_EQ(res, 0);
1290
1291 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1292 ASSERT_NE(input, nullptr);
1293 input->Open();
1294 res = lightPaintingSession->AddInput(input);
1295 EXPECT_EQ(res, 0);
1296 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1297 ASSERT_NE(previewOutput, nullptr);
1298 EXPECT_TRUE(lightPaintingSession->CanAddOutput(previewOutput));
1299 res = lightPaintingSession->AddOutput(previewOutput);
1300 EXPECT_EQ(res, 0);
1301 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
1302 ASSERT_NE(photoOutput, nullptr);
1303 EXPECT_TRUE(lightPaintingSession->CanAddOutput(photoOutput));
1304 res = lightPaintingSession->AddOutput(photoOutput);
1305 EXPECT_EQ(res, 0);
1306
1307 res = lightPaintingSession->CommitConfig();
1308 EXPECT_EQ(res, 0);
1309 res = lightPaintingSession->Start();
1310 EXPECT_EQ(res, 0);
1311 sleep(WAIT_TIME_AFTER_START);
1312 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
1313 EXPECT_EQ(res, 0);
1314 sleep(WAIT_TIME_AFTER_CAPTURE);
1315 res = lightPaintingSession->Stop();
1316 EXPECT_EQ(res, 0);
1317 res = lightPaintingSession->Release();
1318 EXPECT_EQ(res, 0);
1319 }
1320
1321 /*
1322 * Feature: Framework
1323 * Function: Test light painting session with video output
1324 * SubFunction: NA
1325 * FunctionPoints: NA
1326 * EnvConditions: NA
1327 * CaseDescription: Test can not add video output into light painting session
1328 */
1329 HWTEST_F(CameraSessionModuleTest, light_painting_session_moduletest_002, TestSize.Level0)
1330 {
1331 if (!IsSceneModeSupported(SceneMode::LIGHT_PAINTING)) {
1332 return;
1333 }
1334
1335 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::LIGHT_PAINTING);
1336 ASSERT_NE(outputCapability, nullptr);
1337 auto previewProfiles = outputCapability->GetPreviewProfiles();
1338 ASSERT_FALSE(previewProfiles.empty());
1339 auto videoProfiles = outputCapability->GetVideoProfiles();
1340 ASSERT_TRUE(videoProfiles.empty());
1341 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
1342 ASSERT_NE(outputCapabilityBase, nullptr);
1343 auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
1344 ASSERT_FALSE(videoProfilesBase.empty());
1345
1346 auto captureSession = manager_->CreateCaptureSession(SceneMode::LIGHT_PAINTING);
1347 auto lightPaintingSession = static_cast<LightPaintingSession*>(captureSession.GetRefPtr());
1348 ASSERT_NE(lightPaintingSession, nullptr);
1349 int32_t res = lightPaintingSession->BeginConfig();
1350 EXPECT_EQ(res, 0);
1351
1352 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1353 ASSERT_NE(input, nullptr);
1354 input->Open();
1355 res = lightPaintingSession->AddInput(input);
1356 EXPECT_EQ(res, 0);
1357 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1358 ASSERT_NE(previewOutput, nullptr);
1359 EXPECT_TRUE(lightPaintingSession->CanAddOutput(previewOutput));
1360 res = lightPaintingSession->AddOutput(previewOutput);
1361 EXPECT_EQ(res, 0);
1362 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
1363 ASSERT_NE(videoOutput, nullptr);
1364 EXPECT_FALSE(lightPaintingSession->CanAddOutput(videoOutput));
1365 }
1366
1367 /*
1368 * Feature: Framework
1369 * Function: Test light painting session get light painting type
1370 * SubFunction: NA
1371 * FunctionPoints: NA
1372 * EnvConditions: NA
1373 * CaseDescription: Test can get light painting type from light painting session
1374 */
1375 HWTEST_F(CameraSessionModuleTest, light_painting_session_moduletest_003, TestSize.Level0)
1376 {
1377 if (!IsSceneModeSupported(SceneMode::LIGHT_PAINTING)) {
1378 return;
1379 }
1380
1381 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::LIGHT_PAINTING);
1382 ASSERT_NE(outputCapability, nullptr);
1383 auto previewProfiles = outputCapability->GetPreviewProfiles();
1384 ASSERT_FALSE(previewProfiles.empty());
1385 auto photoProfiles = outputCapability->GetPhotoProfiles();
1386 ASSERT_FALSE(photoProfiles.empty());
1387
1388 auto captureSession = manager_->CreateCaptureSession(SceneMode::LIGHT_PAINTING);
1389 auto lightPaintingSession = static_cast<LightPaintingSession*>(captureSession.GetRefPtr());
1390 ASSERT_NE(lightPaintingSession, nullptr);
1391 int32_t res = lightPaintingSession->BeginConfig();
1392 EXPECT_EQ(res, 0);
1393
1394 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1395 ASSERT_NE(input, nullptr);
1396 input->Open();
1397 res = lightPaintingSession->AddInput(input);
1398 EXPECT_EQ(res, 0);
1399 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1400 ASSERT_NE(previewOutput, nullptr);
1401 EXPECT_TRUE(lightPaintingSession->CanAddOutput(previewOutput));
1402 res = lightPaintingSession->AddOutput(previewOutput);
1403 EXPECT_EQ(res, 0);
1404 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
1405 ASSERT_NE(photoOutput, nullptr);
1406 EXPECT_TRUE(lightPaintingSession->CanAddOutput(photoOutput));
1407 res = lightPaintingSession->AddOutput(photoOutput);
1408 EXPECT_EQ(res, 0);
1409
1410 res = lightPaintingSession->CommitConfig();
1411 EXPECT_EQ(res, 0);
1412 res = lightPaintingSession->Start();
1413 EXPECT_EQ(res, 0);
1414 sleep(WAIT_TIME_AFTER_START);
1415
1416 std::vector<LightPaintingType> supportedType;
1417 res = lightPaintingSession->GetSupportedLightPaintings(supportedType);
1418 EXPECT_EQ(res, 0);
1419 if (!supportedType.empty()) {
1420 LightPaintingType defaultType;
1421 res = lightPaintingSession->GetLightPainting(defaultType);
1422 EXPECT_EQ(defaultType, supportedType[0]);
1423 }
1424
1425 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
1426 EXPECT_EQ(res, 0);
1427 sleep(WAIT_TIME_AFTER_CAPTURE);
1428 res = lightPaintingSession->Stop();
1429 EXPECT_EQ(res, 0);
1430 res = lightPaintingSession->Release();
1431 EXPECT_EQ(res, 0);
1432 }
1433
1434 /*
1435 * Feature: Framework
1436 * Function: Test light painting session set light painting type
1437 * SubFunction: NA
1438 * FunctionPoints: NA
1439 * EnvConditions: NA
1440 * CaseDescription: Test can set light painting type into light painting session
1441 */
1442 HWTEST_F(CameraSessionModuleTest, light_painting_session_moduletest_004, TestSize.Level0)
1443 {
1444 if (!IsSceneModeSupported(SceneMode::LIGHT_PAINTING)) {
1445 return;
1446 }
1447
1448 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::LIGHT_PAINTING);
1449 ASSERT_NE(outputCapability, nullptr);
1450 auto previewProfiles = outputCapability->GetPreviewProfiles();
1451 ASSERT_FALSE(previewProfiles.empty());
1452 auto photoProfiles = outputCapability->GetPhotoProfiles();
1453 ASSERT_FALSE(photoProfiles.empty());
1454
1455 auto captureSession = manager_->CreateCaptureSession(SceneMode::LIGHT_PAINTING);
1456 auto lightPaintingSession = static_cast<LightPaintingSession*>(captureSession.GetRefPtr());
1457 ASSERT_NE(lightPaintingSession, nullptr);
1458 int32_t res = lightPaintingSession->BeginConfig();
1459 EXPECT_EQ(res, 0);
1460
1461 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1462 ASSERT_NE(input, nullptr);
1463 input->Open();
1464 res = lightPaintingSession->AddInput(input);
1465 EXPECT_EQ(res, 0);
1466 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1467 ASSERT_NE(previewOutput, nullptr);
1468 EXPECT_TRUE(lightPaintingSession->CanAddOutput(previewOutput));
1469 res = lightPaintingSession->AddOutput(previewOutput);
1470 EXPECT_EQ(res, 0);
1471 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
1472 ASSERT_NE(photoOutput, nullptr);
1473 EXPECT_TRUE(lightPaintingSession->CanAddOutput(photoOutput));
1474 res = lightPaintingSession->AddOutput(photoOutput);
1475 EXPECT_EQ(res, 0);
1476
1477 res = lightPaintingSession->CommitConfig();
1478 EXPECT_EQ(res, 0);
1479 res = lightPaintingSession->Start();
1480 EXPECT_EQ(res, 0);
1481 sleep(WAIT_TIME_AFTER_START);
1482
1483 std::vector<LightPaintingType> supportedType;
1484 res = lightPaintingSession->GetSupportedLightPaintings(supportedType);
1485 EXPECT_EQ(res, 0);
1486 if (!supportedType.empty()) {
1487 LightPaintingType setType = LightPaintingType::LIGHT;
1488 lightPaintingSession->LockForControl();
1489 res = lightPaintingSession->SetLightPainting(setType);
1490 lightPaintingSession->UnlockForControl();
1491 EXPECT_EQ(res, 0);
1492
1493 LightPaintingType defaultType;
1494 res = lightPaintingSession->GetLightPainting(defaultType);
1495 EXPECT_EQ(defaultType, setType);
1496
1497 lightPaintingSession->LockForControl();
1498 res = lightPaintingSession->TriggerLighting();
1499 lightPaintingSession->UnlockForControl();
1500 EXPECT_EQ(res, 0);
1501 }
1502
1503 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
1504 EXPECT_EQ(res, 0);
1505 sleep(WAIT_TIME_AFTER_CAPTURE);
1506 res = lightPaintingSession->Stop();
1507 EXPECT_EQ(res, 0);
1508 res = lightPaintingSession->Release();
1509 EXPECT_EQ(res, 0);
1510 }
1511
1512 /*
1513 * Feature: Framework
1514 * Function: Test macro photo session with photo output
1515 * SubFunction: NA
1516 * FunctionPoints: NA
1517 * EnvConditions: NA
1518 * CaseDescription: Test can add photo output into macro photo session
1519 */
1520 HWTEST_F(CameraSessionModuleTest, macro_photo_session_moduletest_001, TestSize.Level0)
1521 {
1522 if (!IsSceneModeSupported(SceneMode::CAPTURE_MACRO)) {
1523 return;
1524 }
1525
1526 auto previewProfile = GetSketchPreviewProfile();
1527 if (previewProfile == nullptr) {
1528 EXPECT_EQ(previewProfile.get(), nullptr);
1529 return;
1530 }
1531 SelectProfiles selectProfiles;
1532 selectProfiles.preview.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1533 selectProfiles.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
1534 selectProfiles.photo.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1535 selectProfiles.photo.format_ = CAMERA_FORMAT_YUV_420_SP;
1536 selectProfiles.video.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1537 selectProfiles.video.format_ = CAMERA_FORMAT_YUV_420_SP;
1538 selectProfiles.video.framerates_ = {MAX_FRAME_RATE, MAX_FRAME_RATE};
1539 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE_MACRO);
1540 ASSERT_NE(outputCapability, nullptr);
1541 auto photoProfiles = outputCapability->GetPhotoProfiles();
1542 ASSERT_FALSE(photoProfiles.empty());
1543
1544 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE_MACRO);
1545 auto macroPhotoSession = static_cast<MacroPhotoSession*>(captureSession.GetRefPtr());
1546 ASSERT_NE(macroPhotoSession, nullptr);
1547 int32_t res = macroPhotoSession->BeginConfig();
1548 EXPECT_EQ(res, 0);
1549
1550 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1551 ASSERT_NE(input, nullptr);
1552 input->Open();
1553 res = macroPhotoSession->AddInput(input);
1554 EXPECT_EQ(res, 0);
1555 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(selectProfiles.preview);
1556 ASSERT_NE(previewOutput, nullptr);
1557 EXPECT_TRUE(macroPhotoSession->CanAddOutput(previewOutput));
1558 res = macroPhotoSession->AddOutput(previewOutput);
1559 EXPECT_EQ(res, 0);
1560 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
1561 ASSERT_NE(photoOutput, nullptr);
1562 EXPECT_TRUE(macroPhotoSession->CanAddOutput(photoOutput));
1563 res = macroPhotoSession->AddOutput(photoOutput);
1564 EXPECT_EQ(res, 0);
1565
1566 bool isSketchSupported = ((sptr<PreviewOutput>&)previewOutput)->IsSketchSupported();
1567 if (!isSketchSupported) {
1568 return;
1569 }
1570 res = ((sptr<PreviewOutput>&)previewOutput)->EnableSketch(true);
1571 EXPECT_EQ(res, 0);
1572
1573 res = macroPhotoSession->CommitConfig();
1574 EXPECT_EQ(res, 0);
1575 res = macroPhotoSession->Start();
1576 EXPECT_EQ(res, 0);
1577 sleep(WAIT_TIME_AFTER_START);
1578
1579 EXPECT_GT(((sptr<PreviewOutput>&)previewOutput)->GetSketchRatio(), 0);
1580 EXPECT_EQ(((sptr<PreviewOutput>&)previewOutput)->AttachSketchSurface(
1581 CreateSketchSurface(selectProfiles.preview.GetCameraFormat())), 0);
1582 sleep(WAIT_TIME_AFTER_ATTACH_SKETCH);
1583
1584 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
1585 EXPECT_EQ(res, 0);
1586 sleep(WAIT_TIME_AFTER_CAPTURE);
1587 res = macroPhotoSession->Stop();
1588 EXPECT_EQ(res, 0);
1589 res = macroPhotoSession->Release();
1590 EXPECT_EQ(res, 0);
1591 }
1592
1593 /*
1594 * Feature: Framework
1595 * Function: Test macro photo session with video output
1596 * SubFunction: NA
1597 * FunctionPoints: NA
1598 * EnvConditions: NA
1599 * CaseDescription: Test can not add video output into macro photo session
1600 */
1601 HWTEST_F(CameraSessionModuleTest, macro_photo_session_moduletest_002, TestSize.Level0)
1602 {
1603 if (!IsSceneModeSupported(SceneMode::CAPTURE_MACRO)) {
1604 return;
1605 }
1606
1607 auto previewProfile = GetSketchPreviewProfile();
1608 if (previewProfile == nullptr) {
1609 EXPECT_EQ(previewProfile.get(), nullptr);
1610 return;
1611 }
1612 SelectProfiles selectProfiles;
1613 selectProfiles.preview.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1614 selectProfiles.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
1615 selectProfiles.photo.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1616 selectProfiles.photo.format_ = CAMERA_FORMAT_YUV_420_SP;
1617 selectProfiles.video.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1618 selectProfiles.video.format_ = CAMERA_FORMAT_YUV_420_SP;
1619 selectProfiles.video.framerates_ = {MAX_FRAME_RATE, MAX_FRAME_RATE};
1620
1621 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE_MACRO);
1622 auto macroPhotoSession = static_cast<MacroPhotoSession*>(captureSession.GetRefPtr());
1623 ASSERT_NE(macroPhotoSession, nullptr);
1624 int32_t res = macroPhotoSession->BeginConfig();
1625 EXPECT_EQ(res, 0);
1626
1627 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1628 ASSERT_NE(input, nullptr);
1629 input->Open();
1630 res = macroPhotoSession->AddInput(input);
1631 EXPECT_EQ(res, 0);
1632 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(selectProfiles.preview);
1633 ASSERT_NE(previewOutput, nullptr);
1634 EXPECT_TRUE(macroPhotoSession->CanAddOutput(previewOutput));
1635 res = macroPhotoSession->AddOutput(previewOutput);
1636 EXPECT_EQ(res, 0);
1637 sptr<CaptureOutput> videoOutput = CreateVideoOutput(selectProfiles.video);
1638 ASSERT_NE(videoOutput, nullptr);
1639 EXPECT_FALSE(macroPhotoSession->CanAddOutput(videoOutput));
1640 }
1641
1642 /*
1643 * Feature: Framework
1644 * Function: Test macro photo session with CreateCaptureSession
1645 * SubFunction: NA
1646 * FunctionPoints: NA
1647 * EnvConditions: NA
1648 * CaseDescription: Test macro photo session with CreateCaptureSession
1649 */
1650 HWTEST_F(CameraSessionModuleTest, macro_photo_session_moduletest_003, TestSize.Level0)
1651 {
1652 SceneMode mode = SceneMode::CAPTURE_MACRO;
1653 sptr<CameraManager> modeManagerObj = CameraManager::GetInstance();
1654 ASSERT_NE(modeManagerObj, nullptr);
1655
1656 sptr<CaptureSession> captureSession = modeManagerObj->CreateCaptureSession(mode);
1657 ASSERT_NE(captureSession, nullptr);
1658 }
1659
1660 /*
1661 * Feature: Framework
1662 * Function: Test macro video session with photo output
1663 * SubFunction: NA
1664 * FunctionPoints: NA
1665 * EnvConditions: NA
1666 * CaseDescription: Test can add photo output into macro video session
1667 */
1668 HWTEST_F(CameraSessionModuleTest, macro_video_session_moduletest_001, TestSize.Level0)
1669 {
1670 if (!IsSceneModeSupported(SceneMode::VIDEO_MACRO)) {
1671 return;
1672 }
1673
1674 auto previewProfile = GetSketchPreviewProfile();
1675 if (previewProfile == nullptr) {
1676 EXPECT_EQ(previewProfile.get(), nullptr);
1677 return;
1678 }
1679 SelectProfiles selectProfiles;
1680 selectProfiles.preview.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1681 selectProfiles.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
1682 selectProfiles.photo.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1683 selectProfiles.photo.format_ = CAMERA_FORMAT_YUV_420_SP;
1684 selectProfiles.video.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1685 selectProfiles.video.format_ = CAMERA_FORMAT_YUV_420_SP;
1686 selectProfiles.video.framerates_ = {MAX_FRAME_RATE, MAX_FRAME_RATE};
1687 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO_MACRO);
1688 ASSERT_NE(outputCapability, nullptr);
1689 auto photoProfiles = outputCapability->GetPhotoProfiles();
1690 ASSERT_FALSE(photoProfiles.empty());
1691
1692 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO_MACRO);
1693 auto macroVideoSession = static_cast<MacroVideoSession*>(captureSession.GetRefPtr());
1694 ASSERT_NE(macroVideoSession, nullptr);
1695 int32_t res = macroVideoSession->BeginConfig();
1696 EXPECT_EQ(res, 0);
1697
1698 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1699 ASSERT_NE(input, nullptr);
1700 input->Open();
1701 res = macroVideoSession->AddInput(input);
1702 EXPECT_EQ(res, 0);
1703 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(selectProfiles.preview);
1704 ASSERT_NE(previewOutput, nullptr);
1705 EXPECT_TRUE(macroVideoSession->CanAddOutput(previewOutput));
1706 res = macroVideoSession->AddOutput(previewOutput);
1707 EXPECT_EQ(res, 0);
1708 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
1709 ASSERT_NE(photoOutput, nullptr);
1710 EXPECT_TRUE(macroVideoSession->CanAddOutput(photoOutput));
1711 res = macroVideoSession->AddOutput(photoOutput);
1712 EXPECT_EQ(res, 0);
1713
1714 bool isSketchSupported = ((sptr<PreviewOutput>&)previewOutput)->IsSketchSupported();
1715 if (!isSketchSupported) {
1716 return;
1717 }
1718 res = ((sptr<PreviewOutput>&)previewOutput)->EnableSketch(true);
1719 EXPECT_EQ(res, 0);
1720
1721 res = macroVideoSession->CommitConfig();
1722 EXPECT_EQ(res, 0);
1723 res = macroVideoSession->Start();
1724 EXPECT_EQ(res, 0);
1725 sleep(WAIT_TIME_AFTER_START);
1726
1727 EXPECT_GT(((sptr<PreviewOutput>&)previewOutput)->GetSketchRatio(), 0);
1728 EXPECT_EQ(((sptr<PreviewOutput>&)previewOutput)->AttachSketchSurface(
1729 CreateSketchSurface(selectProfiles.preview.GetCameraFormat())), 0);
1730 sleep(WAIT_TIME_AFTER_ATTACH_SKETCH);
1731
1732 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
1733 EXPECT_EQ(res, 0);
1734 sleep(WAIT_TIME_AFTER_CAPTURE);
1735 res = macroVideoSession->Stop();
1736 EXPECT_EQ(res, 0);
1737 res = macroVideoSession->Release();
1738 EXPECT_EQ(res, 0);
1739 }
1740
1741 /*
1742 * Feature: Framework
1743 * Function: Test macro video session with video output
1744 * SubFunction: NA
1745 * FunctionPoints: NA
1746 * EnvConditions: NA
1747 * CaseDescription: Test can add video output into macro video session
1748 */
1749 HWTEST_F(CameraSessionModuleTest, macro_video_session_moduletest_002, TestSize.Level0)
1750 {
1751 if (!IsSceneModeSupported(SceneMode::VIDEO_MACRO)) {
1752 return;
1753 }
1754
1755 auto previewProfile = GetSketchPreviewProfile();
1756 if (previewProfile == nullptr) {
1757 EXPECT_EQ(previewProfile.get(), nullptr);
1758 return;
1759 }
1760 SelectProfiles selectProfiles;
1761 selectProfiles.preview.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1762 selectProfiles.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
1763 selectProfiles.photo.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1764 selectProfiles.photo.format_ = CAMERA_FORMAT_YUV_420_SP;
1765 selectProfiles.video.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1766 selectProfiles.video.format_ = CAMERA_FORMAT_YUV_420_SP;
1767 selectProfiles.video.framerates_ = {MAX_FRAME_RATE, MAX_FRAME_RATE};
1768
1769 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO_MACRO);
1770 auto macroVideoSession = static_cast<MacroVideoSession*>(captureSession.GetRefPtr());
1771 ASSERT_NE(macroVideoSession, nullptr);
1772 int32_t res = macroVideoSession->BeginConfig();
1773 EXPECT_EQ(res, 0);
1774
1775 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1776 ASSERT_NE(input, nullptr);
1777 input->Open();
1778 res = macroVideoSession->AddInput(input);
1779 EXPECT_EQ(res, 0);
1780 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(selectProfiles.preview);
1781 ASSERT_NE(previewOutput, nullptr);
1782 EXPECT_TRUE(macroVideoSession->CanAddOutput(previewOutput));
1783 res = macroVideoSession->AddOutput(previewOutput);
1784 EXPECT_EQ(res, 0);
1785 sptr<CaptureOutput> videoOutput = CreateVideoOutput(selectProfiles.video);
1786 ASSERT_NE(videoOutput, nullptr);
1787 EXPECT_TRUE(macroVideoSession->CanAddOutput(videoOutput));
1788 res = macroVideoSession->AddOutput(videoOutput);
1789 EXPECT_EQ(res, 0);
1790
1791 bool isSketchSupported = ((sptr<PreviewOutput>&)previewOutput)->IsSketchSupported();
1792 if (!isSketchSupported) {
1793 return;
1794 }
1795 res = ((sptr<PreviewOutput>&)previewOutput)->EnableSketch(true);
1796 EXPECT_EQ(res, 0);
1797
1798 res = macroVideoSession->CommitConfig();
1799 EXPECT_EQ(res, 0);
1800 res = macroVideoSession->Start();
1801 EXPECT_EQ(res, 0);
1802 sleep(WAIT_TIME_AFTER_START);
1803
1804 EXPECT_GT(((sptr<PreviewOutput>&)previewOutput)->GetSketchRatio(), 0);
1805 EXPECT_EQ(((sptr<PreviewOutput>&)previewOutput)->AttachSketchSurface(
1806 CreateSketchSurface(selectProfiles.preview.GetCameraFormat())), 0);
1807 sleep(WAIT_TIME_AFTER_ATTACH_SKETCH);
1808
1809 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
1810 EXPECT_EQ(res, 0);
1811 sleep(WAIT_TIME_AFTER_START);
1812 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
1813 EXPECT_EQ(res, 0);
1814 res = macroVideoSession->Stop();
1815 EXPECT_EQ(res, 0);
1816 res = macroVideoSession->Release();
1817 EXPECT_EQ(res, 0);
1818 }
1819
1820 /*
1821 * Feature: Framework
1822 * Function: Test macro video session with CreateCaptureSession
1823 * SubFunction: NA
1824 * FunctionPoints: NA
1825 * EnvConditions: NA
1826 * CaseDescription: Test macro video session with CreateCaptureSession
1827 */
1828 HWTEST_F(CameraSessionModuleTest, macro_video_session_moduletest_003, TestSize.Level0)
1829 {
1830 SceneMode mode = SceneMode::VIDEO_MACRO;
1831 sptr<CameraManager> modeManagerObj = CameraManager::GetInstance();
1832 ASSERT_NE(modeManagerObj, nullptr);
1833
1834 sptr<CaptureSession> captureSession = modeManagerObj->CreateCaptureSession(mode);
1835 ASSERT_NE(captureSession, nullptr);
1836 }
1837
1838 /*
1839 * Feature: Framework
1840 * Function: Test panorama session with photo output
1841 * SubFunction: NA
1842 * FunctionPoints: NA
1843 * EnvConditions: NA
1844 * CaseDescription: Test can not add photo output into panorama session
1845 */
1846 HWTEST_F(CameraSessionModuleTest, panorama_session_moduletest_001, TestSize.Level0)
1847 {
1848 if (!IsSceneModeSupported(SceneMode::PANORAMA_PHOTO)) {
1849 return;
1850 }
1851
1852 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PANORAMA_PHOTO);
1853 ASSERT_NE(outputCapability, nullptr);
1854 auto previewProfiles = outputCapability->GetPreviewProfiles();
1855 ASSERT_FALSE(previewProfiles.empty());
1856 auto photoProfiles = outputCapability->GetPhotoProfiles();
1857 ASSERT_TRUE(photoProfiles.empty());
1858 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
1859 ASSERT_NE(outputCapabilityBase, nullptr);
1860 auto photoProfilesBase = outputCapabilityBase->GetPhotoProfiles();
1861 ASSERT_FALSE(photoProfilesBase.empty());
1862
1863 auto captureSession = manager_->CreateCaptureSession(SceneMode::PANORAMA_PHOTO);
1864 auto panoramaSession = static_cast<PanoramaSession*>(captureSession.GetRefPtr());
1865 ASSERT_NE(panoramaSession, nullptr);
1866 int32_t res = panoramaSession->BeginConfig();
1867 EXPECT_EQ(res, 0);
1868
1869 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1870 ASSERT_NE(input, nullptr);
1871 input->Open();
1872 res = panoramaSession->AddInput(input);
1873 EXPECT_EQ(res, 0);
1874 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1875 ASSERT_NE(previewOutput, nullptr);
1876 EXPECT_TRUE(panoramaSession->CanAddOutput(previewOutput));
1877 res = panoramaSession->AddOutput(previewOutput);
1878 EXPECT_EQ(res, 0);
1879 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfilesBase[0]);
1880 ASSERT_NE(photoOutput, nullptr);
1881 EXPECT_FALSE(panoramaSession->CanAddOutput(photoOutput));
1882 }
1883
1884 /*
1885 * Feature: Framework
1886 * Function: Test panorama session with video output
1887 * SubFunction: NA
1888 * FunctionPoints: NA
1889 * EnvConditions: NA
1890 * CaseDescription: Test can not add video output into panorama session
1891 */
1892 HWTEST_F(CameraSessionModuleTest, panorama_session_moduletest_002, TestSize.Level0)
1893 {
1894 if (!IsSceneModeSupported(SceneMode::PANORAMA_PHOTO)) {
1895 return;
1896 }
1897
1898 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PANORAMA_PHOTO);
1899 ASSERT_NE(outputCapability, nullptr);
1900 auto previewProfiles = outputCapability->GetPreviewProfiles();
1901 ASSERT_FALSE(previewProfiles.empty());
1902 auto videoProfiles = outputCapability->GetVideoProfiles();
1903 ASSERT_TRUE(videoProfiles.empty());
1904 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
1905 ASSERT_NE(outputCapabilityBase, nullptr);
1906 auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
1907 ASSERT_FALSE(videoProfilesBase.empty());
1908
1909 auto captureSession = manager_->CreateCaptureSession(SceneMode::PANORAMA_PHOTO);
1910 auto panoramaSession = static_cast<PanoramaSession*>(captureSession.GetRefPtr());
1911 ASSERT_NE(panoramaSession, nullptr);
1912 int32_t res = panoramaSession->BeginConfig();
1913 EXPECT_EQ(res, 0);
1914
1915 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1916 ASSERT_NE(input, nullptr);
1917 input->Open();
1918 res = panoramaSession->AddInput(input);
1919 EXPECT_EQ(res, 0);
1920 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1921 ASSERT_NE(previewOutput, nullptr);
1922 EXPECT_TRUE(panoramaSession->CanAddOutput(previewOutput));
1923 res = panoramaSession->AddOutput(previewOutput);
1924 EXPECT_EQ(res, 0);
1925 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
1926 ASSERT_NE(videoOutput, nullptr);
1927 EXPECT_FALSE(panoramaSession->CanAddOutput(videoOutput));
1928 }
1929
1930 /*
1931 * Feature: Framework
1932 * Function: Test panorama session with preview output
1933 * SubFunction: NA
1934 * FunctionPoints: NA
1935 * EnvConditions: NA
1936 * CaseDescription: Test can add preview output into panorama session
1937 */
1938 HWTEST_F(CameraSessionModuleTest, panorama_session_moduletest_003, TestSize.Level0)
1939 {
1940 if (!IsSceneModeSupported(SceneMode::PANORAMA_PHOTO)) {
1941 return;
1942 }
1943
1944 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PANORAMA_PHOTO);
1945 ASSERT_NE(outputCapability, nullptr);
1946 auto previewProfiles = outputCapability->GetPreviewProfiles();
1947 ASSERT_FALSE(previewProfiles.empty());
1948
1949 auto captureSession = manager_->CreateCaptureSession(SceneMode::PANORAMA_PHOTO);
1950 auto panoramaSession = static_cast<PanoramaSession*>(captureSession.GetRefPtr());
1951 ASSERT_NE(panoramaSession, nullptr);
1952 int32_t res = panoramaSession->BeginConfig();
1953 EXPECT_EQ(res, 0);
1954
1955 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1956 ASSERT_NE(input, nullptr);
1957 input->Open();
1958 res = panoramaSession->AddInput(input);
1959 EXPECT_EQ(res, 0);
1960 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1961 ASSERT_NE(previewOutput, nullptr);
1962 EXPECT_TRUE(panoramaSession->CanAddOutput(previewOutput));
1963 res = panoramaSession->AddOutput(previewOutput);
1964 EXPECT_EQ(res, 0);
1965
1966 res = panoramaSession->CommitConfig();
1967 EXPECT_EQ(res, 0);
1968 res = panoramaSession->Start();
1969 EXPECT_EQ(res, 0);
1970 sleep(WAIT_TIME_AFTER_START);
1971 res = panoramaSession->Stop();
1972 EXPECT_EQ(res, 0);
1973 res = panoramaSession->Release();
1974 EXPECT_EQ(res, 0);
1975 }
1976
1977 /*
1978 * Feature: Framework
1979 * Function: Test portrait session with photo output
1980 * SubFunction: NA
1981 * FunctionPoints: NA
1982 * EnvConditions: NA
1983 * CaseDescription: Test can add photo output into portrait session
1984 */
1985 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_001, TestSize.Level0)
1986 {
1987 if (!IsSceneModeSupported(SceneMode::PORTRAIT)) {
1988 return;
1989 }
1990
1991 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PORTRAIT);
1992 ASSERT_NE(outputCapability, nullptr);
1993 auto previewProfiles = outputCapability->GetPreviewProfiles();
1994 ASSERT_FALSE(previewProfiles.empty());
1995 auto photoProfiles = outputCapability->GetPhotoProfiles();
1996 ASSERT_FALSE(photoProfiles.empty());
1997
1998 auto captureSession = manager_->CreateCaptureSession(SceneMode::PORTRAIT);
1999 auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2000 ASSERT_NE(portraitSession, nullptr);
2001 int32_t res = portraitSession->BeginConfig();
2002 EXPECT_EQ(res, 0);
2003
2004 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2005 ASSERT_NE(input, nullptr);
2006 input->Open();
2007 res = portraitSession->AddInput(input);
2008 EXPECT_EQ(res, 0);
2009 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2010 ASSERT_NE(previewOutput, nullptr);
2011 EXPECT_TRUE(portraitSession->CanAddOutput(previewOutput));
2012 res = portraitSession->AddOutput(previewOutput);
2013 EXPECT_EQ(res, 0);
2014 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
2015 ASSERT_NE(photoOutput, nullptr);
2016 EXPECT_TRUE(portraitSession->CanAddOutput(photoOutput));
2017 res = portraitSession->AddOutput(photoOutput);
2018 EXPECT_EQ(res, 0);
2019
2020 res = portraitSession->CommitConfig();
2021 EXPECT_EQ(res, 0);
2022 res = portraitSession->Start();
2023 EXPECT_EQ(res, 0);
2024 sleep(WAIT_TIME_AFTER_START);
2025 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
2026 EXPECT_EQ(res, 0);
2027 sleep(WAIT_TIME_AFTER_CAPTURE);
2028 res = portraitSession->Stop();
2029 EXPECT_EQ(res, 0);
2030 res = portraitSession->Release();
2031 EXPECT_EQ(res, 0);
2032 }
2033
2034 /*
2035 * Feature: Framework
2036 * Function: Test portrait session with video output
2037 * SubFunction: NA
2038 * FunctionPoints: NA
2039 * EnvConditions: NA
2040 * CaseDescription: Test can not add video output into portrait session
2041 */
2042 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_002, TestSize.Level0)
2043 {
2044 if (!IsSceneModeSupported(SceneMode::PORTRAIT)) {
2045 return;
2046 }
2047
2048 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PORTRAIT);
2049 ASSERT_NE(outputCapability, nullptr);
2050 auto previewProfiles = outputCapability->GetPreviewProfiles();
2051 ASSERT_FALSE(previewProfiles.empty());
2052 auto videoProfiles = outputCapability->GetVideoProfiles();
2053 ASSERT_TRUE(videoProfiles.empty());
2054 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
2055 ASSERT_NE(outputCapabilityBase, nullptr);
2056 auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
2057 ASSERT_FALSE(videoProfilesBase.empty());
2058
2059 auto captureSession = manager_->CreateCaptureSession(SceneMode::PORTRAIT);
2060 auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2061 ASSERT_NE(portraitSession, nullptr);
2062 int32_t res = portraitSession->BeginConfig();
2063 EXPECT_EQ(res, 0);
2064
2065 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2066 ASSERT_NE(input, nullptr);
2067 input->Open();
2068 res = portraitSession->AddInput(input);
2069 EXPECT_EQ(res, 0);
2070 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2071 ASSERT_NE(previewOutput, nullptr);
2072 EXPECT_TRUE(portraitSession->CanAddOutput(previewOutput));
2073 res = portraitSession->AddOutput(previewOutput);
2074 EXPECT_EQ(res, 0);
2075 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
2076 ASSERT_NE(videoOutput, nullptr);
2077 EXPECT_FALSE(portraitSession->CanAddOutput(videoOutput));
2078 }
2079
2080 /*
2081 * Feature: Framework
2082 * Function: Test portrait session get portrait effect
2083 * SubFunction: NA
2084 * FunctionPoints: NA
2085 * EnvConditions: NA
2086 * CaseDescription: Test can get portrait effect from portrait session
2087 */
2088 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_003, TestSize.Level0)
2089 {
2090 if (!IsSceneModeSupported(SceneMode::PORTRAIT)) {
2091 return;
2092 }
2093
2094 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PORTRAIT);
2095 ASSERT_NE(outputCapability, nullptr);
2096 auto previewProfiles = outputCapability->GetPreviewProfiles();
2097 ASSERT_FALSE(previewProfiles.empty());
2098 auto photoProfiles = outputCapability->GetPhotoProfiles();
2099 ASSERT_FALSE(photoProfiles.empty());
2100
2101 auto captureSession = manager_->CreateCaptureSession(SceneMode::PORTRAIT);
2102 auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2103 ASSERT_NE(portraitSession, nullptr);
2104 int32_t res = portraitSession->BeginConfig();
2105 EXPECT_EQ(res, 0);
2106
2107 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2108 ASSERT_NE(input, nullptr);
2109 input->Open();
2110 res = portraitSession->AddInput(input);
2111 EXPECT_EQ(res, 0);
2112 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2113 ASSERT_NE(previewOutput, nullptr);
2114 EXPECT_TRUE(portraitSession->CanAddOutput(previewOutput));
2115 res = portraitSession->AddOutput(previewOutput);
2116 EXPECT_EQ(res, 0);
2117 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
2118 ASSERT_NE(photoOutput, nullptr);
2119 EXPECT_TRUE(portraitSession->CanAddOutput(photoOutput));
2120 res = portraitSession->AddOutput(photoOutput);
2121 EXPECT_EQ(res, 0);
2122
2123 res = portraitSession->CommitConfig();
2124 EXPECT_EQ(res, 0);
2125 res = portraitSession->Start();
2126 EXPECT_EQ(res, 0);
2127 sleep(WAIT_TIME_AFTER_START);
2128
2129 std::vector<PortraitEffect> effects = portraitSession->GetSupportedPortraitEffects();
2130 if (!effects.empty()) {
2131 EXPECT_EQ(portraitSession->GetPortraitEffect(), effects[0]);
2132 }
2133
2134 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
2135 EXPECT_EQ(res, 0);
2136 sleep(WAIT_TIME_AFTER_CAPTURE);
2137 res = portraitSession->Stop();
2138 EXPECT_EQ(res, 0);
2139 res = portraitSession->Release();
2140 EXPECT_EQ(res, 0);
2141 }
2142
2143 /*
2144 * Feature: Framework
2145 * Function: Test portrait session set portrait effect
2146 * SubFunction: NA
2147 * FunctionPoints: NA
2148 * EnvConditions: NA
2149 * CaseDescription: Test can set portrait effect into portrait session
2150 */
2151 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_004, TestSize.Level0)
2152 {
2153 if (!IsSceneModeSupported(SceneMode::PORTRAIT)) {
2154 return;
2155 }
2156
2157 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PORTRAIT);
2158 ASSERT_NE(outputCapability, nullptr);
2159 auto previewProfiles = outputCapability->GetPreviewProfiles();
2160 ASSERT_FALSE(previewProfiles.empty());
2161 auto photoProfiles = outputCapability->GetPhotoProfiles();
2162 ASSERT_FALSE(photoProfiles.empty());
2163
2164 auto captureSession = manager_->CreateCaptureSession(SceneMode::PORTRAIT);
2165 auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2166 ASSERT_NE(portraitSession, nullptr);
2167 int32_t res = portraitSession->BeginConfig();
2168 EXPECT_EQ(res, 0);
2169
2170 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2171 ASSERT_NE(input, nullptr);
2172 input->Open();
2173 res = portraitSession->AddInput(input);
2174 EXPECT_EQ(res, 0);
2175 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2176 ASSERT_NE(previewOutput, nullptr);
2177 EXPECT_TRUE(portraitSession->CanAddOutput(previewOutput));
2178 res = portraitSession->AddOutput(previewOutput);
2179 EXPECT_EQ(res, 0);
2180 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
2181 ASSERT_NE(photoOutput, nullptr);
2182 EXPECT_TRUE(portraitSession->CanAddOutput(photoOutput));
2183 res = portraitSession->AddOutput(photoOutput);
2184 EXPECT_EQ(res, 0);
2185
2186 res = portraitSession->CommitConfig();
2187 EXPECT_EQ(res, 0);
2188 res = portraitSession->Start();
2189 EXPECT_EQ(res, 0);
2190 sleep(WAIT_TIME_AFTER_START);
2191
2192 std::vector<PortraitEffect> effects = portraitSession->GetSupportedPortraitEffects();
2193 if (!effects.empty()) {
2194 portraitSession->LockForControl();
2195 portraitSession->SetPortraitEffect(effects[0]);
2196 portraitSession->UnlockForControl();
2197 EXPECT_EQ(portraitSession->GetPortraitEffect(), effects[0]);
2198 }
2199
2200 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
2201 EXPECT_EQ(res, 0);
2202 sleep(WAIT_TIME_AFTER_CAPTURE);
2203 res = portraitSession->Stop();
2204 EXPECT_EQ(res, 0);
2205 res = portraitSession->Release();
2206 EXPECT_EQ(res, 0);
2207 }
2208
2209 /*
2210 * Feature: Framework
2211 * Function: Test portrait session get portrait filter
2212 * SubFunction: NA
2213 * FunctionPoints: NA
2214 * EnvConditions: NA
2215 * CaseDescription: Test can get portrait filter from portrait session
2216 */
2217 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_005, TestSize.Level0)
2218 {
2219 if (!IsSceneModeSupported(SceneMode::PORTRAIT)) {
2220 return;
2221 }
2222
2223 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PORTRAIT);
2224 ASSERT_NE(outputCapability, nullptr);
2225 auto previewProfiles = outputCapability->GetPreviewProfiles();
2226 ASSERT_FALSE(previewProfiles.empty());
2227 auto photoProfiles = outputCapability->GetPhotoProfiles();
2228 ASSERT_FALSE(photoProfiles.empty());
2229
2230 auto captureSession = manager_->CreateCaptureSession(SceneMode::PORTRAIT);
2231 auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2232 ASSERT_NE(portraitSession, nullptr);
2233 int32_t res = portraitSession->BeginConfig();
2234 EXPECT_EQ(res, 0);
2235
2236 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2237 ASSERT_NE(input, nullptr);
2238 input->Open();
2239 res = portraitSession->AddInput(input);
2240 EXPECT_EQ(res, 0);
2241 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2242 ASSERT_NE(previewOutput, nullptr);
2243 EXPECT_TRUE(portraitSession->CanAddOutput(previewOutput));
2244 res = portraitSession->AddOutput(previewOutput);
2245 EXPECT_EQ(res, 0);
2246 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
2247 ASSERT_NE(photoOutput, nullptr);
2248 EXPECT_TRUE(portraitSession->CanAddOutput(photoOutput));
2249 res = portraitSession->AddOutput(photoOutput);
2250 EXPECT_EQ(res, 0);
2251
2252 res = portraitSession->CommitConfig();
2253 EXPECT_EQ(res, 0);
2254 res = portraitSession->Start();
2255 EXPECT_EQ(res, 0);
2256 sleep(WAIT_TIME_AFTER_START);
2257
2258 std::vector<FilterType> filterLists = portraitSession->GetSupportedFilters();
2259 if (!filterLists.empty()) {
2260 EXPECT_EQ(portraitSession->GetFilter(), filterLists[0]);
2261 }
2262
2263 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
2264 EXPECT_EQ(res, 0);
2265 sleep(WAIT_TIME_AFTER_CAPTURE);
2266 res = portraitSession->Stop();
2267 EXPECT_EQ(res, 0);
2268 res = portraitSession->Release();
2269 EXPECT_EQ(res, 0);
2270 }
2271
2272 /*
2273 * Feature: Framework
2274 * Function: Test portrait session set portrait filter
2275 * SubFunction: NA
2276 * FunctionPoints: NA
2277 * EnvConditions: NA
2278 * CaseDescription: Test can set portrait filter into portrait session
2279 */
2280 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_006, TestSize.Level0)
2281 {
2282 if (!IsSceneModeSupported(SceneMode::PORTRAIT)) {
2283 return;
2284 }
2285
2286 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PORTRAIT);
2287 ASSERT_NE(outputCapability, nullptr);
2288 auto previewProfiles = outputCapability->GetPreviewProfiles();
2289 ASSERT_FALSE(previewProfiles.empty());
2290 auto photoProfiles = outputCapability->GetPhotoProfiles();
2291 ASSERT_FALSE(photoProfiles.empty());
2292
2293 auto captureSession = manager_->CreateCaptureSession(SceneMode::PORTRAIT);
2294 auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2295 ASSERT_NE(portraitSession, nullptr);
2296 int32_t res = portraitSession->BeginConfig();
2297 EXPECT_EQ(res, 0);
2298
2299 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2300 ASSERT_NE(input, nullptr);
2301 input->Open();
2302 res = portraitSession->AddInput(input);
2303 EXPECT_EQ(res, 0);
2304 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2305 ASSERT_NE(previewOutput, nullptr);
2306 EXPECT_TRUE(portraitSession->CanAddOutput(previewOutput));
2307 res = portraitSession->AddOutput(previewOutput);
2308 EXPECT_EQ(res, 0);
2309 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
2310 ASSERT_NE(photoOutput, nullptr);
2311 EXPECT_TRUE(portraitSession->CanAddOutput(photoOutput));
2312 res = portraitSession->AddOutput(photoOutput);
2313 EXPECT_EQ(res, 0);
2314
2315 res = portraitSession->CommitConfig();
2316 EXPECT_EQ(res, 0);
2317 res = portraitSession->Start();
2318 EXPECT_EQ(res, 0);
2319 sleep(WAIT_TIME_AFTER_START);
2320
2321 std::vector<FilterType> filterLists = portraitSession->GetSupportedFilters();
2322 if (!filterLists.empty()) {
2323 portraitSession->LockForControl();
2324 portraitSession->SetFilter(filterLists[0]);
2325 portraitSession->UnlockForControl();
2326 EXPECT_EQ(portraitSession->GetFilter(), filterLists[0]);
2327 }
2328
2329 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
2330 EXPECT_EQ(res, 0);
2331 sleep(WAIT_TIME_AFTER_CAPTURE);
2332 res = portraitSession->Stop();
2333 EXPECT_EQ(res, 0);
2334 res = portraitSession->Release();
2335 EXPECT_EQ(res, 0);
2336 }
2337
2338 /*
2339 * Feature: Framework
2340 * Function: Test portrait session photo ability function
2341 * SubFunction: NA
2342 * FunctionPoints: NA
2343 * EnvConditions: NA
2344 * CaseDescription: Test portrait session photo ability function
2345 */
2346 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_007, TestSize.Level0)
2347 {
2348 SceneMode portraitMode = SceneMode::PORTRAIT;
2349 if (!IsSceneModeSupported(portraitMode)) {
2350 return;
2351 }
2352
2353 sptr<CameraManager> cameraMgr = CameraManager::GetInstance();
2354 ASSERT_NE(cameraMgr, nullptr);
2355
2356 sptr<CameraOutputCapability> capability = cameraMgr->GetSupportedOutputCapability(cameras_[0], portraitMode);
2357 ASSERT_NE(capability, nullptr);
2358
2359 sptr<CaptureSession> captureSession = cameraMgr->CreateCaptureSession(portraitMode);
2360 ASSERT_NE(captureSession, nullptr);
2361
2362 sptr<PortraitSession> portraitSession = static_cast<PortraitSession *>(captureSession.GetRefPtr());
2363 ASSERT_NE(portraitSession, nullptr);
2364
2365 std::vector<sptr<CameraOutputCapability>> cocList = portraitSession->GetCameraOutputCapabilities(cameras_[0]);
2366 ASSERT_TRUE(cocList.size() != 0);
2367 auto previewProfiles = cocList[0]->GetPreviewProfiles();
2368 auto photoProfiles = cocList[0]->GetPhotoProfiles();
2369 auto videoProfiles = cocList[0]->GetVideoProfiles();
2370
2371 int32_t intResult = portraitSession->BeginConfig();
2372 EXPECT_EQ(intResult, 0);
2373
2374 intResult = portraitSession->AddInput(input_);
2375 EXPECT_EQ(intResult, 0);
2376
2377 sptr<CaptureOutput> photoOutput = CreatePhotoOutput();
2378 ASSERT_NE(photoOutput, nullptr);
2379 intResult = portraitSession->AddOutput(photoOutput);
2380 EXPECT_EQ(intResult, 0);
2381
2382 sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
2383 ASSERT_NE(previewOutput, nullptr);
2384 intResult = portraitSession->AddOutput(previewOutput);
2385 EXPECT_EQ(intResult, 0);
2386
2387 intResult = portraitSession->CommitConfig();
2388 EXPECT_EQ(intResult, 0);
2389
2390 auto portraitFunctions = portraitSession->GetSessionFunctions(previewProfiles, photoProfiles, videoProfiles, true);
2391 ASSERT_TRUE(portraitFunctions.size() != 0);
2392 auto portraitFunction = portraitFunctions[0];
2393 portraitFunction->GetSupportedPortraitEffects();
2394 portraitFunction->GetSupportedVirtualApertures();
2395 portraitFunction->GetSupportedPhysicalApertures();
2396 std::vector<sptr<CameraAbility>> portraitConflictFunctionsList = portraitSession->GetSessionConflictFunctions();
2397 }
2398
2399 /*
2400 * Feature: Framework
2401 * Function: Test portrait session !IsSessionCommited() && !IsSessionConfiged()
2402 * SubFunction: NA
2403 * FunctionPoints: NA
2404 * EnvConditions: NA
2405 * CaseDescription: Test portrait session !IsSessionCommited() && !IsSessionConfiged()
2406 */
2407 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_008, TestSize.Level0)
2408 {
2409 ColorSpace colorSpace = COLOR_SPACE_UNKNOWN;
2410 int32_t intResult = session_->BeginConfig();
2411 EXPECT_EQ(intResult, 0);
2412 intResult = session_->AddInput(input_);
2413 EXPECT_EQ(intResult, 0);
2414 sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
2415 ASSERT_NE(previewOutput, nullptr);
2416 intResult = session_->AddOutput(previewOutput);
2417 EXPECT_EQ(intResult, 0);
2418 session_->SetMode(SceneMode::PORTRAIT);
2419 EXPECT_EQ(session_->VerifyAbility(0), CAMERA_INVALID_ARG);
2420 EXPECT_EQ(session_->GetActiveColorSpace(colorSpace), CAMERA_OK);
2421 session_->SetColorEffect(COLOR_EFFECT_NORMAL);
2422 intResult = session_->CommitConfig();
2423 EXPECT_EQ(intResult, 0);
2424 if (session_->IsMacroSupported()) {
2425 session_->LockForControl();
2426 intResult = session_->EnableMacro(false);
2427 session_->UnlockForControl();
2428 EXPECT_EQ(intResult, 0);
2429 }
2430 EXPECT_EQ(session_->GetActiveColorSpace(colorSpace), CAMERA_OK);
2431 session_->SetColorEffect(COLOR_EFFECT_NORMAL);
2432 session_->innerInputDevice_ = nullptr;
2433 EXPECT_EQ(session_->VerifyAbility(0), CAMERA_INVALID_ARG);
2434 EXPECT_EQ(session_->Release(), 0);
2435 }
2436
2437 /*
2438 * Feature: Framework
2439 * Function: Test portrait session abnormal branches
2440 * SubFunction: NA
2441 * FunctionPoints: NA
2442 * EnvConditions: NA
2443 * CaseDescription: Test portrait session abnormal branches
2444 */
2445 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_009, TestSize.Level0)
2446 {
2447 SceneMode portraitMode = SceneMode::PORTRAIT;
2448 sptr<CaptureSession> captureSession = manager_->CreateCaptureSession(portraitMode);
2449 auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2450 ASSERT_NE(portraitSession, nullptr);
2451 EXPECT_EQ(portraitSession->GetSupportedPortraitEffects().empty(), true);
2452 EXPECT_EQ(portraitSession->GetPortraitEffect(), OFF_EFFECT);
2453 portraitSession->SetPortraitEffect(OFF_EFFECT);
2454 int32_t intResult = portraitSession->BeginConfig();
2455 EXPECT_EQ(intResult, 0);
2456 EXPECT_EQ(portraitSession->GetSupportedPortraitEffects().empty(), true);
2457 EXPECT_EQ(portraitSession->GetPortraitEffect(), OFF_EFFECT);
2458 portraitSession->SetPortraitEffect(OFF_EFFECT);
2459 }
2460
2461 /*
2462 * Feature: Framework
2463 * Function: Test portrait session nullptr
2464 * SubFunction: NA
2465 * FunctionPoints: NA
2466 * EnvConditions: NA
2467 * CaseDescription: Test portrait session nullptr
2468 */
2469 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_010, TestSize.Level0)
2470 {
2471 SceneMode portraitMode = SceneMode::PORTRAIT;
2472 sptr<CaptureSession> captureSession = manager_->CreateCaptureSession(portraitMode);
2473 auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2474 ASSERT_NE(portraitSession, nullptr);
2475 EXPECT_EQ(portraitSession->GetSupportedPortraitEffects().empty(), true);
2476 EXPECT_EQ(portraitSession->GetPortraitEffect(), OFF_EFFECT);
2477 portraitSession->SetPortraitEffect(OFF_EFFECT);
2478 }
2479
2480 /*
2481 * Feature: Framework
2482 * Function: Test quick shot photo session with photo output
2483 * SubFunction: NA
2484 * FunctionPoints: NA
2485 * EnvConditions: NA
2486 * CaseDescription: Test can add photo output into quick shot photo session
2487 */
2488 HWTEST_F(CameraSessionModuleTest, quick_shot_photo_session_moduletest_001, TestSize.Level0)
2489 {
2490 if (!IsSceneModeSupported(SceneMode::QUICK_SHOT_PHOTO)) {
2491 return;
2492 }
2493
2494 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::QUICK_SHOT_PHOTO);
2495 ASSERT_NE(outputCapability, nullptr);
2496 auto previewProfiles = outputCapability->GetPreviewProfiles();
2497 ASSERT_FALSE(previewProfiles.empty());
2498 auto photoProfiles = outputCapability->GetPhotoProfiles();
2499 ASSERT_FALSE(photoProfiles.empty());
2500
2501 auto captureSession = manager_->CreateCaptureSession(SceneMode::QUICK_SHOT_PHOTO);
2502 auto quickShotPhotoSession = static_cast<QuickShotPhotoSession*>(captureSession.GetRefPtr());
2503 ASSERT_NE(quickShotPhotoSession, nullptr);
2504 int32_t res = quickShotPhotoSession->BeginConfig();
2505 EXPECT_EQ(res, 0);
2506
2507 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2508 ASSERT_NE(input, nullptr);
2509 input->Open();
2510 res = quickShotPhotoSession->AddInput(input);
2511 EXPECT_EQ(res, 0);
2512 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2513 ASSERT_NE(previewOutput, nullptr);
2514 EXPECT_TRUE(quickShotPhotoSession->CanAddOutput(previewOutput));
2515 res = quickShotPhotoSession->AddOutput(previewOutput);
2516 EXPECT_EQ(res, 0);
2517 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
2518 ASSERT_NE(photoOutput, nullptr);
2519 EXPECT_TRUE(quickShotPhotoSession->CanAddOutput(photoOutput));
2520 res = quickShotPhotoSession->AddOutput(photoOutput);
2521 EXPECT_EQ(res, 0);
2522
2523 res = quickShotPhotoSession->CommitConfig();
2524 EXPECT_EQ(res, 0);
2525 res = quickShotPhotoSession->Start();
2526 EXPECT_EQ(res, 0);
2527 sleep(WAIT_TIME_AFTER_START);
2528 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
2529 EXPECT_EQ(res, 0);
2530 sleep(WAIT_TIME_AFTER_CAPTURE);
2531 res = quickShotPhotoSession->Stop();
2532 EXPECT_EQ(res, 0);
2533 res = quickShotPhotoSession->Release();
2534 EXPECT_EQ(res, 0);
2535 }
2536
2537 /*
2538 * Feature: Framework
2539 * Function: Test quick shot photo session with video output
2540 * SubFunction: NA
2541 * FunctionPoints: NA
2542 * EnvConditions: NA
2543 * CaseDescription: Test can not add video output into quick shot photo session
2544 */
2545 HWTEST_F(CameraSessionModuleTest, quick_shot_photo_session_moduletest_002, TestSize.Level0)
2546 {
2547 if (!IsSceneModeSupported(SceneMode::QUICK_SHOT_PHOTO)) {
2548 return;
2549 }
2550
2551 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::QUICK_SHOT_PHOTO);
2552 ASSERT_NE(outputCapability, nullptr);
2553 auto previewProfiles = outputCapability->GetPreviewProfiles();
2554 ASSERT_FALSE(previewProfiles.empty());
2555 auto videoProfiles = outputCapability->GetVideoProfiles();
2556 ASSERT_TRUE(videoProfiles.empty());
2557 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
2558 ASSERT_NE(outputCapabilityBase, nullptr);
2559 auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
2560 ASSERT_FALSE(videoProfilesBase.empty());
2561
2562 auto captureSession = manager_->CreateCaptureSession(SceneMode::QUICK_SHOT_PHOTO);
2563 auto quickShotPhotoSession = static_cast<QuickShotPhotoSession*>(captureSession.GetRefPtr());
2564 ASSERT_NE(quickShotPhotoSession, nullptr);
2565 int32_t res = quickShotPhotoSession->BeginConfig();
2566 EXPECT_EQ(res, 0);
2567
2568 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2569 ASSERT_NE(input, nullptr);
2570 input->Open();
2571 res = quickShotPhotoSession->AddInput(input);
2572 EXPECT_EQ(res, 0);
2573 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2574 ASSERT_NE(previewOutput, nullptr);
2575 EXPECT_TRUE(quickShotPhotoSession->CanAddOutput(previewOutput));
2576 res = quickShotPhotoSession->AddOutput(previewOutput);
2577 EXPECT_EQ(res, 0);
2578 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
2579 ASSERT_NE(videoOutput, nullptr);
2580 EXPECT_FALSE(quickShotPhotoSession->CanAddOutput(videoOutput));
2581 }
2582
2583 /*
2584 * Feature: Framework
2585 * Function: Test scan session with photo output
2586 * SubFunction: NA
2587 * FunctionPoints: NA
2588 * EnvConditions: NA
2589 * CaseDescription: Test can not add photo output into scan session
2590 */
2591 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_001, TestSize.Level0)
2592 {
2593 if (!IsSceneModeSupported(SceneMode::SCAN)) {
2594 return;
2595 }
2596
2597 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SCAN);
2598 ASSERT_NE(outputCapability, nullptr);
2599 auto previewProfiles = outputCapability->GetPreviewProfiles();
2600 ASSERT_FALSE(previewProfiles.empty());
2601 auto photoProfiles = outputCapability->GetPhotoProfiles();
2602 ASSERT_TRUE(photoProfiles.empty());
2603 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
2604 ASSERT_NE(outputCapabilityBase, nullptr);
2605 auto photoProfilesBase = outputCapabilityBase->GetPhotoProfiles();
2606 ASSERT_FALSE(photoProfilesBase.empty());
2607
2608 auto captureSession = manager_->CreateCaptureSession(SceneMode::SCAN);
2609 auto scanSession = static_cast<ScanSession*>(captureSession.GetRefPtr());
2610 ASSERT_NE(scanSession, nullptr);
2611 int32_t res = scanSession->BeginConfig();
2612 EXPECT_EQ(res, 0);
2613
2614 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2615 ASSERT_NE(input, nullptr);
2616 input->Open();
2617 res = scanSession->AddInput(input);
2618 EXPECT_EQ(res, 0);
2619 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2620 ASSERT_NE(previewOutput, nullptr);
2621 EXPECT_TRUE(scanSession->CanAddOutput(previewOutput));
2622 res = scanSession->AddOutput(previewOutput);
2623 EXPECT_EQ(res, 0);
2624 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfilesBase[0]);
2625 ASSERT_NE(photoOutput, nullptr);
2626 EXPECT_FALSE(scanSession->CanAddOutput(photoOutput));
2627 }
2628
2629 /*
2630 * Feature: Framework
2631 * Function: Test scan session with video output
2632 * SubFunction: NA
2633 * FunctionPoints: NA
2634 * EnvConditions: NA
2635 * CaseDescription: Test can not add video output into scan session
2636 */
2637 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_002, TestSize.Level0)
2638 {
2639 if (!IsSceneModeSupported(SceneMode::SCAN)) {
2640 return;
2641 }
2642
2643 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SCAN);
2644 ASSERT_NE(outputCapability, nullptr);
2645 auto previewProfiles = outputCapability->GetPreviewProfiles();
2646 ASSERT_FALSE(previewProfiles.empty());
2647 auto videoProfiles = outputCapability->GetVideoProfiles();
2648 ASSERT_TRUE(videoProfiles.empty());
2649 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
2650 ASSERT_NE(outputCapabilityBase, nullptr);
2651 auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
2652 ASSERT_FALSE(videoProfilesBase.empty());
2653
2654 auto captureSession = manager_->CreateCaptureSession(SceneMode::SCAN);
2655 auto scanSession = static_cast<ScanSession*>(captureSession.GetRefPtr());
2656 ASSERT_NE(scanSession, nullptr);
2657 int32_t res = scanSession->BeginConfig();
2658 EXPECT_EQ(res, 0);
2659
2660 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2661 ASSERT_NE(input, nullptr);
2662 input->Open();
2663 res = scanSession->AddInput(input);
2664 EXPECT_EQ(res, 0);
2665 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2666 ASSERT_NE(previewOutput, nullptr);
2667 EXPECT_TRUE(scanSession->CanAddOutput(previewOutput));
2668 res = scanSession->AddOutput(previewOutput);
2669 EXPECT_EQ(res, 0);
2670 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
2671 ASSERT_NE(videoOutput, nullptr);
2672 EXPECT_FALSE(scanSession->CanAddOutput(videoOutput));
2673 }
2674
2675 /*
2676 * Feature: Framework
2677 * Function: Test scan session with preview output
2678 * SubFunction: NA
2679 * FunctionPoints: NA
2680 * EnvConditions: NA
2681 * CaseDescription: Test can add preview output into scan session
2682 */
2683 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_003, TestSize.Level0)
2684 {
2685 if (!IsSceneModeSupported(SceneMode::SCAN)) {
2686 return;
2687 }
2688
2689 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SCAN);
2690 ASSERT_NE(outputCapability, nullptr);
2691 auto previewProfiles = outputCapability->GetPreviewProfiles();
2692 ASSERT_FALSE(previewProfiles.empty());
2693
2694 auto captureSession = manager_->CreateCaptureSession(SceneMode::SCAN);
2695 auto scanSession = static_cast<ScanSession*>(captureSession.GetRefPtr());
2696 ASSERT_NE(scanSession, nullptr);
2697 int32_t res = scanSession->BeginConfig();
2698 EXPECT_EQ(res, 0);
2699
2700 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2701 ASSERT_NE(input, nullptr);
2702 input->Open();
2703 res = scanSession->AddInput(input);
2704 EXPECT_EQ(res, 0);
2705 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2706 ASSERT_NE(previewOutput, nullptr);
2707 EXPECT_TRUE(scanSession->CanAddOutput(previewOutput));
2708 res = scanSession->AddOutput(previewOutput);
2709 EXPECT_EQ(res, 0);
2710
2711 res = scanSession->CommitConfig();
2712 EXPECT_EQ(res, 0);
2713 res = scanSession->Start();
2714 EXPECT_EQ(res, 0);
2715 sleep(WAIT_TIME_AFTER_START);
2716 res = scanSession->Stop();
2717 EXPECT_EQ(res, 0);
2718 res = scanSession->Release();
2719 EXPECT_EQ(res, 0);
2720 }
2721
2722 /*
2723 * Feature: Framework
2724 * Function: Test scan session set focus mode
2725 * SubFunction: NA
2726 * FunctionPoints: NA
2727 * EnvConditions: NA
2728 * CaseDescription: Test scan session set focus mode
2729 */
2730 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_004, TestSize.Level0)
2731 {
2732 if (!IsSupportNow()) {
2733 return;
2734 }
2735 sptr<CaptureOutput> previewOutput_1;
2736 sptr<CaptureOutput> previewOutput_2;
2737 ConfigScanSession(previewOutput_1, previewOutput_2);
2738
2739 scanSession_->LockForControl();
2740 int32_t setFocusMode = scanSession_->SetFocusMode(FOCUS_MODE_AUTO);
2741 EXPECT_EQ(setFocusMode, 0);
2742 scanSession_->UnlockForControl();
2743
2744 FocusMode focusMode = scanSession_->GetFocusMode();
2745 EXPECT_NE(focusMode, FOCUS_MODE_MANUAL);
2746 EXPECT_NE(focusMode, FOCUS_MODE_CONTINUOUS_AUTO);
2747 EXPECT_EQ(focusMode, FOCUS_MODE_AUTO);
2748 EXPECT_NE(focusMode, FOCUS_MODE_LOCKED);
2749
2750 int32_t getFoucusMode = scanSession_->GetFocusMode(focusMode);
2751 EXPECT_EQ(getFoucusMode, 0);
2752 EXPECT_EQ(focusMode, FOCUS_MODE_AUTO);
2753
2754 bool isSupported = scanSession_->IsFocusModeSupported(focusMode);
2755 EXPECT_EQ(isSupported, true);
2756
2757 int32_t isFocusSupported = scanSession_->IsFocusModeSupported(focusMode, isSupported);
2758 EXPECT_EQ(isFocusSupported, 0);
2759 EXPECT_EQ(isSupported, true);
2760
2761 std::vector<FocusMode> supportedFocusModes = scanSession_->GetSupportedFocusModes();
2762 EXPECT_EQ(supportedFocusModes.empty(), false);
2763
2764 int32_t getSupportedFocusModes = scanSession_->GetSupportedFocusModes(supportedFocusModes);
2765 EXPECT_EQ(supportedFocusModes.empty(), false);
2766 EXPECT_EQ(getSupportedFocusModes, 0);
2767
2768 ((sptr<PreviewOutput> &) previewOutput_1)->Release();
2769 ((sptr<PreviewOutput> &) previewOutput_2)->Release();
2770 }
2771
2772 /*
2773 * Feature: Framework
2774 * Function: Test scan session set focus point
2775 * SubFunction: NA
2776 * FunctionPoints: NA
2777 * EnvConditions: NA
2778 * CaseDescription: Test scan session set focus point
2779 */
2780 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_005, TestSize.Level0)
2781 {
2782 if (!IsSupportNow()) {
2783 return;
2784 }
2785 sptr<CaptureOutput> previewOutput_1;
2786 sptr<CaptureOutput> previewOutput_2;
2787 ConfigScanSession(previewOutput_1, previewOutput_2);
2788
2789 Point point = { 1, 1 };
2790 scanSession_->LockForControl();
2791 int32_t setFocusMode = scanSession_->SetFocusPoint(point);
2792 EXPECT_EQ(setFocusMode, 0);
2793 scanSession_->UnlockForControl();
2794
2795 Point focusPointGet = scanSession_->GetFocusPoint();
2796 EXPECT_EQ(focusPointGet.x, 1);
2797 EXPECT_EQ(focusPointGet.y, 1);
2798
2799 float focalLength;
2800 int32_t focalLengthGet = scanSession_->GetFocalLength(focalLength);
2801 EXPECT_EQ(focalLengthGet, 0);
2802
2803 ((sptr<PreviewOutput> &) previewOutput_1)->Release();
2804 ((sptr<PreviewOutput> &) previewOutput_2)->Release();
2805 }
2806
2807 /*
2808 * Feature: Framework
2809 * Function: Test scan session set zoom ratio
2810 * SubFunction: NA
2811 * FunctionPoints: NA
2812 * EnvConditions: NA
2813 * CaseDescription: Test scan session set zoom ratio
2814 */
2815 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_006, TestSize.Level0)
2816 {
2817 if (!IsSupportNow()) {
2818 return;
2819 }
2820 sptr<CaptureOutput> previewOutput_1;
2821 sptr<CaptureOutput> previewOutput_2;
2822 ConfigScanSession(previewOutput_1, previewOutput_2);
2823
2824 scanSession_->LockForControl();
2825 int32_t zoomRatioSet = scanSession_->SetZoomRatio(ZOOM_RATIO);
2826 EXPECT_EQ(zoomRatioSet, 0);
2827 scanSession_->UnlockForControl();
2828
2829 std::vector<float> zoomRatioRange = scanSession_->GetZoomRatioRange();
2830 EXPECT_EQ(zoomRatioRange.empty(), false);
2831
2832 int32_t zoomRatioRangeGet = scanSession_->GetZoomRatioRange(zoomRatioRange);
2833 EXPECT_EQ(zoomRatioRange.empty(), false);
2834 EXPECT_EQ(zoomRatioRangeGet, 0);
2835
2836 float zoomRatio = scanSession_->GetZoomRatio();
2837 int32_t zoomRatioGet = scanSession_->GetZoomRatio(zoomRatio);
2838 EXPECT_EQ(zoomRatioGet, 0);
2839
2840 ((sptr<PreviewOutput> &) previewOutput_1)->Release();
2841 ((sptr<PreviewOutput> &) previewOutput_2)->Release();
2842 }
2843
2844 /*
2845 * Feature: Framework
2846 * Function: Test scan session report brightness status
2847 * SubFunction: NA
2848 * FunctionPoints: NA
2849 * EnvConditions: NA
2850 * CaseDescription: Test scan session report brightness status
2851 */
2852 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_007, TestSize.Level0)
2853 {
2854 if (!IsSupportNow()) {
2855 return;
2856 }
2857 sptr<CaptureOutput> previewOutput_1;
2858 sptr<CaptureOutput> previewOutput_2;
2859 ConfigScanSession(previewOutput_1, previewOutput_2);
2860
2861 auto scanSession = static_cast<ScanSession*>(scanSession_.GetRefPtr());
2862 bool isSupported = scanSession->IsBrightnessStatusSupported();
2863 EXPECT_EQ(isSupported, true);
2864
2865 std::shared_ptr<AppCallback> callback = std::make_shared<AppCallback>();
2866 scanSession->RegisterBrightnessStatusCallback(callback);
2867
2868 int32_t intResult = scanSession->Start();
2869 EXPECT_EQ(intResult, 0);
2870
2871 sleep(WAIT_TIME_AFTER_START);
2872
2873 EXPECT_EQ(g_brightnessStatusChanged, true);
2874
2875 scanSession->UnRegisterBrightnessStatusCallback();
2876 intResult = scanSession->Stop();
2877 EXPECT_EQ(intResult, 0);
2878
2879 ((sptr<PreviewOutput> &) previewOutput_1)->Release();
2880 ((sptr<PreviewOutput> &) previewOutput_2)->Release();
2881 }
2882
2883 /*
2884 * Feature: Framework
2885 * Function: Test scan session with CreateCaptureSession
2886 * SubFunction: NA
2887 * FunctionPoints: NA
2888 * EnvConditions: NA
2889 * CaseDescription: Test scan session with CreateCaptureSession
2890 */
2891 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_008, TestSize.Level0)
2892 {
2893 SceneMode mode = SceneMode::SCAN;
2894 sptr<CameraManager> modeManagerObj = CameraManager::GetInstance();
2895 ASSERT_NE(modeManagerObj, nullptr);
2896
2897 sptr<CaptureSession> captureSession = modeManagerObj->CreateCaptureSession(mode);
2898 ASSERT_NE(captureSession, nullptr);
2899 }
2900
2901 /*
2902 * Feature: Framework
2903 * Function: Test secure camera session with photo output
2904 * SubFunction: NA
2905 * FunctionPoints: NA
2906 * EnvConditions: NA
2907 * CaseDescription: Test can not add photo output into secure camera session
2908 */
2909 HWTEST_F(CameraSessionModuleTest, secure_camera_session_moduletest_001, TestSize.Level0)
2910 {
2911 if (!IsSceneModeSupported(SceneMode::SECURE)) {
2912 return;
2913 }
2914
2915 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SECURE);
2916 ASSERT_NE(outputCapability, nullptr);
2917 auto previewProfiles = outputCapability->GetPreviewProfiles();
2918 ASSERT_FALSE(previewProfiles.empty());
2919 auto photoProfiles = outputCapability->GetPhotoProfiles();
2920 ASSERT_TRUE(photoProfiles.empty());
2921 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
2922 ASSERT_NE(outputCapabilityBase, nullptr);
2923 auto photoProfilesBase = outputCapabilityBase->GetPhotoProfiles();
2924 ASSERT_FALSE(photoProfilesBase.empty());
2925
2926 auto captureSession = manager_->CreateCaptureSession(SceneMode::SECURE);
2927 auto secureCameraSession = static_cast<SecureCameraSession*>(captureSession.GetRefPtr());
2928 ASSERT_NE(secureCameraSession, nullptr);
2929 int32_t res = secureCameraSession->BeginConfig();
2930 EXPECT_EQ(res, 0);
2931
2932 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2933 ASSERT_NE(input, nullptr);
2934 input->Open();
2935 res = secureCameraSession->AddInput(input);
2936 EXPECT_EQ(res, 0);
2937 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2938 ASSERT_NE(previewOutput, nullptr);
2939 EXPECT_TRUE(secureCameraSession->CanAddOutput(previewOutput));
2940 res = secureCameraSession->AddOutput(previewOutput);
2941 EXPECT_EQ(res, 0);
2942 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfilesBase[0]);
2943 ASSERT_NE(photoOutput, nullptr);
2944 EXPECT_FALSE(secureCameraSession->CanAddOutput(photoOutput));
2945 }
2946
2947 /*
2948 * Feature: Framework
2949 * Function: Test secure camera session with video output
2950 * SubFunction: NA
2951 * FunctionPoints: NA
2952 * EnvConditions: NA
2953 * CaseDescription: Test can not add video output into secure camera session
2954 */
2955 HWTEST_F(CameraSessionModuleTest, secure_camera_session_moduletest_002, TestSize.Level0)
2956 {
2957 if (!IsSceneModeSupported(SceneMode::SECURE)) {
2958 return;
2959 }
2960
2961 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SECURE);
2962 ASSERT_NE(outputCapability, nullptr);
2963 auto previewProfiles = outputCapability->GetPreviewProfiles();
2964 ASSERT_FALSE(previewProfiles.empty());
2965 auto videoProfiles = outputCapability->GetVideoProfiles();
2966 ASSERT_TRUE(videoProfiles.empty());
2967 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
2968 ASSERT_NE(outputCapabilityBase, nullptr);
2969 auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
2970 ASSERT_FALSE(videoProfilesBase.empty());
2971
2972 auto captureSession = manager_->CreateCaptureSession(SceneMode::SECURE);
2973 auto secureCameraSession = static_cast<SecureCameraSession*>(captureSession.GetRefPtr());
2974 ASSERT_NE(secureCameraSession, nullptr);
2975 int32_t res = secureCameraSession->BeginConfig();
2976 EXPECT_EQ(res, 0);
2977
2978 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2979 ASSERT_NE(input, nullptr);
2980 input->Open();
2981 res = secureCameraSession->AddInput(input);
2982 EXPECT_EQ(res, 0);
2983 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2984 ASSERT_NE(previewOutput, nullptr);
2985 EXPECT_TRUE(secureCameraSession->CanAddOutput(previewOutput));
2986 res = secureCameraSession->AddOutput(previewOutput);
2987 EXPECT_EQ(res, 0);
2988 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
2989 ASSERT_NE(videoOutput, nullptr);
2990 EXPECT_FALSE(secureCameraSession->CanAddOutput(videoOutput));
2991 }
2992
2993 /*
2994 * Feature: Framework
2995 * Function: Test secure camera session with preview output
2996 * SubFunction: NA
2997 * FunctionPoints: NA
2998 * EnvConditions: NA
2999 * CaseDescription: Test can add preview output into secure camera session
3000 */
3001 HWTEST_F(CameraSessionModuleTest, secure_camera_session_moduletest_003, TestSize.Level0)
3002 {
3003 if (!IsSceneModeSupported(SceneMode::SECURE)) {
3004 return;
3005 }
3006
3007 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SECURE);
3008 ASSERT_NE(outputCapability, nullptr);
3009 auto previewProfiles = outputCapability->GetPreviewProfiles();
3010 ASSERT_FALSE(previewProfiles.empty());
3011
3012 auto captureSession = manager_->CreateCaptureSession(SceneMode::SECURE);
3013 auto secureCameraSession = static_cast<SecureCameraSession*>(captureSession.GetRefPtr());
3014 ASSERT_NE(secureCameraSession, nullptr);
3015 int32_t res = secureCameraSession->BeginConfig();
3016 EXPECT_EQ(res, 0);
3017
3018 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3019 ASSERT_NE(input, nullptr);
3020 input->Open();
3021 res = secureCameraSession->AddInput(input);
3022 EXPECT_EQ(res, 0);
3023 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3024 ASSERT_NE(previewOutput, nullptr);
3025 EXPECT_TRUE(secureCameraSession->CanAddOutput(previewOutput));
3026 res = secureCameraSession->AddOutput(previewOutput);
3027 EXPECT_EQ(res, 0);
3028 res = secureCameraSession->AddSecureOutput(previewOutput);
3029 EXPECT_EQ(res, 0);
3030
3031 res = secureCameraSession->CommitConfig();
3032 EXPECT_EQ(res, 0);
3033 res = secureCameraSession->Start();
3034 EXPECT_EQ(res, 0);
3035 sleep(WAIT_TIME_AFTER_START);
3036 res = secureCameraSession->Stop();
3037 EXPECT_EQ(res, 0);
3038 res = secureCameraSession->Release();
3039 EXPECT_EQ(res, 0);
3040 }
3041
3042 /*
3043 * Feature: Framework
3044 * Function: Test slow motion session with photo output
3045 * SubFunction: NA
3046 * FunctionPoints: NA
3047 * EnvConditions: NA
3048 * CaseDescription: Test can not add photo output into slow motion session
3049 */
3050 HWTEST_F(CameraSessionModuleTest, slow_motion_session_moduletest_001, TestSize.Level0)
3051 {
3052 if (!IsSceneModeSupported(SceneMode::SLOW_MOTION)) {
3053 return;
3054 }
3055
3056 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SLOW_MOTION);
3057 ASSERT_NE(outputCapability, nullptr);
3058 auto previewProfiles = outputCapability->GetPreviewProfiles();
3059 ASSERT_FALSE(previewProfiles.empty());
3060 auto photoProfiles = outputCapability->GetPhotoProfiles();
3061 ASSERT_TRUE(photoProfiles.empty());
3062 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
3063 ASSERT_NE(outputCapabilityBase, nullptr);
3064 auto photoProfilesBase = outputCapabilityBase->GetPhotoProfiles();
3065 ASSERT_FALSE(photoProfilesBase.empty());
3066
3067 auto captureSession = manager_->CreateCaptureSession(SceneMode::SLOW_MOTION);
3068 auto slowMotionSession = static_cast<SlowMotionSession*>(captureSession.GetRefPtr());
3069 ASSERT_NE(slowMotionSession, nullptr);
3070 int32_t res = slowMotionSession->BeginConfig();
3071 EXPECT_EQ(res, 0);
3072
3073 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3074 ASSERT_NE(input, nullptr);
3075 input->Open();
3076 res = slowMotionSession->AddInput(input);
3077 EXPECT_EQ(res, 0);
3078 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3079 ASSERT_NE(previewOutput, nullptr);
3080 EXPECT_TRUE(slowMotionSession->CanAddOutput(previewOutput));
3081 res = slowMotionSession->AddOutput(previewOutput);
3082 EXPECT_EQ(res, 0);
3083 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfilesBase[0]);
3084 ASSERT_NE(photoOutput, nullptr);
3085 EXPECT_FALSE(slowMotionSession->CanAddOutput(photoOutput));
3086 }
3087
3088 /*
3089 * Feature: Framework
3090 * Function: Test slow motion session with video output
3091 * SubFunction: NA
3092 * FunctionPoints: NA
3093 * EnvConditions: NA
3094 * CaseDescription: Test can add video output into slow motion session
3095 */
3096 HWTEST_F(CameraSessionModuleTest, slow_motion_session_moduletest_002, TestSize.Level0)
3097 {
3098 if (!IsSceneModeSupported(SceneMode::SLOW_MOTION)) {
3099 return;
3100 }
3101
3102 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SLOW_MOTION);
3103 ASSERT_NE(outputCapability, nullptr);
3104 auto previewProfiles = outputCapability->GetPreviewProfiles();
3105 ASSERT_FALSE(previewProfiles.empty());
3106 auto videoProfiles = outputCapability->GetVideoProfiles();
3107 ASSERT_FALSE(videoProfiles.empty());
3108
3109 auto captureSession = manager_->CreateCaptureSession(SceneMode::SLOW_MOTION);
3110 auto slowMotionSession = static_cast<SlowMotionSession*>(captureSession.GetRefPtr());
3111 ASSERT_NE(slowMotionSession, nullptr);
3112 int32_t res = slowMotionSession->BeginConfig();
3113 EXPECT_EQ(res, 0);
3114
3115 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3116 ASSERT_NE(input, nullptr);
3117 input->Open();
3118 res = slowMotionSession->AddInput(input);
3119 EXPECT_EQ(res, 0);
3120 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3121 ASSERT_NE(previewOutput, nullptr);
3122 EXPECT_TRUE(slowMotionSession->CanAddOutput(previewOutput));
3123 res = slowMotionSession->AddOutput(previewOutput);
3124 EXPECT_EQ(res, 0);
3125 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3126 ASSERT_NE(videoOutput, nullptr);
3127 EXPECT_TRUE(slowMotionSession->CanAddOutput(videoOutput));
3128 res = slowMotionSession->AddOutput(videoOutput);
3129 EXPECT_EQ(res, 0);
3130
3131 res = slowMotionSession->CommitConfig();
3132 EXPECT_EQ(res, 0);
3133 res = slowMotionSession->Start();
3134 EXPECT_EQ(res, 0);
3135 sleep(WAIT_TIME_AFTER_START);
3136 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
3137 EXPECT_EQ(res, 0);
3138 sleep(WAIT_TIME_AFTER_START);
3139 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
3140 EXPECT_EQ(res, 0);
3141 res = slowMotionSession->Stop();
3142 EXPECT_EQ(res, 0);
3143 res = slowMotionSession->Release();
3144 EXPECT_EQ(res, 0);
3145 }
3146
3147 /*
3148 * Feature: Framework
3149 * Function: Test slow motion session set slow motion detection area
3150 * SubFunction: NA
3151 * FunctionPoints: NA
3152 * EnvConditions: NA
3153 * CaseDescription: Test can set slow motion detection area into slow motion session
3154 */
3155 HWTEST_F(CameraSessionModuleTest, slow_motion_session_moduletest_003, TestSize.Level0)
3156 {
3157 if (!IsSceneModeSupported(SceneMode::SLOW_MOTION)) {
3158 return;
3159 }
3160
3161 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SLOW_MOTION);
3162 ASSERT_NE(outputCapability, nullptr);
3163 auto previewProfiles = outputCapability->GetPreviewProfiles();
3164 ASSERT_FALSE(previewProfiles.empty());
3165 auto videoProfiles = outputCapability->GetVideoProfiles();
3166 ASSERT_FALSE(videoProfiles.empty());
3167
3168 auto captureSession = manager_->CreateCaptureSession(SceneMode::SLOW_MOTION);
3169 auto slowMotionSession = static_cast<SlowMotionSession*>(captureSession.GetRefPtr());
3170 ASSERT_NE(slowMotionSession, nullptr);
3171 int32_t res = slowMotionSession->BeginConfig();
3172 EXPECT_EQ(res, 0);
3173
3174 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3175 ASSERT_NE(input, nullptr);
3176 input->Open();
3177 res = slowMotionSession->AddInput(input);
3178 EXPECT_EQ(res, 0);
3179 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3180 ASSERT_NE(previewOutput, nullptr);
3181 EXPECT_TRUE(slowMotionSession->CanAddOutput(previewOutput));
3182 res = slowMotionSession->AddOutput(previewOutput);
3183 EXPECT_EQ(res, 0);
3184 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3185 ASSERT_NE(videoOutput, nullptr);
3186 EXPECT_TRUE(slowMotionSession->CanAddOutput(videoOutput));
3187 res = slowMotionSession->AddOutput(videoOutput);
3188 EXPECT_EQ(res, 0);
3189
3190 res = slowMotionSession->CommitConfig();
3191 EXPECT_EQ(res, 0);
3192 res = slowMotionSession->Start();
3193 EXPECT_EQ(res, 0);
3194 sleep(WAIT_TIME_AFTER_START);
3195
3196 EXPECT_TRUE(slowMotionSession->IsSlowMotionDetectionSupported());
3197 Rect rect;
3198 rect.topLeftX = 0.1;
3199 rect.topLeftY = 0.1;
3200 rect.width = 0.8;
3201 rect.height = 0.8;
3202 slowMotionSession->SetSlowMotionDetectionArea(rect);
3203 sleep(WAIT_TIME_AFTER_SET_AREA);
3204
3205 res = slowMotionSession->Stop();
3206 EXPECT_EQ(res, 0);
3207 res = slowMotionSession->Release();
3208 EXPECT_EQ(res, 0);
3209 }
3210
3211 /*
3212 * Feature: Framework
3213 * Function: Test slow motion session callback
3214 * SubFunction: NA
3215 * FunctionPoints: NA
3216 * EnvConditions: NA
3217 * CaseDescription: Test slow motion session callback
3218 */
3219 HWTEST_F(CameraSessionModuleTest, slow_motion_session_moduletest_004, TestSize.Level0)
3220 {
3221 sptr<CaptureOutput> previewOutput;
3222 sptr<CaptureOutput> videoOutput;
3223 ConfigSlowMotionSession(previewOutput, videoOutput);
3224 ASSERT_NE(previewOutput, nullptr);
3225 ASSERT_NE(videoOutput, nullptr);
3226
3227 if (slowMotionSession_->CanAddOutput(previewOutput)) {
3228 int32_t intResult = slowMotionSession_->AddOutput(previewOutput);
3229 EXPECT_EQ(intResult, 0);
3230
3231 intResult = slowMotionSession_->CommitConfig();
3232 EXPECT_EQ(intResult, 0);
3233
3234 sleep(WAIT_TIME_AFTER_START);
3235 intResult = slowMotionSession_->Start();
3236 EXPECT_EQ(intResult, 0);
3237 }
3238 }
3239
3240 /*
3241 * Feature: Framework
3242 * Function: Test night session with photo output
3243 * SubFunction: NA
3244 * FunctionPoints: NA
3245 * EnvConditions: NA
3246 * CaseDescription: Test can add photo output into night session
3247 */
3248 HWTEST_F(CameraSessionModuleTest, night_session_moduletest_001, TestSize.Level0)
3249 {
3250 if (!IsSceneModeSupported(SceneMode::NIGHT)) {
3251 return;
3252 }
3253
3254 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::NIGHT);
3255 ASSERT_NE(outputCapability, nullptr);
3256 auto previewProfiles = outputCapability->GetPreviewProfiles();
3257 ASSERT_FALSE(previewProfiles.empty());
3258 auto photoProfiles = outputCapability->GetPhotoProfiles();
3259 ASSERT_FALSE(photoProfiles.empty());
3260
3261 auto captureSession = manager_->CreateCaptureSession(SceneMode::NIGHT);
3262 auto nightSession = static_cast<NightSession*>(captureSession.GetRefPtr());
3263 ASSERT_NE(nightSession, nullptr);
3264 int32_t res = nightSession->BeginConfig();
3265 EXPECT_EQ(res, 0);
3266
3267 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3268 ASSERT_NE(input, nullptr);
3269 input->Open();
3270 res = nightSession->AddInput(input);
3271 EXPECT_EQ(res, 0);
3272 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3273 ASSERT_NE(previewOutput, nullptr);
3274 EXPECT_TRUE(nightSession->CanAddOutput(previewOutput));
3275 res = nightSession->AddOutput(previewOutput);
3276 EXPECT_EQ(res, 0);
3277 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
3278 ASSERT_NE(photoOutput, nullptr);
3279 EXPECT_TRUE(nightSession->CanAddOutput(photoOutput));
3280 res = nightSession->AddOutput(photoOutput);
3281 EXPECT_EQ(res, 0);
3282
3283 res = nightSession->CommitConfig();
3284 EXPECT_EQ(res, 0);
3285 res = nightSession->Start();
3286 EXPECT_EQ(res, 0);
3287 sleep(WAIT_TIME_AFTER_START);
3288 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
3289 EXPECT_EQ(res, 0);
3290 sleep(WAIT_TIME_AFTER_CAPTURE);
3291 res = nightSession->Stop();
3292 EXPECT_EQ(res, 0);
3293 res = nightSession->Release();
3294 EXPECT_EQ(res, 0);
3295 }
3296
3297 /*
3298 * Feature: Framework
3299 * Function: Test night session with video output
3300 * SubFunction: NA
3301 * FunctionPoints: NA
3302 * EnvConditions: NA
3303 * CaseDescription: Test can not add video output into night session
3304 */
3305 HWTEST_F(CameraSessionModuleTest, night_session_moduletest_002, TestSize.Level0)
3306 {
3307 if (!IsSceneModeSupported(SceneMode::NIGHT)) {
3308 return;
3309 }
3310
3311 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::NIGHT);
3312 ASSERT_NE(outputCapability, nullptr);
3313 auto previewProfiles = outputCapability->GetPreviewProfiles();
3314 ASSERT_FALSE(previewProfiles.empty());
3315 auto videoProfiles = outputCapability->GetVideoProfiles();
3316 ASSERT_TRUE(videoProfiles.empty());
3317 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
3318 ASSERT_NE(outputCapabilityBase, nullptr);
3319 auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
3320 ASSERT_FALSE(videoProfilesBase.empty());
3321
3322 auto captureSession = manager_->CreateCaptureSession(SceneMode::NIGHT);
3323 auto nightSession = static_cast<NightSession*>(captureSession.GetRefPtr());
3324 ASSERT_NE(nightSession, nullptr);
3325 int32_t res = nightSession->BeginConfig();
3326 EXPECT_EQ(res, 0);
3327
3328 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3329 ASSERT_NE(input, nullptr);
3330 input->Open();
3331 res = nightSession->AddInput(input);
3332 EXPECT_EQ(res, 0);
3333 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3334 ASSERT_NE(previewOutput, nullptr);
3335 EXPECT_TRUE(nightSession->CanAddOutput(previewOutput));
3336 res = nightSession->AddOutput(previewOutput);
3337 EXPECT_EQ(res, 0);
3338 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
3339 ASSERT_NE(videoOutput, nullptr);
3340 EXPECT_FALSE(nightSession->CanAddOutput(videoOutput));
3341 }
3342
3343 /*
3344 * Feature: Framework
3345 * Function: Test night session set exposure
3346 * SubFunction: NA
3347 * FunctionPoints: NA
3348 * EnvConditions: NA
3349 * CaseDescription: Test can set exposure into night session
3350 */
3351 HWTEST_F(CameraSessionModuleTest, night_session_moduletest_003, TestSize.Level0)
3352 {
3353 if (!IsSceneModeSupported(SceneMode::NIGHT)) {
3354 return;
3355 }
3356
3357 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::NIGHT);
3358 ASSERT_NE(outputCapability, nullptr);
3359 auto previewProfiles = outputCapability->GetPreviewProfiles();
3360 ASSERT_FALSE(previewProfiles.empty());
3361 auto photoProfiles = outputCapability->GetPhotoProfiles();
3362 ASSERT_FALSE(photoProfiles.empty());
3363
3364 auto captureSession = manager_->CreateCaptureSession(SceneMode::NIGHT);
3365 auto nightSession = static_cast<NightSession*>(captureSession.GetRefPtr());
3366 ASSERT_NE(nightSession, nullptr);
3367 int32_t res = nightSession->BeginConfig();
3368 EXPECT_EQ(res, 0);
3369
3370 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3371 ASSERT_NE(input, nullptr);
3372 input->Open();
3373 res = nightSession->AddInput(input);
3374 EXPECT_EQ(res, 0);
3375 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3376 ASSERT_NE(previewOutput, nullptr);
3377 EXPECT_TRUE(nightSession->CanAddOutput(previewOutput));
3378 res = nightSession->AddOutput(previewOutput);
3379 EXPECT_EQ(res, 0);
3380 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
3381 ASSERT_NE(photoOutput, nullptr);
3382 EXPECT_TRUE(nightSession->CanAddOutput(photoOutput));
3383 res = nightSession->AddOutput(photoOutput);
3384 EXPECT_EQ(res, 0);
3385
3386 res = nightSession->CommitConfig();
3387 EXPECT_EQ(res, 0);
3388 res = nightSession->Start();
3389 EXPECT_EQ(res, 0);
3390 sleep(WAIT_TIME_AFTER_START);
3391
3392 vector<uint32_t> exposureRange;
3393 res = nightSession->GetExposureRange(exposureRange);
3394 EXPECT_EQ(res, 0);
3395 if (!exposureRange.empty()) {
3396 nightSession->LockForControl();
3397 res = nightSession->SetExposure(exposureRange[0]);
3398 nightSession->UnlockForControl();
3399 EXPECT_EQ(res, 0);
3400 uint32_t exposure;
3401 res = nightSession->GetExposure(exposure);
3402 EXPECT_EQ(res, 0);
3403 EXPECT_EQ(exposure, exposureRange[0]);
3404 }
3405
3406 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
3407 EXPECT_EQ(res, 0);
3408 sleep(WAIT_TIME_AFTER_CAPTURE);
3409 res = nightSession->Stop();
3410 EXPECT_EQ(res, 0);
3411 res = nightSession->Release();
3412 EXPECT_EQ(res, 0);
3413 }
3414
3415 /*
3416 * Feature: Framework
3417 * Function: Test night session abnormal branches
3418 * SubFunction: NA
3419 * FunctionPoints: NA
3420 * EnvConditions: NA
3421 * CaseDescription: Test night session abnormal branches
3422 */
3423 HWTEST_F(CameraSessionModuleTest, night_session_moduletest_004, TestSize.Level0)
3424 {
3425 SceneMode nightMode = SceneMode::NIGHT;
3426 sptr<CaptureSession> captureSession = manager_->CreateCaptureSession(nightMode);
3427 auto nightSession = static_cast<NightSession*>(captureSession.GetRefPtr());
3428 ASSERT_NE(nightSession, nullptr);
3429 int32_t intResult = nightSession->BeginConfig();
3430 EXPECT_EQ(intResult, 0);
3431 intResult = nightSession->AddInput(input_);
3432 EXPECT_EQ(intResult, 0);
3433 std::vector<uint32_t> exposureRange;
3434 uint32_t exposureValue = 0;
3435 EXPECT_EQ(nightSession->GetExposureRange(exposureRange), SESSION_NOT_CONFIG);
3436 EXPECT_EQ(nightSession->SetExposure(0), SESSION_NOT_CONFIG);
3437 EXPECT_EQ(nightSession->GetExposure(exposureValue), SESSION_NOT_CONFIG);
3438 }
3439
3440 /*
3441 * Feature: Framework
3442 * Function: Test night session nullptr
3443 * SubFunction: NA
3444 * FunctionPoints: NA
3445 * EnvConditions: NA
3446 * CaseDescription: Test night session nullptr
3447 */
3448 HWTEST_F(CameraSessionModuleTest, night_session_moduletest_005, TestSize.Level0)
3449 {
3450 sptr<CaptureSession> camSession = manager_->CreateCaptureSession();
3451 ASSERT_NE(camSession, nullptr);
3452 SceneMode nightMode = SceneMode::NIGHT;
3453 sptr<CaptureSession> captureSession = manager_->CreateCaptureSession(nightMode);
3454 auto nightSession = static_cast<NightSession*>(captureSession.GetRefPtr());
3455 uint32_t exposureValue = 0;
3456 std::vector<uint32_t> exposureRange;
3457 EXPECT_EQ(nightSession->GetExposureRange(exposureRange), SESSION_NOT_CONFIG);
3458 EXPECT_EQ(nightSession->GetExposure(exposureValue), SESSION_NOT_CONFIG);
3459 EXPECT_EQ(nightSession->SetExposure(0), SESSION_NOT_CONFIG);
3460 }
3461
3462 /*
3463 * Feature: Framework
3464 * Function: Test profession session with photo output
3465 * SubFunction: NA
3466 * FunctionPoints: NA
3467 * EnvConditions: NA
3468 * CaseDescription: Test can add photo output into profession session
3469 */
3470 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_001, TestSize.Level0)
3471 {
3472 if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3473 return;
3474 }
3475
3476 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3477 ASSERT_NE(outputCapability, nullptr);
3478 auto previewProfiles = outputCapability->GetPreviewProfiles();
3479 ASSERT_FALSE(previewProfiles.empty());
3480 auto photoProfiles = outputCapability->GetPhotoProfiles();
3481 ASSERT_FALSE(photoProfiles.empty());
3482
3483 auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3484 auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3485 ASSERT_NE(professionSession, nullptr);
3486 int32_t res = professionSession->BeginConfig();
3487 EXPECT_EQ(res, 0);
3488
3489 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3490 ASSERT_NE(input, nullptr);
3491 input->Open();
3492 res = professionSession->AddInput(input);
3493 EXPECT_EQ(res, 0);
3494 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3495 ASSERT_NE(previewOutput, nullptr);
3496 EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
3497 res = professionSession->AddOutput(previewOutput);
3498 EXPECT_EQ(res, 0);
3499 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
3500 ASSERT_NE(photoOutput, nullptr);
3501 EXPECT_TRUE(professionSession->CanAddOutput(photoOutput));
3502 res = professionSession->AddOutput(photoOutput);
3503 EXPECT_EQ(res, 0);
3504
3505 res = professionSession->CommitConfig();
3506 EXPECT_EQ(res, 0);
3507 res = professionSession->Start();
3508 EXPECT_EQ(res, 0);
3509 sleep(WAIT_TIME_AFTER_START);
3510 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
3511 EXPECT_EQ(res, 0);
3512 sleep(WAIT_TIME_AFTER_CAPTURE);
3513 res = professionSession->Stop();
3514 EXPECT_EQ(res, 0);
3515 res = professionSession->Release();
3516 EXPECT_EQ(res, 0);
3517 }
3518
3519 /*
3520 * Feature: Framework
3521 * Function: Test profession session with video output
3522 * SubFunction: NA
3523 * FunctionPoints: NA
3524 * EnvConditions: NA
3525 * CaseDescription: Test can add video output into profession session
3526 */
3527 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_002, TestSize.Level0)
3528 {
3529 if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3530 return;
3531 }
3532
3533 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3534 ASSERT_NE(outputCapability, nullptr);
3535 auto previewProfiles = outputCapability->GetPreviewProfiles();
3536 ASSERT_FALSE(previewProfiles.empty());
3537 auto videoProfiles = outputCapability->GetVideoProfiles();
3538 ASSERT_FALSE(videoProfiles.empty());
3539
3540 auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3541 auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3542 ASSERT_NE(professionSession, nullptr);
3543 int32_t res = professionSession->BeginConfig();
3544 EXPECT_EQ(res, 0);
3545
3546 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3547 ASSERT_NE(input, nullptr);
3548 input->Open();
3549 res = professionSession->AddInput(input);
3550 EXPECT_EQ(res, 0);
3551 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3552 ASSERT_NE(previewOutput, nullptr);
3553 EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
3554 res = professionSession->AddOutput(previewOutput);
3555 EXPECT_EQ(res, 0);
3556 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3557 ASSERT_NE(videoOutput, nullptr);
3558 EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
3559 res = professionSession->AddOutput(videoOutput);
3560 EXPECT_EQ(res, 0);
3561
3562 res = professionSession->CommitConfig();
3563 EXPECT_EQ(res, 0);
3564 res = professionSession->Start();
3565 EXPECT_EQ(res, 0);
3566 sleep(WAIT_TIME_AFTER_START);
3567 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
3568 EXPECT_EQ(res, 0);
3569 sleep(WAIT_TIME_AFTER_START);
3570 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
3571 EXPECT_EQ(res, 0);
3572 res = professionSession->Stop();
3573 EXPECT_EQ(res, 0);
3574 res = professionSession->Release();
3575 EXPECT_EQ(res, 0);
3576 }
3577
3578 /*
3579 * Feature: Framework
3580 * Function: Test profession session set metering mode
3581 * SubFunction: NA
3582 * FunctionPoints: NA
3583 * EnvConditions: NA
3584 * CaseDescription: Test can set metering mode into profession session
3585 */
3586 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_003, TestSize.Level0)
3587 {
3588 if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3589 return;
3590 }
3591
3592 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3593 ASSERT_NE(outputCapability, nullptr);
3594 auto previewProfiles = outputCapability->GetPreviewProfiles();
3595 ASSERT_FALSE(previewProfiles.empty());
3596 auto videoProfiles = outputCapability->GetVideoProfiles();
3597 ASSERT_FALSE(videoProfiles.empty());
3598
3599 auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3600 auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3601 ASSERT_NE(professionSession, nullptr);
3602 int32_t res = professionSession->BeginConfig();
3603 EXPECT_EQ(res, 0);
3604
3605 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3606 ASSERT_NE(input, nullptr);
3607 input->Open();
3608 res = professionSession->AddInput(input);
3609 EXPECT_EQ(res, 0);
3610 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3611 ASSERT_NE(previewOutput, nullptr);
3612 EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
3613 res = professionSession->AddOutput(previewOutput);
3614 EXPECT_EQ(res, 0);
3615 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3616 ASSERT_NE(videoOutput, nullptr);
3617 EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
3618 res = professionSession->AddOutput(videoOutput);
3619 EXPECT_EQ(res, 0);
3620
3621 res = professionSession->CommitConfig();
3622 EXPECT_EQ(res, 0);
3623 res = professionSession->Start();
3624 EXPECT_EQ(res, 0);
3625 sleep(WAIT_TIME_AFTER_START);
3626
3627 vector<MeteringMode> modes;
3628 res = professionSession->GetSupportedMeteringModes(modes);
3629 EXPECT_EQ(res, 0);
3630 if (!modes.empty()) {
3631 bool supported;
3632 res = professionSession->IsMeteringModeSupported(METERING_MODE_CENTER_WEIGHTED, supported);
3633 EXPECT_EQ(res, 0);
3634 if (supported) {
3635 professionSession->LockForControl();
3636 res = professionSession->SetMeteringMode(METERING_MODE_CENTER_WEIGHTED);
3637 professionSession->UnlockForControl();
3638 EXPECT_EQ(res, 0);
3639 MeteringMode mode;
3640 res = professionSession->GetMeteringMode(mode);
3641 EXPECT_EQ(res, 0);
3642 EXPECT_EQ(mode, METERING_MODE_CENTER_WEIGHTED);
3643 }
3644 }
3645
3646 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
3647 EXPECT_EQ(res, 0);
3648 sleep(WAIT_TIME_AFTER_START);
3649 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
3650 EXPECT_EQ(res, 0);
3651 res = professionSession->Stop();
3652 EXPECT_EQ(res, 0);
3653 res = professionSession->Release();
3654 EXPECT_EQ(res, 0);
3655 }
3656
3657 /*
3658 * Feature: Framework
3659 * Function: Test profession session set iso range
3660 * SubFunction: NA
3661 * FunctionPoints: NA
3662 * EnvConditions: NA
3663 * CaseDescription: Test can set iso range into profession session
3664 */
3665 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_004, TestSize.Level0)
3666 {
3667 if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3668 return;
3669 }
3670
3671 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3672 ASSERT_NE(outputCapability, nullptr);
3673 auto previewProfiles = outputCapability->GetPreviewProfiles();
3674 ASSERT_FALSE(previewProfiles.empty());
3675 auto videoProfiles = outputCapability->GetVideoProfiles();
3676 ASSERT_FALSE(videoProfiles.empty());
3677
3678 auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3679 auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3680 ASSERT_NE(professionSession, nullptr);
3681 int32_t res = professionSession->BeginConfig();
3682 EXPECT_EQ(res, 0);
3683
3684 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3685 ASSERT_NE(input, nullptr);
3686 input->Open();
3687 res = professionSession->AddInput(input);
3688 EXPECT_EQ(res, 0);
3689 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3690 ASSERT_NE(previewOutput, nullptr);
3691 EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
3692 res = professionSession->AddOutput(previewOutput);
3693 EXPECT_EQ(res, 0);
3694 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3695 ASSERT_NE(videoOutput, nullptr);
3696 EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
3697 res = professionSession->AddOutput(videoOutput);
3698 EXPECT_EQ(res, 0);
3699
3700 res = professionSession->CommitConfig();
3701 EXPECT_EQ(res, 0);
3702 res = professionSession->Start();
3703 EXPECT_EQ(res, 0);
3704 sleep(WAIT_TIME_AFTER_START);
3705
3706 bool isManualIsoSupported = professionSession->IsManualIsoSupported();
3707 if (isManualIsoSupported) {
3708 vector<int32_t> isoRange;
3709 res = professionSession->GetIsoRange(isoRange);
3710 EXPECT_EQ(res, 0);
3711 if (!isoRange.empty()) {
3712 professionSession->LockForControl();
3713 res = professionSession->SetISO(isoRange[0]);
3714 professionSession->UnlockForControl();
3715 EXPECT_EQ(res, 0);
3716 int32_t iso;
3717 res = professionSession->GetISO(iso);
3718 EXPECT_EQ(res, 0);
3719 EXPECT_EQ(iso, isoRange[0]);
3720 }
3721 }
3722
3723 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
3724 EXPECT_EQ(res, 0);
3725 sleep(WAIT_TIME_AFTER_START);
3726 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
3727 EXPECT_EQ(res, 0);
3728 res = professionSession->Stop();
3729 EXPECT_EQ(res, 0);
3730 res = professionSession->Release();
3731 EXPECT_EQ(res, 0);
3732 }
3733
3734 /*
3735 * Feature: Framework
3736 * Function: Test profession session set focus mode
3737 * SubFunction: NA
3738 * FunctionPoints: NA
3739 * EnvConditions: NA
3740 * CaseDescription: Test can set focus mode into profession session
3741 */
3742 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_005, TestSize.Level0)
3743 {
3744 if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3745 return;
3746 }
3747
3748 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3749 ASSERT_NE(outputCapability, nullptr);
3750 auto previewProfiles = outputCapability->GetPreviewProfiles();
3751 ASSERT_FALSE(previewProfiles.empty());
3752 auto videoProfiles = outputCapability->GetVideoProfiles();
3753 ASSERT_FALSE(videoProfiles.empty());
3754
3755 auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3756 auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3757 ASSERT_NE(professionSession, nullptr);
3758 int32_t res = professionSession->BeginConfig();
3759 EXPECT_EQ(res, 0);
3760
3761 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3762 ASSERT_NE(input, nullptr);
3763 input->Open();
3764 res = professionSession->AddInput(input);
3765 EXPECT_EQ(res, 0);
3766 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3767 ASSERT_NE(previewOutput, nullptr);
3768 EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
3769 res = professionSession->AddOutput(previewOutput);
3770 EXPECT_EQ(res, 0);
3771 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3772 ASSERT_NE(videoOutput, nullptr);
3773 EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
3774 res = professionSession->AddOutput(videoOutput);
3775 EXPECT_EQ(res, 0);
3776
3777 res = professionSession->CommitConfig();
3778 EXPECT_EQ(res, 0);
3779 res = professionSession->Start();
3780 EXPECT_EQ(res, 0);
3781 sleep(WAIT_TIME_AFTER_START);
3782
3783 std::vector<FocusMode> modes;
3784 res = professionSession->GetSupportedFocusModes(modes);
3785 EXPECT_EQ(res, 0);
3786 if (!modes.empty()) {
3787 FocusMode focusMode = modes[0];
3788 bool supported;
3789 res = professionSession->IsFocusModeSupported(focusMode, supported);
3790 EXPECT_EQ(res, 0);
3791 if (supported) {
3792 professionSession->LockForControl();
3793 res = professionSession->SetFocusMode(focusMode);
3794 professionSession->UnlockForControl();
3795 EXPECT_EQ(res, 0);
3796 FocusMode mode;
3797 res = professionSession->GetFocusMode(mode);
3798 EXPECT_EQ(res, 0);
3799 EXPECT_EQ(mode, focusMode);
3800 }
3801 }
3802
3803 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
3804 EXPECT_EQ(res, 0);
3805 sleep(WAIT_TIME_AFTER_START);
3806 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
3807 EXPECT_EQ(res, 0);
3808 res = professionSession->Stop();
3809 EXPECT_EQ(res, 0);
3810 res = professionSession->Release();
3811 EXPECT_EQ(res, 0);
3812 }
3813
3814 /*
3815 * Feature: Framework
3816 * Function: Test profession session set exposure hint mode
3817 * SubFunction: NA
3818 * FunctionPoints: NA
3819 * EnvConditions: NA
3820 * CaseDescription: Test can set exposure hint mode into profession session
3821 */
3822 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_006, TestSize.Level0)
3823 {
3824 if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3825 return;
3826 }
3827
3828 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3829 ASSERT_NE(outputCapability, nullptr);
3830 auto previewProfiles = outputCapability->GetPreviewProfiles();
3831 ASSERT_FALSE(previewProfiles.empty());
3832 auto videoProfiles = outputCapability->GetVideoProfiles();
3833 ASSERT_FALSE(videoProfiles.empty());
3834
3835 auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3836 auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3837 ASSERT_NE(professionSession, nullptr);
3838 int32_t res = professionSession->BeginConfig();
3839 EXPECT_EQ(res, 0);
3840
3841 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3842 ASSERT_NE(input, nullptr);
3843 input->Open();
3844 res = professionSession->AddInput(input);
3845 EXPECT_EQ(res, 0);
3846 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3847 ASSERT_NE(previewOutput, nullptr);
3848 EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
3849 res = professionSession->AddOutput(previewOutput);
3850 EXPECT_EQ(res, 0);
3851 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3852 ASSERT_NE(videoOutput, nullptr);
3853 EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
3854 res = professionSession->AddOutput(videoOutput);
3855 EXPECT_EQ(res, 0);
3856
3857 res = professionSession->CommitConfig();
3858 EXPECT_EQ(res, 0);
3859 res = professionSession->Start();
3860 EXPECT_EQ(res, 0);
3861 sleep(WAIT_TIME_AFTER_START);
3862
3863 std::vector<ExposureHintMode> modes;
3864 res = professionSession->GetSupportedExposureHintModes(modes);
3865 EXPECT_EQ(res, 0);
3866 if (!modes.empty()) {
3867 ExposureHintMode exposureHintMode = modes[0];
3868 professionSession->LockForControl();
3869 res = professionSession->SetExposureHintMode(exposureHintMode);
3870 professionSession->UnlockForControl();
3871 EXPECT_EQ(res, 0);
3872 ExposureHintMode mode;
3873 res = professionSession->GetExposureHintMode(mode);
3874 EXPECT_EQ(res, 0);
3875 EXPECT_EQ(mode, exposureHintMode);
3876 }
3877
3878 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
3879 EXPECT_EQ(res, 0);
3880 sleep(WAIT_TIME_AFTER_START);
3881 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
3882 EXPECT_EQ(res, 0);
3883 res = professionSession->Stop();
3884 EXPECT_EQ(res, 0);
3885 res = professionSession->Release();
3886 EXPECT_EQ(res, 0);
3887 }
3888
3889 /*
3890 * Feature: Framework
3891 * Function: Test profession session set focus assist flash mode
3892 * SubFunction: NA
3893 * FunctionPoints: NA
3894 * EnvConditions: NA
3895 * CaseDescription: Test can set focus assist flash mode into profession session
3896 */
3897 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_007, TestSize.Level0)
3898 {
3899 if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3900 return;
3901 }
3902
3903 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3904 ASSERT_NE(outputCapability, nullptr);
3905 auto previewProfiles = outputCapability->GetPreviewProfiles();
3906 ASSERT_FALSE(previewProfiles.empty());
3907 auto videoProfiles = outputCapability->GetVideoProfiles();
3908 ASSERT_FALSE(videoProfiles.empty());
3909
3910 auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3911 auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3912 ASSERT_NE(professionSession, nullptr);
3913 int32_t res = professionSession->BeginConfig();
3914 EXPECT_EQ(res, 0);
3915
3916 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3917 ASSERT_NE(input, nullptr);
3918 input->Open();
3919 res = professionSession->AddInput(input);
3920 EXPECT_EQ(res, 0);
3921 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3922 ASSERT_NE(previewOutput, nullptr);
3923 EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
3924 res = professionSession->AddOutput(previewOutput);
3925 EXPECT_EQ(res, 0);
3926 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3927 ASSERT_NE(videoOutput, nullptr);
3928 EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
3929 res = professionSession->AddOutput(videoOutput);
3930 EXPECT_EQ(res, 0);
3931
3932 res = professionSession->CommitConfig();
3933 EXPECT_EQ(res, 0);
3934 res = professionSession->Start();
3935 EXPECT_EQ(res, 0);
3936 sleep(WAIT_TIME_AFTER_START);
3937
3938 std::vector<FocusAssistFlashMode> modes;
3939 res = professionSession->GetSupportedFocusAssistFlashModes(modes);
3940 EXPECT_EQ(res, 0);
3941 if (!modes.empty()) {
3942 FocusAssistFlashMode flashMode = modes[0];
3943 bool supported;
3944 res = professionSession->IsFocusAssistFlashModeSupported(flashMode, supported);
3945 EXPECT_EQ(res, 0);
3946 if (supported) {
3947 professionSession->LockForControl();
3948 res = professionSession->SetFocusAssistFlashMode(flashMode);
3949 professionSession->UnlockForControl();
3950 EXPECT_EQ(res, 0);
3951 FocusAssistFlashMode mode;
3952 res = professionSession->GetFocusAssistFlashMode(mode);
3953 EXPECT_EQ(res, 0);
3954 EXPECT_EQ(mode, flashMode);
3955 }
3956 }
3957
3958 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
3959 EXPECT_EQ(res, 0);
3960 sleep(WAIT_TIME_AFTER_START);
3961 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
3962 EXPECT_EQ(res, 0);
3963 res = professionSession->Stop();
3964 EXPECT_EQ(res, 0);
3965 res = professionSession->Release();
3966 EXPECT_EQ(res, 0);
3967 }
3968
3969 /*
3970 * Feature: Framework
3971 * Function: Test profession session set flash mode
3972 * SubFunction: NA
3973 * FunctionPoints: NA
3974 * EnvConditions: NA
3975 * CaseDescription: Test can set flash mode into profession session
3976 */
3977 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_008, TestSize.Level0)
3978 {
3979 if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3980 return;
3981 }
3982
3983 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3984 ASSERT_NE(outputCapability, nullptr);
3985 auto previewProfiles = outputCapability->GetPreviewProfiles();
3986 ASSERT_FALSE(previewProfiles.empty());
3987 auto videoProfiles = outputCapability->GetVideoProfiles();
3988 ASSERT_FALSE(videoProfiles.empty());
3989
3990 auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3991 auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3992 ASSERT_NE(professionSession, nullptr);
3993 int32_t res = professionSession->BeginConfig();
3994 EXPECT_EQ(res, 0);
3995
3996 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3997 ASSERT_NE(input, nullptr);
3998 input->Open();
3999 res = professionSession->AddInput(input);
4000 EXPECT_EQ(res, 0);
4001 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
4002 ASSERT_NE(previewOutput, nullptr);
4003 EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
4004 res = professionSession->AddOutput(previewOutput);
4005 EXPECT_EQ(res, 0);
4006 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
4007 ASSERT_NE(videoOutput, nullptr);
4008 EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
4009 res = professionSession->AddOutput(videoOutput);
4010 EXPECT_EQ(res, 0);
4011
4012 res = professionSession->CommitConfig();
4013 EXPECT_EQ(res, 0);
4014 res = professionSession->Start();
4015 EXPECT_EQ(res, 0);
4016 sleep(WAIT_TIME_AFTER_START);
4017
4018 bool hasFlash;
4019 res = professionSession->HasFlash(hasFlash);
4020 EXPECT_EQ(res, 0);
4021 if (hasFlash) {
4022 std::vector<FlashMode> modes;
4023 res = professionSession->GetSupportedFlashModes(modes);
4024 EXPECT_EQ(res, 0);
4025 if (!modes.empty()) {
4026 FlashMode flashMode = modes[0];
4027 bool supported;
4028 res = professionSession->IsFlashModeSupported(flashMode, supported);
4029 EXPECT_EQ(res, 0);
4030 if (supported) {
4031 professionSession->LockForControl();
4032 res = professionSession->SetFlashMode(flashMode);
4033 professionSession->UnlockForControl();
4034 EXPECT_EQ(res, 0);
4035 FlashMode mode;
4036 res = professionSession->GetFlashMode(mode);
4037 EXPECT_EQ(res, 0);
4038 EXPECT_EQ(mode, flashMode);
4039 }
4040 }
4041 }
4042
4043 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
4044 EXPECT_EQ(res, 0);
4045 sleep(WAIT_TIME_AFTER_START);
4046 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
4047 EXPECT_EQ(res, 0);
4048 res = professionSession->Stop();
4049 EXPECT_EQ(res, 0);
4050 res = professionSession->Release();
4051 EXPECT_EQ(res, 0);
4052 }
4053
4054 /*
4055 * Feature: Framework
4056 * Function: Test profession session set color effect
4057 * SubFunction: NA
4058 * FunctionPoints: NA
4059 * EnvConditions: NA
4060 * CaseDescription: Test can set color effect into profession session
4061 */
4062 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_009, TestSize.Level0)
4063 {
4064 if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
4065 return;
4066 }
4067
4068 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
4069 ASSERT_NE(outputCapability, nullptr);
4070 auto previewProfiles = outputCapability->GetPreviewProfiles();
4071 ASSERT_FALSE(previewProfiles.empty());
4072 auto videoProfiles = outputCapability->GetVideoProfiles();
4073 ASSERT_FALSE(videoProfiles.empty());
4074
4075 auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
4076 auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4077 ASSERT_NE(professionSession, nullptr);
4078 int32_t res = professionSession->BeginConfig();
4079 EXPECT_EQ(res, 0);
4080
4081 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
4082 ASSERT_NE(input, nullptr);
4083 input->Open();
4084 res = professionSession->AddInput(input);
4085 EXPECT_EQ(res, 0);
4086 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
4087 ASSERT_NE(previewOutput, nullptr);
4088 EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
4089 res = professionSession->AddOutput(previewOutput);
4090 EXPECT_EQ(res, 0);
4091 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
4092 ASSERT_NE(videoOutput, nullptr);
4093 EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
4094 res = professionSession->AddOutput(videoOutput);
4095 EXPECT_EQ(res, 0);
4096
4097 res = professionSession->CommitConfig();
4098 EXPECT_EQ(res, 0);
4099 res = professionSession->Start();
4100 EXPECT_EQ(res, 0);
4101 sleep(WAIT_TIME_AFTER_START);
4102
4103 std::vector<ColorEffect> modes;
4104 res = professionSession->GetSupportedColorEffects(modes);
4105 EXPECT_EQ(res, 0);
4106 if (!modes.empty()) {
4107 ColorEffect colorEffect = modes[0];
4108 professionSession->LockForControl();
4109 res = professionSession->SetColorEffect(colorEffect);
4110 professionSession->UnlockForControl();
4111 EXPECT_EQ(res, 0);
4112 ColorEffect effect;
4113 res = professionSession->GetColorEffect(effect);
4114 EXPECT_EQ(res, 0);
4115 EXPECT_EQ(effect, colorEffect);
4116 }
4117
4118 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
4119 EXPECT_EQ(res, 0);
4120 sleep(WAIT_TIME_AFTER_START);
4121 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
4122 EXPECT_EQ(res, 0);
4123 res = professionSession->Stop();
4124 EXPECT_EQ(res, 0);
4125 res = professionSession->Release();
4126 EXPECT_EQ(res, 0);
4127 }
4128
4129 /*
4130 * Feature: Framework
4131 * Function: Test profession session callbacks
4132 * SubFunction: NA
4133 * FunctionPoints: NA
4134 * EnvConditions: NA
4135 * CaseDescription: Test can set callbacks into profession session
4136 */
4137 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_010, TestSize.Level0)
4138 {
4139 if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
4140 return;
4141 }
4142
4143 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
4144 ASSERT_NE(outputCapability, nullptr);
4145 auto previewProfiles = outputCapability->GetPreviewProfiles();
4146 ASSERT_FALSE(previewProfiles.empty());
4147 auto videoProfiles = outputCapability->GetVideoProfiles();
4148 ASSERT_FALSE(videoProfiles.empty());
4149
4150 auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
4151 auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4152 ASSERT_NE(professionSession, nullptr);
4153 int32_t res = professionSession->BeginConfig();
4154 EXPECT_EQ(res, 0);
4155
4156 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
4157 ASSERT_NE(input, nullptr);
4158 input->Open();
4159 res = professionSession->AddInput(input);
4160 EXPECT_EQ(res, 0);
4161 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
4162 ASSERT_NE(previewOutput, nullptr);
4163 EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
4164 res = professionSession->AddOutput(previewOutput);
4165 EXPECT_EQ(res, 0);
4166 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
4167 ASSERT_NE(videoOutput, nullptr);
4168 EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
4169 res = professionSession->AddOutput(videoOutput);
4170 EXPECT_EQ(res, 0);
4171
4172 professionSession->SetExposureInfoCallback(make_shared<TestExposureInfoCallback>());
4173 static const camera_rational_t rational = {
4174 .denominator = DEFAULT_DENOMINATOR_VALUE,
4175 .numerator = DEFAULT_NUMERATOR_VALUE,
4176 };
4177 auto meta = make_shared<OHOS::Camera::CameraMetadata>(META_VALUE_10, META_VALUE_100);
4178 EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &rational, 1), true);
4179 professionSession->ProcessSensorExposureTimeChange(meta);
4180 professionSession->SetIsoInfoCallback(make_shared<TestIsoInfoCallback>());
4181 static const uint32_t iso = DEFAULT_ISO_VALUE;
4182 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
4183 professionSession->ProcessIsoChange(meta);
4184 professionSession->SetApertureInfoCallback(make_shared<TestApertureInfoCallback>());
4185 static const uint32_t aperture = DEFAULT_APERTURE_VALUE;
4186 EXPECT_EQ(meta->addEntry(OHOS_STATUS_CAMERA_APERTURE_VALUE, &aperture, 1), true);
4187 professionSession->ProcessApertureChange(meta);
4188 professionSession->SetLuminationInfoCallback(make_shared<TestLuminationInfoCallback>());
4189 static const uint32_t lumination = DEFAULT_LUMINATION_VALUE;
4190 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
4191 professionSession->ProcessLuminationChange(meta);
4192
4193 res = professionSession->CommitConfig();
4194 EXPECT_EQ(res, 0);
4195 res = professionSession->Start();
4196 EXPECT_EQ(res, 0);
4197 sleep(WAIT_TIME_AFTER_START);
4198 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
4199 EXPECT_EQ(res, 0);
4200 sleep(WAIT_TIME_AFTER_START);
4201 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
4202 EXPECT_EQ(res, 0);
4203 res = professionSession->Stop();
4204 EXPECT_EQ(res, 0);
4205 res = professionSession->Release();
4206 EXPECT_EQ(res, 0);
4207 }
4208
4209 /*
4210 * Feature: Framework
4211 * Function: Test preview/video with profession video session
4212 * SubFunction: NA
4213 * FunctionPoints: NA
4214 * EnvConditions: NA
4215 * CaseDescription: Test preview/video with profession video session
4216 */
4217 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_001, TestSize.Level0)
4218 {
4219 SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4220 if (!IsSceneModeSupported(sceneMode)) {
4221 return;
4222 }
4223 sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
4224 ASSERT_NE(cameraManagerObj, nullptr);
4225
4226 std::vector<SceneMode> sceneModes = cameraManagerObj->GetSupportedModes(cameras_[0]);
4227 ASSERT_TRUE(sceneModes.size() != 0);
4228
4229 sptr<CameraOutputCapability> modeAbility =
4230 cameraManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4231 ASSERT_NE(modeAbility, nullptr);
4232
4233 SelectProfiles wanted;
4234 wanted.preview.size_ = {640, 480};
4235 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4236 wanted.photo.size_ = {640, 480};
4237 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4238 wanted.video.size_ = {640, 480};
4239 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4240 wanted.video.framerates_ = {30, 30};
4241
4242 sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(sceneMode);
4243 ASSERT_NE(captureSession, nullptr);
4244 sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4245 ASSERT_NE(session, nullptr);
4246
4247 int32_t intResult = session->BeginConfig();
4248 EXPECT_EQ(intResult, 0);
4249
4250 intResult = session->AddInput(input_);
4251 EXPECT_EQ(intResult, 0);
4252
4253 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4254 ASSERT_NE(previewOutput, nullptr);
4255
4256 intResult = session->AddOutput(previewOutput);
4257 EXPECT_EQ(intResult, 0);
4258
4259 sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4260 ASSERT_NE(videoOutput, nullptr);
4261
4262 intResult = session->AddOutput(videoOutput);
4263 EXPECT_EQ(intResult, 0);
4264
4265
4266 intResult = session->CommitConfig();
4267 EXPECT_EQ(intResult, 0);
4268
4269 intResult = session->Start();
4270 EXPECT_EQ(intResult, 0);
4271 sleep(WAIT_TIME_AFTER_START);
4272
4273 intResult = ((sptr<VideoOutput>&)videoOutput)->Start();
4274 EXPECT_EQ(intResult, 0);
4275 sleep(WAIT_TIME_AFTER_RECORDING);
4276 intResult = ((sptr<VideoOutput>&)videoOutput)->Stop();
4277 session->Stop();
4278 }
4279
4280 /*
4281 * Feature: Framework
4282 * Function: Test profession video session metering mode
4283 * SubFunction: NA
4284 * FunctionPoints: NA
4285 * EnvConditions: NA
4286 * CaseDescription: Test profession video session metering mode
4287 */
4288 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_002, TestSize.Level0)
4289 {
4290 SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4291 if (!IsSceneModeSupported(sceneMode)) {
4292 return;
4293 }
4294 sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
4295 ASSERT_NE(cameraManagerObj, nullptr);
4296
4297 std::vector<SceneMode> sceneModes = cameraManagerObj->GetSupportedModes(cameras_[0]);
4298 ASSERT_TRUE(sceneModes.size() != 0);
4299
4300 sptr<CameraOutputCapability> modeAbility =
4301 cameraManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4302 ASSERT_NE(modeAbility, nullptr);
4303
4304 SelectProfiles wanted;
4305 wanted.preview.size_ = {640, 480};
4306 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4307 wanted.photo.size_ = {640, 480};
4308 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4309 wanted.video.size_ = {640, 480};
4310 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4311 wanted.video.framerates_ = {30, 30};
4312
4313 sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(sceneMode);
4314 ASSERT_NE(captureSession, nullptr);
4315 sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4316 ASSERT_NE(session, nullptr);
4317
4318 int32_t intResult = session->BeginConfig();
4319 EXPECT_EQ(intResult, 0);
4320
4321 intResult = session->AddInput(input_);
4322 EXPECT_EQ(intResult, 0);
4323
4324 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4325 ASSERT_NE(previewOutput, nullptr);
4326
4327 intResult = session->AddOutput(previewOutput);
4328 EXPECT_EQ(intResult, 0);
4329
4330 sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4331 ASSERT_NE(videoOutput, nullptr);
4332
4333 intResult = session->AddOutput(videoOutput);
4334 EXPECT_EQ(intResult, 0);
4335
4336 intResult = session->CommitConfig();
4337 EXPECT_EQ(intResult, 0);
4338
4339 MeteringMode meteringMode = METERING_MODE_CENTER_WEIGHTED;
4340 bool isSupported;
4341 intResult = session->IsMeteringModeSupported(meteringMode, isSupported);
4342 EXPECT_EQ(intResult, 0);
4343 EXPECT_EQ(isSupported, true);
4344
4345 std::vector<MeteringMode> modes = {};
4346 intResult = session->GetSupportedMeteringModes(modes);
4347 EXPECT_EQ(intResult, 0);
4348 EXPECT_NE(modes.size(), 0);
4349
4350 session->LockForControl();
4351 intResult = session->SetMeteringMode(modes[0]);
4352 session->UnlockForControl();
4353 EXPECT_EQ(intResult, 0);
4354 intResult = session->GetMeteringMode(meteringMode);
4355 EXPECT_EQ(intResult, 0);
4356
4357 EXPECT_EQ(meteringMode, modes[0]);
4358 intResult = session->Start();
4359 EXPECT_EQ(intResult, 0);
4360 sleep(WAIT_TIME_AFTER_START);
4361
4362 intResult = ((sptr<VideoOutput>&)videoOutput)->Start();
4363 EXPECT_EQ(intResult, 0);
4364 sleep(WAIT_TIME_AFTER_RECORDING);
4365 intResult = ((sptr<VideoOutput>&)videoOutput)->Stop();
4366 session->Stop();
4367 }
4368
4369 /*
4370 * Feature: Framework
4371 * Function: Test profession video session focus assist flash mode
4372 * SubFunction: NA
4373 * FunctionPoints: NA
4374 * EnvConditions: NA
4375 * CaseDescription: Test profession video session focus assist flash mode
4376 */
4377 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_003, TestSize.Level0)
4378 {
4379 SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4380 if (!IsSceneModeSupported(sceneMode)) {
4381 return;
4382 }
4383 sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
4384 ASSERT_NE(cameraManagerObj, nullptr);
4385
4386 std::vector<SceneMode> sceneModes = cameraManagerObj->GetSupportedModes(cameras_[0]);
4387 ASSERT_TRUE(sceneModes.size() != 0);
4388
4389 sptr<CameraOutputCapability> modeAbility =
4390 cameraManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4391 ASSERT_NE(modeAbility, nullptr);
4392
4393 SelectProfiles wanted;
4394 wanted.preview.size_ = {640, 480};
4395 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4396 wanted.photo.size_ = {640, 480};
4397 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4398 wanted.video.size_ = {640, 480};
4399 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4400 wanted.video.framerates_ = {30, 30};
4401
4402 sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(sceneMode);
4403 ASSERT_NE(captureSession, nullptr);
4404 sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4405 ASSERT_NE(session, nullptr);
4406
4407 int32_t intResult = session->BeginConfig();
4408 EXPECT_EQ(intResult, 0);
4409
4410 intResult = session->AddInput(input_);
4411 EXPECT_EQ(intResult, 0);
4412
4413 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4414 ASSERT_NE(previewOutput, nullptr);
4415
4416 intResult = session->AddOutput(previewOutput);
4417 EXPECT_EQ(intResult, 0);
4418
4419 sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4420 ASSERT_NE(videoOutput, nullptr);
4421
4422 intResult = session->AddOutput(videoOutput);
4423 EXPECT_EQ(intResult, 0);
4424
4425 intResult = session->CommitConfig();
4426 EXPECT_EQ(intResult, 0);
4427
4428 FocusAssistFlashMode mode = FocusAssistFlashMode::FOCUS_ASSIST_FLASH_MODE_DEFAULT;
4429 bool isSupported;
4430 intResult = session->IsFocusAssistFlashModeSupported(mode, isSupported);
4431 EXPECT_EQ(intResult, 0);
4432 EXPECT_EQ(isSupported, true);
4433
4434 std::vector<FocusAssistFlashMode> modes = {};
4435 intResult = session->GetSupportedFocusAssistFlashModes(modes);
4436 EXPECT_EQ(intResult, 0);
4437 EXPECT_NE(modes.size(), 0);
4438
4439 session->LockForControl();
4440 intResult = session->SetFocusAssistFlashMode(modes[0]);
4441 session->UnlockForControl();
4442 EXPECT_EQ(intResult, 0);
4443 intResult = session->GetFocusAssistFlashMode(mode);
4444 EXPECT_EQ(intResult, 0);
4445
4446 EXPECT_EQ(mode, modes[0]);
4447 intResult = session->Start();
4448 EXPECT_EQ(intResult, 0);
4449 sleep(WAIT_TIME_AFTER_START);
4450
4451 intResult = ((sptr<VideoOutput>&)videoOutput)->Start();
4452 EXPECT_EQ(intResult, 0);
4453 sleep(WAIT_TIME_AFTER_RECORDING);
4454 intResult = ((sptr<VideoOutput>&)videoOutput)->Stop();
4455 session->Stop();
4456 }
4457
4458 /*
4459 * Feature: Framework
4460 * Function: Test profession video session exposure hint mode
4461 * SubFunction: NA
4462 * FunctionPoints: NA
4463 * EnvConditions: NA
4464 * CaseDescription: Test profession video session exposure hint mode
4465 */
4466 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_004, TestSize.Level0)
4467 {
4468 SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4469 if (!IsSceneModeSupported(sceneMode)) {
4470 return;
4471 }
4472 sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
4473 ASSERT_NE(cameraManagerObj, nullptr);
4474
4475 std::vector<SceneMode> sceneModes = cameraManagerObj->GetSupportedModes(cameras_[0]);
4476 ASSERT_TRUE(sceneModes.size() != 0);
4477
4478 sptr<CameraOutputCapability> modeAbility =
4479 cameraManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4480 ASSERT_NE(modeAbility, nullptr);
4481
4482 SelectProfiles wanted;
4483 wanted.preview.size_ = {640, 480};
4484 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4485 wanted.photo.size_ = {640, 480};
4486 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4487 wanted.video.size_ = {640, 480};
4488 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4489 wanted.video.framerates_ = {30, 30};
4490
4491 sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(sceneMode);
4492 ASSERT_NE(captureSession, nullptr);
4493 sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4494 ASSERT_NE(session, nullptr);
4495
4496 int32_t intResult = session->BeginConfig();
4497 EXPECT_EQ(intResult, 0);
4498
4499 intResult = session->AddInput(input_);
4500 EXPECT_EQ(intResult, 0);
4501
4502 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4503 ASSERT_NE(previewOutput, nullptr);
4504
4505 intResult = session->AddOutput(previewOutput);
4506 EXPECT_EQ(intResult, 0);
4507
4508 sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4509 ASSERT_NE(videoOutput, nullptr);
4510
4511 intResult = session->AddOutput(videoOutput);
4512 EXPECT_EQ(intResult, 0);
4513
4514
4515 intResult = session->CommitConfig();
4516 EXPECT_EQ(intResult, 0);
4517 std::vector<ExposureHintMode> modes = {};
4518 intResult = session->GetSupportedExposureHintModes(modes);
4519 EXPECT_EQ(intResult, 0);
4520 EXPECT_NE(modes.size(), 0);
4521
4522 session->LockForControl();
4523 intResult = session->SetExposureHintMode(modes[0]);
4524 EXPECT_EQ(intResult, 0);
4525 session->UnlockForControl();
4526
4527 ExposureHintMode mode;
4528 intResult = session->GetExposureHintMode(mode);
4529 EXPECT_EQ(intResult, 0);
4530
4531 EXPECT_EQ(mode, modes[0]);
4532 intResult = session->Start();
4533 EXPECT_EQ(intResult, 0);
4534 sleep(WAIT_TIME_AFTER_START);
4535
4536 intResult = ((sptr<VideoOutput>&)videoOutput)->Start();
4537 EXPECT_EQ(intResult, 0);
4538 sleep(WAIT_TIME_AFTER_RECORDING);
4539 intResult = ((sptr<VideoOutput>&)videoOutput)->Stop();
4540 session->Stop();
4541 }
4542
4543 /*
4544 * Feature: Framework
4545 * Function: Test profession video session manual_iso_props && auto_awb_props && manual_awb_props
4546 * SubFunction: NA
4547 * FunctionPoints: NA
4548 * EnvConditions: NA
4549 * CaseDescription: test profession video session manual_iso_props && auto_awb_props && manual_awb_props
4550 */
4551 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_005, TestSize.Level0)
4552 {
4553 SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4554 if (!IsSceneModeSupported(sceneMode)) {
4555 return;
4556 }
4557 sptr<CameraManager> modeManagerObj = CameraManager::GetInstance();
4558 ASSERT_NE(modeManagerObj, nullptr);
4559
4560 std::vector<SceneMode> sceneModes = modeManagerObj->GetSupportedModes(cameras_[0]);
4561 ASSERT_TRUE(sceneModes.size() != 0);
4562
4563 sptr<CameraOutputCapability> modeAbility =
4564 modeManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4565 ASSERT_NE(modeAbility, nullptr);
4566
4567 SelectProfiles wanted;
4568 wanted.preview.size_ = {640, 480};
4569 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4570 wanted.photo.size_ = {640, 480};
4571 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4572 wanted.video.size_ = {640, 480};
4573 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4574 wanted.video.framerates_ = {30, 30};
4575
4576 sptr<CaptureSession> captureSession = modeManagerObj->CreateCaptureSession(sceneMode);
4577 ASSERT_NE(captureSession, nullptr);
4578
4579 sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4580 ASSERT_NE(session, nullptr);
4581
4582 int32_t intResult = session->BeginConfig();
4583 EXPECT_EQ(intResult, 0);
4584
4585 intResult = session->AddInput(input_);
4586 EXPECT_EQ(intResult, 0);
4587
4588 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4589 ASSERT_NE(previewOutput, nullptr);
4590
4591 intResult = session->AddOutput(previewOutput);
4592 EXPECT_EQ(intResult, 0);
4593
4594 sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4595 ASSERT_NE(videoOutput, nullptr);
4596
4597 intResult = session->AddOutput(videoOutput);
4598 EXPECT_EQ(intResult, 0);
4599
4600 intResult = session->CommitConfig();
4601 EXPECT_EQ(intResult, 0);
4602
4603 bool isSupported = session->IsManualIsoSupported();
4604 if (isSupported) {
4605 std::vector<int32_t> isoRange;
4606 session->GetIsoRange(isoRange);
4607 ASSERT_EQ(isoRange.empty(), false);
4608 session->LockForControl();
4609 intResult = session->SetISO(isoRange[1] + 1);
4610 EXPECT_NE(intResult, 0);
4611 session->UnlockForControl();
4612
4613 session->LockForControl();
4614 intResult = session->SetISO(isoRange[1]);
4615 EXPECT_EQ(intResult, 0);
4616 session->UnlockForControl();
4617
4618 int32_t iso;
4619 session->GetISO(iso);
4620 EXPECT_EQ(isoRange[1], iso);
4621 }
4622
4623 std::vector<WhiteBalanceMode> supportedWhiteBalanceModes;
4624 session->GetSupportedWhiteBalanceModes(supportedWhiteBalanceModes);
4625 if (!supportedWhiteBalanceModes.empty()) {
4626 session->IsWhiteBalanceModeSupported(supportedWhiteBalanceModes[0], isSupported);
4627 ASSERT_EQ(isSupported, true);
4628 session->LockForControl();
4629 intResult = session->SetWhiteBalanceMode(supportedWhiteBalanceModes[0]);
4630 ASSERT_EQ(isSupported, 0);
4631 session->UnlockForControl();
4632 WhiteBalanceMode currentMode;
4633 session->GetWhiteBalanceMode(currentMode);
4634 ASSERT_EQ(currentMode, supportedWhiteBalanceModes[0]);
4635 }
4636
4637 session->IsManualWhiteBalanceSupported(isSupported);
4638 std::vector<int32_t> whiteBalanceRange;
4639 if (isSupported) {
4640 session->GetManualWhiteBalanceRange(whiteBalanceRange);
4641 ASSERT_EQ(whiteBalanceRange.size() == 2, true);
4642
4643 session->LockForControl();
4644 intResult = session->SetManualWhiteBalance(whiteBalanceRange[0] - 1);
4645 session->UnlockForControl();
4646
4647 int32_t wbValue;
4648 session->GetManualWhiteBalance(wbValue);
4649 ASSERT_EQ(wbValue, whiteBalanceRange[0]);
4650 } else {
4651 session->GetManualWhiteBalanceRange(whiteBalanceRange);
4652 ASSERT_EQ(whiteBalanceRange.size() < 2, true);
4653 }
4654 }
4655
4656 /*
4657 * Feature: Framework
4658 * Function: Test profession video session focus mode
4659 * SubFunction: NA
4660 * FunctionPoints: NA
4661 * EnvConditions: NA
4662 * CaseDescription: Test profession video session focus mode
4663 */
4664 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_006, TestSize.Level0)
4665 {
4666 SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4667 if (!IsSceneModeSupported(sceneMode)) {
4668 return;
4669 }
4670 sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
4671 ASSERT_NE(cameraManagerObj, nullptr);
4672
4673 std::vector<SceneMode> sceneModes = cameraManagerObj->GetSupportedModes(cameras_[0]);
4674 ASSERT_TRUE(sceneModes.size() != 0);
4675
4676 sptr<CameraOutputCapability> modeAbility =
4677 cameraManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4678 ASSERT_NE(modeAbility, nullptr);
4679
4680 SelectProfiles wanted;
4681 wanted.preview.size_ = {640, 480};
4682 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4683 wanted.photo.size_ = {640, 480};
4684 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4685 wanted.video.size_ = {640, 480};
4686 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4687 wanted.video.framerates_ = {30, 30};
4688
4689 sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(sceneMode);
4690 ASSERT_NE(captureSession, nullptr);
4691 sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4692 ASSERT_NE(session, nullptr);
4693
4694 int32_t intResult = session->BeginConfig();
4695 EXPECT_EQ(intResult, 0);
4696
4697 intResult = session->AddInput(input_);
4698 EXPECT_EQ(intResult, 0);
4699
4700 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4701 ASSERT_NE(previewOutput, nullptr);
4702
4703 intResult = session->AddOutput(previewOutput);
4704 EXPECT_EQ(intResult, 0);
4705
4706 sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4707 ASSERT_NE(videoOutput, nullptr);
4708
4709 intResult = session->AddOutput(videoOutput);
4710 EXPECT_EQ(intResult, 0);
4711
4712 intResult = session->CommitConfig();
4713 EXPECT_EQ(intResult, 0);
4714
4715 FocusMode focusMode = FocusMode::FOCUS_MODE_MANUAL;
4716 bool isSupported;
4717 intResult = session->IsFocusModeSupported(focusMode, isSupported);
4718 EXPECT_EQ(intResult, 0);
4719 EXPECT_EQ(isSupported, true);
4720
4721 std::vector<FocusMode> modes = {};
4722 intResult = session->GetSupportedFocusModes(modes);
4723 EXPECT_EQ(intResult, 0);
4724 EXPECT_NE(modes.size(), 0);
4725
4726 session->LockForControl();
4727 intResult = session->SetFocusMode(modes[0]);
4728 session->UnlockForControl();
4729 EXPECT_EQ(intResult, 0);
4730 intResult = session->GetFocusMode(focusMode);
4731 EXPECT_EQ(intResult, 0);
4732
4733 EXPECT_EQ(focusMode, modes[0]);
4734 intResult = session->Start();
4735 EXPECT_EQ(intResult, 0);
4736 sleep(WAIT_TIME_AFTER_START);
4737
4738 intResult = ((sptr<VideoOutput>&)videoOutput)->Start();
4739 EXPECT_EQ(intResult, 0);
4740 sleep(WAIT_TIME_AFTER_RECORDING);
4741 intResult = ((sptr<VideoOutput>&)videoOutput)->Stop();
4742 session->Stop();
4743 }
4744
4745 /*
4746 * Feature: Framework
4747 * Function: Test profession video session flash mode
4748 * SubFunction: NA
4749 * FunctionPoints: NA
4750 * EnvConditions: NA
4751 * CaseDescription: Test profession video session flash mode
4752 */
4753 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_007, TestSize.Level0)
4754 {
4755 SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4756 if (!IsSceneModeSupported(sceneMode)) {
4757 return;
4758 }
4759 sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
4760 ASSERT_NE(cameraManagerObj, nullptr);
4761
4762 std::vector<SceneMode> sceneModes = cameraManagerObj->GetSupportedModes(cameras_[0]);
4763 ASSERT_TRUE(sceneModes.size() != 0);
4764
4765 sptr<CameraOutputCapability> modeAbility =
4766 cameraManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4767 ASSERT_NE(modeAbility, nullptr);
4768
4769 SelectProfiles wanted;
4770 wanted.preview.size_ = {640, 480};
4771 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4772 wanted.photo.size_ = {640, 480};
4773 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4774 wanted.video.size_ = {640, 480};
4775 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4776 wanted.video.framerates_ = {30, 30};
4777
4778 sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(sceneMode);
4779 ASSERT_NE(captureSession, nullptr);
4780 sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4781 ASSERT_NE(session, nullptr);
4782
4783 int32_t intResult = session->BeginConfig();
4784 EXPECT_EQ(intResult, 0);
4785
4786 intResult = session->AddInput(input_);
4787 EXPECT_EQ(intResult, 0);
4788
4789 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4790 ASSERT_NE(previewOutput, nullptr);
4791
4792 intResult = session->AddOutput(previewOutput);
4793 EXPECT_EQ(intResult, 0);
4794
4795 sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4796 ASSERT_NE(videoOutput, nullptr);
4797
4798 intResult = session->AddOutput(videoOutput);
4799 EXPECT_EQ(intResult, 0);
4800
4801 intResult = session->CommitConfig();
4802 EXPECT_EQ(intResult, 0);
4803
4804 bool isSupported = false;
4805 intResult = session->HasFlash(isSupported);
4806 EXPECT_EQ(isSupported, true);
4807
4808 std::vector<FlashMode> modes = {};
4809 intResult = session->GetSupportedFlashModes(modes);
4810 EXPECT_EQ(intResult, 0);
4811 EXPECT_NE(modes.size(), 0);
4812
4813 intResult = session->IsFlashModeSupported(modes[0], isSupported);
4814 EXPECT_EQ(intResult, 0);
4815 EXPECT_EQ(isSupported, true);
4816
4817 session->LockForControl();
4818 intResult = session->SetFlashMode(modes[0]);
4819 EXPECT_EQ(intResult, 0);
4820 session->UnlockForControl();
4821
4822 FlashMode mode;
4823 intResult = session->GetFlashMode(mode);
4824 EXPECT_EQ(intResult, 0);
4825 EXPECT_EQ(mode, modes[0]);
4826 }
4827
4828 /*
4829 * Feature: Framework
4830 * Function: Test profession video session color effect
4831 * SubFunction: NA
4832 * FunctionPoints: NA
4833 * EnvConditions: NA
4834 * CaseDescription: Test profession video session color effect
4835 */
4836 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_008, TestSize.Level0)
4837 {
4838 SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4839 if (!IsSceneModeSupported(sceneMode)) {
4840 return;
4841 }
4842 sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
4843 ASSERT_NE(cameraManagerObj, nullptr);
4844
4845 std::vector<SceneMode> sceneModes = cameraManagerObj->GetSupportedModes(cameras_[0]);
4846 ASSERT_TRUE(sceneModes.size() != 0);
4847
4848 sptr<CameraOutputCapability> modeAbility =
4849 cameraManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4850 ASSERT_NE(modeAbility, nullptr);
4851
4852 SelectProfiles wanted;
4853 wanted.preview.size_ = {640, 480};
4854 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4855 wanted.photo.size_ = {640, 480};
4856 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4857 wanted.video.size_ = {640, 480};
4858 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4859 wanted.video.framerates_ = {30, 30};
4860
4861 sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(sceneMode);
4862 ASSERT_NE(captureSession, nullptr);
4863 sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4864 ASSERT_NE(session, nullptr);
4865
4866 int32_t intResult = session->BeginConfig();
4867 EXPECT_EQ(intResult, 0);
4868
4869 intResult = session->AddInput(input_);
4870 EXPECT_EQ(intResult, 0);
4871
4872 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4873 ASSERT_NE(previewOutput, nullptr);
4874
4875 intResult = session->AddOutput(previewOutput);
4876 EXPECT_EQ(intResult, 0);
4877
4878 sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4879 ASSERT_NE(videoOutput, nullptr);
4880
4881 intResult = session->AddOutput(videoOutput);
4882 EXPECT_EQ(intResult, 0);
4883
4884
4885 intResult = session->CommitConfig();
4886 EXPECT_EQ(intResult, 0);
4887 std::vector<ColorEffect> colorEffects = {};
4888 intResult = session->GetSupportedColorEffects(colorEffects);
4889 EXPECT_EQ(intResult, 0);
4890 EXPECT_NE(colorEffects.size(), 0);
4891
4892 session->LockForControl();
4893 intResult = session->SetColorEffect(colorEffects[0]);
4894 EXPECT_EQ(intResult, 0);
4895 session->UnlockForControl();
4896
4897 ColorEffect colorEffect;
4898 intResult = session->GetColorEffect(colorEffect);
4899 EXPECT_EQ(intResult, 0);
4900
4901 EXPECT_EQ(colorEffect, colorEffects[0]);
4902 intResult = session->Start();
4903 EXPECT_EQ(intResult, 0);
4904 sleep(WAIT_TIME_AFTER_START);
4905
4906 intResult = ((sptr<VideoOutput>&)videoOutput)->Start();
4907 EXPECT_EQ(intResult, 0);
4908 sleep(WAIT_TIME_AFTER_RECORDING);
4909 intResult = ((sptr<VideoOutput>&)videoOutput)->Stop();
4910 session->Stop();
4911 }
4912
4913 /*
4914 * Feature: Framework
4915 * Function: Test time lapse photo session with photo output
4916 * SubFunction: NA
4917 * FunctionPoints: NA
4918 * EnvConditions: NA
4919 * CaseDescription: Test can add photo output into time lapse photo session
4920 */
4921 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_001, TestSize.Level0)
4922 {
4923 if (!IsSceneModeSupported(SceneMode::TIMELAPSE_PHOTO)) {
4924 return;
4925 }
4926
4927 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::TIMELAPSE_PHOTO);
4928 ASSERT_NE(outputCapability, nullptr);
4929 auto previewProfiles = outputCapability->GetPreviewProfiles();
4930 ASSERT_FALSE(previewProfiles.empty());
4931 auto photoProfiles = outputCapability->GetPhotoProfiles();
4932 ASSERT_FALSE(photoProfiles.empty());
4933
4934 auto captureSession = manager_->CreateCaptureSession(SceneMode::TIMELAPSE_PHOTO);
4935 auto timeLapsePhotoSession = static_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
4936 ASSERT_NE(timeLapsePhotoSession, nullptr);
4937 int32_t res = timeLapsePhotoSession->BeginConfig();
4938 EXPECT_EQ(res, 0);
4939
4940 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
4941 ASSERT_NE(input, nullptr);
4942 input->Open();
4943 res = timeLapsePhotoSession->AddInput(input);
4944 EXPECT_EQ(res, 0);
4945 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
4946 ASSERT_NE(previewOutput, nullptr);
4947 EXPECT_TRUE(timeLapsePhotoSession->CanAddOutput(previewOutput));
4948 res = timeLapsePhotoSession->AddOutput(previewOutput);
4949 EXPECT_EQ(res, 0);
4950 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
4951 ASSERT_NE(photoOutput, nullptr);
4952 EXPECT_TRUE(timeLapsePhotoSession->CanAddOutput(photoOutput));
4953 res = timeLapsePhotoSession->AddOutput(photoOutput);
4954 EXPECT_EQ(res, 0);
4955
4956 res = timeLapsePhotoSession->CommitConfig();
4957 EXPECT_EQ(res, 0);
4958 res = timeLapsePhotoSession->Start();
4959 EXPECT_EQ(res, 0);
4960 sleep(WAIT_TIME_AFTER_START);
4961 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
4962 EXPECT_EQ(res, 0);
4963 sleep(WAIT_TIME_AFTER_CAPTURE);
4964 res = timeLapsePhotoSession->Stop();
4965 EXPECT_EQ(res, 0);
4966 res = timeLapsePhotoSession->Release();
4967 EXPECT_EQ(res, 0);
4968 }
4969
4970 /*
4971 * Feature: Framework
4972 * Function: Test time lapse photo session with video output
4973 * SubFunction: NA
4974 * FunctionPoints: NA
4975 * EnvConditions: NA
4976 * CaseDescription: Test can not add video output into time lapse photo session
4977 */
4978 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_002, TestSize.Level0)
4979 {
4980 if (!IsSceneModeSupported(SceneMode::TIMELAPSE_PHOTO)) {
4981 return;
4982 }
4983
4984 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::TIMELAPSE_PHOTO);
4985 ASSERT_NE(outputCapability, nullptr);
4986 auto previewProfiles = outputCapability->GetPreviewProfiles();
4987 ASSERT_FALSE(previewProfiles.empty());
4988 auto videoProfiles = outputCapability->GetVideoProfiles();
4989 ASSERT_TRUE(videoProfiles.empty());
4990 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
4991 ASSERT_NE(outputCapabilityBase, nullptr);
4992 auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
4993 ASSERT_FALSE(videoProfilesBase.empty());
4994
4995 auto captureSession = manager_->CreateCaptureSession(SceneMode::TIMELAPSE_PHOTO);
4996 auto timeLapsePhotoSession = static_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
4997 ASSERT_NE(timeLapsePhotoSession, nullptr);
4998 int32_t res = timeLapsePhotoSession->BeginConfig();
4999 EXPECT_EQ(res, 0);
5000
5001 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
5002 ASSERT_NE(input, nullptr);
5003 input->Open();
5004 res = timeLapsePhotoSession->AddInput(input);
5005 EXPECT_EQ(res, 0);
5006 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
5007 ASSERT_NE(previewOutput, nullptr);
5008 EXPECT_TRUE(timeLapsePhotoSession->CanAddOutput(previewOutput));
5009 res = timeLapsePhotoSession->AddOutput(previewOutput);
5010 EXPECT_EQ(res, 0);
5011 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
5012 ASSERT_NE(videoOutput, nullptr);
5013 EXPECT_FALSE(timeLapsePhotoSession->CanAddOutput(videoOutput));
5014 }
5015
5016 /*
5017 * Feature: Framework
5018 * Function: Test time lapse photo session try AE
5019 * SubFunction: NA
5020 * FunctionPoints: NA
5021 * EnvConditions: NA
5022 * CaseDescription: Test can start and stop try AE in time lapse photo session
5023 */
5024 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_003, TestSize.Level0)
5025 {
5026 SceneMode sceneMode = SceneMode::TIMELAPSE_PHOTO;
5027 if (!IsSceneModeSupported(sceneMode)) {
5028 return;
5029 }
5030 if (session_) {
5031 session_->Release();
5032 session_.clear();
5033 }
5034 sptr<CameraManager> cameraManager = CameraManager::GetInstance();
5035 ASSERT_NE(cameraManager, nullptr);
5036 auto cameras = cameraManager->GetSupportedCameras();
5037 ASSERT_NE(cameras.size(), 0);
5038 sptr<CameraDevice> camera = cameras[0];
5039 ASSERT_NE(camera, nullptr);
5040 sptr<CameraOutputCapability> capability = cameraManager->GetSupportedOutputCapability(camera, sceneMode);
5041 ASSERT_NE(capability, nullptr);
5042 SelectProfiles wanted;
5043 wanted.preview.size_ = {640, 480};
5044 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
5045 wanted.photo.size_ = {640, 480};
5046 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
5047 wanted.video.size_ = {640, 480};
5048 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
5049 wanted.video.framerates_ = {30, 30};
5050 sptr<CaptureSession> captureSession = cameraManager->CreateCaptureSession(sceneMode);
5051 ASSERT_NE(captureSession, nullptr);
5052 sptr<TimeLapsePhotoSession> session = reinterpret_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
5053 ASSERT_NE(session, nullptr);
5054 int32_t status = session->BeginConfig();
5055 EXPECT_EQ(status, 0);
5056 sptr<CaptureInput> input = cameraManager->CreateCameraInput(camera);
5057 ASSERT_NE(input, nullptr);
5058 status = input->Open();
5059 EXPECT_EQ(status, 0);
5060 status = session->AddInput(input);
5061 EXPECT_EQ(status, 0);
5062 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
5063 ASSERT_NE(previewOutput, nullptr);
5064 status = session->AddOutput(previewOutput);
5065 EXPECT_EQ(status, 0);
5066 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(wanted.photo);
5067 ASSERT_NE(photoOutput, nullptr);
5068 status = session->AddOutput(photoOutput);
5069 EXPECT_EQ(status, 0);
5070 status = session->CommitConfig();
5071 EXPECT_EQ(status, 0);
5072 class ExposureInfoCallbackMock : public ExposureInfoCallback {
5073 public:
OnExposureInfoChanged(ExposureInfo info)5074 void OnExposureInfoChanged(ExposureInfo info) override
5075 {
5076 EXPECT_EQ(info.exposureDurationValue, 1);
5077 }
5078 };
5079 session->SetExposureInfoCallback(make_shared<ExposureInfoCallbackMock>());
5080 static const camera_rational_t r = {
5081 .denominator = 1000000,
5082 .numerator = 1,
5083 };
5084 auto meta = make_shared<OHOS::Camera::CameraMetadata>(10, 100);
5085 EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &r, 1), true);
5086 session->ProcessExposureChange(meta);
5087
5088 class IsoInfoCallbackMock : public IsoInfoCallback {
5089 public:
OnIsoInfoChanged(IsoInfo info)5090 void OnIsoInfoChanged(IsoInfo info) override
5091 {
5092 EXPECT_EQ(info.isoValue, 1);
5093 }
5094 };
5095 session->SetIsoInfoCallback(make_shared<IsoInfoCallbackMock>());
5096 static const uint32_t iso = 1;
5097 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
5098 session->ProcessIsoInfoChange(meta);
5099
5100 static const uint32_t lumination = 256;
5101 class LuminationInfoCallbackMock : public LuminationInfoCallback {
5102 public:
OnLuminationInfoChanged(LuminationInfo info)5103 void OnLuminationInfoChanged(LuminationInfo info) override
5104 {
5105 EXPECT_EQ((int32_t)info.luminationValue, 1);
5106 }
5107 };
5108 session->SetLuminationInfoCallback(make_shared<LuminationInfoCallbackMock>());
5109 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
5110 session->ProcessLuminationChange(meta);
5111
5112 static const int32_t value = 1;
5113 class TryAEInfoCallbackMock : public TryAEInfoCallback {
5114 public:
OnTryAEInfoChanged(TryAEInfo info)5115 void OnTryAEInfoChanged(TryAEInfo info) override
5116 {
5117 EXPECT_EQ(info.isTryAEDone, true);
5118 EXPECT_EQ(info.isTryAEHintNeeded, true);
5119 EXPECT_EQ(info.previewType, TimeLapsePreviewType::DARK);
5120 EXPECT_EQ(info.captureInterval, 1);
5121 }
5122 };
5123 session->SetTryAEInfoCallback(make_shared<TryAEInfoCallbackMock>());
5124 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_DONE, &value, 1), true);
5125 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_HINT, &value, 1), true);
5126 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_PREVIEW_TYPE, &value, 1), true);
5127 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_CAPTURE_INTERVAL, &value, 1), true);
5128 session->ProcessSetTryAEChange(meta);
5129
5130 EXPECT_EQ(meta->addEntry(OHOS_CAMERA_MACRO_STATUS, &value, 1), true);
5131 session->ProcessPhysicalCameraSwitch(meta);
5132
5133 bool isTryAENeeded;
5134 status = session->IsTryAENeeded(isTryAENeeded);
5135 EXPECT_EQ(status, 0);
5136 if (isTryAENeeded) {
5137 session->LockForControl();
5138 status = session->StartTryAE();
5139 session->UnlockForControl();
5140 EXPECT_EQ(status, 0);
5141 session->LockForControl();
5142 status = session->StopTryAE();
5143 session->UnlockForControl();
5144 EXPECT_EQ(status, 0);
5145 }
5146 session->Release();
5147 }
5148
5149 /*
5150 * Feature: Framework
5151 * Function: Test time lapse photo session set time lapse interval
5152 * SubFunction: NA
5153 * FunctionPoints: NA
5154 * EnvConditions: NA
5155 * CaseDescription: Test can set time lapse interval into time lapse photo session
5156 */
5157 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_004, TestSize.Level0)
5158 {
5159 SceneMode sceneMode = SceneMode::TIMELAPSE_PHOTO;
5160 if (!IsSceneModeSupported(sceneMode)) {
5161 return;
5162 }
5163 if (session_) {
5164 session_->Release();
5165 session_.clear();
5166 }
5167 sptr<CameraManager> cameraManager = CameraManager::GetInstance();
5168 ASSERT_NE(cameraManager, nullptr);
5169 auto cameras = cameraManager->GetSupportedCameras();
5170 ASSERT_NE(cameras.size(), 0);
5171 sptr<CameraDevice> camera = cameras[0];
5172 ASSERT_NE(camera, nullptr);
5173 sptr<CameraOutputCapability> capability = cameraManager->GetSupportedOutputCapability(camera, sceneMode);
5174 ASSERT_NE(capability, nullptr);
5175 SelectProfiles wanted;
5176 wanted.preview.size_ = {640, 480};
5177 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
5178 wanted.photo.size_ = {640, 480};
5179 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
5180 wanted.video.size_ = {640, 480};
5181 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
5182 wanted.video.framerates_ = {30, 30};
5183 sptr<CaptureSession> captureSession = cameraManager->CreateCaptureSession(sceneMode);
5184 ASSERT_NE(captureSession, nullptr);
5185 sptr<TimeLapsePhotoSession> session = reinterpret_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
5186 ASSERT_NE(session, nullptr);
5187 int32_t status = session->BeginConfig();
5188 EXPECT_EQ(status, 0);
5189 sptr<CaptureInput> input = cameraManager->CreateCameraInput(camera);
5190 ASSERT_NE(input, nullptr);
5191 status = input->Open();
5192 EXPECT_EQ(status, 0);
5193 status = session->AddInput(input);
5194 EXPECT_EQ(status, 0);
5195 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
5196 ASSERT_NE(previewOutput, nullptr);
5197 status = session->AddOutput(previewOutput);
5198 EXPECT_EQ(status, 0);
5199 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(wanted.photo);
5200 ASSERT_NE(photoOutput, nullptr);
5201 status = session->AddOutput(photoOutput);
5202 EXPECT_EQ(status, 0);
5203 status = session->CommitConfig();
5204 EXPECT_EQ(status, 0);
5205 class ExposureInfoCallbackMock : public ExposureInfoCallback {
5206 public:
OnExposureInfoChanged(ExposureInfo info)5207 void OnExposureInfoChanged(ExposureInfo info) override
5208 {
5209 EXPECT_EQ(info.exposureDurationValue, 1);
5210 }
5211 };
5212 session->SetExposureInfoCallback(make_shared<ExposureInfoCallbackMock>());
5213 static const camera_rational_t r = {
5214 .denominator = 1000000,
5215 .numerator = 1,
5216 };
5217 auto meta = make_shared<OHOS::Camera::CameraMetadata>(10, 100);
5218 EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &r, 1), true);
5219 session->ProcessExposureChange(meta);
5220
5221 class IsoInfoCallbackMock : public IsoInfoCallback {
5222 public:
OnIsoInfoChanged(IsoInfo info)5223 void OnIsoInfoChanged(IsoInfo info) override
5224 {
5225 EXPECT_EQ(info.isoValue, 1);
5226 }
5227 };
5228 session->SetIsoInfoCallback(make_shared<IsoInfoCallbackMock>());
5229 static const uint32_t iso = 1;
5230 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
5231 session->ProcessIsoInfoChange(meta);
5232
5233 static const uint32_t lumination = 256;
5234 class LuminationInfoCallbackMock : public LuminationInfoCallback {
5235 public:
OnLuminationInfoChanged(LuminationInfo info)5236 void OnLuminationInfoChanged(LuminationInfo info) override
5237 {
5238 EXPECT_EQ((int32_t)info.luminationValue, 1);
5239 }
5240 };
5241 session->SetLuminationInfoCallback(make_shared<LuminationInfoCallbackMock>());
5242 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
5243 session->ProcessLuminationChange(meta);
5244
5245 static const int32_t value = 1;
5246 class TryAEInfoCallbackMock : public TryAEInfoCallback {
5247 public:
OnTryAEInfoChanged(TryAEInfo info)5248 void OnTryAEInfoChanged(TryAEInfo info) override
5249 {
5250 EXPECT_EQ(info.isTryAEDone, true);
5251 EXPECT_EQ(info.isTryAEHintNeeded, true);
5252 EXPECT_EQ(info.previewType, TimeLapsePreviewType::DARK);
5253 EXPECT_EQ(info.captureInterval, 1);
5254 }
5255 };
5256 session->SetTryAEInfoCallback(make_shared<TryAEInfoCallbackMock>());
5257 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_DONE, &value, 1), true);
5258 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_HINT, &value, 1), true);
5259 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_PREVIEW_TYPE, &value, 1), true);
5260 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_CAPTURE_INTERVAL, &value, 1), true);
5261 session->ProcessSetTryAEChange(meta);
5262
5263 EXPECT_EQ(meta->addEntry(OHOS_CAMERA_MACRO_STATUS, &value, 1), true);
5264 session->ProcessPhysicalCameraSwitch(meta);
5265
5266 vector<int32_t> range;
5267 status = session->GetSupportedTimeLapseIntervalRange(range);
5268 EXPECT_EQ(status, 0);
5269 if (!range.empty()) {
5270 session->LockForControl();
5271 status = session->SetTimeLapseInterval(range[0]);
5272 session->UnlockForControl();
5273 EXPECT_EQ(status, 0);
5274 int32_t interval;
5275 status = session->GetTimeLapseInterval(interval);
5276 EXPECT_EQ(status, 0);
5277 EXPECT_EQ(interval, range[0]);
5278 }
5279 session->Release();
5280 }
5281
5282 /*
5283 * Feature: Framework
5284 * Function: Test time lapse photo session set exposure
5285 * SubFunction: NA
5286 * FunctionPoints: NA
5287 * EnvConditions: NA
5288 * CaseDescription: Test can set exposure into time lapse photo session
5289 */
5290 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_005, TestSize.Level0)
5291 {
5292 SceneMode sceneMode = SceneMode::TIMELAPSE_PHOTO;
5293 if (!IsSceneModeSupported(sceneMode)) {
5294 return;
5295 }
5296 if (session_) {
5297 session_->Release();
5298 session_.clear();
5299 }
5300 sptr<CameraManager> cameraManager = CameraManager::GetInstance();
5301 ASSERT_NE(cameraManager, nullptr);
5302 auto cameras = cameraManager->GetSupportedCameras();
5303 ASSERT_NE(cameras.size(), 0);
5304 sptr<CameraDevice> camera = cameras[0];
5305 ASSERT_NE(camera, nullptr);
5306 sptr<CameraOutputCapability> capability = cameraManager->GetSupportedOutputCapability(camera, sceneMode);
5307 ASSERT_NE(capability, nullptr);
5308 SelectProfiles wanted;
5309 wanted.preview.size_ = {640, 480};
5310 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
5311 wanted.photo.size_ = {640, 480};
5312 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
5313 wanted.video.size_ = {640, 480};
5314 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
5315 wanted.video.framerates_ = {30, 30};
5316 sptr<CaptureSession> captureSession = cameraManager->CreateCaptureSession(sceneMode);
5317 ASSERT_NE(captureSession, nullptr);
5318 sptr<TimeLapsePhotoSession> session = reinterpret_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
5319 ASSERT_NE(session, nullptr);
5320 int32_t status = session->BeginConfig();
5321 EXPECT_EQ(status, 0);
5322 sptr<CaptureInput> input = cameraManager->CreateCameraInput(camera);
5323 ASSERT_NE(input, nullptr);
5324 status = input->Open();
5325 EXPECT_EQ(status, 0);
5326 status = session->AddInput(input);
5327 EXPECT_EQ(status, 0);
5328 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
5329 ASSERT_NE(previewOutput, nullptr);
5330 status = session->AddOutput(previewOutput);
5331 EXPECT_EQ(status, 0);
5332 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(wanted.photo);
5333 ASSERT_NE(photoOutput, nullptr);
5334 status = session->AddOutput(photoOutput);
5335 EXPECT_EQ(status, 0);
5336 status = session->CommitConfig();
5337 EXPECT_EQ(status, 0);
5338 class ExposureInfoCallbackMock : public ExposureInfoCallback {
5339 public:
OnExposureInfoChanged(ExposureInfo info)5340 void OnExposureInfoChanged(ExposureInfo info) override
5341 {
5342 EXPECT_EQ(info.exposureDurationValue, 1);
5343 }
5344 };
5345 session->SetExposureInfoCallback(make_shared<ExposureInfoCallbackMock>());
5346 static const camera_rational_t r = {
5347 .denominator = 1000000,
5348 .numerator = 1,
5349 };
5350 auto meta = make_shared<OHOS::Camera::CameraMetadata>(10, 100);
5351 EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &r, 1), true);
5352 session->ProcessExposureChange(meta);
5353
5354 class IsoInfoCallbackMock : public IsoInfoCallback {
5355 public:
OnIsoInfoChanged(IsoInfo info)5356 void OnIsoInfoChanged(IsoInfo info) override
5357 {
5358 EXPECT_EQ(info.isoValue, 1);
5359 }
5360 };
5361 session->SetIsoInfoCallback(make_shared<IsoInfoCallbackMock>());
5362 static const uint32_t iso = 1;
5363 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
5364 session->ProcessIsoInfoChange(meta);
5365
5366 static const uint32_t lumination = 256;
5367 class LuminationInfoCallbackMock : public LuminationInfoCallback {
5368 public:
OnLuminationInfoChanged(LuminationInfo info)5369 void OnLuminationInfoChanged(LuminationInfo info) override
5370 {
5371 EXPECT_EQ((int32_t)info.luminationValue, 1);
5372 }
5373 };
5374 session->SetLuminationInfoCallback(make_shared<LuminationInfoCallbackMock>());
5375 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
5376 session->ProcessLuminationChange(meta);
5377
5378 static const int32_t value = 1;
5379 class TryAEInfoCallbackMock : public TryAEInfoCallback {
5380 public:
OnTryAEInfoChanged(TryAEInfo info)5381 void OnTryAEInfoChanged(TryAEInfo info) override
5382 {
5383 EXPECT_EQ(info.isTryAEDone, true);
5384 EXPECT_EQ(info.isTryAEHintNeeded, true);
5385 EXPECT_EQ(info.previewType, TimeLapsePreviewType::DARK);
5386 EXPECT_EQ(info.captureInterval, 1);
5387 }
5388 };
5389 session->SetTryAEInfoCallback(make_shared<TryAEInfoCallbackMock>());
5390 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_DONE, &value, 1), true);
5391 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_HINT, &value, 1), true);
5392 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_PREVIEW_TYPE, &value, 1), true);
5393 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_CAPTURE_INTERVAL, &value, 1), true);
5394 session->ProcessSetTryAEChange(meta);
5395
5396 EXPECT_EQ(meta->addEntry(OHOS_CAMERA_MACRO_STATUS, &value, 1), true);
5397 session->ProcessPhysicalCameraSwitch(meta);
5398
5399 session->LockForControl();
5400 status = session->SetTimeLapseRecordState(TimeLapseRecordState::RECORDING);
5401 session->UnlockForControl();
5402 EXPECT_EQ(status, 0);
5403 session->LockForControl();
5404 status = session->SetTimeLapsePreviewType(TimeLapsePreviewType::DARK);
5405 session->UnlockForControl();
5406 EXPECT_EQ(status, 0);
5407 session->LockForControl();
5408 status = session->SetExposureHintMode(ExposureHintMode::EXPOSURE_HINT_MODE_OFF);
5409 session->UnlockForControl();
5410 EXPECT_EQ(status, 0);
5411
5412 vector<uint32_t> exposureRange;
5413 status = session->GetSupportedExposureRange(exposureRange);
5414 EXPECT_EQ(status, 0);
5415 if (!exposureRange.empty()) {
5416 session->LockForControl();
5417 status = session->SetExposure(exposureRange[0]);
5418 session->UnlockForControl();
5419 EXPECT_EQ(status, 0);
5420 uint32_t exposure;
5421 status = session->GetExposure(exposure);
5422 EXPECT_EQ(status, 0);
5423 EXPECT_EQ(exposure, exposureRange[0]);
5424 }
5425 session->Release();
5426 }
5427
5428 /*
5429 * Feature: Framework
5430 * Function: Test time lapse photo session set exposure metering mode
5431 * SubFunction: NA
5432 * FunctionPoints: NA
5433 * EnvConditions: NA
5434 * CaseDescription: Test can set exposure metering mode into time lapse photo session
5435 */
5436 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_006, TestSize.Level0)
5437 {
5438 SceneMode sceneMode = SceneMode::TIMELAPSE_PHOTO;
5439 if (!IsSceneModeSupported(sceneMode)) {
5440 return;
5441 }
5442 if (session_) {
5443 session_->Release();
5444 session_.clear();
5445 }
5446 sptr<CameraManager> cameraManager = CameraManager::GetInstance();
5447 ASSERT_NE(cameraManager, nullptr);
5448 auto cameras = cameraManager->GetSupportedCameras();
5449 ASSERT_NE(cameras.size(), 0);
5450 sptr<CameraDevice> camera = cameras[0];
5451 ASSERT_NE(camera, nullptr);
5452 sptr<CameraOutputCapability> capability = cameraManager->GetSupportedOutputCapability(camera, sceneMode);
5453 ASSERT_NE(capability, nullptr);
5454 SelectProfiles wanted;
5455 wanted.preview.size_ = {640, 480};
5456 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
5457 wanted.photo.size_ = {640, 480};
5458 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
5459 wanted.video.size_ = {640, 480};
5460 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
5461 wanted.video.framerates_ = {30, 30};
5462 sptr<CaptureSession> captureSession = cameraManager->CreateCaptureSession(sceneMode);
5463 ASSERT_NE(captureSession, nullptr);
5464 sptr<TimeLapsePhotoSession> session = reinterpret_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
5465 ASSERT_NE(session, nullptr);
5466 int32_t status = session->BeginConfig();
5467 EXPECT_EQ(status, 0);
5468 sptr<CaptureInput> input = cameraManager->CreateCameraInput(camera);
5469 ASSERT_NE(input, nullptr);
5470 status = input->Open();
5471 EXPECT_EQ(status, 0);
5472 status = session->AddInput(input);
5473 EXPECT_EQ(status, 0);
5474 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
5475 ASSERT_NE(previewOutput, nullptr);
5476 status = session->AddOutput(previewOutput);
5477 EXPECT_EQ(status, 0);
5478 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(wanted.photo);
5479 ASSERT_NE(photoOutput, nullptr);
5480 status = session->AddOutput(photoOutput);
5481 EXPECT_EQ(status, 0);
5482 status = session->CommitConfig();
5483 EXPECT_EQ(status, 0);
5484 class ExposureInfoCallbackMock : public ExposureInfoCallback {
5485 public:
OnExposureInfoChanged(ExposureInfo info)5486 void OnExposureInfoChanged(ExposureInfo info) override
5487 {
5488 EXPECT_EQ(info.exposureDurationValue, 1);
5489 }
5490 };
5491 session->SetExposureInfoCallback(make_shared<ExposureInfoCallbackMock>());
5492 static const camera_rational_t r = {
5493 .denominator = 1000000,
5494 .numerator = 1,
5495 };
5496 auto meta = make_shared<OHOS::Camera::CameraMetadata>(10, 100);
5497 EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &r, 1), true);
5498 session->ProcessExposureChange(meta);
5499
5500 class IsoInfoCallbackMock : public IsoInfoCallback {
5501 public:
OnIsoInfoChanged(IsoInfo info)5502 void OnIsoInfoChanged(IsoInfo info) override
5503 {
5504 EXPECT_EQ(info.isoValue, 1);
5505 }
5506 };
5507 session->SetIsoInfoCallback(make_shared<IsoInfoCallbackMock>());
5508 static const uint32_t iso = 1;
5509 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
5510 session->ProcessIsoInfoChange(meta);
5511
5512 static const uint32_t lumination = 256;
5513 class LuminationInfoCallbackMock : public LuminationInfoCallback {
5514 public:
OnLuminationInfoChanged(LuminationInfo info)5515 void OnLuminationInfoChanged(LuminationInfo info) override
5516 {
5517 EXPECT_EQ((int32_t)info.luminationValue, 1);
5518 }
5519 };
5520 session->SetLuminationInfoCallback(make_shared<LuminationInfoCallbackMock>());
5521 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
5522 session->ProcessLuminationChange(meta);
5523
5524 static const int32_t value = 1;
5525 class TryAEInfoCallbackMock : public TryAEInfoCallback {
5526 public:
OnTryAEInfoChanged(TryAEInfo info)5527 void OnTryAEInfoChanged(TryAEInfo info) override
5528 {
5529 EXPECT_EQ(info.isTryAEDone, true);
5530 EXPECT_EQ(info.isTryAEHintNeeded, true);
5531 EXPECT_EQ(info.previewType, TimeLapsePreviewType::DARK);
5532 EXPECT_EQ(info.captureInterval, 1);
5533 }
5534 };
5535 session->SetTryAEInfoCallback(make_shared<TryAEInfoCallbackMock>());
5536 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_DONE, &value, 1), true);
5537 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_HINT, &value, 1), true);
5538 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_PREVIEW_TYPE, &value, 1), true);
5539 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_CAPTURE_INTERVAL, &value, 1), true);
5540 session->ProcessSetTryAEChange(meta);
5541
5542 EXPECT_EQ(meta->addEntry(OHOS_CAMERA_MACRO_STATUS, &value, 1), true);
5543 session->ProcessPhysicalCameraSwitch(meta);
5544
5545 session->LockForControl();
5546 status = session->SetTimeLapseRecordState(TimeLapseRecordState::RECORDING);
5547 session->UnlockForControl();
5548 EXPECT_EQ(status, 0);
5549 session->LockForControl();
5550 status = session->SetTimeLapsePreviewType(TimeLapsePreviewType::DARK);
5551 session->UnlockForControl();
5552 EXPECT_EQ(status, 0);
5553 session->LockForControl();
5554 status = session->SetExposureHintMode(ExposureHintMode::EXPOSURE_HINT_MODE_OFF);
5555 session->UnlockForControl();
5556 EXPECT_EQ(status, 0);
5557
5558 vector<MeteringMode> modes;
5559 status = session->GetSupportedMeteringModes(modes);
5560 EXPECT_EQ(status, 0);
5561 if (!modes.empty()) {
5562 bool supported;
5563 int32_t i = METERING_MODE_CENTER_WEIGHTED;
5564 for (;i <= METERING_MODE_SPOT; i++) {
5565 status = session->IsExposureMeteringModeSupported(METERING_MODE_CENTER_WEIGHTED, supported);
5566 EXPECT_EQ(status, 0);
5567 if (status == 0 && supported) {
5568 break;
5569 }
5570 }
5571 if (supported) {
5572 session->LockForControl();
5573 status = session->SetExposureMeteringMode(static_cast<MeteringMode>(i));
5574 session->UnlockForControl();
5575 EXPECT_EQ(status, 0);
5576 MeteringMode mode;
5577 status = session->GetExposureMeteringMode(mode);
5578 EXPECT_EQ(status, 0);
5579 EXPECT_EQ(mode, i);
5580 }
5581 }
5582 session->Release();
5583 }
5584
5585 /*
5586 * Feature: Framework
5587 * Function: Test time lapse photo session set iso range
5588 * SubFunction: NA
5589 * FunctionPoints: NA
5590 * EnvConditions: NA
5591 * CaseDescription: Test can set iso range into time lapse photo session
5592 */
5593 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_007, TestSize.Level0)
5594 {
5595 SceneMode sceneMode = SceneMode::TIMELAPSE_PHOTO;
5596 if (!IsSceneModeSupported(sceneMode)) {
5597 return;
5598 }
5599 if (session_) {
5600 session_->Release();
5601 session_.clear();
5602 }
5603 sptr<CameraManager> cameraManager = CameraManager::GetInstance();
5604 ASSERT_NE(cameraManager, nullptr);
5605 auto cameras = cameraManager->GetSupportedCameras();
5606 ASSERT_NE(cameras.size(), 0);
5607 sptr<CameraDevice> camera = cameras[0];
5608 ASSERT_NE(camera, nullptr);
5609 sptr<CameraOutputCapability> capability = cameraManager->GetSupportedOutputCapability(camera, sceneMode);
5610 ASSERT_NE(capability, nullptr);
5611 SelectProfiles wanted;
5612 wanted.preview.size_ = {640, 480};
5613 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
5614 wanted.photo.size_ = {640, 480};
5615 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
5616 wanted.video.size_ = {640, 480};
5617 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
5618 wanted.video.framerates_ = {30, 30};
5619 sptr<CaptureSession> captureSession = cameraManager->CreateCaptureSession(sceneMode);
5620 ASSERT_NE(captureSession, nullptr);
5621 sptr<TimeLapsePhotoSession> session = reinterpret_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
5622 ASSERT_NE(session, nullptr);
5623 int32_t status = session->BeginConfig();
5624 EXPECT_EQ(status, 0);
5625 sptr<CaptureInput> input = cameraManager->CreateCameraInput(camera);
5626 ASSERT_NE(input, nullptr);
5627 status = input->Open();
5628 EXPECT_EQ(status, 0);
5629 status = session->AddInput(input);
5630 EXPECT_EQ(status, 0);
5631 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
5632 ASSERT_NE(previewOutput, nullptr);
5633 status = session->AddOutput(previewOutput);
5634 EXPECT_EQ(status, 0);
5635 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(wanted.photo);
5636 ASSERT_NE(photoOutput, nullptr);
5637 status = session->AddOutput(photoOutput);
5638 EXPECT_EQ(status, 0);
5639 status = session->CommitConfig();
5640 EXPECT_EQ(status, 0);
5641 class ExposureInfoCallbackMock : public ExposureInfoCallback {
5642 public:
OnExposureInfoChanged(ExposureInfo info)5643 void OnExposureInfoChanged(ExposureInfo info) override
5644 {
5645 EXPECT_EQ(info.exposureDurationValue, 1);
5646 }
5647 };
5648 session->SetExposureInfoCallback(make_shared<ExposureInfoCallbackMock>());
5649 static const camera_rational_t r = {
5650 .denominator = 1000000,
5651 .numerator = 1,
5652 };
5653 auto meta = make_shared<OHOS::Camera::CameraMetadata>(10, 100);
5654 EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &r, 1), true);
5655 session->ProcessExposureChange(meta);
5656
5657 class IsoInfoCallbackMock : public IsoInfoCallback {
5658 public:
OnIsoInfoChanged(IsoInfo info)5659 void OnIsoInfoChanged(IsoInfo info) override
5660 {
5661 EXPECT_EQ(info.isoValue, 1);
5662 }
5663 };
5664 session->SetIsoInfoCallback(make_shared<IsoInfoCallbackMock>());
5665 static const uint32_t iso = 1;
5666 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
5667 session->ProcessIsoInfoChange(meta);
5668
5669 static const uint32_t lumination = 256;
5670 class LuminationInfoCallbackMock : public LuminationInfoCallback {
5671 public:
OnLuminationInfoChanged(LuminationInfo info)5672 void OnLuminationInfoChanged(LuminationInfo info) override
5673 {
5674 EXPECT_EQ((int32_t)info.luminationValue, 1);
5675 }
5676 };
5677 session->SetLuminationInfoCallback(make_shared<LuminationInfoCallbackMock>());
5678 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
5679 session->ProcessLuminationChange(meta);
5680
5681 static const int32_t value = 1;
5682 class TryAEInfoCallbackMock : public TryAEInfoCallback {
5683 public:
OnTryAEInfoChanged(TryAEInfo info)5684 void OnTryAEInfoChanged(TryAEInfo info) override
5685 {
5686 EXPECT_EQ(info.isTryAEDone, true);
5687 EXPECT_EQ(info.isTryAEHintNeeded, true);
5688 EXPECT_EQ(info.previewType, TimeLapsePreviewType::DARK);
5689 EXPECT_EQ(info.captureInterval, 1);
5690 }
5691 };
5692 session->SetTryAEInfoCallback(make_shared<TryAEInfoCallbackMock>());
5693 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_DONE, &value, 1), true);
5694 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_HINT, &value, 1), true);
5695 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_PREVIEW_TYPE, &value, 1), true);
5696 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_CAPTURE_INTERVAL, &value, 1), true);
5697 session->ProcessSetTryAEChange(meta);
5698
5699 EXPECT_EQ(meta->addEntry(OHOS_CAMERA_MACRO_STATUS, &value, 1), true);
5700 session->ProcessPhysicalCameraSwitch(meta);
5701
5702 session->LockForControl();
5703 status = session->SetTimeLapseRecordState(TimeLapseRecordState::RECORDING);
5704 session->UnlockForControl();
5705 EXPECT_EQ(status, 0);
5706 session->LockForControl();
5707 status = session->SetTimeLapsePreviewType(TimeLapsePreviewType::DARK);
5708 session->UnlockForControl();
5709 EXPECT_EQ(status, 0);
5710 session->LockForControl();
5711 status = session->SetExposureHintMode(ExposureHintMode::EXPOSURE_HINT_MODE_OFF);
5712 session->UnlockForControl();
5713 EXPECT_EQ(status, 0);
5714
5715 bool isManualIsoSupported;
5716 status = session->IsManualIsoSupported(isManualIsoSupported);
5717 EXPECT_EQ(status, 0);
5718 if (isManualIsoSupported) {
5719 vector<int32_t> isoRange;
5720 status = session->GetIsoRange(isoRange);
5721 EXPECT_EQ(status, 0);
5722 if (!isoRange.empty()) {
5723 session->LockForControl();
5724 status = session->SetIso(isoRange[0]);
5725 session->UnlockForControl();
5726 EXPECT_EQ(status, 0);
5727 int32_t iso;
5728 status = session->GetIso(iso);
5729 EXPECT_EQ(status, 0);
5730 EXPECT_EQ(iso, isoRange[0]);
5731 }
5732 }
5733 session->Release();
5734 }
5735
5736 /*
5737 * Feature: Framework
5738 * Function: Test time lapse photo session set white balance mode
5739 * SubFunction: NA
5740 * FunctionPoints: NA
5741 * EnvConditions: NA
5742 * CaseDescription: Test can set white balance mode into time lapse photo session
5743 */
5744 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_008, TestSize.Level0)
5745 {
5746 SceneMode sceneMode = SceneMode::TIMELAPSE_PHOTO;
5747 if (!IsSceneModeSupported(sceneMode)) {
5748 return;
5749 }
5750 if (session_) {
5751 session_->Release();
5752 session_.clear();
5753 }
5754 sptr<CameraManager> cameraManager = CameraManager::GetInstance();
5755 ASSERT_NE(cameraManager, nullptr);
5756 auto cameras = cameraManager->GetSupportedCameras();
5757 ASSERT_NE(cameras.size(), 0);
5758 sptr<CameraDevice> camera = cameras[0];
5759 ASSERT_NE(camera, nullptr);
5760 sptr<CameraOutputCapability> capability = cameraManager->GetSupportedOutputCapability(camera, sceneMode);
5761 ASSERT_NE(capability, nullptr);
5762 SelectProfiles wanted;
5763 wanted.preview.size_ = {640, 480};
5764 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
5765 wanted.photo.size_ = {640, 480};
5766 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
5767 wanted.video.size_ = {640, 480};
5768 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
5769 wanted.video.framerates_ = {30, 30};
5770 sptr<CaptureSession> captureSession = cameraManager->CreateCaptureSession(sceneMode);
5771 ASSERT_NE(captureSession, nullptr);
5772 sptr<TimeLapsePhotoSession> session = reinterpret_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
5773 ASSERT_NE(session, nullptr);
5774 int32_t status = session->BeginConfig();
5775 EXPECT_EQ(status, 0);
5776 sptr<CaptureInput> input = cameraManager->CreateCameraInput(camera);
5777 ASSERT_NE(input, nullptr);
5778 status = input->Open();
5779 EXPECT_EQ(status, 0);
5780 status = session->AddInput(input);
5781 EXPECT_EQ(status, 0);
5782 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
5783 ASSERT_NE(previewOutput, nullptr);
5784 status = session->AddOutput(previewOutput);
5785 EXPECT_EQ(status, 0);
5786 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(wanted.photo);
5787 ASSERT_NE(photoOutput, nullptr);
5788 status = session->AddOutput(photoOutput);
5789 EXPECT_EQ(status, 0);
5790 status = session->CommitConfig();
5791 EXPECT_EQ(status, 0);
5792 class ExposureInfoCallbackMock : public ExposureInfoCallback {
5793 public:
OnExposureInfoChanged(ExposureInfo info)5794 void OnExposureInfoChanged(ExposureInfo info) override
5795 {
5796 EXPECT_EQ(info.exposureDurationValue, 1);
5797 }
5798 };
5799 session->SetExposureInfoCallback(make_shared<ExposureInfoCallbackMock>());
5800 static const camera_rational_t r = {
5801 .denominator = 1000000,
5802 .numerator = 1,
5803 };
5804 auto meta = make_shared<OHOS::Camera::CameraMetadata>(10, 100);
5805 EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &r, 1), true);
5806 session->ProcessExposureChange(meta);
5807
5808 class IsoInfoCallbackMock : public IsoInfoCallback {
5809 public:
OnIsoInfoChanged(IsoInfo info)5810 void OnIsoInfoChanged(IsoInfo info) override
5811 {
5812 EXPECT_EQ(info.isoValue, 1);
5813 }
5814 };
5815 session->SetIsoInfoCallback(make_shared<IsoInfoCallbackMock>());
5816 static const uint32_t iso = 1;
5817 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
5818 session->ProcessIsoInfoChange(meta);
5819
5820 static const uint32_t lumination = 256;
5821 class LuminationInfoCallbackMock : public LuminationInfoCallback {
5822 public:
OnLuminationInfoChanged(LuminationInfo info)5823 void OnLuminationInfoChanged(LuminationInfo info) override
5824 {
5825 EXPECT_EQ((int32_t)info.luminationValue, 1);
5826 }
5827 };
5828 session->SetLuminationInfoCallback(make_shared<LuminationInfoCallbackMock>());
5829 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
5830 session->ProcessLuminationChange(meta);
5831
5832 static const int32_t value = 1;
5833 class TryAEInfoCallbackMock : public TryAEInfoCallback {
5834 public:
OnTryAEInfoChanged(TryAEInfo info)5835 void OnTryAEInfoChanged(TryAEInfo info) override
5836 {
5837 EXPECT_EQ(info.isTryAEDone, true);
5838 EXPECT_EQ(info.isTryAEHintNeeded, true);
5839 EXPECT_EQ(info.previewType, TimeLapsePreviewType::DARK);
5840 EXPECT_EQ(info.captureInterval, 1);
5841 }
5842 };
5843 session->SetTryAEInfoCallback(make_shared<TryAEInfoCallbackMock>());
5844 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_DONE, &value, 1), true);
5845 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_HINT, &value, 1), true);
5846 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_PREVIEW_TYPE, &value, 1), true);
5847 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_CAPTURE_INTERVAL, &value, 1), true);
5848 session->ProcessSetTryAEChange(meta);
5849
5850 EXPECT_EQ(meta->addEntry(OHOS_CAMERA_MACRO_STATUS, &value, 1), true);
5851 session->ProcessPhysicalCameraSwitch(meta);
5852
5853 session->LockForControl();
5854 status = session->SetTimeLapseRecordState(TimeLapseRecordState::RECORDING);
5855 session->UnlockForControl();
5856 EXPECT_EQ(status, 0);
5857 session->LockForControl();
5858 status = session->SetTimeLapsePreviewType(TimeLapsePreviewType::DARK);
5859 session->UnlockForControl();
5860 EXPECT_EQ(status, 0);
5861 session->LockForControl();
5862 status = session->SetExposureHintMode(ExposureHintMode::EXPOSURE_HINT_MODE_OFF);
5863 session->UnlockForControl();
5864 EXPECT_EQ(status, 0);
5865
5866 vector<WhiteBalanceMode> wbModes;
5867 status = session->GetSupportedWhiteBalanceModes(wbModes);
5868 EXPECT_EQ(status, 0);
5869 if (!wbModes.empty()) {
5870 bool isWhiteBalanceModeSupported;
5871 status = session->IsWhiteBalanceModeSupported(wbModes[0], isWhiteBalanceModeSupported);
5872 EXPECT_EQ(status, 0);
5873 if (isWhiteBalanceModeSupported) {
5874 session->LockForControl();
5875 status = session->SetWhiteBalanceMode(wbModes[0]);
5876 session->UnlockForControl();
5877 EXPECT_EQ(status, 0);
5878 WhiteBalanceMode mode;
5879 status = session->GetWhiteBalanceMode(mode);
5880 EXPECT_EQ(status, 0);
5881 EXPECT_EQ(mode, wbModes[0]);
5882 }
5883 }
5884 session->Release();
5885 }
5886
5887 /*
5888 * Feature: Framework
5889 * Function: Test time lapse photo session set white balance range
5890 * SubFunction: NA
5891 * FunctionPoints: NA
5892 * EnvConditions: NA
5893 * CaseDescription: Test can set white balance range into time lapse photo session
5894 */
5895 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_009, TestSize.Level0)
5896 {
5897 SceneMode sceneMode = SceneMode::TIMELAPSE_PHOTO;
5898 if (!IsSceneModeSupported(sceneMode)) {
5899 return;
5900 }
5901 if (session_) {
5902 session_->Release();
5903 session_.clear();
5904 }
5905 sptr<CameraManager> cameraManager = CameraManager::GetInstance();
5906 ASSERT_NE(cameraManager, nullptr);
5907 auto cameras = cameraManager->GetSupportedCameras();
5908 ASSERT_NE(cameras.size(), 0);
5909 sptr<CameraDevice> camera = cameras[0];
5910 ASSERT_NE(camera, nullptr);
5911 sptr<CameraOutputCapability> capability = cameraManager->GetSupportedOutputCapability(camera, sceneMode);
5912 ASSERT_NE(capability, nullptr);
5913 SelectProfiles wanted;
5914 wanted.preview.size_ = {640, 480};
5915 wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
5916 wanted.photo.size_ = {640, 480};
5917 wanted.photo.format_ = CAMERA_FORMAT_JPEG;
5918 wanted.video.size_ = {640, 480};
5919 wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
5920 wanted.video.framerates_ = {30, 30};
5921 sptr<CaptureSession> captureSession = cameraManager->CreateCaptureSession(sceneMode);
5922 ASSERT_NE(captureSession, nullptr);
5923 sptr<TimeLapsePhotoSession> session = reinterpret_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
5924 ASSERT_NE(session, nullptr);
5925 int32_t status = session->BeginConfig();
5926 EXPECT_EQ(status, 0);
5927 sptr<CaptureInput> input = cameraManager->CreateCameraInput(camera);
5928 ASSERT_NE(input, nullptr);
5929 status = input->Open();
5930 EXPECT_EQ(status, 0);
5931 status = session->AddInput(input);
5932 EXPECT_EQ(status, 0);
5933 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
5934 ASSERT_NE(previewOutput, nullptr);
5935 status = session->AddOutput(previewOutput);
5936 EXPECT_EQ(status, 0);
5937 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(wanted.photo);
5938 ASSERT_NE(photoOutput, nullptr);
5939 status = session->AddOutput(photoOutput);
5940 EXPECT_EQ(status, 0);
5941 status = session->CommitConfig();
5942 EXPECT_EQ(status, 0);
5943 class ExposureInfoCallbackMock : public ExposureInfoCallback {
5944 public:
OnExposureInfoChanged(ExposureInfo info)5945 void OnExposureInfoChanged(ExposureInfo info) override
5946 {
5947 EXPECT_EQ(info.exposureDurationValue, 1);
5948 }
5949 };
5950 session->SetExposureInfoCallback(make_shared<ExposureInfoCallbackMock>());
5951 static const camera_rational_t r = {
5952 .denominator = 1000000,
5953 .numerator = 1,
5954 };
5955 auto meta = make_shared<OHOS::Camera::CameraMetadata>(10, 100);
5956 EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &r, 1), true);
5957 session->ProcessExposureChange(meta);
5958
5959 class IsoInfoCallbackMock : public IsoInfoCallback {
5960 public:
OnIsoInfoChanged(IsoInfo info)5961 void OnIsoInfoChanged(IsoInfo info) override
5962 {
5963 EXPECT_EQ(info.isoValue, 1);
5964 }
5965 };
5966 session->SetIsoInfoCallback(make_shared<IsoInfoCallbackMock>());
5967 static const uint32_t iso = 1;
5968 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
5969 session->ProcessIsoInfoChange(meta);
5970
5971 static const uint32_t lumination = 256;
5972 class LuminationInfoCallbackMock : public LuminationInfoCallback {
5973 public:
OnLuminationInfoChanged(LuminationInfo info)5974 void OnLuminationInfoChanged(LuminationInfo info) override
5975 {
5976 EXPECT_EQ((int32_t)info.luminationValue, 1);
5977 }
5978 };
5979 session->SetLuminationInfoCallback(make_shared<LuminationInfoCallbackMock>());
5980 EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
5981 session->ProcessLuminationChange(meta);
5982
5983 static const int32_t value = 1;
5984 class TryAEInfoCallbackMock : public TryAEInfoCallback {
5985 public:
OnTryAEInfoChanged(TryAEInfo info)5986 void OnTryAEInfoChanged(TryAEInfo info) override
5987 {
5988 EXPECT_EQ(info.isTryAEDone, true);
5989 EXPECT_EQ(info.isTryAEHintNeeded, true);
5990 EXPECT_EQ(info.previewType, TimeLapsePreviewType::DARK);
5991 EXPECT_EQ(info.captureInterval, 1);
5992 }
5993 };
5994 session->SetTryAEInfoCallback(make_shared<TryAEInfoCallbackMock>());
5995 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_DONE, &value, 1), true);
5996 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_HINT, &value, 1), true);
5997 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_PREVIEW_TYPE, &value, 1), true);
5998 EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_CAPTURE_INTERVAL, &value, 1), true);
5999 session->ProcessSetTryAEChange(meta);
6000
6001 EXPECT_EQ(meta->addEntry(OHOS_CAMERA_MACRO_STATUS, &value, 1), true);
6002 session->ProcessPhysicalCameraSwitch(meta);
6003
6004 session->LockForControl();
6005 status = session->SetTimeLapseRecordState(TimeLapseRecordState::RECORDING);
6006 session->UnlockForControl();
6007 EXPECT_EQ(status, 0);
6008 session->LockForControl();
6009 status = session->SetTimeLapsePreviewType(TimeLapsePreviewType::DARK);
6010 session->UnlockForControl();
6011 EXPECT_EQ(status, 0);
6012 session->LockForControl();
6013 status = session->SetExposureHintMode(ExposureHintMode::EXPOSURE_HINT_MODE_OFF);
6014 session->UnlockForControl();
6015 EXPECT_EQ(status, 0);
6016
6017 vector<int32_t> wbRange;
6018 status = session->GetWhiteBalanceRange(wbRange);
6019 EXPECT_EQ(status, 0);
6020 if (!wbRange.empty()) {
6021 session->LockForControl();
6022 status = session->SetWhiteBalance(wbRange[0]);
6023 session->UnlockForControl();
6024 EXPECT_EQ(status, 0);
6025 int32_t wb;
6026 status = session->GetWhiteBalance(wb);
6027 EXPECT_EQ(status, 0);
6028 EXPECT_EQ(wb, wbRange[0]);
6029 }
6030 session->Release();
6031 }
6032
6033 /*
6034 * Feature: Framework
6035 * Function: Test photo session with photo output
6036 * SubFunction: NA
6037 * FunctionPoints: NA
6038 * EnvConditions: NA
6039 * CaseDescription: Test can add photo output into photo session
6040 */
6041 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_001, TestSize.Level0)
6042 {
6043 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6044 return;
6045 }
6046
6047 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
6048 ASSERT_NE(outputCapability, nullptr);
6049 auto previewProfiles = outputCapability->GetPreviewProfiles();
6050 ASSERT_FALSE(previewProfiles.empty());
6051 auto photoProfiles = outputCapability->GetPhotoProfiles();
6052 ASSERT_FALSE(photoProfiles.empty());
6053
6054 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6055 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6056 ASSERT_NE(photoSession, nullptr);
6057 int32_t res = photoSession->BeginConfig();
6058 EXPECT_EQ(res, 0);
6059
6060 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6061 ASSERT_NE(input, nullptr);
6062 input->Open();
6063 res = photoSession->AddInput(input);
6064 EXPECT_EQ(res, 0);
6065 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
6066 ASSERT_NE(previewOutput, nullptr);
6067 EXPECT_TRUE(photoSession->CanAddOutput(previewOutput));
6068 res = photoSession->AddOutput(previewOutput);
6069 EXPECT_EQ(res, 0);
6070 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
6071 ASSERT_NE(photoOutput, nullptr);
6072 EXPECT_TRUE(photoSession->CanAddOutput(photoOutput));
6073 res = photoSession->AddOutput(photoOutput);
6074 EXPECT_EQ(res, 0);
6075
6076 res = photoSession->CommitConfig();
6077 EXPECT_EQ(res, 0);
6078 res = photoSession->Start();
6079 EXPECT_EQ(res, 0);
6080 sleep(WAIT_TIME_AFTER_START);
6081 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
6082 EXPECT_EQ(res, 0);
6083 sleep(WAIT_TIME_AFTER_CAPTURE);
6084 res = photoSession->Stop();
6085 EXPECT_EQ(res, 0);
6086 res = photoSession->Release();
6087 EXPECT_EQ(res, 0);
6088 }
6089
6090 /*
6091 * Feature: Framework
6092 * Function: Test photo session with video output
6093 * SubFunction: NA
6094 * FunctionPoints: NA
6095 * EnvConditions: NA
6096 * CaseDescription: Test can not add video output into photo session
6097 */
6098 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_002, TestSize.Level0)
6099 {
6100 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6101 return;
6102 }
6103
6104 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
6105 ASSERT_NE(outputCapability, nullptr);
6106 auto previewProfiles = outputCapability->GetPreviewProfiles();
6107 ASSERT_FALSE(previewProfiles.empty());
6108 auto videoProfiles = outputCapability->GetVideoProfiles();
6109 ASSERT_TRUE(videoProfiles.empty());
6110 auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
6111 ASSERT_NE(outputCapabilityBase, nullptr);
6112 auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
6113 ASSERT_FALSE(videoProfilesBase.empty());
6114
6115 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6116 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6117 ASSERT_NE(photoSession, nullptr);
6118 int32_t res = photoSession->BeginConfig();
6119 EXPECT_EQ(res, 0);
6120
6121 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6122 ASSERT_NE(input, nullptr);
6123 input->Open();
6124 res = photoSession->AddInput(input);
6125 EXPECT_EQ(res, 0);
6126 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
6127 ASSERT_NE(previewOutput, nullptr);
6128 EXPECT_TRUE(photoSession->CanAddOutput(previewOutput));
6129 res = photoSession->AddOutput(previewOutput);
6130 EXPECT_EQ(res, 0);
6131 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
6132 ASSERT_NE(videoOutput, nullptr);
6133 EXPECT_FALSE(photoSession->CanAddOutput(videoOutput));
6134 }
6135
6136 /*
6137 * Feature: Framework
6138 * Function: Test photo session set frame rate range
6139 * SubFunction: NA
6140 * FunctionPoints: NA
6141 * EnvConditions: NA
6142 * CaseDescription: Test can set frame rate range into photo session
6143 */
6144 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_003, TestSize.Level0)
6145 {
6146 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6147 return;
6148 }
6149
6150 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
6151 ASSERT_NE(outputCapability, nullptr);
6152 auto previewProfiles = outputCapability->GetPreviewProfiles();
6153 ASSERT_FALSE(previewProfiles.empty());
6154 auto photoProfiles = outputCapability->GetPhotoProfiles();
6155 ASSERT_FALSE(photoProfiles.empty());
6156
6157 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6158 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6159 ASSERT_NE(photoSession, nullptr);
6160 int32_t res = photoSession->BeginConfig();
6161 EXPECT_EQ(res, 0);
6162
6163 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6164 ASSERT_NE(input, nullptr);
6165 input->Open();
6166 res = photoSession->AddInput(input);
6167 EXPECT_EQ(res, 0);
6168 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
6169 ASSERT_NE(previewOutput, nullptr);
6170 EXPECT_TRUE(photoSession->CanAddOutput(previewOutput));
6171 res = photoSession->AddOutput(previewOutput);
6172 EXPECT_EQ(res, 0);
6173 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
6174 ASSERT_NE(photoOutput, nullptr);
6175 EXPECT_TRUE(photoSession->CanAddOutput(photoOutput));
6176 res = photoSession->AddOutput(photoOutput);
6177 EXPECT_EQ(res, 0);
6178
6179 res = photoSession->CommitConfig();
6180 EXPECT_EQ(res, 0);
6181 res = photoSession->Start();
6182 EXPECT_EQ(res, 0);
6183 sleep(WAIT_TIME_AFTER_START);
6184
6185 std::vector<std::vector<int32_t>> frameRateArray = ((sptr<PreviewOutput>&)previewOutput)->GetSupportedFrameRates();
6186 ASSERT_NE(frameRateArray.size(), 0);
6187 std::vector<int32_t> frameRateRange = ((sptr<PreviewOutput>&)previewOutput)->GetFrameRateRange();
6188 ASSERT_NE(frameRateRange.size(), 0);
6189 res = ((sptr<PreviewOutput>&)previewOutput)->canSetFrameRateRange(DEFAULT_MIN_FRAME_RATE, DEFAULT_MAX_FRAME_RATE);
6190 EXPECT_EQ(res, 0);
6191 ((sptr<PreviewOutput>&)previewOutput)->SetFrameRateRange(DEFAULT_MIN_FRAME_RATE, DEFAULT_MAX_FRAME_RATE);
6192 frameRateRange = ((sptr<PreviewOutput>&)previewOutput)->GetFrameRateRange();
6193 ASSERT_NE(frameRateRange.size(), 0);
6194 EXPECT_EQ(frameRateRange[0], DEFAULT_MIN_FRAME_RATE);
6195 EXPECT_EQ(frameRateRange[1], DEFAULT_MAX_FRAME_RATE);
6196
6197 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
6198 EXPECT_EQ(res, 0);
6199 sleep(WAIT_TIME_AFTER_CAPTURE);
6200 res = photoSession->Stop();
6201 EXPECT_EQ(res, 0);
6202 res = photoSession->Release();
6203 EXPECT_EQ(res, 0);
6204 }
6205
6206 /*
6207 * Feature: Framework
6208 * Function: Test photo session preconfig
6209 * SubFunction: NA
6210 * FunctionPoints: NA
6211 * EnvConditions: NA
6212 * CaseDescription: Test can preconfig photo session with PRECONFIG_720P, UNSPECIFIED while supported
6213 */
6214 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_004, TestSize.Level0)
6215 {
6216 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6217 return;
6218 }
6219
6220 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6221 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6222 ASSERT_NE(photoSession, nullptr);
6223 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::UNSPECIFIED)) {
6224 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::UNSPECIFIED);
6225 EXPECT_EQ(res, 0);
6226 res = photoSession->BeginConfig();
6227 EXPECT_EQ(res, 0);
6228
6229 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6230 ASSERT_NE(input, nullptr);
6231 input->Open();
6232 res = photoSession->AddInput(input);
6233 EXPECT_EQ(res, 0);
6234
6235 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6236 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6237 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6238 sptr<PreviewOutput> previewOutput = nullptr;
6239 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6240 EXPECT_EQ(res, 0);
6241 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6242 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6243 res = photoSession->AddOutput(capturePreviewOutput);
6244 EXPECT_EQ(res, 0);
6245 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6246 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6247 sptr<PhotoOutput> photoOutput = nullptr;
6248 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6249 EXPECT_EQ(res, 0);
6250 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6251 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6252 res = photoSession->AddOutput(capturePhotoOutput);
6253 EXPECT_EQ(res, 0);
6254
6255 res = photoSession->CommitConfig();
6256 EXPECT_EQ(res, 0);
6257 res = photoSession->Start();
6258 EXPECT_EQ(res, 0);
6259 sleep(WAIT_TIME_AFTER_START);
6260 res = photoOutput->Capture();
6261 EXPECT_EQ(res, 0);
6262 res = photoSession->Stop();
6263 EXPECT_EQ(res, 0);
6264 }
6265 EXPECT_EQ(photoSession->Release(), 0);
6266 }
6267
6268 /*
6269 * Feature: Framework
6270 * Function: Test photo session preconfig
6271 * SubFunction: NA
6272 * FunctionPoints: NA
6273 * EnvConditions: NA
6274 * CaseDescription: Test can preconfig photo session with PRECONFIG_720P, RATIO_1_1 while supported
6275 */
6276 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_005, TestSize.Level0)
6277 {
6278 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6279 return;
6280 }
6281
6282 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6283 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6284 ASSERT_NE(photoSession, nullptr);
6285 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_1_1)) {
6286 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_1_1);
6287 EXPECT_EQ(res, 0);
6288 res = photoSession->BeginConfig();
6289 EXPECT_EQ(res, 0);
6290
6291 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6292 ASSERT_NE(input, nullptr);
6293 input->Open();
6294 res = photoSession->AddInput(input);
6295 EXPECT_EQ(res, 0);
6296
6297 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6298 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6299 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6300 sptr<PreviewOutput> previewOutput = nullptr;
6301 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6302 EXPECT_EQ(res, 0);
6303 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6304 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6305 res = photoSession->AddOutput(capturePreviewOutput);
6306 EXPECT_EQ(res, 0);
6307 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6308 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6309 sptr<PhotoOutput> photoOutput = nullptr;
6310 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6311 EXPECT_EQ(res, 0);
6312 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6313 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6314 res = photoSession->AddOutput(capturePhotoOutput);
6315 EXPECT_EQ(res, 0);
6316
6317 res = photoSession->CommitConfig();
6318 EXPECT_EQ(res, 0);
6319 res = photoSession->Start();
6320 EXPECT_EQ(res, 0);
6321 sleep(WAIT_TIME_AFTER_START);
6322 res = photoOutput->Capture();
6323 EXPECT_EQ(res, 0);
6324 res = photoSession->Stop();
6325 EXPECT_EQ(res, 0);
6326 }
6327 EXPECT_EQ(photoSession->Release(), 0);
6328 }
6329
6330 /*
6331 * Feature: Framework
6332 * Function: Test photo session preconfig
6333 * SubFunction: NA
6334 * FunctionPoints: NA
6335 * EnvConditions: NA
6336 * CaseDescription: Test can preconfig photo session with PRECONFIG_720P, RATIO_4_3 while supported
6337 */
6338 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_006, TestSize.Level0)
6339 {
6340 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6341 return;
6342 }
6343
6344 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6345 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6346 ASSERT_NE(photoSession, nullptr);
6347 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_4_3)) {
6348 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_4_3);
6349 EXPECT_EQ(res, 0);
6350 res = photoSession->BeginConfig();
6351 EXPECT_EQ(res, 0);
6352
6353 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6354 ASSERT_NE(input, nullptr);
6355 input->Open();
6356 res = photoSession->AddInput(input);
6357 EXPECT_EQ(res, 0);
6358
6359 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6360 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6361 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6362 sptr<PreviewOutput> previewOutput = nullptr;
6363 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6364 EXPECT_EQ(res, 0);
6365 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6366 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6367 res = photoSession->AddOutput(capturePreviewOutput);
6368 EXPECT_EQ(res, 0);
6369 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6370 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6371 sptr<PhotoOutput> photoOutput = nullptr;
6372 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6373 EXPECT_EQ(res, 0);
6374 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6375 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6376 res = photoSession->AddOutput(capturePhotoOutput);
6377 EXPECT_EQ(res, 0);
6378
6379 res = photoSession->CommitConfig();
6380 EXPECT_EQ(res, 0);
6381 res = photoSession->Start();
6382 EXPECT_EQ(res, 0);
6383 sleep(WAIT_TIME_AFTER_START);
6384 res = photoOutput->Capture();
6385 EXPECT_EQ(res, 0);
6386 res = photoSession->Stop();
6387 EXPECT_EQ(res, 0);
6388 }
6389 EXPECT_EQ(photoSession->Release(), 0);
6390 }
6391
6392 /*
6393 * Feature: Framework
6394 * Function: Test photo session preconfig
6395 * SubFunction: NA
6396 * FunctionPoints: NA
6397 * EnvConditions: NA
6398 * CaseDescription: Test can preconfig photo session with PRECONFIG_720P, RATIO_16_9 while supported
6399 */
6400 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_007, TestSize.Level0)
6401 {
6402 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6403 return;
6404 }
6405
6406 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6407 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6408 ASSERT_NE(photoSession, nullptr);
6409 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_16_9)) {
6410 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_16_9);
6411 EXPECT_EQ(res, 0);
6412 res = photoSession->BeginConfig();
6413 EXPECT_EQ(res, 0);
6414
6415 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6416 ASSERT_NE(input, nullptr);
6417 input->Open();
6418 res = photoSession->AddInput(input);
6419 EXPECT_EQ(res, 0);
6420
6421 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6422 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6423 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6424 sptr<PreviewOutput> previewOutput = nullptr;
6425 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6426 EXPECT_EQ(res, 0);
6427 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6428 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6429 res = photoSession->AddOutput(capturePreviewOutput);
6430 EXPECT_EQ(res, 0);
6431 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6432 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6433 sptr<PhotoOutput> photoOutput = nullptr;
6434 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6435 EXPECT_EQ(res, 0);
6436 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6437 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6438 res = photoSession->AddOutput(capturePhotoOutput);
6439 EXPECT_EQ(res, 0);
6440
6441 res = photoSession->CommitConfig();
6442 EXPECT_EQ(res, 0);
6443 res = photoSession->Start();
6444 EXPECT_EQ(res, 0);
6445 sleep(WAIT_TIME_AFTER_START);
6446 res = photoOutput->Capture();
6447 EXPECT_EQ(res, 0);
6448 res = photoSession->Stop();
6449 EXPECT_EQ(res, 0);
6450 }
6451 EXPECT_EQ(photoSession->Release(), 0);
6452 }
6453
6454 /*
6455 * Feature: Framework
6456 * Function: Test photo session preconfig
6457 * SubFunction: NA
6458 * FunctionPoints: NA
6459 * EnvConditions: NA
6460 * CaseDescription: Test can preconfig photo session with PRECONFIG_1080P, UNSPECIFIED while supported
6461 */
6462 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_008, TestSize.Level0)
6463 {
6464 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6465 return;
6466 }
6467
6468 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6469 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6470 ASSERT_NE(photoSession, nullptr);
6471 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::UNSPECIFIED)) {
6472 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::UNSPECIFIED);
6473 EXPECT_EQ(res, 0);
6474 res = photoSession->BeginConfig();
6475 EXPECT_EQ(res, 0);
6476
6477 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6478 ASSERT_NE(input, nullptr);
6479 input->Open();
6480 res = photoSession->AddInput(input);
6481 EXPECT_EQ(res, 0);
6482
6483 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6484 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6485 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6486 sptr<PreviewOutput> previewOutput = nullptr;
6487 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6488 EXPECT_EQ(res, 0);
6489 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6490 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6491 res = photoSession->AddOutput(capturePreviewOutput);
6492 EXPECT_EQ(res, 0);
6493 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6494 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6495 sptr<PhotoOutput> photoOutput = nullptr;
6496 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6497 EXPECT_EQ(res, 0);
6498 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6499 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6500 res = photoSession->AddOutput(capturePhotoOutput);
6501 EXPECT_EQ(res, 0);
6502
6503 res = photoSession->CommitConfig();
6504 EXPECT_EQ(res, 0);
6505 res = photoSession->Start();
6506 EXPECT_EQ(res, 0);
6507 sleep(WAIT_TIME_AFTER_START);
6508 res = photoOutput->Capture();
6509 EXPECT_EQ(res, 0);
6510 res = photoSession->Stop();
6511 EXPECT_EQ(res, 0);
6512 }
6513 EXPECT_EQ(photoSession->Release(), 0);
6514 }
6515
6516 /*
6517 * Feature: Framework
6518 * Function: Test photo session preconfig
6519 * SubFunction: NA
6520 * FunctionPoints: NA
6521 * EnvConditions: NA
6522 * CaseDescription: Test can preconfig photo session with PRECONFIG_1080P, RATIO_1_1 while supported
6523 */
6524 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_009, TestSize.Level0)
6525 {
6526 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6527 return;
6528 }
6529
6530 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6531 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6532 ASSERT_NE(photoSession, nullptr);
6533 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_1_1)) {
6534 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_1_1);
6535 EXPECT_EQ(res, 0);
6536 res = photoSession->BeginConfig();
6537 EXPECT_EQ(res, 0);
6538
6539 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6540 ASSERT_NE(input, nullptr);
6541 input->Open();
6542 res = photoSession->AddInput(input);
6543 EXPECT_EQ(res, 0);
6544
6545 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6546 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6547 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6548 sptr<PreviewOutput> previewOutput = nullptr;
6549 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6550 EXPECT_EQ(res, 0);
6551 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6552 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6553 res = photoSession->AddOutput(capturePreviewOutput);
6554 EXPECT_EQ(res, 0);
6555 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6556 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6557 sptr<PhotoOutput> photoOutput = nullptr;
6558 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6559 EXPECT_EQ(res, 0);
6560 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6561 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6562 res = photoSession->AddOutput(capturePhotoOutput);
6563 EXPECT_EQ(res, 0);
6564
6565 res = photoSession->CommitConfig();
6566 EXPECT_EQ(res, 0);
6567 res = photoSession->Start();
6568 EXPECT_EQ(res, 0);
6569 sleep(WAIT_TIME_AFTER_START);
6570 res = photoOutput->Capture();
6571 EXPECT_EQ(res, 0);
6572 res = photoSession->Stop();
6573 EXPECT_EQ(res, 0);
6574 }
6575 EXPECT_EQ(photoSession->Release(), 0);
6576 }
6577
6578 /*
6579 * Feature: Framework
6580 * Function: Test photo session preconfig
6581 * SubFunction: NA
6582 * FunctionPoints: NA
6583 * EnvConditions: NA
6584 * CaseDescription: Test can preconfig photo session with PRECONFIG_1080P, RATIO_4_3 while supported
6585 */
6586 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_010, TestSize.Level0)
6587 {
6588 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6589 return;
6590 }
6591
6592 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6593 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6594 ASSERT_NE(photoSession, nullptr);
6595 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_4_3)) {
6596 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_4_3);
6597 EXPECT_EQ(res, 0);
6598 res = photoSession->BeginConfig();
6599 EXPECT_EQ(res, 0);
6600
6601 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6602 ASSERT_NE(input, nullptr);
6603 input->Open();
6604 res = photoSession->AddInput(input);
6605 EXPECT_EQ(res, 0);
6606
6607 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6608 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6609 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6610 sptr<PreviewOutput> previewOutput = nullptr;
6611 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6612 EXPECT_EQ(res, 0);
6613 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6614 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6615 res = photoSession->AddOutput(capturePreviewOutput);
6616 EXPECT_EQ(res, 0);
6617 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6618 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6619 sptr<PhotoOutput> photoOutput = nullptr;
6620 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6621 EXPECT_EQ(res, 0);
6622 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6623 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6624 res = photoSession->AddOutput(capturePhotoOutput);
6625 EXPECT_EQ(res, 0);
6626
6627 res = photoSession->CommitConfig();
6628 EXPECT_EQ(res, 0);
6629 res = photoSession->Start();
6630 EXPECT_EQ(res, 0);
6631 sleep(WAIT_TIME_AFTER_START);
6632 res = photoOutput->Capture();
6633 EXPECT_EQ(res, 0);
6634 res = photoSession->Stop();
6635 EXPECT_EQ(res, 0);
6636 }
6637 EXPECT_EQ(photoSession->Release(), 0);
6638 }
6639
6640 /*
6641 * Feature: Framework
6642 * Function: Test photo session preconfig
6643 * SubFunction: NA
6644 * FunctionPoints: NA
6645 * EnvConditions: NA
6646 * CaseDescription: Test can preconfig photo session with PRECONFIG_1080P, RATIO_16_9 while supported
6647 */
6648 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_011, TestSize.Level0)
6649 {
6650 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6651 return;
6652 }
6653
6654 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6655 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6656 ASSERT_NE(photoSession, nullptr);
6657 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_16_9)) {
6658 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_16_9);
6659 EXPECT_EQ(res, 0);
6660 res = photoSession->BeginConfig();
6661 EXPECT_EQ(res, 0);
6662
6663 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6664 ASSERT_NE(input, nullptr);
6665 input->Open();
6666 res = photoSession->AddInput(input);
6667 EXPECT_EQ(res, 0);
6668
6669 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6670 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6671 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6672 sptr<PreviewOutput> previewOutput = nullptr;
6673 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6674 EXPECT_EQ(res, 0);
6675 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6676 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6677 res = photoSession->AddOutput(capturePreviewOutput);
6678 EXPECT_EQ(res, 0);
6679 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6680 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6681 sptr<PhotoOutput> photoOutput = nullptr;
6682 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6683 EXPECT_EQ(res, 0);
6684 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6685 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6686 res = photoSession->AddOutput(capturePhotoOutput);
6687 EXPECT_EQ(res, 0);
6688
6689 res = photoSession->CommitConfig();
6690 EXPECT_EQ(res, 0);
6691 res = photoSession->Start();
6692 EXPECT_EQ(res, 0);
6693 sleep(WAIT_TIME_AFTER_START);
6694 res = photoOutput->Capture();
6695 EXPECT_EQ(res, 0);
6696 res = photoSession->Stop();
6697 EXPECT_EQ(res, 0);
6698 }
6699 EXPECT_EQ(photoSession->Release(), 0);
6700 }
6701
6702 /*
6703 * Feature: Framework
6704 * Function: Test photo session preconfig
6705 * SubFunction: NA
6706 * FunctionPoints: NA
6707 * EnvConditions: NA
6708 * CaseDescription: Test can preconfig photo session with PRECONFIG_4K, UNSPECIFIED while supported
6709 */
6710 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_012, TestSize.Level0)
6711 {
6712 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6713 return;
6714 }
6715
6716 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6717 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6718 ASSERT_NE(photoSession, nullptr);
6719 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::UNSPECIFIED)) {
6720 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::UNSPECIFIED);
6721 EXPECT_EQ(res, 0);
6722 res = photoSession->BeginConfig();
6723 EXPECT_EQ(res, 0);
6724
6725 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6726 ASSERT_NE(input, nullptr);
6727 input->Open();
6728 res = photoSession->AddInput(input);
6729 EXPECT_EQ(res, 0);
6730
6731 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6732 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6733 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6734 sptr<PreviewOutput> previewOutput = nullptr;
6735 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6736 EXPECT_EQ(res, 0);
6737 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6738 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6739 res = photoSession->AddOutput(capturePreviewOutput);
6740 EXPECT_EQ(res, 0);
6741 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6742 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6743 sptr<PhotoOutput> photoOutput = nullptr;
6744 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6745 EXPECT_EQ(res, 0);
6746 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6747 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6748 res = photoSession->AddOutput(capturePhotoOutput);
6749 EXPECT_EQ(res, 0);
6750
6751 res = photoSession->CommitConfig();
6752 EXPECT_EQ(res, 0);
6753 res = photoSession->Start();
6754 EXPECT_EQ(res, 0);
6755 sleep(WAIT_TIME_AFTER_START);
6756 res = photoOutput->Capture();
6757 EXPECT_EQ(res, 0);
6758 res = photoSession->Stop();
6759 EXPECT_EQ(res, 0);
6760 }
6761 EXPECT_EQ(photoSession->Release(), 0);
6762 }
6763
6764 /*
6765 * Feature: Framework
6766 * Function: Test photo session preconfig
6767 * SubFunction: NA
6768 * FunctionPoints: NA
6769 * EnvConditions: NA
6770 * CaseDescription: Test can preconfig photo session with PRECONFIG_4K, RATIO_1_1 while supported
6771 */
6772 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_013, TestSize.Level0)
6773 {
6774 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6775 return;
6776 }
6777
6778 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6779 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6780 ASSERT_NE(photoSession, nullptr);
6781 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_1_1)) {
6782 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_1_1);
6783 EXPECT_EQ(res, 0);
6784 res = photoSession->BeginConfig();
6785 EXPECT_EQ(res, 0);
6786
6787 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6788 ASSERT_NE(input, nullptr);
6789 input->Open();
6790 res = photoSession->AddInput(input);
6791 EXPECT_EQ(res, 0);
6792
6793 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6794 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6795 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6796 sptr<PreviewOutput> previewOutput = nullptr;
6797 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6798 EXPECT_EQ(res, 0);
6799 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6800 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6801 res = photoSession->AddOutput(capturePreviewOutput);
6802 EXPECT_EQ(res, 0);
6803 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6804 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6805 sptr<PhotoOutput> photoOutput = nullptr;
6806 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6807 EXPECT_EQ(res, 0);
6808 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6809 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6810 res = photoSession->AddOutput(capturePhotoOutput);
6811 EXPECT_EQ(res, 0);
6812
6813 res = photoSession->CommitConfig();
6814 EXPECT_EQ(res, 0);
6815 res = photoSession->Start();
6816 EXPECT_EQ(res, 0);
6817 sleep(WAIT_TIME_AFTER_START);
6818 res = photoOutput->Capture();
6819 EXPECT_EQ(res, 0);
6820 res = photoSession->Stop();
6821 EXPECT_EQ(res, 0);
6822 }
6823 EXPECT_EQ(photoSession->Release(), 0);
6824 }
6825
6826 /*
6827 * Feature: Framework
6828 * Function: Test photo session preconfig
6829 * SubFunction: NA
6830 * FunctionPoints: NA
6831 * EnvConditions: NA
6832 * CaseDescription: Test can preconfig photo session with PRECONFIG_4K, RATIO_4_3 while supported
6833 */
6834 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_014, TestSize.Level0)
6835 {
6836 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6837 return;
6838 }
6839
6840 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6841 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6842 ASSERT_NE(photoSession, nullptr);
6843 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_4_3)) {
6844 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_4_3);
6845 EXPECT_EQ(res, 0);
6846 res = photoSession->BeginConfig();
6847 EXPECT_EQ(res, 0);
6848
6849 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6850 ASSERT_NE(input, nullptr);
6851 input->Open();
6852 res = photoSession->AddInput(input);
6853 EXPECT_EQ(res, 0);
6854
6855 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6856 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6857 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6858 sptr<PreviewOutput> previewOutput = nullptr;
6859 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6860 EXPECT_EQ(res, 0);
6861 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6862 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6863 res = photoSession->AddOutput(capturePreviewOutput);
6864 EXPECT_EQ(res, 0);
6865 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6866 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6867 sptr<PhotoOutput> photoOutput = nullptr;
6868 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6869 EXPECT_EQ(res, 0);
6870 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6871 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6872 res = photoSession->AddOutput(capturePhotoOutput);
6873 EXPECT_EQ(res, 0);
6874
6875 res = photoSession->CommitConfig();
6876 EXPECT_EQ(res, 0);
6877 res = photoSession->Start();
6878 EXPECT_EQ(res, 0);
6879 sleep(WAIT_TIME_AFTER_START);
6880 res = photoOutput->Capture();
6881 EXPECT_EQ(res, 0);
6882 res = photoSession->Stop();
6883 EXPECT_EQ(res, 0);
6884 }
6885 EXPECT_EQ(photoSession->Release(), 0);
6886 }
6887
6888 /*
6889 * Feature: Framework
6890 * Function: Test photo session preconfig
6891 * SubFunction: NA
6892 * FunctionPoints: NA
6893 * EnvConditions: NA
6894 * CaseDescription: Test can preconfig photo session with PRECONFIG_4K, RATIO_16_9 while supported
6895 */
6896 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_015, TestSize.Level0)
6897 {
6898 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6899 return;
6900 }
6901
6902 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6903 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6904 ASSERT_NE(photoSession, nullptr);
6905 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_16_9)) {
6906 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_16_9);
6907 EXPECT_EQ(res, 0);
6908 res = photoSession->BeginConfig();
6909 EXPECT_EQ(res, 0);
6910
6911 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6912 ASSERT_NE(input, nullptr);
6913 input->Open();
6914 res = photoSession->AddInput(input);
6915 EXPECT_EQ(res, 0);
6916
6917 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6918 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6919 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6920 sptr<PreviewOutput> previewOutput = nullptr;
6921 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6922 EXPECT_EQ(res, 0);
6923 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6924 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6925 res = photoSession->AddOutput(capturePreviewOutput);
6926 EXPECT_EQ(res, 0);
6927 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6928 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6929 sptr<PhotoOutput> photoOutput = nullptr;
6930 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6931 EXPECT_EQ(res, 0);
6932 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6933 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6934 res = photoSession->AddOutput(capturePhotoOutput);
6935 EXPECT_EQ(res, 0);
6936
6937 res = photoSession->CommitConfig();
6938 EXPECT_EQ(res, 0);
6939 res = photoSession->Start();
6940 EXPECT_EQ(res, 0);
6941 sleep(WAIT_TIME_AFTER_START);
6942 res = photoOutput->Capture();
6943 EXPECT_EQ(res, 0);
6944 res = photoSession->Stop();
6945 EXPECT_EQ(res, 0);
6946 }
6947 EXPECT_EQ(photoSession->Release(), 0);
6948 }
6949
6950 /*
6951 * Feature: Framework
6952 * Function: Test photo session preconfig
6953 * SubFunction: NA
6954 * FunctionPoints: NA
6955 * EnvConditions: NA
6956 * CaseDescription: Test can preconfig photo session with PRECONFIG_HIGH_QUALITY, UNSPECIFIED while supported
6957 */
6958 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_016, TestSize.Level0)
6959 {
6960 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6961 return;
6962 }
6963
6964 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6965 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6966 ASSERT_NE(photoSession, nullptr);
6967 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::UNSPECIFIED)) {
6968 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::UNSPECIFIED);
6969 EXPECT_EQ(res, 0);
6970 res = photoSession->BeginConfig();
6971 EXPECT_EQ(res, 0);
6972
6973 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6974 ASSERT_NE(input, nullptr);
6975 input->Open();
6976 res = photoSession->AddInput(input);
6977 EXPECT_EQ(res, 0);
6978
6979 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6980 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6981 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6982 sptr<PreviewOutput> previewOutput = nullptr;
6983 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6984 EXPECT_EQ(res, 0);
6985 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6986 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6987 res = photoSession->AddOutput(capturePreviewOutput);
6988 EXPECT_EQ(res, 0);
6989 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6990 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6991 sptr<PhotoOutput> photoOutput = nullptr;
6992 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6993 EXPECT_EQ(res, 0);
6994 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6995 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6996 res = photoSession->AddOutput(capturePhotoOutput);
6997 EXPECT_EQ(res, 0);
6998
6999 res = photoSession->CommitConfig();
7000 EXPECT_EQ(res, 0);
7001 res = photoSession->Start();
7002 EXPECT_EQ(res, 0);
7003 sleep(WAIT_TIME_AFTER_START);
7004 res = photoOutput->Capture();
7005 EXPECT_EQ(res, 0);
7006 res = photoSession->Stop();
7007 EXPECT_EQ(res, 0);
7008 }
7009 EXPECT_EQ(photoSession->Release(), 0);
7010 }
7011
7012 /*
7013 * Feature: Framework
7014 * Function: Test photo session preconfig
7015 * SubFunction: NA
7016 * FunctionPoints: NA
7017 * EnvConditions: NA
7018 * CaseDescription: Test can preconfig photo session with PRECONFIG_HIGH_QUALITY, RATIO_1_1 while supported
7019 */
7020 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_017, TestSize.Level0)
7021 {
7022 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
7023 return;
7024 }
7025
7026 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
7027 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
7028 ASSERT_NE(photoSession, nullptr);
7029 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_1_1)) {
7030 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_1_1);
7031 EXPECT_EQ(res, 0);
7032 res = photoSession->BeginConfig();
7033 EXPECT_EQ(res, 0);
7034
7035 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
7036 ASSERT_NE(input, nullptr);
7037 input->Open();
7038 res = photoSession->AddInput(input);
7039 EXPECT_EQ(res, 0);
7040
7041 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
7042 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
7043 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
7044 sptr<PreviewOutput> previewOutput = nullptr;
7045 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
7046 EXPECT_EQ(res, 0);
7047 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
7048 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
7049 res = photoSession->AddOutput(capturePreviewOutput);
7050 EXPECT_EQ(res, 0);
7051 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
7052 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
7053 sptr<PhotoOutput> photoOutput = nullptr;
7054 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
7055 EXPECT_EQ(res, 0);
7056 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
7057 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
7058 res = photoSession->AddOutput(capturePhotoOutput);
7059 EXPECT_EQ(res, 0);
7060
7061 res = photoSession->CommitConfig();
7062 EXPECT_EQ(res, 0);
7063 res = photoSession->Start();
7064 EXPECT_EQ(res, 0);
7065 sleep(WAIT_TIME_AFTER_START);
7066 res = photoOutput->Capture();
7067 EXPECT_EQ(res, 0);
7068 res = photoSession->Stop();
7069 EXPECT_EQ(res, 0);
7070 }
7071 EXPECT_EQ(photoSession->Release(), 0);
7072 }
7073
7074 /*
7075 * Feature: Framework
7076 * Function: Test photo session preconfig
7077 * SubFunction: NA
7078 * FunctionPoints: NA
7079 * EnvConditions: NA
7080 * CaseDescription: Test can preconfig photo session with PRECONFIG_HIGH_QUALITY, RATIO_4_3 while supported
7081 */
7082 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_018, TestSize.Level0)
7083 {
7084 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
7085 return;
7086 }
7087
7088 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
7089 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
7090 ASSERT_NE(photoSession, nullptr);
7091 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_4_3)) {
7092 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_4_3);
7093 EXPECT_EQ(res, 0);
7094 res = photoSession->BeginConfig();
7095 EXPECT_EQ(res, 0);
7096
7097 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
7098 ASSERT_NE(input, nullptr);
7099 input->Open();
7100 res = photoSession->AddInput(input);
7101 EXPECT_EQ(res, 0);
7102
7103 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
7104 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
7105 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
7106 sptr<PreviewOutput> previewOutput = nullptr;
7107 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
7108 EXPECT_EQ(res, 0);
7109 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
7110 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
7111 res = photoSession->AddOutput(capturePreviewOutput);
7112 EXPECT_EQ(res, 0);
7113 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
7114 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
7115 sptr<PhotoOutput> photoOutput = nullptr;
7116 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
7117 EXPECT_EQ(res, 0);
7118 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
7119 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
7120 res = photoSession->AddOutput(capturePhotoOutput);
7121 EXPECT_EQ(res, 0);
7122
7123 res = photoSession->CommitConfig();
7124 EXPECT_EQ(res, 0);
7125 res = photoSession->Start();
7126 EXPECT_EQ(res, 0);
7127 sleep(WAIT_TIME_AFTER_START);
7128 res = photoOutput->Capture();
7129 EXPECT_EQ(res, 0);
7130 res = photoSession->Stop();
7131 EXPECT_EQ(res, 0);
7132 }
7133 EXPECT_EQ(photoSession->Release(), 0);
7134 }
7135
7136 /*
7137 * Feature: Framework
7138 * Function: Test photo session preconfig
7139 * SubFunction: NA
7140 * FunctionPoints: NA
7141 * EnvConditions: NA
7142 * CaseDescription: Test can preconfig photo session with PRECONFIG_HIGH_QUALITY, RATIO_16_9 while supported
7143 */
7144 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_019, TestSize.Level0)
7145 {
7146 if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
7147 return;
7148 }
7149
7150 auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
7151 auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
7152 ASSERT_NE(photoSession, nullptr);
7153 if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_16_9)) {
7154 int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_16_9);
7155 EXPECT_EQ(res, 0);
7156 res = photoSession->BeginConfig();
7157 EXPECT_EQ(res, 0);
7158
7159 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
7160 ASSERT_NE(input, nullptr);
7161 input->Open();
7162 res = photoSession->AddInput(input);
7163 EXPECT_EQ(res, 0);
7164
7165 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
7166 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
7167 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
7168 sptr<PreviewOutput> previewOutput = nullptr;
7169 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
7170 EXPECT_EQ(res, 0);
7171 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
7172 EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
7173 res = photoSession->AddOutput(capturePreviewOutput);
7174 EXPECT_EQ(res, 0);
7175 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
7176 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
7177 sptr<PhotoOutput> photoOutput = nullptr;
7178 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
7179 EXPECT_EQ(res, 0);
7180 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
7181 EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
7182 res = photoSession->AddOutput(capturePhotoOutput);
7183 EXPECT_EQ(res, 0);
7184
7185 res = photoSession->CommitConfig();
7186 EXPECT_EQ(res, 0);
7187 res = photoSession->Start();
7188 EXPECT_EQ(res, 0);
7189 sleep(WAIT_TIME_AFTER_START);
7190 res = photoOutput->Capture();
7191 EXPECT_EQ(res, 0);
7192 res = photoSession->Stop();
7193 EXPECT_EQ(res, 0);
7194 }
7195 EXPECT_EQ(photoSession->Release(), 0);
7196 }
7197
7198 /*
7199 * Feature: Framework
7200 * Function: Test photo session ability function
7201 * SubFunction: NA
7202 * FunctionPoints: NA
7203 * EnvConditions: NA
7204 * CaseDescription: Test photo session ability function
7205 */
7206 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_020, TestSize.Level0)
7207 {
7208 SceneMode photoMode = SceneMode::CAPTURE;
7209 if (!IsSceneModeSupported(photoMode)) {
7210 return;
7211 }
7212 sptr<CameraManager> cameraMgr = CameraManager::GetInstance();
7213 ASSERT_NE(cameraMgr, nullptr);
7214
7215 sptr<CameraOutputCapability> capability = cameraMgr->GetSupportedOutputCapability(cameras_[0], photoMode);
7216 ASSERT_NE(capability, nullptr);
7217
7218 sptr<CaptureSession> captureSession = cameraMgr->CreateCaptureSession(photoMode);
7219 ASSERT_NE(captureSession, nullptr);
7220
7221 sptr<PhotoSession> photoSession = static_cast<PhotoSession *>(captureSession.GetRefPtr());
7222 ASSERT_NE(photoSession, nullptr);
7223
7224 std::vector<sptr<CameraOutputCapability>> cocList = photoSession->GetCameraOutputCapabilities(cameras_[0]);
7225 ASSERT_TRUE(cocList.size() != 0);
7226 auto previewProfiles = cocList[0]->GetPreviewProfiles();
7227 auto photoProfiles = cocList[0]->GetPhotoProfiles();
7228 auto videoProfiles = cocList[0]->GetVideoProfiles();
7229
7230 int32_t intResult = photoSession->BeginConfig();
7231 EXPECT_EQ(intResult, 0);
7232
7233 intResult = photoSession->AddInput(input_);
7234 EXPECT_EQ(intResult, 0);
7235
7236 sptr<CaptureOutput> photoOutput = CreatePhotoOutput();
7237 ASSERT_NE(photoOutput, nullptr);
7238 intResult = photoSession->AddOutput(photoOutput);
7239 EXPECT_EQ(intResult, 0);
7240
7241 sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
7242 ASSERT_NE(previewOutput, nullptr);
7243 intResult = photoSession->AddOutput(previewOutput);
7244 EXPECT_EQ(intResult, 0);
7245
7246 intResult = photoSession->CommitConfig();
7247 EXPECT_EQ(intResult, 0);
7248
7249 auto photoFunctionsList = photoSession->GetSessionFunctions(previewProfiles, photoProfiles, videoProfiles, true);
7250 ASSERT_TRUE(photoFunctionsList.size() != 0);
7251 auto photoFunctions = photoFunctionsList[0];
7252 photoFunctions->HasFlash();
7253 photoFunctions->GetSupportedFocusModes();
7254 photoFunctions->GetSupportedBeautyTypes();
7255 photoFunctions->GetSupportedBeautyRange(BeautyType::AUTO_TYPE);
7256 photoFunctions->GetSupportedColorEffects();
7257 photoFunctions->GetSupportedColorSpaces();
7258 photoFunctions->IsFocusModeSupported(FocusMode::FOCUS_MODE_MANUAL);
7259 std::vector<sptr<CameraAbility>> photoConflictFunctionsList = photoSession->GetSessionConflictFunctions();
7260
7261 std::vector<float> zoomRatioRange = photoSession->GetZoomRatioRange();
7262 ASSERT_NE(zoomRatioRange.size(), 0);
7263
7264 photoSession->LockForControl();
7265 photoSession->EnableMacro(true);
7266 photoSession->UnlockForControl();
7267
7268 zoomRatioRange = photoSession->GetZoomRatioRange();
7269 ASSERT_NE(zoomRatioRange.size(), 0);
7270
7271 photoSession->LockForControl();
7272 photoSession->EnableMacro(false);
7273 photoSession->UnlockForControl();
7274
7275 photoSession->IsMacroSupported();
7276
7277 photoSession->LockForControl();
7278 photoSession->SetZoomRatio(zoomRatioRange[1]);
7279 photoSession->UnlockForControl();
7280
7281 photoSession->IsMacroSupported();
7282 }
7283
7284 /*
7285 * Feature: Framework
7286 * Function: Test photo session with CreateCaptureSession
7287 * SubFunction: NA
7288 * FunctionPoints: NA
7289 * EnvConditions: NA
7290 * CaseDescription: Test photo session with CreateCaptureSession
7291 */
7292 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_021, TestSize.Level0)
7293 {
7294 SceneMode mode = SceneMode::CAPTURE;
7295 sptr<CameraManager> modeManagerObj = CameraManager::GetInstance();
7296 ASSERT_NE(modeManagerObj, nullptr);
7297
7298 sptr<CaptureSession> captureSession = modeManagerObj->CreateCaptureSession(mode);
7299 ASSERT_NE(captureSession, nullptr);
7300 }
7301
7302 /*
7303 * Feature: Framework
7304 * Function: Test photo session abnormal branches
7305 * SubFunction: NA
7306 * FunctionPoints: NA
7307 * EnvConditions: NA
7308 * CaseDescription: Test photo session abnormal branches
7309 */
7310 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_022, TestSize.Level0)
7311 {
7312 if (!IsSupportNow()) {
7313 return;
7314 }
7315 sptr<CaptureSession> captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
7316 ASSERT_NE(captureSession, nullptr);
7317 std::vector<float> virtualApertures = {};
7318 float aperture;
7319 EXPECT_EQ(captureSession->GetSupportedVirtualApertures(virtualApertures), SESSION_NOT_CONFIG);
7320 EXPECT_EQ(captureSession->GetVirtualAperture(aperture), SESSION_NOT_CONFIG);
7321 EXPECT_EQ(captureSession->SetVirtualAperture(aperture), SESSION_NOT_CONFIG);
7322 }
7323
7324 /*
7325 * Feature: Framework
7326 * Function: Test photo session with VirtualAperture
7327 * SubFunction: NA
7328 * FunctionPoints: NA
7329 * EnvConditions: NA
7330 * CaseDescription: Test photo session with VirtualAperture
7331 */
7332 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_023, TestSize.Level0)
7333 {
7334 SceneMode captureMode = SceneMode::CAPTURE;
7335 if (!IsSceneModeSupported(captureMode)) {
7336 return;
7337 }
7338 if (session_) {
7339 MEDIA_INFO_LOG("old session exist, need release");
7340 session_->Release();
7341 }
7342 sptr<CameraManager> modeManagerObj = CameraManager::GetInstance();
7343 ASSERT_NE(modeManagerObj, nullptr);
7344
7345 std::vector<SceneMode> modes = modeManagerObj->GetSupportedModes(cameras_[0]);
7346 ASSERT_TRUE(modes.size() != 0);
7347
7348
7349 sptr<CameraOutputCapability> modeAbility =
7350 modeManagerObj->GetSupportedOutputCapability(cameras_[0], captureMode);
7351 ASSERT_NE(modeAbility, nullptr);
7352
7353 sptr<CaptureSession> captureSession = modeManagerObj->CreateCaptureSession(captureMode);
7354 ASSERT_NE(captureSession, nullptr);
7355
7356 int32_t intResult = captureSession->BeginConfig();
7357 EXPECT_EQ(intResult, 0);
7358
7359 intResult = captureSession->AddInput(input_);
7360 EXPECT_EQ(intResult, 0);
7361
7362 camera_rational_t ratio = {
7363 .numerator = 16,
7364 .denominator=9
7365 };
7366
7367 Profile profile = SelectProfileByRatioAndFormat(modeAbility, ratio, photoFormat_);
7368 ASSERT_NE(profile.format_, -1);
7369
7370 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(profile);
7371 ASSERT_NE(photoOutput, nullptr);
7372
7373 intResult = captureSession->AddOutput(photoOutput);
7374 EXPECT_EQ(intResult, 0);
7375
7376 profile = SelectProfileByRatioAndFormat(modeAbility, ratio, previewFormat_);
7377 ASSERT_NE(profile.format_, -1);
7378
7379 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(profile);
7380 ASSERT_NE(previewOutput, nullptr);
7381
7382 intResult = captureSession->AddOutput(previewOutput);
7383 EXPECT_EQ(intResult, 0);
7384
7385 intResult = captureSession->CommitConfig();
7386 EXPECT_EQ(intResult, 0);
7387
7388 captureSession->LockForControl();
7389
7390 std::vector<float> virtualApertures = {};
7391 EXPECT_EQ(captureSession->GetSupportedVirtualApertures(virtualApertures), 0);
7392 EXPECT_EQ(captureSession->SetVirtualAperture(virtualApertures[0]), 0);
7393
7394 captureSession->UnlockForControl();
7395 float aperture;
7396 EXPECT_EQ(captureSession->GetVirtualAperture(aperture), 0);
7397 EXPECT_EQ(aperture, virtualApertures[0]);
7398
7399 intResult = captureSession->Start();
7400 EXPECT_EQ(intResult, 0);
7401 sleep(WAIT_TIME_AFTER_START);
7402
7403 intResult = ((sptr<PhotoOutput>&)photoOutput)->Capture();
7404 EXPECT_EQ(intResult, 0);
7405 sleep(WAIT_TIME_AFTER_CAPTURE);
7406
7407 captureSession->Stop();
7408 }
7409
7410 /*
7411 * Feature: Framework
7412 * Function: Test photo session set default color space
7413 * SubFunction: NA
7414 * FunctionPoints: NA
7415 * EnvConditions: NA
7416 * CaseDescription: Test photo session set default color space
7417 */
7418 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_024, TestSize.Level0)
7419 {
7420 sptr<CameraInput> camInput = (sptr<CameraInput>&)input_;
7421 camInput->Open();
7422
7423 session_->SetMode(SceneMode::CAPTURE);
7424 int32_t intResult = session_->BeginConfig();
7425
7426 EXPECT_EQ(intResult, 0);
7427
7428 intResult = session_->AddInput(input_);
7429 EXPECT_EQ(intResult, 0);
7430
7431 sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
7432 ASSERT_NE(previewOutput, nullptr);
7433
7434 intResult = session_->AddOutput(previewOutput);
7435 EXPECT_EQ(intResult, 0);
7436
7437 intResult = session_->CommitConfig();
7438 EXPECT_EQ(intResult, 0);
7439
7440 std::vector<ColorSpace> colorSpaceLists = session_->GetSupportedColorSpaces();
7441 bool falg = false;
7442 for (auto curColorSpace : colorSpaceLists) {
7443 if ( curColorSpace == ColorSpace::SRGB) {
7444 falg = true;
7445 break;
7446 }
7447 }
7448 if (colorSpaceLists.size() != 0) {
7449 ColorSpace colorSpace;
7450 intResult = session_->GetActiveColorSpace(colorSpace);
7451 EXPECT_EQ(intResult, 0);
7452 if (!falg) {
7453 MEDIA_ERR_LOG("current session not supported colorSpace SRGB");
7454 return;
7455 }
7456 EXPECT_EQ(ColorSpace::SRGB, colorSpace);
7457 }
7458
7459 intResult = session_->Start();
7460 EXPECT_EQ(intResult, 0);
7461
7462 sleep(WAIT_TIME_AFTER_START);
7463
7464 intResult = session_->Stop();
7465 EXPECT_EQ(intResult, 0);
7466 }
7467
7468 /*
7469 * Feature: Framework
7470 * Function: Test photo session set color space before commit config
7471 * SubFunction: NA
7472 * FunctionPoints: NA
7473 * EnvConditions: NA
7474 * CaseDescription: Test photo session set color space before commit config
7475 */
7476 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_025, TestSize.Level0)
7477 {
7478 sptr<CameraInput> camInput = (sptr<CameraInput>&)input_;
7479 camInput->Open();
7480
7481 session_->SetMode(SceneMode::CAPTURE);
7482 int32_t intResult = session_->BeginConfig();
7483
7484 EXPECT_EQ(intResult, 0);
7485
7486 intResult = session_->AddInput(input_);
7487 EXPECT_EQ(intResult, 0);
7488
7489 sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
7490 ASSERT_NE(previewOutput, nullptr);
7491
7492 intResult = session_->AddOutput(previewOutput);
7493 EXPECT_EQ(intResult, 0);
7494
7495 std::vector<ColorSpace> colorSpaceLists = session_->GetSupportedColorSpaces();
7496 if (colorSpaceLists.size() != 0) {
7497 intResult = session_->SetColorSpace(colorSpaceLists[1]);
7498 EXPECT_EQ(intResult, 0);
7499 ColorSpace colorSpace;
7500 intResult = session_->GetActiveColorSpace(colorSpace);
7501 EXPECT_EQ(intResult, 0);
7502 EXPECT_EQ(colorSpaceLists[1], colorSpace);
7503 }
7504
7505 intResult = session_->CommitConfig();
7506 EXPECT_EQ(intResult, 0);
7507
7508 intResult = session_->Start();
7509 EXPECT_EQ(intResult, 0);
7510
7511 sleep(WAIT_TIME_AFTER_START);
7512
7513 intResult = session_->Stop();
7514 EXPECT_EQ(intResult, 0);
7515 }
7516
7517 /*
7518 * Feature: Framework
7519 * Function: Test photo session set color space after commit config
7520 * SubFunction: NA
7521 * FunctionPoints: NA
7522 * EnvConditions: NA
7523 * CaseDescription: Test photo session set color space after commit config
7524 */
7525 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_026, TestSize.Level0)
7526 {
7527 sptr<CameraInput> camInput = (sptr<CameraInput>&)input_;
7528 camInput->Open();
7529
7530 session_->SetMode(SceneMode::CAPTURE);
7531 int32_t intResult = session_->BeginConfig();
7532
7533 EXPECT_EQ(intResult, 0);
7534
7535 intResult = session_->AddInput(input_);
7536 EXPECT_EQ(intResult, 0);
7537
7538 sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
7539 ASSERT_NE(previewOutput, nullptr);
7540
7541 intResult = session_->AddOutput(previewOutput);
7542 EXPECT_EQ(intResult, 0);
7543
7544 intResult = session_->CommitConfig();
7545 EXPECT_EQ(intResult, 0);
7546
7547
7548 std::vector<ColorSpace> colorSpaceLists = session_->GetSupportedColorSpaces();
7549 if (colorSpaceLists.size() != 0) {
7550 intResult = session_->SetColorSpace(colorSpaceLists[1]);
7551 EXPECT_EQ(intResult, 0);
7552 ColorSpace colorSpace;
7553 intResult = session_->GetActiveColorSpace(colorSpace);
7554 EXPECT_EQ(intResult, 0);
7555 EXPECT_EQ(colorSpaceLists[1], colorSpace);
7556 }
7557
7558 intResult = session_->Start();
7559 EXPECT_EQ(intResult, 0);
7560
7561 sleep(WAIT_TIME_AFTER_START);
7562
7563 intResult = session_->Stop();
7564 EXPECT_EQ(intResult, 0);
7565 }
7566
7567 /*
7568 * Feature: Framework
7569 * Function: Test photo session set color space after session start
7570 * SubFunction: NA
7571 * FunctionPoints: NA
7572 * EnvConditions: NA
7573 * CaseDescription: Test photo session set color space after session start
7574 */
7575 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_027, TestSize.Level0)
7576 {
7577 sptr<CameraInput> camInput = (sptr<CameraInput>&)input_;
7578 camInput->Open();
7579
7580 session_->SetMode(SceneMode::CAPTURE);
7581 int32_t intResult = session_->BeginConfig();
7582
7583 EXPECT_EQ(intResult, 0);
7584
7585 intResult = session_->AddInput(input_);
7586 EXPECT_EQ(intResult, 0);
7587
7588 sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
7589 ASSERT_NE(previewOutput, nullptr);
7590
7591 intResult = session_->AddOutput(previewOutput);
7592 EXPECT_EQ(intResult, 0);
7593
7594 intResult = session_->CommitConfig();
7595 EXPECT_EQ(intResult, 0);
7596
7597 intResult = session_->Start();
7598 EXPECT_EQ(intResult, 0);
7599
7600 std::vector<ColorSpace> colorSpaceLists = session_->GetSupportedColorSpaces();
7601 if (colorSpaceLists.size() != 0) {
7602 intResult = session_->SetColorSpace(colorSpaceLists[1]);
7603 EXPECT_EQ(intResult, 0);
7604 ColorSpace colorSpace;
7605 intResult = session_->GetActiveColorSpace(colorSpace);
7606 EXPECT_EQ(intResult, 0);
7607 EXPECT_EQ(colorSpaceLists[1], colorSpace);
7608 }
7609
7610 sleep(WAIT_TIME_AFTER_START);
7611
7612 intResult = session_->Stop();
7613 EXPECT_EQ(intResult, 0);
7614 }
7615
7616 /*
7617 * Feature: Framework
7618 * Function: Test photo session with low light boost
7619 * SubFunction: NA
7620 * FunctionPoints: NA
7621 * EnvConditions: NA
7622 * CaseDescription: Test photo session with low light boost
7623 */
7624 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_028, TestSize.Level0)
7625 {
7626 session_->SetMode(SceneMode::CAPTURE);
7627 int32_t intResult = session_->BeginConfig();
7628
7629 EXPECT_EQ(intResult, 0);
7630
7631 intResult = session_->AddInput(input_);
7632 EXPECT_EQ(intResult, 0);
7633
7634 sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
7635 ASSERT_NE(previewOutput, nullptr);
7636
7637 intResult = session_->AddOutput(previewOutput);
7638 EXPECT_EQ(intResult, 0);
7639
7640 bool isLowLightBoostSupported = session_->IsFeatureSupported(FEATURE_LOW_LIGHT_BOOST);
7641
7642 if (isLowLightBoostSupported) {
7643 intResult = session_->EnableFeature(FEATURE_LOW_LIGHT_BOOST, true);
7644 EXPECT_EQ(intResult, SESSION_NOT_CONFIG);
7645 }
7646
7647 intResult = session_->CommitConfig();
7648 EXPECT_EQ(intResult, 0);
7649
7650 isLowLightBoostSupported = session_->IsFeatureSupported(FEATURE_LOW_LIGHT_BOOST);
7651 if (isLowLightBoostSupported) {
7652 session_->SetFeatureDetectionStatusCallback(std::make_shared<AppCallback>());
7653 session_->LockForControl();
7654 intResult = session_->EnableLowLightDetection(true);
7655 session_->UnlockForControl();
7656 EXPECT_EQ(intResult, 0);
7657 }
7658
7659 intResult = session_->Start();
7660 EXPECT_EQ(intResult, 0);
7661
7662 sleep(WAIT_TIME_AFTER_START);
7663
7664 intResult = session_->Stop();
7665 EXPECT_EQ(intResult, 0);
7666 }
7667
7668 /*
7669 * Feature: Framework
7670 * Function: Test photo session sketch functions
7671 * SubFunction: NA
7672 * FunctionPoints: NA
7673 * EnvConditions: NA
7674 * CaseDescription: Test photo session sketch functions
7675 */
7676 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_029, TestSize.Level0)
7677 {
7678 auto previewProfile = GetSketchPreviewProfile();
7679 if (previewProfile == nullptr) {
7680 EXPECT_EQ(previewProfile.get(), nullptr);
7681 return;
7682 }
7683 auto output = CreatePreviewOutput(*previewProfile);
7684 ASSERT_NE(output, nullptr);
7685
7686 session_->SetMode(SceneMode::CAPTURE);
7687 int32_t intResult = session_->BeginConfig();
7688 EXPECT_EQ(intResult, 0);
7689
7690 intResult = session_->AddInput(input_);
7691 EXPECT_EQ(intResult, 0);
7692
7693 intResult = session_->AddOutput(output);
7694 EXPECT_EQ(intResult, 0);
7695
7696 sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
7697 bool isSketchSupport = previewOutput->IsSketchSupported();
7698 if (!isSketchSupport) {
7699 return;
7700 }
7701
7702 int sketchEnableRatio = previewOutput->GetSketchRatio();
7703 EXPECT_GT(sketchEnableRatio, 0);
7704
7705 intResult = previewOutput->EnableSketch(true);
7706 EXPECT_EQ(intResult, 0);
7707
7708 intResult = session_->CommitConfig();
7709 EXPECT_EQ(intResult, 0);
7710
7711 intResult = previewOutput->AttachSketchSurface(CreateSketchSurface(previewProfile->GetCameraFormat()));
7712 EXPECT_EQ(intResult, 0);
7713
7714 intResult = session_->Start();
7715 EXPECT_EQ(intResult, 0);
7716
7717 sleep(WAIT_TIME_AFTER_START);
7718
7719 intResult = session_->Stop();
7720 EXPECT_EQ(intResult, 0);
7721 }
7722
7723 /*
7724 * Feature: Framework
7725 * Function: Test photo session sketch functions callback
7726 * SubFunction: NA
7727 * FunctionPoints: NA
7728 * EnvConditions: NA
7729 * CaseDescription: Test photo session sketch functions callback
7730 */
7731 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_030, TestSize.Level0)
7732 {
7733 auto previewProfile = GetSketchPreviewProfile();
7734 if (previewProfile == nullptr) {
7735 EXPECT_EQ(previewProfile.get(), nullptr);
7736 return;
7737 }
7738 auto output = CreatePreviewOutput(*previewProfile);
7739 ASSERT_NE(output, nullptr);
7740
7741 session_->SetMode(SceneMode::CAPTURE);
7742 int32_t intResult = session_->BeginConfig();
7743 EXPECT_EQ(intResult, 0);
7744
7745 intResult = session_->AddInput(input_);
7746 EXPECT_EQ(intResult, 0);
7747
7748 intResult = session_->AddOutput(output);
7749 EXPECT_EQ(intResult, 0);
7750
7751 sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
7752 bool isSketchSupport = previewOutput->IsSketchSupported();
7753 if (!isSketchSupport) {
7754 return;
7755 }
7756
7757 previewOutput->SetCallback(std::make_shared<AppCallback>());
7758
7759 int sketchEnableRatio = previewOutput->GetSketchRatio();
7760 EXPECT_GT(sketchEnableRatio, 0);
7761
7762 intResult = previewOutput->EnableSketch(true);
7763 EXPECT_EQ(intResult, 0);
7764
7765 intResult = session_->CommitConfig();
7766 EXPECT_EQ(intResult, 0);
7767
7768 intResult = previewOutput->AttachSketchSurface(CreateSketchSurface(previewProfile->GetCameraFormat()));
7769 EXPECT_EQ(intResult, 0);
7770
7771 intResult = session_->Start();
7772 EXPECT_EQ(intResult, 0);
7773
7774 sleep(WAIT_TIME_AFTER_START);
7775
7776 EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 0);
7777
7778 session_->LockForControl();
7779 intResult = session_->SetZoomRatio(30.0f);
7780 EXPECT_EQ(intResult, 0);
7781 session_->UnlockForControl();
7782
7783 sleep(WAIT_TIME_AFTER_START);
7784
7785 EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 1);
7786 g_previewEvents.reset();
7787
7788 sleep(WAIT_TIME_AFTER_START);
7789 auto statusSize = g_sketchStatus.size();
7790 EXPECT_GT(statusSize, 0);
7791 if (statusSize == 2) {
7792 EXPECT_EQ(g_sketchStatus.front(), 3);
7793 g_sketchStatus.pop_front();
7794 EXPECT_EQ(g_sketchStatus.front(), 1);
7795 g_sketchStatus.pop_front();
7796 }
7797
7798 sleep(1);
7799 EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 0);
7800
7801 intResult = session_->Stop();
7802 EXPECT_EQ(intResult, 0);
7803 }
7804
7805 /*
7806 * Feature: Framework
7807 * Function: Test photo session sketch functions anomalous branch
7808 * SubFunction: NA
7809 * FunctionPoints: NA
7810 * EnvConditions: NA
7811 * CaseDescription: Test photo session sketch functions anomalous branch
7812 */
7813 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_031, TestSize.Level0)
7814 {
7815 auto previewProfile = GetSketchPreviewProfile();
7816 if (previewProfile == nullptr) {
7817 EXPECT_EQ(previewProfile.get(), nullptr);
7818 return;
7819 }
7820 auto output = CreatePreviewOutput(*previewProfile);
7821 ASSERT_NE(output, nullptr);
7822
7823 sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
7824 bool isSketchSupport = previewOutput->IsSketchSupported();
7825 ASSERT_FALSE(isSketchSupport);
7826
7827 session_->SetMode(SceneMode::CAPTURE);
7828 int32_t intResult = session_->BeginConfig();
7829
7830 EXPECT_EQ(intResult, 0);
7831
7832 intResult = session_->AddInput(input_);
7833 EXPECT_EQ(intResult, 0);
7834
7835 intResult = session_->AddOutput(output);
7836 EXPECT_EQ(intResult, 0);
7837
7838 isSketchSupport = previewOutput->IsSketchSupported();
7839 if (!isSketchSupport) {
7840 return;
7841 }
7842
7843 session_->SetMode(SceneMode::PORTRAIT);
7844 int sketchEnableRatio = previewOutput->GetSketchRatio();
7845 EXPECT_LT(sketchEnableRatio, 0);
7846
7847 session_->SetMode(SceneMode::CAPTURE);
7848 sketchEnableRatio = previewOutput->GetSketchRatio();
7849 EXPECT_GT(sketchEnableRatio, 0);
7850
7851 auto sketchSurface = CreateSketchSurface(previewProfile->GetCameraFormat());
7852
7853 intResult = previewOutput->EnableSketch(true);
7854 EXPECT_EQ(intResult, 0);
7855
7856 intResult = previewOutput->AttachSketchSurface(sketchSurface);
7857 EXPECT_EQ(intResult, SESSION_NOT_CONFIG);
7858
7859 intResult = session_->CommitConfig();
7860 EXPECT_EQ(intResult, 0);
7861
7862 intResult = previewOutput->AttachSketchSurface(sketchSurface);
7863 EXPECT_EQ(intResult, 0);
7864
7865 intResult = session_->Start();
7866 EXPECT_EQ(intResult, 0);
7867
7868 intResult = previewOutput->EnableSketch(true);
7869 EXPECT_EQ(intResult, SESSION_NOT_CONFIG);
7870
7871 sleep(WAIT_TIME_AFTER_START);
7872
7873 intResult = previewOutput->AttachSketchSurface(sketchSurface);
7874 EXPECT_EQ(intResult, 0);
7875
7876 intResult = session_->Stop();
7877 EXPECT_EQ(intResult, 0);
7878 }
7879
7880 /*
7881 * Feature: Framework
7882 * Function: Test photo session sketch functions auto start sketch while zoom set
7883 * SubFunction: NA
7884 * FunctionPoints: NA
7885 * EnvConditions: NA
7886 * CaseDescription: Test photo session sketch functions auto start sketch while zoom set
7887 */
7888 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_032, TestSize.Level0)
7889 {
7890 auto previewProfile = GetSketchPreviewProfile();
7891 if (previewProfile == nullptr) {
7892 EXPECT_EQ(previewProfile.get(), nullptr);
7893 return;
7894 }
7895 auto output = CreatePreviewOutput(*previewProfile);
7896 ASSERT_NE(output, nullptr);
7897
7898 session_->SetMode(SceneMode::CAPTURE);
7899 int32_t intResult = session_->BeginConfig();
7900 EXPECT_EQ(intResult, 0);
7901
7902 intResult = session_->AddInput(input_);
7903 EXPECT_EQ(intResult, 0);
7904
7905 intResult = session_->AddOutput(output);
7906 EXPECT_EQ(intResult, 0);
7907
7908 sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
7909 previewOutput->SetCallback(std::make_shared<AppCallback>());
7910 bool isSketchSupport = previewOutput->IsSketchSupported();
7911 if (!isSketchSupport) {
7912 return;
7913 }
7914
7915 int sketchEnableRatio = previewOutput->GetSketchRatio();
7916 EXPECT_GT(sketchEnableRatio, 0);
7917
7918 intResult = previewOutput->EnableSketch(true);
7919 EXPECT_EQ(intResult, 0);
7920
7921 intResult = session_->CommitConfig();
7922 EXPECT_EQ(intResult, 0);
7923
7924 intResult = previewOutput->AttachSketchSurface(CreateSketchSurface(previewProfile->GetCameraFormat()));
7925 EXPECT_EQ(intResult, 0);
7926
7927 session_->LockForControl();
7928 intResult = session_->SetZoomRatio(30.0f);
7929 EXPECT_EQ(intResult, 0);
7930 session_->UnlockForControl();
7931
7932 intResult = session_->Start();
7933 EXPECT_EQ(intResult, 0);
7934
7935 sleep(WAIT_TIME_AFTER_START);
7936 EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 1);
7937 g_previewEvents.reset();
7938
7939 auto statusSize = g_sketchStatus.size();
7940 EXPECT_EQ(statusSize, 3);
7941 if (statusSize == 3) {
7942 EXPECT_EQ(g_sketchStatus.front(), 0);
7943 g_sketchStatus.pop_front();
7944 EXPECT_EQ(g_sketchStatus.front(), 3);
7945 g_sketchStatus.pop_front();
7946 EXPECT_EQ(g_sketchStatus.front(), 1);
7947 g_sketchStatus.pop_front();
7948 }
7949
7950 sleep(WAIT_TIME_AFTER_START);
7951 EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 0);
7952 g_previewEvents.reset();
7953
7954 session_->LockForControl();
7955 intResult = session_->SetZoomRatio(1.0f);
7956 EXPECT_EQ(intResult, 0);
7957 session_->UnlockForControl();
7958
7959 sleep(WAIT_TIME_AFTER_START);
7960 EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 1);
7961 g_previewEvents.reset();
7962
7963 statusSize = g_sketchStatus.size();
7964 EXPECT_EQ(statusSize, 2);
7965 if (statusSize == 2) {
7966 EXPECT_EQ(g_sketchStatus.front(), 2);
7967 g_sketchStatus.pop_front();
7968 EXPECT_EQ(g_sketchStatus.front(), 0);
7969 g_sketchStatus.pop_front();
7970 }
7971
7972 sleep(WAIT_TIME_AFTER_START);
7973 EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 0);
7974 g_previewEvents.reset();
7975
7976 intResult = session_->Stop();
7977 EXPECT_EQ(intResult, 0);
7978 }
7979
7980 /*
7981 * Feature: Framework
7982 * Function: Test photo session smooth zoom and sketch functions callback
7983 * SubFunction: NA
7984 * FunctionPoints: NA
7985 * EnvConditions: NA
7986 * CaseDescription: Test photo session smooth zoom and sketch functions callback
7987 */
7988 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_033, TestSize.Level0)
7989 {
7990 auto previewProfile = GetSketchPreviewProfile();
7991 if (previewProfile == nullptr) {
7992 EXPECT_EQ(previewProfile.get(), nullptr);
7993 return;
7994 }
7995 auto output = CreatePreviewOutput(*previewProfile);
7996 ASSERT_NE(output, nullptr);
7997
7998 session_->SetMode(SceneMode::CAPTURE);
7999 int32_t intResult = session_->BeginConfig();
8000 EXPECT_EQ(intResult, 0);
8001
8002 intResult = session_->AddInput(input_);
8003 EXPECT_EQ(intResult, 0);
8004
8005 intResult = session_->AddOutput(output);
8006 EXPECT_EQ(intResult, 0);
8007
8008 sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
8009 bool isSketchSupport = previewOutput->IsSketchSupported();
8010 if (!isSketchSupport) {
8011 return;
8012 }
8013
8014 previewOutput->SetCallback(std::make_shared<AppCallback>());
8015
8016 int sketchEnableRatio = previewOutput->GetSketchRatio();
8017 EXPECT_GT(sketchEnableRatio, 0);
8018
8019 intResult = previewOutput->EnableSketch(true);
8020 EXPECT_EQ(intResult, 0);
8021
8022 intResult = session_->CommitConfig();
8023 EXPECT_EQ(intResult, 0);
8024
8025 intResult = previewOutput->AttachSketchSurface(CreateSketchSurface(previewProfile->GetCameraFormat()));
8026 EXPECT_EQ(intResult, 0);
8027
8028 intResult = session_->Start();
8029 EXPECT_EQ(intResult, 0);
8030
8031 sleep(WAIT_TIME_AFTER_START);
8032
8033 EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 0);
8034
8035 session_->LockForControl();
8036 intResult = session_->SetSmoothZoom(30.0f, 0);
8037 EXPECT_EQ(intResult, 0);
8038 session_->UnlockForControl();
8039
8040 sleep(WAIT_TIME_AFTER_START);
8041
8042 EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 1);
8043 g_previewEvents.reset();
8044
8045 sleep(WAIT_TIME_AFTER_START);
8046 auto statusSize = g_sketchStatus.size();
8047 EXPECT_EQ(statusSize, 2);
8048 if (statusSize == 2) {
8049 EXPECT_EQ(g_sketchStatus.front(), 3);
8050 g_sketchStatus.pop_front();
8051 EXPECT_EQ(g_sketchStatus.front(), 1);
8052 g_sketchStatus.pop_front();
8053 }
8054
8055 sleep(1);
8056 EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 0);
8057
8058 intResult = session_->Stop();
8059 EXPECT_EQ(intResult, 0);
8060 }
8061
8062 /*
8063 * Feature: Framework
8064 * Function: Test photo session moon capture boost function
8065 * SubFunction: NA
8066 * FunctionPoints: NA
8067 * EnvConditions: NA
8068 * CaseDescription: Test photo session moon capture boost function
8069 */
8070 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_034, TestSize.Level0)
8071 {
8072 auto previewProfile = GetSketchPreviewProfile();
8073 if (previewProfile == nullptr) {
8074 EXPECT_EQ(previewProfile.get(), nullptr);
8075 return;
8076 }
8077 auto output = CreatePreviewOutput(*previewProfile);
8078 sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
8079 ASSERT_NE(output, nullptr);
8080
8081 session_->SetMode(SceneMode::CAPTURE);
8082 int32_t intResult = session_->BeginConfig();
8083
8084 EXPECT_EQ(intResult, 0);
8085
8086 intResult = session_->AddInput(input_);
8087 EXPECT_EQ(intResult, 0);
8088
8089 intResult = session_->AddOutput(output);
8090 EXPECT_EQ(intResult, 0);
8091
8092 intResult = session_->CommitConfig();
8093 EXPECT_EQ(intResult, 0);
8094
8095 session_->SetFeatureDetectionStatusCallback(std::make_shared<AppCallback>());
8096
8097 g_moonCaptureBoostEvents.reset();
8098 intResult = session_->Start();
8099 EXPECT_EQ(intResult, 0);
8100
8101 sleep(WAIT_TIME_AFTER_START);
8102
8103 bool isMoonCaptureBoostSupported = session_->IsFeatureSupported(FEATURE_MOON_CAPTURE_BOOST);
8104 if (isMoonCaptureBoostSupported) {
8105 EXPECT_EQ(g_moonCaptureBoostEvents.count(), 1);
8106 if (g_moonCaptureBoostEvents[static_cast<int>(
8107 CAM_MOON_CAPTURE_BOOST_EVENTS::CAM_MOON_CAPTURE_BOOST_EVENT_ACTIVE)] == 1) {
8108 intResult = session_->EnableFeature(FEATURE_MOON_CAPTURE_BOOST, true);
8109 EXPECT_EQ(intResult, 0);
8110 }
8111 if (g_moonCaptureBoostEvents[static_cast<int>(
8112 CAM_MOON_CAPTURE_BOOST_EVENTS::CAM_MOON_CAPTURE_BOOST_EVENT_IDLE)] == 1) {
8113 intResult = session_->EnableFeature(FEATURE_MOON_CAPTURE_BOOST, false);
8114 EXPECT_EQ(intResult, 0);
8115 }
8116 }
8117
8118 sleep(WAIT_TIME_AFTER_START);
8119
8120 intResult = session_->Stop();
8121 EXPECT_EQ(intResult, 0);
8122 }
8123
8124 /*
8125 * Feature: Framework
8126 * Function: Test photo session lcd flash
8127 * SubFunction: NA
8128 * FunctionPoints: NA
8129 * EnvConditions: NA
8130 * CaseDescription: Test photo session lcd flash
8131 */
8132 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_035, TestSize.Level0)
8133 {
8134 if (session_) {
8135 session_->Release();
8136 session_ = nullptr;
8137 input_->Close();
8138 }
8139 session_ = manager_->CreateCaptureSession(SceneMode::CAPTURE);
8140 ASSERT_NE(session_, nullptr);
8141
8142 int32_t intResult = session_->BeginConfig();
8143 EXPECT_EQ(intResult, 0);
8144
8145 if (cameras_.size() > 1) {
8146 input_ = manager_->CreateCameraInput(cameras_[1]);
8147 ASSERT_NE(input_, nullptr);
8148 EXPECT_EQ(input_->Open(), 0);
8149
8150 intResult = session_->AddInput(input_);
8151 EXPECT_EQ(intResult, 0);
8152
8153 sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
8154 ASSERT_NE(previewOutput, nullptr);
8155
8156 intResult = session_->AddOutput(previewOutput);
8157 EXPECT_EQ(intResult, 0);
8158
8159 intResult = session_->CommitConfig();
8160 EXPECT_EQ(intResult, 0);
8161
8162 bool isSupported = session_->IsLcdFlashSupported();
8163 EXPECT_EQ(isSupported, true);
8164
8165 if (isSupported) {
8166 session_->SetLcdFlashStatusCallback(std::make_shared<AppCallback>());
8167 session_->LockForControl();
8168 intResult = session_->EnableLcdFlashDetection(true);
8169 session_->UnlockForControl();
8170 EXPECT_EQ(intResult, 0);
8171 }
8172
8173 intResult = session_->Start();
8174 EXPECT_EQ(intResult, 0);
8175
8176 sleep(WAIT_TIME_AFTER_START);
8177
8178 intResult = session_->Stop();
8179 EXPECT_EQ(intResult, 0);
8180 }
8181 }
8182
8183 /*
8184 * Feature: Framework
8185 * Function: Test photo session lcd flash anomalous branch
8186 * SubFunction: NA
8187 * FunctionPoints: NA
8188 * EnvConditions: NA
8189 * CaseDescription: Test photo session lcd flash anomalous branch
8190 */
8191 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_036, TestSize.Level0)
8192 {
8193 session_ = manager_->CreateCaptureSession(SceneMode::CAPTURE);
8194 ASSERT_NE(session_, nullptr);
8195
8196 int32_t intResult = session_->BeginConfig();
8197 EXPECT_EQ(intResult, 0);
8198
8199 intResult = session_->AddInput(input_);
8200 EXPECT_EQ(intResult, 0);
8201
8202 sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
8203 ASSERT_NE(previewOutput, nullptr);
8204
8205 intResult = session_->AddOutput(previewOutput);
8206 EXPECT_EQ(intResult, 0);
8207
8208 sptr<CaptureOutput> photoOutput = CreatePhotoOutput();
8209 ASSERT_NE(photoOutput, nullptr);
8210
8211 intResult = session_->AddOutput(photoOutput);
8212 EXPECT_EQ(intResult, 0);
8213
8214 intResult = session_->CommitConfig();
8215 EXPECT_EQ(intResult, 0);
8216
8217 bool isSupported = session_->IsLcdFlashSupported();
8218 EXPECT_EQ(isSupported, false);
8219 }
8220
8221 /*
8222 * Feature: Framework
8223 * Function: Test photo session tripod
8224 * SubFunction: NA
8225 * FunctionPoints: NA
8226 * EnvConditions: NA
8227 * CaseDescription: Test photo session tripod
8228 */
8229 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_037, TestSize.Level0)
8230 {
8231 session_ = manager_->CreateCaptureSession(SceneMode::CAPTURE);
8232 ASSERT_NE(session_, nullptr);
8233
8234 int32_t intResult = session_->BeginConfig();
8235 EXPECT_EQ(intResult, 0);
8236
8237 intResult = session_->AddInput(input_);
8238 EXPECT_EQ(intResult, 0);
8239
8240 sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
8241 ASSERT_NE(previewOutput, nullptr);
8242
8243 intResult = session_->AddOutput(previewOutput);
8244 EXPECT_EQ(intResult, 0);
8245
8246 intResult = session_->CommitConfig();
8247 EXPECT_EQ(intResult, 0);
8248
8249 if (session_->IsTripodDetectionSupported()) {
8250 session_->SetFeatureDetectionStatusCallback(std::make_shared<AppCallback>());
8251 session_->EnableFeature(FEATURE_TRIPOD_DETECTION, true);
8252 EXPECT_EQ(intResult, 0);
8253 }
8254
8255 intResult = session_->Start();
8256 EXPECT_EQ(intResult, 0);
8257
8258 sleep(WAIT_TIME_AFTER_START);
8259
8260 intResult = session_->Stop();
8261 EXPECT_EQ(intResult, 0);
8262 }
8263
8264 /*
8265 * Feature: Framework
8266 * Function: Test video session with photo output
8267 * SubFunction: NA
8268 * FunctionPoints: NA
8269 * EnvConditions: NA
8270 * CaseDescription: Test can add photo output into video session
8271 */
8272 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_001, TestSize.Level0)
8273 {
8274 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8275 return;
8276 }
8277
8278 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
8279 ASSERT_NE(outputCapability, nullptr);
8280 auto previewProfiles = outputCapability->GetPreviewProfiles();
8281 ASSERT_FALSE(previewProfiles.empty());
8282 auto photoProfiles = outputCapability->GetPhotoProfiles();
8283 ASSERT_FALSE(photoProfiles.empty());
8284
8285 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8286 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8287 ASSERT_NE(videoSession, nullptr);
8288 int32_t res = videoSession->BeginConfig();
8289 EXPECT_EQ(res, 0);
8290
8291 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8292 ASSERT_NE(input, nullptr);
8293 input->Open();
8294 res = videoSession->AddInput(input);
8295 EXPECT_EQ(res, 0);
8296 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
8297 ASSERT_NE(previewOutput, nullptr);
8298 EXPECT_TRUE(videoSession->CanAddOutput(previewOutput));
8299 res = videoSession->AddOutput(previewOutput);
8300 EXPECT_EQ(res, 0);
8301 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
8302 ASSERT_NE(photoOutput, nullptr);
8303 EXPECT_TRUE(videoSession->CanAddOutput(photoOutput));
8304 res = videoSession->AddOutput(photoOutput);
8305 EXPECT_EQ(res, 0);
8306
8307 res = videoSession->CommitConfig();
8308 EXPECT_EQ(res, 0);
8309 res = videoSession->Start();
8310 EXPECT_EQ(res, 0);
8311 sleep(WAIT_TIME_AFTER_START);
8312 res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
8313 EXPECT_EQ(res, 0);
8314 sleep(WAIT_TIME_AFTER_CAPTURE);
8315 res = videoSession->Stop();
8316 EXPECT_EQ(res, 0);
8317 res = videoSession->Release();
8318 EXPECT_EQ(res, 0);
8319 }
8320
8321 /*
8322 * Feature: Framework
8323 * Function: Test video session with video output
8324 * SubFunction: NA
8325 * FunctionPoints: NA
8326 * EnvConditions: NA
8327 * CaseDescription: Test can add video output into video session
8328 */
8329 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_002, TestSize.Level0)
8330 {
8331 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8332 return;
8333 }
8334
8335 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
8336 ASSERT_NE(outputCapability, nullptr);
8337 auto previewProfiles = outputCapability->GetPreviewProfiles();
8338 ASSERT_FALSE(previewProfiles.empty());
8339 FilterPreviewProfiles(previewProfiles);
8340 ASSERT_FALSE(previewProfiles.empty());
8341 auto videoProfiles = outputCapability->GetVideoProfiles();
8342 ASSERT_FALSE(videoProfiles.empty());
8343
8344 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8345 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8346 ASSERT_NE(videoSession, nullptr);
8347 int32_t res = videoSession->BeginConfig();
8348 EXPECT_EQ(res, 0);
8349
8350 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8351 ASSERT_NE(input, nullptr);
8352 input->Open();
8353 res = videoSession->AddInput(input);
8354 EXPECT_EQ(res, 0);
8355 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
8356 ASSERT_NE(previewOutput, nullptr);
8357 EXPECT_TRUE(videoSession->CanAddOutput(previewOutput));
8358 res = videoSession->AddOutput(previewOutput);
8359 EXPECT_EQ(res, 0);
8360 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
8361 ASSERT_NE(videoOutput, nullptr);
8362 EXPECT_TRUE(videoSession->CanAddOutput(videoOutput));
8363 res = videoSession->AddOutput(videoOutput);
8364 EXPECT_EQ(res, 0);
8365
8366 res = videoSession->CommitConfig();
8367 EXPECT_EQ(res, 0);
8368 res = videoSession->Start();
8369 EXPECT_EQ(res, 0);
8370 sleep(WAIT_TIME_AFTER_START);
8371 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
8372 EXPECT_EQ(res, 0);
8373 sleep(WAIT_TIME_AFTER_START);
8374 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
8375 EXPECT_EQ(res, 0);
8376 res = videoSession->Stop();
8377 EXPECT_EQ(res, 0);
8378 res = videoSession->Release();
8379 EXPECT_EQ(res, 0);
8380 }
8381
8382 /*
8383 * Feature: Framework
8384 * Function: Test video session set frame rate range
8385 * SubFunction: NA
8386 * FunctionPoints: NA
8387 * EnvConditions: NA
8388 * CaseDescription: Test can set frame rate range into video session
8389 */
8390 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_003, TestSize.Level0)
8391 {
8392 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8393 return;
8394 }
8395
8396 auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
8397 ASSERT_NE(outputCapability, nullptr);
8398 auto previewProfiles = outputCapability->GetPreviewProfiles();
8399 ASSERT_FALSE(previewProfiles.empty());
8400 FilterPreviewProfiles(previewProfiles);
8401 ASSERT_FALSE(previewProfiles.empty());
8402 auto photoProfiles = outputCapability->GetPhotoProfiles();
8403 ASSERT_FALSE(photoProfiles.empty());
8404 auto videoProfiles = outputCapability->GetVideoProfiles();
8405 ASSERT_FALSE(videoProfiles.empty());
8406
8407 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8408 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8409 ASSERT_NE(videoSession, nullptr);
8410 int32_t res = videoSession->BeginConfig();
8411 EXPECT_EQ(res, 0);
8412
8413 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8414 ASSERT_NE(input, nullptr);
8415 input->Open();
8416 res = videoSession->AddInput(input);
8417 EXPECT_EQ(res, 0);
8418 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
8419 ASSERT_NE(previewOutput, nullptr);
8420 EXPECT_TRUE(videoSession->CanAddOutput(previewOutput));
8421 res = videoSession->AddOutput(previewOutput);
8422 EXPECT_EQ(res, 0);
8423 sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
8424 ASSERT_NE(photoOutput, nullptr);
8425 EXPECT_TRUE(videoSession->CanAddOutput(photoOutput));
8426 res = videoSession->AddOutput(photoOutput);
8427 EXPECT_EQ(res, 0);
8428 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
8429 ASSERT_NE(videoOutput, nullptr);
8430 EXPECT_TRUE(videoSession->CanAddOutput(videoOutput));
8431 res = videoSession->AddOutput(videoOutput);
8432 EXPECT_EQ(res, 0);
8433
8434 res = videoSession->CommitConfig();
8435 EXPECT_EQ(res, 0);
8436 res = videoSession->Start();
8437 EXPECT_EQ(res, 0);
8438 sleep(WAIT_TIME_AFTER_START);
8439
8440 std::vector<std::vector<int32_t>> frameRateArray = ((sptr<VideoOutput>&)videoOutput)->GetSupportedFrameRates();
8441 ASSERT_NE(frameRateArray.size(), 0);
8442 std::vector<int32_t> frameRateRange = ((sptr<VideoOutput>&)videoOutput)->GetFrameRateRange();
8443 ASSERT_NE(frameRateRange.size(), 0);
8444 res = ((sptr<VideoOutput>&)videoOutput)->canSetFrameRateRange(DEFAULT_MIN_FRAME_RATE, DEFAULT_MAX_FRAME_RATE);
8445 EXPECT_EQ(res, 0);
8446 ((sptr<VideoOutput>&)videoOutput)->SetFrameRateRange(DEFAULT_MIN_FRAME_RATE, DEFAULT_MAX_FRAME_RATE);
8447 frameRateRange = ((sptr<VideoOutput>&)videoOutput)->GetFrameRateRange();
8448 ASSERT_NE(frameRateRange.size(), 0);
8449 EXPECT_EQ(frameRateRange[0], DEFAULT_MIN_FRAME_RATE);
8450 EXPECT_EQ(frameRateRange[1], DEFAULT_MAX_FRAME_RATE);
8451
8452 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
8453 EXPECT_EQ(res, 0);
8454 sleep(WAIT_TIME_AFTER_START);
8455 res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
8456 EXPECT_EQ(res, 0);
8457 EXPECT_EQ(res, 0);
8458 res = videoSession->Stop();
8459 EXPECT_EQ(res, 0);
8460 res = videoSession->Release();
8461 EXPECT_EQ(res, 0);
8462 }
8463
8464 /*
8465 * Feature: Framework
8466 * Function: Test video session preconfig
8467 * SubFunction: NA
8468 * FunctionPoints: NA
8469 * EnvConditions: NA
8470 * CaseDescription: Test can preconfig video session with PRECONFIG_720P, UNSPECIFIED while supported
8471 */
8472 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_004, TestSize.Level0)
8473 {
8474 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8475 return;
8476 }
8477
8478 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8479 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8480 ASSERT_NE(videoSession, nullptr);
8481 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::UNSPECIFIED)) {
8482 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::UNSPECIFIED);
8483 EXPECT_EQ(res, 0);
8484 res = videoSession->BeginConfig();
8485 EXPECT_EQ(res, 0);
8486
8487 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8488 ASSERT_NE(input, nullptr);
8489 input->Open();
8490 res = videoSession->AddInput(input);
8491 EXPECT_EQ(res, 0);
8492
8493 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
8494 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
8495 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
8496 sptr<PreviewOutput> previewOutput = nullptr;
8497 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
8498 EXPECT_EQ(res, 0);
8499 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
8500 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
8501 res = videoSession->AddOutput(capturePreviewOutput);
8502 EXPECT_EQ(res, 0);
8503 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
8504 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
8505 sptr<PhotoOutput> photoOutput = nullptr;
8506 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
8507 EXPECT_EQ(res, 0);
8508 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
8509 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
8510 res = videoSession->AddOutput(capturePhotoOutput);
8511 EXPECT_EQ(res, 0);
8512 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
8513 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
8514 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
8515 sptr<VideoOutput> videoOutput = nullptr;
8516 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
8517 EXPECT_EQ(res, 0);
8518 sptr<CaptureOutput> captureVideoOutput = videoOutput;
8519 res = videoSession->AddOutput(captureVideoOutput);
8520 EXPECT_EQ(res, 0);
8521
8522 res = videoSession->CommitConfig();
8523 EXPECT_EQ(res, 0);
8524 res = videoSession->Start();
8525 EXPECT_EQ(res, 0);
8526 sleep(WAIT_TIME_AFTER_START);
8527 res = videoOutput->Start();
8528 EXPECT_EQ(res, 0);
8529 sleep(WAIT_TIME_AFTER_START);
8530 res = videoOutput->Stop();
8531 EXPECT_EQ(res, 0);
8532 res = videoSession->Stop();
8533 EXPECT_EQ(res, 0);
8534 }
8535 EXPECT_EQ(videoSession->Release(), 0);
8536 }
8537
8538 /*
8539 * Feature: Framework
8540 * Function: Test video session preconfig
8541 * SubFunction: NA
8542 * FunctionPoints: NA
8543 * EnvConditions: NA
8544 * CaseDescription: Test can preconfig video session with PRECONFIG_720P, RATIO_1_1 while supported
8545 */
8546 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_005, TestSize.Level0)
8547 {
8548 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8549 return;
8550 }
8551
8552 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8553 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8554 ASSERT_NE(videoSession, nullptr);
8555 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_1_1)) {
8556 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_1_1);
8557 EXPECT_EQ(res, 0);
8558 res = videoSession->BeginConfig();
8559 EXPECT_EQ(res, 0);
8560
8561 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8562 ASSERT_NE(input, nullptr);
8563 input->Open();
8564 res = videoSession->AddInput(input);
8565 EXPECT_EQ(res, 0);
8566
8567 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
8568 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
8569 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
8570 sptr<PreviewOutput> previewOutput = nullptr;
8571 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
8572 EXPECT_EQ(res, 0);
8573 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
8574 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
8575 res = videoSession->AddOutput(capturePreviewOutput);
8576 EXPECT_EQ(res, 0);
8577 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
8578 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
8579 sptr<PhotoOutput> photoOutput = nullptr;
8580 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
8581 EXPECT_EQ(res, 0);
8582 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
8583 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
8584 res = videoSession->AddOutput(capturePhotoOutput);
8585 EXPECT_EQ(res, 0);
8586 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
8587 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
8588 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
8589 sptr<VideoOutput> videoOutput = nullptr;
8590 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
8591 EXPECT_EQ(res, 0);
8592 sptr<CaptureOutput> captureVideoOutput = videoOutput;
8593 res = videoSession->AddOutput(captureVideoOutput);
8594 EXPECT_EQ(res, 0);
8595
8596 res = videoSession->CommitConfig();
8597 EXPECT_EQ(res, 0);
8598 res = videoSession->Start();
8599 EXPECT_EQ(res, 0);
8600 sleep(WAIT_TIME_AFTER_START);
8601 res = videoOutput->Start();
8602 EXPECT_EQ(res, 0);
8603 sleep(WAIT_TIME_AFTER_START);
8604 res = videoOutput->Stop();
8605 EXPECT_EQ(res, 0);
8606 res = videoSession->Stop();
8607 EXPECT_EQ(res, 0);
8608 }
8609 EXPECT_EQ(videoSession->Release(), 0);
8610 }
8611
8612 /*
8613 * Feature: Framework
8614 * Function: Test video session preconfig
8615 * SubFunction: NA
8616 * FunctionPoints: NA
8617 * EnvConditions: NA
8618 * CaseDescription: Test can preconfig video session with PRECONFIG_720P, RATIO_4_3 while supported
8619 */
8620 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_006, TestSize.Level0)
8621 {
8622 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8623 return;
8624 }
8625
8626 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8627 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8628 ASSERT_NE(videoSession, nullptr);
8629 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_4_3)) {
8630 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_4_3);
8631 EXPECT_EQ(res, 0);
8632 res = videoSession->BeginConfig();
8633 EXPECT_EQ(res, 0);
8634
8635 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8636 ASSERT_NE(input, nullptr);
8637 input->Open();
8638 res = videoSession->AddInput(input);
8639 EXPECT_EQ(res, 0);
8640
8641 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
8642 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
8643 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
8644 sptr<PreviewOutput> previewOutput = nullptr;
8645 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
8646 EXPECT_EQ(res, 0);
8647 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
8648 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
8649 res = videoSession->AddOutput(capturePreviewOutput);
8650 EXPECT_EQ(res, 0);
8651 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
8652 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
8653 sptr<PhotoOutput> photoOutput = nullptr;
8654 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
8655 EXPECT_EQ(res, 0);
8656 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
8657 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
8658 res = videoSession->AddOutput(capturePhotoOutput);
8659 EXPECT_EQ(res, 0);
8660 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
8661 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
8662 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
8663 sptr<VideoOutput> videoOutput = nullptr;
8664 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
8665 EXPECT_EQ(res, 0);
8666 sptr<CaptureOutput> captureVideoOutput = videoOutput;
8667 res = videoSession->AddOutput(captureVideoOutput);
8668 EXPECT_EQ(res, 0);
8669
8670 res = videoSession->CommitConfig();
8671 EXPECT_EQ(res, 0);
8672 res = videoSession->Start();
8673 EXPECT_EQ(res, 0);
8674 sleep(WAIT_TIME_AFTER_START);
8675 res = videoOutput->Start();
8676 EXPECT_EQ(res, 0);
8677 sleep(WAIT_TIME_AFTER_START);
8678 res = videoOutput->Stop();
8679 EXPECT_EQ(res, 0);
8680 res = videoSession->Stop();
8681 EXPECT_EQ(res, 0);
8682 }
8683 EXPECT_EQ(videoSession->Release(), 0);
8684 }
8685
8686 /*
8687 * Feature: Framework
8688 * Function: Test video session preconfig
8689 * SubFunction: NA
8690 * FunctionPoints: NA
8691 * EnvConditions: NA
8692 * CaseDescription: Test can preconfig video session with PRECONFIG_720P, RATIO_16_9 while supported
8693 */
8694 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_007, TestSize.Level0)
8695 {
8696 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8697 return;
8698 }
8699
8700 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8701 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8702 ASSERT_NE(videoSession, nullptr);
8703 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_16_9)) {
8704 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_16_9);
8705 EXPECT_EQ(res, 0);
8706 res = videoSession->BeginConfig();
8707 EXPECT_EQ(res, 0);
8708
8709 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8710 ASSERT_NE(input, nullptr);
8711 input->Open();
8712 res = videoSession->AddInput(input);
8713 EXPECT_EQ(res, 0);
8714
8715 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
8716 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
8717 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
8718 sptr<PreviewOutput> previewOutput = nullptr;
8719 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
8720 EXPECT_EQ(res, 0);
8721 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
8722 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
8723 res = videoSession->AddOutput(capturePreviewOutput);
8724 EXPECT_EQ(res, 0);
8725 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
8726 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
8727 sptr<PhotoOutput> photoOutput = nullptr;
8728 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
8729 EXPECT_EQ(res, 0);
8730 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
8731 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
8732 res = videoSession->AddOutput(capturePhotoOutput);
8733 EXPECT_EQ(res, 0);
8734 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
8735 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
8736 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
8737 sptr<VideoOutput> videoOutput = nullptr;
8738 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
8739 EXPECT_EQ(res, 0);
8740 sptr<CaptureOutput> captureVideoOutput = videoOutput;
8741 res = videoSession->AddOutput(captureVideoOutput);
8742 EXPECT_EQ(res, 0);
8743
8744 res = videoSession->CommitConfig();
8745 EXPECT_EQ(res, 0);
8746 res = videoSession->Start();
8747 EXPECT_EQ(res, 0);
8748 sleep(WAIT_TIME_AFTER_START);
8749 res = videoOutput->Start();
8750 EXPECT_EQ(res, 0);
8751 sleep(WAIT_TIME_AFTER_START);
8752 res = videoOutput->Stop();
8753 EXPECT_EQ(res, 0);
8754 res = videoSession->Stop();
8755 EXPECT_EQ(res, 0);
8756 }
8757 EXPECT_EQ(videoSession->Release(), 0);
8758 }
8759
8760 /*
8761 * Feature: Framework
8762 * Function: Test video session preconfig
8763 * SubFunction: NA
8764 * FunctionPoints: NA
8765 * EnvConditions: NA
8766 * CaseDescription: Test can preconfig video session with PRECONFIG_1080P, UNSPECIFIED while supported
8767 */
8768 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_008, TestSize.Level0)
8769 {
8770 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8771 return;
8772 }
8773
8774 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8775 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8776 ASSERT_NE(videoSession, nullptr);
8777 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::UNSPECIFIED)) {
8778 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::UNSPECIFIED);
8779 EXPECT_EQ(res, 0);
8780 res = videoSession->BeginConfig();
8781 EXPECT_EQ(res, 0);
8782
8783 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8784 ASSERT_NE(input, nullptr);
8785 input->Open();
8786 res = videoSession->AddInput(input);
8787 EXPECT_EQ(res, 0);
8788
8789 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
8790 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
8791 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
8792 sptr<PreviewOutput> previewOutput = nullptr;
8793 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
8794 EXPECT_EQ(res, 0);
8795 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
8796 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
8797 res = videoSession->AddOutput(capturePreviewOutput);
8798 EXPECT_EQ(res, 0);
8799 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
8800 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
8801 sptr<PhotoOutput> photoOutput = nullptr;
8802 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
8803 EXPECT_EQ(res, 0);
8804 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
8805 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
8806 res = videoSession->AddOutput(capturePhotoOutput);
8807 EXPECT_EQ(res, 0);
8808 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
8809 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
8810 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
8811 sptr<VideoOutput> videoOutput = nullptr;
8812 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
8813 EXPECT_EQ(res, 0);
8814 sptr<CaptureOutput> captureVideoOutput = videoOutput;
8815 res = videoSession->AddOutput(captureVideoOutput);
8816 EXPECT_EQ(res, 0);
8817
8818 res = videoSession->CommitConfig();
8819 EXPECT_EQ(res, 0);
8820 res = videoSession->Start();
8821 EXPECT_EQ(res, 0);
8822 sleep(WAIT_TIME_AFTER_START);
8823 res = videoOutput->Start();
8824 EXPECT_EQ(res, 0);
8825 sleep(WAIT_TIME_AFTER_START);
8826 res = videoOutput->Stop();
8827 EXPECT_EQ(res, 0);
8828 res = videoSession->Stop();
8829 EXPECT_EQ(res, 0);
8830 }
8831 EXPECT_EQ(videoSession->Release(), 0);
8832 }
8833
8834 /*
8835 * Feature: Framework
8836 * Function: Test video session preconfig
8837 * SubFunction: NA
8838 * FunctionPoints: NA
8839 * EnvConditions: NA
8840 * CaseDescription: Test can preconfig video session with PRECONFIG_1080P, RATIO_1_1 while supported
8841 */
8842 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_009, TestSize.Level0)
8843 {
8844 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8845 return;
8846 }
8847
8848 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8849 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8850 ASSERT_NE(videoSession, nullptr);
8851 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_1_1)) {
8852 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_1_1);
8853 EXPECT_EQ(res, 0);
8854 res = videoSession->BeginConfig();
8855 EXPECT_EQ(res, 0);
8856
8857 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8858 ASSERT_NE(input, nullptr);
8859 input->Open();
8860 res = videoSession->AddInput(input);
8861 EXPECT_EQ(res, 0);
8862
8863 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
8864 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
8865 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
8866 sptr<PreviewOutput> previewOutput = nullptr;
8867 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
8868 EXPECT_EQ(res, 0);
8869 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
8870 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
8871 res = videoSession->AddOutput(capturePreviewOutput);
8872 EXPECT_EQ(res, 0);
8873 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
8874 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
8875 sptr<PhotoOutput> photoOutput = nullptr;
8876 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
8877 EXPECT_EQ(res, 0);
8878 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
8879 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
8880 res = videoSession->AddOutput(capturePhotoOutput);
8881 EXPECT_EQ(res, 0);
8882 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
8883 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
8884 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
8885 sptr<VideoOutput> videoOutput = nullptr;
8886 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
8887 EXPECT_EQ(res, 0);
8888 sptr<CaptureOutput> captureVideoOutput = videoOutput;
8889 res = videoSession->AddOutput(captureVideoOutput);
8890 EXPECT_EQ(res, 0);
8891
8892 res = videoSession->CommitConfig();
8893 EXPECT_EQ(res, 0);
8894 res = videoSession->Start();
8895 EXPECT_EQ(res, 0);
8896 sleep(WAIT_TIME_AFTER_START);
8897 res = videoOutput->Start();
8898 EXPECT_EQ(res, 0);
8899 sleep(WAIT_TIME_AFTER_START);
8900 res = videoOutput->Stop();
8901 EXPECT_EQ(res, 0);
8902 res = videoSession->Stop();
8903 EXPECT_EQ(res, 0);
8904 }
8905 EXPECT_EQ(videoSession->Release(), 0);
8906 }
8907
8908 /*
8909 * Feature: Framework
8910 * Function: Test video session preconfig
8911 * SubFunction: NA
8912 * FunctionPoints: NA
8913 * EnvConditions: NA
8914 * CaseDescription: Test can preconfig video session with PRECONFIG_1080P, RATIO_4_3 while supported
8915 */
8916 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_010, TestSize.Level0)
8917 {
8918 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8919 return;
8920 }
8921
8922 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8923 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8924 ASSERT_NE(videoSession, nullptr);
8925 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_4_3)) {
8926 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_4_3);
8927 EXPECT_EQ(res, 0);
8928 res = videoSession->BeginConfig();
8929 EXPECT_EQ(res, 0);
8930
8931 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8932 ASSERT_NE(input, nullptr);
8933 input->Open();
8934 res = videoSession->AddInput(input);
8935 EXPECT_EQ(res, 0);
8936
8937 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
8938 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
8939 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
8940 sptr<PreviewOutput> previewOutput = nullptr;
8941 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
8942 EXPECT_EQ(res, 0);
8943 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
8944 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
8945 res = videoSession->AddOutput(capturePreviewOutput);
8946 EXPECT_EQ(res, 0);
8947 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
8948 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
8949 sptr<PhotoOutput> photoOutput = nullptr;
8950 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
8951 EXPECT_EQ(res, 0);
8952 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
8953 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
8954 res = videoSession->AddOutput(capturePhotoOutput);
8955 EXPECT_EQ(res, 0);
8956 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
8957 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
8958 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
8959 sptr<VideoOutput> videoOutput = nullptr;
8960 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
8961 EXPECT_EQ(res, 0);
8962 sptr<CaptureOutput> captureVideoOutput = videoOutput;
8963 res = videoSession->AddOutput(captureVideoOutput);
8964 EXPECT_EQ(res, 0);
8965
8966 res = videoSession->CommitConfig();
8967 EXPECT_EQ(res, 0);
8968 res = videoSession->Start();
8969 EXPECT_EQ(res, 0);
8970 sleep(WAIT_TIME_AFTER_START);
8971 res = videoOutput->Start();
8972 EXPECT_EQ(res, 0);
8973 sleep(WAIT_TIME_AFTER_START);
8974 res = videoOutput->Stop();
8975 EXPECT_EQ(res, 0);
8976 res = videoSession->Stop();
8977 EXPECT_EQ(res, 0);
8978 }
8979 EXPECT_EQ(videoSession->Release(), 0);
8980 }
8981
8982 /*
8983 * Feature: Framework
8984 * Function: Test video session preconfig
8985 * SubFunction: NA
8986 * FunctionPoints: NA
8987 * EnvConditions: NA
8988 * CaseDescription: Test can preconfig video session with PRECONFIG_1080P, RATIO_16_9 while supported
8989 */
8990 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_011, TestSize.Level0)
8991 {
8992 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8993 return;
8994 }
8995
8996 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8997 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8998 ASSERT_NE(videoSession, nullptr);
8999 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_16_9)) {
9000 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_16_9);
9001 EXPECT_EQ(res, 0);
9002 res = videoSession->BeginConfig();
9003 EXPECT_EQ(res, 0);
9004
9005 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9006 ASSERT_NE(input, nullptr);
9007 input->Open();
9008 res = videoSession->AddInput(input);
9009 EXPECT_EQ(res, 0);
9010
9011 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9012 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9013 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9014 sptr<PreviewOutput> previewOutput = nullptr;
9015 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9016 EXPECT_EQ(res, 0);
9017 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9018 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9019 res = videoSession->AddOutput(capturePreviewOutput);
9020 EXPECT_EQ(res, 0);
9021 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9022 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9023 sptr<PhotoOutput> photoOutput = nullptr;
9024 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9025 EXPECT_EQ(res, 0);
9026 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9027 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9028 res = videoSession->AddOutput(capturePhotoOutput);
9029 EXPECT_EQ(res, 0);
9030 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9031 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9032 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9033 sptr<VideoOutput> videoOutput = nullptr;
9034 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9035 EXPECT_EQ(res, 0);
9036 sptr<CaptureOutput> captureVideoOutput = videoOutput;
9037 res = videoSession->AddOutput(captureVideoOutput);
9038 EXPECT_EQ(res, 0);
9039
9040 res = videoSession->CommitConfig();
9041 EXPECT_EQ(res, 0);
9042 res = videoSession->Start();
9043 EXPECT_EQ(res, 0);
9044 sleep(WAIT_TIME_AFTER_START);
9045 res = videoOutput->Start();
9046 EXPECT_EQ(res, 0);
9047 sleep(WAIT_TIME_AFTER_START);
9048 res = videoOutput->Stop();
9049 EXPECT_EQ(res, 0);
9050 res = videoSession->Stop();
9051 EXPECT_EQ(res, 0);
9052 }
9053 EXPECT_EQ(videoSession->Release(), 0);
9054 }
9055
9056 /*
9057 * Feature: Framework
9058 * Function: Test video session preconfig
9059 * SubFunction: NA
9060 * FunctionPoints: NA
9061 * EnvConditions: NA
9062 * CaseDescription: Test can preconfig video session with PRECONFIG_4K, UNSPECIFIED while supported
9063 */
9064 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_012, TestSize.Level0)
9065 {
9066 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9067 return;
9068 }
9069
9070 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9071 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9072 ASSERT_NE(videoSession, nullptr);
9073 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::UNSPECIFIED)) {
9074 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::UNSPECIFIED);
9075 EXPECT_EQ(res, 0);
9076 res = videoSession->BeginConfig();
9077 EXPECT_EQ(res, 0);
9078
9079 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9080 ASSERT_NE(input, nullptr);
9081 input->Open();
9082 res = videoSession->AddInput(input);
9083 EXPECT_EQ(res, 0);
9084
9085 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9086 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9087 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9088 sptr<PreviewOutput> previewOutput = nullptr;
9089 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9090 EXPECT_EQ(res, 0);
9091 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9092 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9093 res = videoSession->AddOutput(capturePreviewOutput);
9094 EXPECT_EQ(res, 0);
9095 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9096 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9097 sptr<PhotoOutput> photoOutput = nullptr;
9098 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9099 EXPECT_EQ(res, 0);
9100 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9101 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9102 res = videoSession->AddOutput(capturePhotoOutput);
9103 EXPECT_EQ(res, 0);
9104 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9105 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9106 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9107 sptr<VideoOutput> videoOutput = nullptr;
9108 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9109 EXPECT_EQ(res, 0);
9110 sptr<CaptureOutput> captureVideoOutput = videoOutput;
9111 res = videoSession->AddOutput(captureVideoOutput);
9112 EXPECT_EQ(res, 0);
9113
9114 res = videoSession->CommitConfig();
9115 EXPECT_EQ(res, 0);
9116 res = videoSession->Start();
9117 EXPECT_EQ(res, 0);
9118 sleep(WAIT_TIME_AFTER_START);
9119 res = videoOutput->Start();
9120 EXPECT_EQ(res, 0);
9121 sleep(WAIT_TIME_AFTER_START);
9122 res = videoOutput->Stop();
9123 EXPECT_EQ(res, 0);
9124 res = videoSession->Stop();
9125 EXPECT_EQ(res, 0);
9126 }
9127 EXPECT_EQ(videoSession->Release(), 0);
9128 }
9129
9130 /*
9131 * Feature: Framework
9132 * Function: Test video session preconfig
9133 * SubFunction: NA
9134 * FunctionPoints: NA
9135 * EnvConditions: NA
9136 * CaseDescription: Test can preconfig video session with PRECONFIG_4K, RATIO_1_1 while supported
9137 */
9138 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_013, TestSize.Level0)
9139 {
9140 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9141 return;
9142 }
9143
9144 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9145 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9146 ASSERT_NE(videoSession, nullptr);
9147 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_1_1)) {
9148 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_1_1);
9149 EXPECT_EQ(res, 0);
9150 res = videoSession->BeginConfig();
9151 EXPECT_EQ(res, 0);
9152
9153 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9154 ASSERT_NE(input, nullptr);
9155 input->Open();
9156 res = videoSession->AddInput(input);
9157 EXPECT_EQ(res, 0);
9158
9159 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9160 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9161 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9162 sptr<PreviewOutput> previewOutput = nullptr;
9163 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9164 EXPECT_EQ(res, 0);
9165 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9166 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9167 res = videoSession->AddOutput(capturePreviewOutput);
9168 EXPECT_EQ(res, 0);
9169 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9170 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9171 sptr<PhotoOutput> photoOutput = nullptr;
9172 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9173 EXPECT_EQ(res, 0);
9174 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9175 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9176 res = videoSession->AddOutput(capturePhotoOutput);
9177 EXPECT_EQ(res, 0);
9178 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9179 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9180 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9181 sptr<VideoOutput> videoOutput = nullptr;
9182 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9183 EXPECT_EQ(res, 0);
9184 sptr<CaptureOutput> captureVideoOutput = videoOutput;
9185 res = videoSession->AddOutput(captureVideoOutput);
9186 EXPECT_EQ(res, 0);
9187
9188 res = videoSession->CommitConfig();
9189 EXPECT_EQ(res, 0);
9190 res = videoSession->Start();
9191 EXPECT_EQ(res, 0);
9192 sleep(WAIT_TIME_AFTER_START);
9193 res = videoOutput->Start();
9194 EXPECT_EQ(res, 0);
9195 sleep(WAIT_TIME_AFTER_START);
9196 res = videoOutput->Stop();
9197 EXPECT_EQ(res, 0);
9198 res = videoSession->Stop();
9199 EXPECT_EQ(res, 0);
9200 }
9201 EXPECT_EQ(videoSession->Release(), 0);
9202 }
9203
9204 /*
9205 * Feature: Framework
9206 * Function: Test video session preconfig
9207 * SubFunction: NA
9208 * FunctionPoints: NA
9209 * EnvConditions: NA
9210 * CaseDescription: Test can preconfig video session with PRECONFIG_4K, RATIO_4_3 while supported
9211 */
9212 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_014, TestSize.Level0)
9213 {
9214 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9215 return;
9216 }
9217
9218 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9219 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9220 ASSERT_NE(videoSession, nullptr);
9221 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_4_3)) {
9222 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_4_3);
9223 EXPECT_EQ(res, 0);
9224 res = videoSession->BeginConfig();
9225 EXPECT_EQ(res, 0);
9226
9227 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9228 ASSERT_NE(input, nullptr);
9229 input->Open();
9230 res = videoSession->AddInput(input);
9231 EXPECT_EQ(res, 0);
9232
9233 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9234 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9235 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9236 sptr<PreviewOutput> previewOutput = nullptr;
9237 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9238 EXPECT_EQ(res, 0);
9239 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9240 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9241 res = videoSession->AddOutput(capturePreviewOutput);
9242 EXPECT_EQ(res, 0);
9243 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9244 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9245 sptr<PhotoOutput> photoOutput = nullptr;
9246 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9247 EXPECT_EQ(res, 0);
9248 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9249 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9250 res = videoSession->AddOutput(capturePhotoOutput);
9251 EXPECT_EQ(res, 0);
9252 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9253 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9254 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9255 sptr<VideoOutput> videoOutput = nullptr;
9256 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9257 EXPECT_EQ(res, 0);
9258 sptr<CaptureOutput> captureVideoOutput = videoOutput;
9259 res = videoSession->AddOutput(captureVideoOutput);
9260 EXPECT_EQ(res, 0);
9261
9262 res = videoSession->CommitConfig();
9263 EXPECT_EQ(res, 0);
9264 res = videoSession->Start();
9265 EXPECT_EQ(res, 0);
9266 sleep(WAIT_TIME_AFTER_START);
9267 res = videoOutput->Start();
9268 EXPECT_EQ(res, 0);
9269 sleep(WAIT_TIME_AFTER_START);
9270 res = videoOutput->Stop();
9271 EXPECT_EQ(res, 0);
9272 res = videoSession->Stop();
9273 EXPECT_EQ(res, 0);
9274 }
9275 EXPECT_EQ(videoSession->Release(), 0);
9276 }
9277
9278 /*
9279 * Feature: Framework
9280 * Function: Test video session preconfig
9281 * SubFunction: NA
9282 * FunctionPoints: NA
9283 * EnvConditions: NA
9284 * CaseDescription: Test can preconfig video session with PRECONFIG_4K, RATIO_16_9 while supported
9285 */
9286 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_015, TestSize.Level0)
9287 {
9288 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9289 return;
9290 }
9291
9292 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9293 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9294 ASSERT_NE(videoSession, nullptr);
9295 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_16_9)) {
9296 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_16_9);
9297 EXPECT_EQ(res, 0);
9298 res = videoSession->BeginConfig();
9299 EXPECT_EQ(res, 0);
9300
9301 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9302 ASSERT_NE(input, nullptr);
9303 input->Open();
9304 res = videoSession->AddInput(input);
9305 EXPECT_EQ(res, 0);
9306
9307 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9308 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9309 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9310 sptr<PreviewOutput> previewOutput = nullptr;
9311 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9312 EXPECT_EQ(res, 0);
9313 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9314 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9315 res = videoSession->AddOutput(capturePreviewOutput);
9316 EXPECT_EQ(res, 0);
9317 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9318 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9319 sptr<PhotoOutput> photoOutput = nullptr;
9320 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9321 EXPECT_EQ(res, 0);
9322 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9323 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9324 res = videoSession->AddOutput(capturePhotoOutput);
9325 EXPECT_EQ(res, 0);
9326 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9327 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9328 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9329 sptr<VideoOutput> videoOutput = nullptr;
9330 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9331 EXPECT_EQ(res, 0);
9332 sptr<CaptureOutput> captureVideoOutput = videoOutput;
9333 res = videoSession->AddOutput(captureVideoOutput);
9334 EXPECT_EQ(res, 0);
9335
9336 res = videoSession->CommitConfig();
9337 EXPECT_EQ(res, 0);
9338 res = videoSession->Start();
9339 EXPECT_EQ(res, 0);
9340 sleep(WAIT_TIME_AFTER_START);
9341 res = videoOutput->Start();
9342 EXPECT_EQ(res, 0);
9343 sleep(WAIT_TIME_AFTER_START);
9344 res = videoOutput->Stop();
9345 EXPECT_EQ(res, 0);
9346 res = videoSession->Stop();
9347 EXPECT_EQ(res, 0);
9348 }
9349 EXPECT_EQ(videoSession->Release(), 0);
9350 }
9351
9352 /*
9353 * Feature: Framework
9354 * Function: Test video session preconfig
9355 * SubFunction: NA
9356 * FunctionPoints: NA
9357 * EnvConditions: NA
9358 * CaseDescription: Test can preconfig video session with PRECONFIG_HIGH_QUALITY, UNSPECIFIED while supported
9359 */
9360 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_016, TestSize.Level0)
9361 {
9362 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9363 return;
9364 }
9365
9366 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9367 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9368 ASSERT_NE(videoSession, nullptr);
9369 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::UNSPECIFIED)) {
9370 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::UNSPECIFIED);
9371 EXPECT_EQ(res, 0);
9372 res = videoSession->BeginConfig();
9373 EXPECT_EQ(res, 0);
9374
9375 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9376 ASSERT_NE(input, nullptr);
9377 input->Open();
9378 res = videoSession->AddInput(input);
9379 EXPECT_EQ(res, 0);
9380
9381 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9382 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9383 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9384 sptr<PreviewOutput> previewOutput = nullptr;
9385 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9386 EXPECT_EQ(res, 0);
9387 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9388 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9389 res = videoSession->AddOutput(capturePreviewOutput);
9390 EXPECT_EQ(res, 0);
9391 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9392 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9393 sptr<PhotoOutput> photoOutput = nullptr;
9394 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9395 EXPECT_EQ(res, 0);
9396 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9397 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9398 res = videoSession->AddOutput(capturePhotoOutput);
9399 EXPECT_EQ(res, 0);
9400 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9401 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9402 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9403 sptr<VideoOutput> videoOutput = nullptr;
9404 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9405 EXPECT_EQ(res, 0);
9406 sptr<CaptureOutput> captureVideoOutput = videoOutput;
9407 res = videoSession->AddOutput(captureVideoOutput);
9408 EXPECT_EQ(res, 0);
9409
9410 res = videoSession->CommitConfig();
9411 EXPECT_EQ(res, 0);
9412 res = videoSession->Start();
9413 EXPECT_EQ(res, 0);
9414 sleep(WAIT_TIME_AFTER_START);
9415 res = videoOutput->Start();
9416 EXPECT_EQ(res, 0);
9417 sleep(WAIT_TIME_AFTER_START);
9418 res = videoOutput->Stop();
9419 EXPECT_EQ(res, 0);
9420 res = videoSession->Stop();
9421 EXPECT_EQ(res, 0);
9422 }
9423 EXPECT_EQ(videoSession->Release(), 0);
9424 }
9425
9426 /*
9427 * Feature: Framework
9428 * Function: Test video session preconfig
9429 * SubFunction: NA
9430 * FunctionPoints: NA
9431 * EnvConditions: NA
9432 * CaseDescription: Test can preconfig video session with PRECONFIG_HIGH_QUALITY, RATIO_1_1 while supported
9433 */
9434 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_017, TestSize.Level0)
9435 {
9436 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9437 return;
9438 }
9439
9440 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9441 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9442 ASSERT_NE(videoSession, nullptr);
9443 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_1_1)) {
9444 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_1_1);
9445 EXPECT_EQ(res, 0);
9446 res = videoSession->BeginConfig();
9447 EXPECT_EQ(res, 0);
9448
9449 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9450 ASSERT_NE(input, nullptr);
9451 input->Open();
9452 res = videoSession->AddInput(input);
9453 EXPECT_EQ(res, 0);
9454
9455 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9456 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9457 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9458 sptr<PreviewOutput> previewOutput = nullptr;
9459 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9460 EXPECT_EQ(res, 0);
9461 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9462 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9463 res = videoSession->AddOutput(capturePreviewOutput);
9464 EXPECT_EQ(res, 0);
9465 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9466 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9467 sptr<PhotoOutput> photoOutput = nullptr;
9468 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9469 EXPECT_EQ(res, 0);
9470 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9471 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9472 res = videoSession->AddOutput(capturePhotoOutput);
9473 EXPECT_EQ(res, 0);
9474 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9475 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9476 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9477 sptr<VideoOutput> videoOutput = nullptr;
9478 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9479 EXPECT_EQ(res, 0);
9480 sptr<CaptureOutput> captureVideoOutput = videoOutput;
9481 res = videoSession->AddOutput(captureVideoOutput);
9482 EXPECT_EQ(res, 0);
9483
9484 res = videoSession->CommitConfig();
9485 EXPECT_EQ(res, 0);
9486 res = videoSession->Start();
9487 EXPECT_EQ(res, 0);
9488 sleep(WAIT_TIME_AFTER_START);
9489 res = videoOutput->Start();
9490 EXPECT_EQ(res, 0);
9491 sleep(WAIT_TIME_AFTER_START);
9492 res = videoOutput->Stop();
9493 EXPECT_EQ(res, 0);
9494 res = videoSession->Stop();
9495 EXPECT_EQ(res, 0);
9496 }
9497 EXPECT_EQ(videoSession->Release(), 0);
9498 }
9499
9500 /*
9501 * Feature: Framework
9502 * Function: Test video session preconfig
9503 * SubFunction: NA
9504 * FunctionPoints: NA
9505 * EnvConditions: NA
9506 * CaseDescription: Test can preconfig video session with PRECONFIG_HIGH_QUALITY, RATIO_4_3 while supported
9507 */
9508 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_018, TestSize.Level0)
9509 {
9510 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9511 return;
9512 }
9513
9514 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9515 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9516 ASSERT_NE(videoSession, nullptr);
9517 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_4_3)) {
9518 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_4_3);
9519 EXPECT_EQ(res, 0);
9520 res = videoSession->BeginConfig();
9521 EXPECT_EQ(res, 0);
9522
9523 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9524 ASSERT_NE(input, nullptr);
9525 input->Open();
9526 res = videoSession->AddInput(input);
9527 EXPECT_EQ(res, 0);
9528
9529 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9530 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9531 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9532 sptr<PreviewOutput> previewOutput = nullptr;
9533 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9534 EXPECT_EQ(res, 0);
9535 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9536 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9537 res = videoSession->AddOutput(capturePreviewOutput);
9538 EXPECT_EQ(res, 0);
9539 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9540 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9541 sptr<PhotoOutput> photoOutput = nullptr;
9542 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9543 EXPECT_EQ(res, 0);
9544 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9545 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9546 res = videoSession->AddOutput(capturePhotoOutput);
9547 EXPECT_EQ(res, 0);
9548 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9549 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9550 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9551 sptr<VideoOutput> videoOutput = nullptr;
9552 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9553 EXPECT_EQ(res, 0);
9554 sptr<CaptureOutput> captureVideoOutput = videoOutput;
9555 res = videoSession->AddOutput(captureVideoOutput);
9556 EXPECT_EQ(res, 0);
9557
9558 res = videoSession->CommitConfig();
9559 EXPECT_EQ(res, 0);
9560 res = videoSession->Start();
9561 EXPECT_EQ(res, 0);
9562 sleep(WAIT_TIME_AFTER_START);
9563 res = videoOutput->Start();
9564 EXPECT_EQ(res, 0);
9565 sleep(WAIT_TIME_AFTER_START);
9566 res = videoOutput->Stop();
9567 EXPECT_EQ(res, 0);
9568 res = videoSession->Stop();
9569 EXPECT_EQ(res, 0);
9570 }
9571 EXPECT_EQ(videoSession->Release(), 0);
9572 }
9573
9574 /*
9575 * Feature: Framework
9576 * Function: Test video session preconfig
9577 * SubFunction: NA
9578 * FunctionPoints: NA
9579 * EnvConditions: NA
9580 * CaseDescription: Test can preconfig video session with PRECONFIG_HIGH_QUALITY, RATIO_16_9 while supported
9581 */
9582 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_019, TestSize.Level0)
9583 {
9584 if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9585 return;
9586 }
9587
9588 auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9589 auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9590 ASSERT_NE(videoSession, nullptr);
9591 if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_16_9)) {
9592 int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_16_9);
9593 EXPECT_EQ(res, 0);
9594 res = videoSession->BeginConfig();
9595 EXPECT_EQ(res, 0);
9596
9597 sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9598 ASSERT_NE(input, nullptr);
9599 input->Open();
9600 res = videoSession->AddInput(input);
9601 EXPECT_EQ(res, 0);
9602
9603 sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9604 sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9605 sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9606 sptr<PreviewOutput> previewOutput = nullptr;
9607 res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9608 EXPECT_EQ(res, 0);
9609 sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9610 EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9611 res = videoSession->AddOutput(capturePreviewOutput);
9612 EXPECT_EQ(res, 0);
9613 sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9614 sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9615 sptr<PhotoOutput> photoOutput = nullptr;
9616 res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9617 EXPECT_EQ(res, 0);
9618 sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9619 EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9620 res = videoSession->AddOutput(capturePhotoOutput);
9621 EXPECT_EQ(res, 0);
9622 sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9623 sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9624 sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9625 sptr<VideoOutput> videoOutput = nullptr;
9626 res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9627 EXPECT_EQ(res, 0);
9628 sptr<CaptureOutput> captureVideoOutput = videoOutput;
9629 res = videoSession->AddOutput(captureVideoOutput);
9630 EXPECT_EQ(res, 0);
9631
9632 res = videoSession->CommitConfig();
9633 EXPECT_EQ(res, 0);
9634 res = videoSession->Start();
9635 EXPECT_EQ(res, 0);
9636 sleep(WAIT_TIME_AFTER_START);
9637 res = videoOutput->Start();
9638 EXPECT_EQ(res, 0);
9639 sleep(WAIT_TIME_AFTER_START);
9640 res = videoOutput->Stop();
9641 EXPECT_EQ(res, 0);
9642 res = videoSession->Stop();
9643 EXPECT_EQ(res, 0);
9644 }
9645 EXPECT_EQ(videoSession->Release(), 0);
9646 }
9647
9648 /*
9649 * Feature: Framework
9650 * Function: Test video session ability function
9651 * SubFunction: NA
9652 * FunctionPoints: NA
9653 * EnvConditions: NA
9654 * CaseDescription: Test video session ability function
9655 */
9656 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_020, TestSize.Level0)
9657 {
9658 SceneMode videoMode = SceneMode::VIDEO;
9659 if (!IsSceneModeSupported(videoMode)) {
9660 return;
9661 }
9662 sptr<CameraManager> cameraMgr = CameraManager::GetInstance();
9663 ASSERT_NE(cameraMgr, nullptr);
9664
9665 sptr<CameraOutputCapability> capability = cameraMgr->GetSupportedOutputCapability(cameras_[0], videoMode);
9666 ASSERT_NE(capability, nullptr);
9667
9668 sptr<CaptureSession> captureSession = cameraMgr->CreateCaptureSession(videoMode);
9669 ASSERT_NE(captureSession, nullptr);
9670
9671 sptr<VideoSession> videoSession = static_cast<VideoSession *>(captureSession.GetRefPtr());
9672 ASSERT_NE(videoSession, nullptr);
9673
9674 std::vector<sptr<CameraOutputCapability>> cocList = videoSession->GetCameraOutputCapabilities(cameras_[0]);
9675 ASSERT_TRUE(cocList.size() != 0);
9676 auto previewProfiles = cocList[0]->GetPreviewProfiles();
9677 auto photoProfiles = cocList[0]->GetPhotoProfiles();
9678 auto videoProfiles = cocList[0]->GetVideoProfiles();
9679
9680 int32_t intResult = videoSession->BeginConfig();
9681 EXPECT_EQ(intResult, 0);
9682
9683 intResult = videoSession->AddInput(input_);
9684 EXPECT_EQ(intResult, 0);
9685
9686 sptr<CaptureOutput> photoOutput = CreatePhotoOutput();
9687 ASSERT_NE(photoOutput, nullptr);
9688 intResult = videoSession->AddOutput(photoOutput);
9689 EXPECT_EQ(intResult, 0);
9690
9691 sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
9692 ASSERT_NE(previewOutput, nullptr);
9693 intResult = videoSession->AddOutput(previewOutput);
9694 EXPECT_EQ(intResult, 0);
9695
9696 intResult = videoSession->CommitConfig();
9697 EXPECT_EQ(intResult, 0);
9698
9699 auto videoFunctionsList = videoSession->GetSessionFunctions(previewProfiles, photoProfiles, videoProfiles, true);
9700 ASSERT_TRUE(videoFunctionsList.size() != 0);
9701 auto videoFunctions = videoFunctionsList[0];
9702 videoFunctions->GetSupportedStabilizationMode();
9703 videoFunctions->IsVideoStabilizationModeSupported(VideoStabilizationMode::HIGH);
9704 std::vector<sptr<CameraAbility>> videoConflictFunctionsList = videoSession->GetSessionConflictFunctions();
9705 }
9706
9707 /*
9708 * Feature: Framework
9709 * Function: Test video session with CreateCaptureSession
9710 * SubFunction: NA
9711 * FunctionPoints: NA
9712 * EnvConditions: NA
9713 * CaseDescription: Test video session with CreateCaptureSession
9714 */
9715 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_021, TestSize.Level0)
9716 {
9717 SceneMode mode = SceneMode::VIDEO;
9718 sptr<CameraManager> modeManagerObj = CameraManager::GetInstance();
9719 ASSERT_NE(modeManagerObj, nullptr);
9720
9721 sptr<CaptureSession> captureSession = modeManagerObj->CreateCaptureSession(mode);
9722 ASSERT_NE(captureSession, nullptr);
9723 }
9724
9725 /*
9726 * Feature: Framework
9727 * Function: Test video session macro and sketch function
9728 * SubFunction: NA
9729 * FunctionPoints: NA
9730 * EnvConditions: NA
9731 * CaseDescription: Test video session macro and sketch function
9732 */
9733 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_022, TestSize.Level0)
9734 {
9735 auto previewProfile = GetSketchPreviewProfile();
9736 if (previewProfile == nullptr) {
9737 EXPECT_EQ(previewProfile.get(), nullptr);
9738 return;
9739 }
9740 auto output = CreatePreviewOutput(*previewProfile);
9741 sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
9742 ASSERT_NE(output, nullptr);
9743
9744 session_->SetMode(SceneMode::VIDEO);
9745 int32_t intResult = session_->BeginConfig();
9746
9747 EXPECT_EQ(intResult, 0);
9748
9749 intResult = session_->AddInput(input_);
9750 EXPECT_EQ(intResult, 0);
9751
9752 intResult = session_->AddOutput(output);
9753 EXPECT_EQ(intResult, 0);
9754
9755 bool isSketchSupported = previewOutput->IsSketchSupported();
9756 if (!isSketchSupported) {
9757 return;
9758 }
9759
9760 previewOutput->EnableSketch(true);
9761 EXPECT_EQ(intResult, 0);
9762
9763 intResult = session_->CommitConfig();
9764 EXPECT_EQ(intResult, 0);
9765
9766 bool isMacroSupported = session_->IsMacroSupported();
9767 if (!isMacroSupported) {
9768 return;
9769 }
9770
9771 intResult = session_->Start();
9772 EXPECT_EQ(intResult, 0);
9773
9774 sleep(WAIT_TIME_AFTER_START);
9775
9776 // Video mode don't support sketch, but MacroVideo mode supported.
9777 float sketchRatio = previewOutput->GetSketchRatio();
9778 EXPECT_LT(sketchRatio, 0);
9779
9780 intResult = previewOutput->AttachSketchSurface(CreateSketchSurface(previewProfile->GetCameraFormat()));
9781 EXPECT_EQ(intResult, 0);
9782
9783 session_->LockForControl();
9784 intResult = session_->EnableMacro(true);
9785 session_->UnlockForControl();
9786 EXPECT_EQ(intResult, 0);
9787
9788 sleep(WAIT_TIME_AFTER_START);
9789
9790 // Now we are in MacroVideo mode
9791 sketchRatio = previewOutput->GetSketchRatio();
9792 EXPECT_GT(sketchRatio, 0);
9793
9794 session_->LockForControl();
9795 intResult = session_->EnableMacro(false);
9796 session_->UnlockForControl();
9797 EXPECT_EQ(intResult, 0);
9798
9799 sleep(WAIT_TIME_AFTER_START);
9800
9801 // Now we are in Video mode
9802 sketchRatio = previewOutput->GetSketchRatio();
9803 EXPECT_LT(sketchRatio, 0);
9804
9805 sleep(WAIT_TIME_AFTER_START);
9806
9807 intResult = session_->Stop();
9808 EXPECT_EQ(intResult, 0);
9809 }
9810
9811 /*
9812 * Feature: Framework
9813 * Function: Test video session moon capture boost function anomalous branch
9814 * SubFunction: NA
9815 * FunctionPoints: NA
9816 * EnvConditions: NA
9817 * CaseDescription: Test video session moon capture boost function anomalous branch
9818 */
9819 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_023, TestSize.Level0)
9820 {
9821 auto previewProfile = GetSketchPreviewProfile();
9822 if (previewProfile == nullptr) {
9823 EXPECT_EQ(previewProfile.get(), nullptr);
9824 return;
9825 }
9826 auto output = CreatePreviewOutput(*previewProfile);
9827 sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
9828 ASSERT_NE(output, nullptr);
9829
9830 session_->SetMode(SceneMode::VIDEO);
9831 int32_t intResult = session_->BeginConfig();
9832
9833 EXPECT_EQ(intResult, 0);
9834
9835 intResult = session_->AddInput(input_);
9836 EXPECT_EQ(intResult, 0);
9837
9838 intResult = session_->AddOutput(output);
9839 EXPECT_EQ(intResult, 0);
9840
9841 bool isMoonCaptureBoostSupported = session_->IsFeatureSupported(FEATURE_MOON_CAPTURE_BOOST);
9842 EXPECT_FALSE(isMoonCaptureBoostSupported);
9843
9844 intResult = session_->EnableFeature(FEATURE_MOON_CAPTURE_BOOST, true);
9845 EXPECT_EQ(intResult, OPERATION_NOT_ALLOWED);
9846
9847 intResult = session_->EnableFeature(FEATURE_MOON_CAPTURE_BOOST, false);
9848 EXPECT_EQ(intResult, OPERATION_NOT_ALLOWED);
9849
9850 session_->SetMode(SceneMode::CAPTURE);
9851 isMoonCaptureBoostSupported = session_->IsFeatureSupported(FEATURE_MOON_CAPTURE_BOOST);
9852 if (isMoonCaptureBoostSupported) {
9853 intResult = session_->EnableFeature(FEATURE_MOON_CAPTURE_BOOST, true);
9854 EXPECT_EQ(intResult, SESSION_NOT_CONFIG);
9855 }
9856
9857 intResult = session_->CommitConfig();
9858 EXPECT_EQ(intResult, 0);
9859
9860 isMoonCaptureBoostSupported = session_->IsFeatureSupported(FEATURE_MOON_CAPTURE_BOOST);
9861 if (!isMoonCaptureBoostSupported) {
9862 intResult = session_->EnableFeature(FEATURE_MOON_CAPTURE_BOOST, true);
9863 EXPECT_EQ(intResult, OPERATION_NOT_ALLOWED);
9864 }
9865 session_->SetFeatureDetectionStatusCallback(std::make_shared<AppCallback>());
9866
9867 intResult = session_->Start();
9868 EXPECT_EQ(intResult, 0);
9869
9870 sleep(WAIT_TIME_AFTER_START);
9871
9872 intResult = session_->Stop();
9873 EXPECT_EQ(intResult, 0);
9874 }
9875
9876 /*
9877 * Feature: Framework
9878 * Function: Test video session time machine dotting
9879 * SubFunction: NA
9880 * FunctionPoints: NA
9881 * EnvConditions: NA
9882 * CaseDescription: Test video session time machine dotting
9883 */
9884 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_024, TestSize.Level0)
9885 {
9886 sptr<CaptureOutput> previewOutput;
9887 sptr<CaptureOutput> videoOutput;
9888 ConfigVideoSession(previewOutput, videoOutput);
9889 ASSERT_NE(previewOutput, nullptr);
9890 ASSERT_NE(videoOutput, nullptr);
9891
9892 int32_t intResult = videoSession_->AddOutput(videoOutput);
9893 EXPECT_EQ(intResult, 0);
9894
9895 sptr<VideoOutput> videoOutputTrans = ((sptr<VideoOutput>&)videoOutput);
9896 std::vector<VideoMetaType> supportedVideoMetaTypes = videoOutputTrans->GetSupportedVideoMetaTypes();
9897
9898 if (supportedVideoMetaTypes.size() > 0) {
9899 sptr<IConsumerSurface> surface = IConsumerSurface::Create();
9900 ASSERT_NE(surface, nullptr);
9901 videoOutputTrans->AttachMetaSurface(surface, supportedVideoMetaTypes[0]);
9902
9903 intResult = videoSession_->CommitConfig();
9904 EXPECT_EQ(intResult, 0);
9905
9906 intResult = videoOutputTrans->Start();
9907 EXPECT_EQ(intResult, 0);
9908
9909 sleep(WAIT_TIME_AFTER_START);
9910
9911 intResult = videoOutputTrans->Stop();
9912 EXPECT_EQ(intResult, 0);
9913
9914 TestUtils::SaveVideoFile(nullptr, 0, VideoSaveMode::CLOSE, g_videoFd);
9915
9916 sleep(WAIT_TIME_BEFORE_STOP);
9917 }
9918 }
9919
9920 /*
9921 * Feature: Framework
9922 * Function: Test set video support HDR_VIVID with 60FPS
9923 * SubFunction: NA
9924 * FunctionPoints: NA
9925 * EnvConditions: NA
9926 * CaseDescription: Test set video support HDR_VIVID with 60FPS
9927 */
9928 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_025, TestSize.Level0)
9929 {
9930 SceneMode videoMode = SceneMode::VIDEO;
9931 if (!IsSceneModeSupported(videoMode)) {
9932 return;
9933 }
9934 sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
9935 ASSERT_NE(cameraManagerObj, nullptr);
9936
9937 std::vector<SceneMode> modes = cameraManagerObj->GetSupportedModes(cameras_[0]);
9938 ASSERT_TRUE(modes.size() != 0);
9939 sptr<CameraOutputCapability> modeAbility =
9940 cameraManagerObj->GetSupportedOutputCapability(cameras_[0], videoMode);
9941 ASSERT_NE(modeAbility, nullptr);
9942
9943 sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(videoMode);
9944 ASSERT_NE(captureSession, nullptr);
9945
9946 sptr<VideoSession> videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9947 ASSERT_NE(videoSession, nullptr);
9948
9949 int32_t intResult = videoSession->BeginConfig();
9950 EXPECT_EQ(intResult, 0);
9951
9952 intResult = videoSession->AddInput(input_);
9953 EXPECT_EQ(intResult, 0);
9954
9955 uint32_t width = 1920;
9956 uint32_t height = 1080;
9957 uint32_t maxFps = 60;
9958 CameraFormat previewFormat = CAMERA_FORMAT_YCRCB_P010;
9959 CameraFormat videoFormat = CAMERA_FORMAT_YCRCB_P010;
9960
9961 auto previewProfileOpt = GetPreviewProfileByFormat(modeAbility, width, height, previewFormat);
9962 if (!previewProfileOpt) {
9963 std::cout << "previewProfile not support" << std::endl;
9964 return;
9965 }
9966 Profile previewProfile = previewProfileOpt.value();
9967 EXPECT_EQ(previewProfile.GetCameraFormat(), CAMERA_FORMAT_YCRCB_P010);
9968 std::cout << "previewProfile support" << std::endl;
9969
9970 auto videoProfileOpt = GetVideoProfileByFormat(modeAbility, width, height, videoFormat, maxFps);
9971 if (!videoProfileOpt) {
9972 std::cout << "videoProfile not support" << std::endl;
9973 return;
9974 }
9975 VideoProfile videoProfile = videoProfileOpt.value();
9976 EXPECT_EQ(videoProfile.GetCameraFormat(), CAMERA_FORMAT_YCRCB_P010);
9977 std::cout << "videoProfile support" << std::endl;
9978
9979 sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfile);
9980 sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfile);
9981 ASSERT_NE(previewOutput, nullptr);
9982 ASSERT_NE(videoOutput, nullptr);
9983
9984 intResult = videoSession->AddOutput(previewOutput);
9985 EXPECT_EQ(intResult, 0);
9986 intResult = videoSession->AddOutput(videoOutput);
9987 EXPECT_EQ(intResult, 0);
9988 intResult = videoSession->CommitConfig();
9989 EXPECT_EQ(intResult, 0);
9990
9991 std::vector<ColorSpace> colors = videoSession->GetSupportedColorSpaces();
9992 bool supportHdrVivid = false;
9993 for (const auto& color : colors) {
9994 std::cout << "ColorSpace: " << color << std::endl;
9995 if (BT2020_HLG_LIMIT == color) {
9996 std::cout << "support hdr vivid!" << std::endl;
9997 supportHdrVivid = true;
9998 break;
9999 }
10000 }
10001 if (supportHdrVivid) {
10002 intResult = videoSession->SetColorSpace(BT2020_HLG_LIMIT);
10003 EXPECT_EQ(intResult, 0);
10004 ColorSpace curColorSpace = COLOR_SPACE_UNKNOWN;
10005 intResult = videoSession->GetActiveColorSpace(curColorSpace);
10006 EXPECT_EQ(intResult, 0);
10007 EXPECT_EQ(curColorSpace, BT2020_HLG_LIMIT);
10008 }
10009 intResult = videoSession->Release();
10010 EXPECT_EQ(intResult, 0);
10011 }
10012 } // namespace CameraStandard
10013 } // namespace OHOS