From a96538545321cd6b24dfa31ae534cfafb37412cd Mon Sep 17 00:00:00 2001 From: qano Date: Tue, 6 Feb 2024 20:26:38 +0800 Subject: [PATCH] fixed 7727358 from https://gitee.com/qano/multimedia_camera_framework/pulls/1234 compatible with HDI V1.0 Signed-off-by: qano --- .../src/input/camera_manager_napi.cpp | 4 +++ .../camera/src/input/camera_manager.cpp | 13 +++++++--- .../camera/src/session/capture_session.cpp | 9 +++---- .../camera/src/session/night_session.cpp | 24 +++--------------- .../camera/src/session/photo_session.cpp | 6 ++--- .../camera/src/session/portrait_session.cpp | 24 +++--------------- .../camera/src/session/scan_session.cpp | 25 +++---------------- .../camera/src/session/video_session.cpp | 5 ++++ .../camera/include/session/capture_session.h | 2 +- .../camera/include/session/night_session.h | 2 +- .../camera/include/session/photo_session.h | 2 +- .../camera/include/session/portrait_session.h | 2 +- .../camera/include/session/scan_session.h | 2 +- .../camera/include/session/video_session.h | 7 ++++++ .../camera_service/src/hcamera_device.cpp | 2 +- 15 files changed, 47 insertions(+), 82 deletions(-) diff --git a/frameworks/js/camera_napi/src/input/camera_manager_napi.cpp b/frameworks/js/camera_napi/src/input/camera_manager_napi.cpp index 251e2f804..a27827f9d 100644 --- a/frameworks/js/camera_napi/src/input/camera_manager_napi.cpp +++ b/frameworks/js/camera_napi/src/input/camera_manager_napi.cpp @@ -993,6 +993,10 @@ napi_value CameraManagerNapi::GetSupportedModes(napi_env env, napi_callback_info break; } } + if (modeObjList.empty()) { + modeObjList.emplace_back(CAPTURE); + modeObjList.emplace_back(VIDEO); + } MEDIA_INFO_LOG("CameraManagerNapi::GetSupportedModes size=[%{public}zu]", modeObjList.size()); jsResult = CreateJSArray(env, status, modeObjList); if (status == napi_ok) { diff --git a/frameworks/native/camera/src/input/camera_manager.cpp b/frameworks/native/camera/src/input/camera_manager.cpp index 9e7a7e9a3..6afa65243 100644 --- a/frameworks/native/camera/src/input/camera_manager.cpp +++ b/frameworks/native/camera/src/input/camera_manager.cpp @@ -984,12 +984,17 @@ void CameraManager::SetProfile(sptr& cameraObj) if (supportedModes.empty()) { capability = GetSupportedOutputCapability(cameraObj); if (capability != nullptr) { - cameraObj->modePreviewProfiles_[0] = capability->GetPreviewProfiles(); - cameraObj->modePhotoProfiles_[0] = capability->GetPhotoProfiles(); - cameraObj->modeVideoProfiles_[0] = capability->GetVideoProfiles(); + cameraObj->modePreviewProfiles_[NORMAL] = capability->GetPreviewProfiles(); + cameraObj->modePhotoProfiles_[NORMAL] = capability->GetPhotoProfiles(); + cameraObj->modeVideoProfiles_[NORMAL] = capability->GetVideoProfiles(); + cameraObj->modePreviewProfiles_[CAPTURE] = capability->GetPreviewProfiles(); + cameraObj->modePhotoProfiles_[CAPTURE] = capability->GetPhotoProfiles(); + cameraObj->modePreviewProfiles_[VIDEO] = capability->GetPreviewProfiles(); + cameraObj->modePhotoProfiles_[VIDEO] = capability->GetPhotoProfiles(); + cameraObj->modeVideoProfiles_[VIDEO] = capability->GetVideoProfiles(); } } else { - for (const auto &modeName : GetSupportedModes(cameraObj)) { + for (const auto &modeName : supportedModes) { int32_t mode = isTemplateMode_.count(modeName) ? SceneMode::NORMAL : modeName; capability = GetSupportedOutputCapability(cameraObj, mode); if (capability != nullptr) { diff --git a/frameworks/native/camera/src/session/capture_session.cpp b/frameworks/native/camera/src/session/capture_session.cpp index 2bf8d1db8..9c94b08b0 100644 --- a/frameworks/native/camera/src/session/capture_session.cpp +++ b/frameworks/native/camera/src/session/capture_session.cpp @@ -535,7 +535,7 @@ int32_t CaptureSession::AddOutput(sptr& output) return ServiceToCameraError(errCode); } -bool CaptureSession::CanAddOutput(sptr &output) +bool CaptureSession::CanAddOutput(sptr &output, SceneMode modeName) { CAMERA_SYNC_TRACE; MEDIA_DEBUG_LOG("Enter Into CaptureSession::CanAddOutput"); @@ -547,19 +547,18 @@ bool CaptureSession::CanAddOutput(sptr &output) MEDIA_ERR_LOG("CaptureSession::CanAddOutput Failed inputDevice_ is nullptr"); return false; } - int32_t normalMode = 0; if (output->GetOutputType() == CAPTURE_OUTPUT_TYPE_PREVIEW) { - std::vector previewProfiles = inputDevice_->GetCameraDeviceInfo()->modePreviewProfiles_[normalMode]; + std::vector previewProfiles = inputDevice_->GetCameraDeviceInfo()->modePreviewProfiles_[modeName]; Profile vaildateProfile = output->GetPreviewProfile(); return std::any_of(previewProfiles.begin(), previewProfiles.end(), [&vaildateProfile] (const auto& previewProfile) { return vaildateProfile == previewProfile; }); } else if (output->GetOutputType() == CAPTURE_OUTPUT_TYPE_PHOTO) { - std::vector photoProfiles = inputDevice_->GetCameraDeviceInfo()->modePhotoProfiles_[normalMode]; + std::vector photoProfiles = inputDevice_->GetCameraDeviceInfo()->modePhotoProfiles_[modeName]; Profile vaildateProfile = output->GetPhotoProfile(); return std::any_of(photoProfiles.begin(), photoProfiles.end(), [&vaildateProfile] (const auto& photoProfile) { return vaildateProfile == photoProfile; }); } else if (output->GetOutputType() == CAPTURE_OUTPUT_TYPE_VIDEO) { - std::vector videoProfiles = inputDevice_->GetCameraDeviceInfo()->modeVideoProfiles_[normalMode]; + std::vector videoProfiles = inputDevice_->GetCameraDeviceInfo()->modeVideoProfiles_[modeName]; VideoProfile vaildateProfile = output->GetVideoProfile(); return std::any_of(videoProfiles.begin(), videoProfiles.end(), [&vaildateProfile] (const auto& profile) { return vaildateProfile == profile; }); diff --git a/frameworks/native/camera/src/session/night_session.cpp b/frameworks/native/camera/src/session/night_session.cpp index 89bb75351..86dae64ac 100644 --- a/frameworks/native/camera/src/session/night_session.cpp +++ b/frameworks/native/camera/src/session/night_session.cpp @@ -133,30 +133,12 @@ void NightSession::NightSessionMetadataResultProcessor::ProcessCallbacks( session->ProcessAutoFocusUpdates(result); } -bool NightSession::CanAddOutput(sptr &output) +bool NightSession::CanAddOutput(sptr &output, SceneMode modeName) { CAMERA_SYNC_TRACE; MEDIA_DEBUG_LOG("Enter Into NightSession::CanAddOutput"); - if (!IsSessionConfiged() || output == nullptr) { - MEDIA_ERR_LOG("ScanSession::CanAddOutput operation Not allowed!"); - return false; - } - int32_t night = 4; - if (output->GetOutputType() == CAPTURE_OUTPUT_TYPE_PREVIEW) { - std::vector previewProfiles = inputDevice_->GetCameraDeviceInfo()->modePreviewProfiles_[night]; - Profile vaildateProfile = output->GetPreviewProfile(); - return std::any_of(previewProfiles.begin(), previewProfiles.end(), [&vaildateProfile] - (const auto& previewProfile) { return vaildateProfile == previewProfile; }); - } else if (output->GetOutputType() == CAPTURE_OUTPUT_TYPE_PHOTO) { - std::vector photoProfiles = inputDevice_->GetCameraDeviceInfo()->modePhotoProfiles_[night]; - Profile vaildateProfile = output->GetPhotoProfile(); - return std::any_of(photoProfiles.begin(), photoProfiles.end(), [&vaildateProfile] - (const auto& photoProfile) { return vaildateProfile == photoProfile; }); - } else if (output->GetOutputType() == CAPTURE_OUTPUT_TYPE_METADATA) { - MEDIA_INFO_LOG("ScanSession::CanAddOutput MetadataOutput"); - return true; - } - return false; + return output->GetOutputType() != CAPTURE_OUTPUT_TYPE_VIDEO && + CaptureSession::CanAddOutput(output, SceneMode::NIGHT); } } // CameraStandard } // OHOS diff --git a/frameworks/native/camera/src/session/photo_session.cpp b/frameworks/native/camera/src/session/photo_session.cpp index f2bcde865..6f5c97509 100644 --- a/frameworks/native/camera/src/session/photo_session.cpp +++ b/frameworks/native/camera/src/session/photo_session.cpp @@ -27,11 +27,11 @@ PhotoSession::~PhotoSession() { } -bool PhotoSession::CanAddOutput(sptr &output) +bool PhotoSession::CanAddOutput(sptr &output, SceneMode modeName) { - CAMERA_SYNC_TRACE; MEDIA_DEBUG_LOG("Enter Into PhotoSession::CanAddOutput"); - return output->GetOutputType() != CAPTURE_OUTPUT_TYPE_VIDEO && CaptureSession::CanAddOutput(output); + return output->GetOutputType() != CAPTURE_OUTPUT_TYPE_VIDEO && + CaptureSession::CanAddOutput(output, SceneMode::CAPTURE); } } // namespace CameraStandard } // namespace OHOS \ No newline at end of file diff --git a/frameworks/native/camera/src/session/portrait_session.cpp b/frameworks/native/camera/src/session/portrait_session.cpp index 4fcc7f2d7..046f3e7ec 100644 --- a/frameworks/native/camera/src/session/portrait_session.cpp +++ b/frameworks/native/camera/src/session/portrait_session.cpp @@ -147,30 +147,12 @@ void PortraitSession::SetPortraitEffect(PortraitEffect portraitEffect) } return; } -bool PortraitSession::CanAddOutput(sptr &output) +bool PortraitSession::CanAddOutput(sptr &output, SceneMode modeName) { CAMERA_SYNC_TRACE; MEDIA_DEBUG_LOG("Enter Into PortraitSession::CanAddOutput"); - if (!IsSessionConfiged() || output == nullptr) { - MEDIA_ERR_LOG("PortraitSession::CanAddOutput operation Not allowed!"); - return false; - } - int32_t portrait = 3; - if (output->GetOutputType() == CAPTURE_OUTPUT_TYPE_PREVIEW) { - std::vector previewProfiles = inputDevice_->GetCameraDeviceInfo()->modePreviewProfiles_[portrait]; - Profile vaildateProfile = output->GetPreviewProfile(); - return std::any_of(previewProfiles.begin(), previewProfiles.end(), [&vaildateProfile] - (const auto& previewProfile) { return vaildateProfile == previewProfile; }); - } else if (output->GetOutputType() == CAPTURE_OUTPUT_TYPE_PHOTO) { - std::vector photoProfiles = inputDevice_->GetCameraDeviceInfo()->modePhotoProfiles_[portrait]; - Profile vaildateProfile = output->GetPhotoProfile(); - return std::any_of(photoProfiles.begin(), photoProfiles.end(), [&vaildateProfile] - (const auto& photoProfile) { return vaildateProfile == photoProfile; }); - } else if (output->GetOutputType() == CAPTURE_OUTPUT_TYPE_METADATA) { - MEDIA_INFO_LOG("PortraitSession::CanAddOutput MetadataOutput"); - return true; - } - return false; + return output->GetOutputType() != CAPTURE_OUTPUT_TYPE_VIDEO && + CaptureSession::CanAddOutput(output, SceneMode::PORTRAIT); } std::vector PortraitSession::GetSupportedVirtualApertures() diff --git a/frameworks/native/camera/src/session/scan_session.cpp b/frameworks/native/camera/src/session/scan_session.cpp index 5236ab5e8..557ad0c77 100644 --- a/frameworks/native/camera/src/session/scan_session.cpp +++ b/frameworks/native/camera/src/session/scan_session.cpp @@ -54,30 +54,11 @@ int32_t ScanSession::AddOutput(sptr &output) return result; } -bool ScanSession::CanAddOutput(sptr &output) +bool ScanSession::CanAddOutput(sptr &output, SceneMode modeName) { - CAMERA_SYNC_TRACE; MEDIA_DEBUG_LOG("Enter Into ScanSession::CanAddOutput"); - if (!IsSessionConfiged() || output == nullptr) { - MEDIA_ERR_LOG("ScanSession::CanAddOutput operation Not allowed!"); - return false; - } - int32_t scan = 7; - if (output->GetOutputType() == CAPTURE_OUTPUT_TYPE_PREVIEW) { - std::vector previewProfiles = inputDevice_->GetCameraDeviceInfo()->modePreviewProfiles_[scan]; - Profile vaildateProfile = output->GetPreviewProfile(); - return std::any_of(previewProfiles.begin(), previewProfiles.end(), [&vaildateProfile] - (const auto& previewProfile) { return vaildateProfile == previewProfile; }); - } else if (output->GetOutputType() == CAPTURE_OUTPUT_TYPE_PHOTO) { - std::vector photoProfiles = inputDevice_->GetCameraDeviceInfo()->modePhotoProfiles_[scan]; - Profile vaildateProfile = output->GetPhotoProfile(); - return std::any_of(photoProfiles.begin(), photoProfiles.end(), [&vaildateProfile] - (const auto& photoProfile) { return vaildateProfile == photoProfile; }); - } else if (output->GetOutputType() == CAPTURE_OUTPUT_TYPE_METADATA) { - MEDIA_INFO_LOG("ScanSession::CanAddOutput MetadataOutput"); - return true; - } - return false; + return output->GetOutputType() != CAPTURE_OUTPUT_TYPE_VIDEO && + CaptureSession::CanAddOutput(output, SceneMode::SCAN); } } // namespace CameraStandard } // namespace OHOS \ No newline at end of file diff --git a/frameworks/native/camera/src/session/video_session.cpp b/frameworks/native/camera/src/session/video_session.cpp index 2beec6017..462393328 100644 --- a/frameworks/native/camera/src/session/video_session.cpp +++ b/frameworks/native/camera/src/session/video_session.cpp @@ -26,5 +26,10 @@ namespace CameraStandard { VideoSession::~VideoSession() { } +bool VideoSession::CanAddOutput(sptr &output, SceneMode modeName) +{ + MEDIA_DEBUG_LOG("Enter Into VideoSession::CanAddOutput"); + return CaptureSession::CanAddOutput(output, SceneMode::VIDEO); +} } // namespace CameraStandard } // namespace OHOS \ No newline at end of file diff --git a/interfaces/inner_api/native/camera/include/session/capture_session.h b/interfaces/inner_api/native/camera/include/session/capture_session.h index becaca34f..b463b549b 100644 --- a/interfaces/inner_api/native/camera/include/session/capture_session.h +++ b/interfaces/inner_api/native/camera/include/session/capture_session.h @@ -240,7 +240,7 @@ public: * * @param CaptureOutput to be added to session. */ - virtual bool CanAddOutput(sptr& output); + virtual bool CanAddOutput(sptr& output, SceneMode modeName = SceneMode::NORMAL); /** * @brief Add CaptureOutput for the capture session. diff --git a/interfaces/inner_api/native/camera/include/session/night_session.h b/interfaces/inner_api/native/camera/include/session/night_session.h index 8e92f4398..6f863f512 100644 --- a/interfaces/inner_api/native/camera/include/session/night_session.h +++ b/interfaces/inner_api/native/camera/include/session/night_session.h @@ -74,7 +74,7 @@ public: * * @param CaptureOutput to be added to session. */ - bool CanAddOutput(sptr& output) override; + bool CanAddOutput(sptr& output, SceneMode modeName = SceneMode::NIGHT) override; }; } // namespace CameraStandard } // namespace OHOS diff --git a/interfaces/inner_api/native/camera/include/session/photo_session.h b/interfaces/inner_api/native/camera/include/session/photo_session.h index 3513cefe8..8070b0753 100644 --- a/interfaces/inner_api/native/camera/include/session/photo_session.h +++ b/interfaces/inner_api/native/camera/include/session/photo_session.h @@ -31,7 +31,7 @@ public: * * @param CaptureOutput to be added to session. */ - bool CanAddOutput(sptr& output) override; + bool CanAddOutput(sptr& output, SceneMode modeName = SceneMode::CAPTURE) override; }; } // namespace CameraStandard } // namespace OHOS diff --git a/interfaces/inner_api/native/camera/include/session/portrait_session.h b/interfaces/inner_api/native/camera/include/session/portrait_session.h index 3db4fcf96..d42696303 100644 --- a/interfaces/inner_api/native/camera/include/session/portrait_session.h +++ b/interfaces/inner_api/native/camera/include/session/portrait_session.h @@ -68,7 +68,7 @@ public: * * @param CaptureOutput to be added to session. */ - bool CanAddOutput(sptr& output) override; + bool CanAddOutput(sptr& output, SceneMode modeName = SceneMode::PORTRAIT) override; /** * @brief Get the supported virtual apertures. diff --git a/interfaces/inner_api/native/camera/include/session/scan_session.h b/interfaces/inner_api/native/camera/include/session/scan_session.h index 038300613..0c523bb85 100644 --- a/interfaces/inner_api/native/camera/include/session/scan_session.h +++ b/interfaces/inner_api/native/camera/include/session/scan_session.h @@ -33,7 +33,7 @@ public: * * @param CaptureOutput to be added to session. */ - bool CanAddOutput(sptr& output) override; + bool CanAddOutput(sptr& output, SceneMode modeName = SceneMode::SCAN) override; }; } // namespace CameraStandard } // namespace OHOS diff --git a/interfaces/inner_api/native/camera/include/session/video_session.h b/interfaces/inner_api/native/camera/include/session/video_session.h index 6bc76c6bd..f29c5a978 100644 --- a/interfaces/inner_api/native/camera/include/session/video_session.h +++ b/interfaces/inner_api/native/camera/include/session/video_session.h @@ -25,6 +25,13 @@ class VideoSession : public CaptureSession { public: explicit VideoSession(sptr &videoSession): CaptureSession(videoSession) {} ~VideoSession(); + + /** + * @brief Determine if the given Ouput can be added to session. + * + * @param CaptureOutput to be added to session. + */ + bool CanAddOutput(sptr& output, SceneMode modeName = SceneMode::VIDEO) override; }; } // namespace CameraStandard } // namespace OHOS diff --git a/services/camera_service/src/hcamera_device.cpp b/services/camera_service/src/hcamera_device.cpp index ab2ea9f67..82f559fa5 100644 --- a/services/camera_service/src/hcamera_device.cpp +++ b/services/camera_service/src/hcamera_device.cpp @@ -1005,7 +1005,7 @@ int32_t HCameraDevice::CommitStreams( static_cast(operationMode), setting)); } else { MEDIA_DEBUG_LOG("HCameraDevice::CommitStreams IStreamOperator V1_0"); - OperationMode opMode = static_cast(operationMode); + OperationMode opMode = OperationMode::NORMAL; hdiRc = (CamRetCode)(streamOperator->CommitStreams(opMode, setting)); } MEDIA_DEBUG_LOG("HCameraDevice::CommitStreams end"); -- Gitee