From 120aa6a0f90b53ca0bb6ea64dba6b9c5a8a621d1 Mon Sep 17 00:00:00 2001 From: zhuxu Date: Wed, 3 Aug 2022 16:56:51 +0800 Subject: [PATCH] fix: distributed camera client Signed-off-by: zhuxu --- .../client/include/dcamera_client.h | 6 ++++ .../client/src/dcamera_client.cpp | 20 ++++++++++++- .../client/test/sample/main.cpp | 29 +++++++++++-------- 3 files changed, 42 insertions(+), 13 deletions(-) diff --git a/services/cameraservice/cameraoperator/client/include/dcamera_client.h b/services/cameraservice/cameraoperator/client/include/dcamera_client.h index 87c231f6..1bf9d23b 100644 --- a/services/cameraservice/cameraoperator/client/include/dcamera_client.h +++ b/services/cameraservice/cameraoperator/client/include/dcamera_client.h @@ -18,6 +18,8 @@ #include "icamera_operator.h" +#include + #include "camera_info.h" #include "camera_input.h" #include "camera_manager.h" @@ -65,8 +67,12 @@ private: void ReleaseCaptureSession(); int32_t CameraServiceErrorType(const int32_t errorType); +private: + constexpr static uint32_t DCAMERA_MAX_METADATA_SIZE = 20; + bool isInit_; std::string cameraId_; + std::queue cameraMetadatas_; sptr photoSurface_; sptr videoSurface_; sptr cameraInfo_; diff --git a/services/cameraservice/cameraoperator/client/src/dcamera_client.cpp b/services/cameraservice/cameraoperator/client/src/dcamera_client.cpp index 8d241716..985abdf6 100644 --- a/services/cameraservice/cameraoperator/client/src/dcamera_client.cpp +++ b/services/cameraservice/cameraoperator/client/src/dcamera_client.cpp @@ -102,7 +102,13 @@ int32_t DCameraClient::UpdateSettings(std::vector &)cameraInput_)->SetCameraSettings(metadataStr); @@ -295,6 +301,18 @@ int32_t DCameraClient::ConfigCaptureSession(std::vector &)cameraInput_)->SetErrorCallback(inputCallback); ((sptr &)cameraInput_)->SetFocusCallback(inputCallback); + while (!cameraMetadatas_.empty()) { + std::string metadataStr = cameraMetadatas_.front(); + FindCameraMetadata(metadataStr); + int32_t ret = ((sptr &)cameraInput_)->SetCameraSettings(metadataStr); + if (ret != DCAMERA_OK) { + DHLOGE("DCameraClient::ConfigCaptureSession %s set camera settings failed, ret: %d", + GetAnonyString(cameraId_).c_str(), ret); + return ret; + } + cameraMetadatas_.pop(); + } + captureSession_ = cameraManager_->CreateCaptureSession(); if (captureSession_ == nullptr) { DHLOGE("DCameraClient::ConfigCaptureSession %s create captureSession failed", diff --git a/services/cameraservice/cameraoperator/client/test/sample/main.cpp b/services/cameraservice/cameraoperator/client/test/sample/main.cpp index 7e268cbb..04b421d8 100644 --- a/services/cameraservice/cameraoperator/client/test/sample/main.cpp +++ b/services/cameraservice/cameraoperator/client/test/sample/main.cpp @@ -142,6 +142,22 @@ static void InitVideoOutput() ((sptr &)g_videoOutput)->SetCallback(std::make_shared()); } +static void ConfigCaptureSession() +{ + g_captureSession->BeginConfig(); + g_captureSession->AddInput(g_cameraInput); + g_captureSession->AddOutput(g_previewOutput); + g_captureSession->AddOutput(g_videoOutput); + g_captureSession->AddOutput(g_photoOutput); + g_captureSession->CommitConfig(); + + std::vector stabilizationModes = g_captureSession->GetSupportedStabilizationMode(); + for (auto mode : stabilizationModes) { + DHLOGI("Distributed Camera Demo: video stabilization mode %d", mode); + } + g_captureSession->SetVideoStabilizationMode(stabilizationModes.back()); +} + static void ConfigFocusAndExposure() { ((sptr &)g_cameraInput)->LockForControl(); @@ -190,22 +206,11 @@ int main() InitPhotoOutput(); InitPreviewOutput(); InitVideoOutput(); + ConfigCaptureSession(); - g_captureSession->BeginConfig(); - g_captureSession->AddInput(g_cameraInput); - g_captureSession->AddOutput(g_previewOutput); - g_captureSession->AddOutput(g_videoOutput); - g_captureSession->AddOutput(g_photoOutput); - g_captureSession->CommitConfig(); g_captureSession->Start(); sleep(SLEEP_FIVE_SECOND); - std::vector stabilizationModes = g_captureSession->GetSupportedStabilizationMode(); - for (auto mode : stabilizationModes) { - DHLOGI("Distributed Camera Demo: video stabilization mode %d", mode); - } - g_captureSession->SetVideoStabilizationMode(stabilizationModes.back()); - ((sptr &)g_videoOutput)->Start(); sleep(SLEEP_FIVE_SECOND); -- Gitee