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