diff --git a/services/cameraservice/cameraoperator/client/include/dcamera_client.h b/services/cameraservice/cameraoperator/client/include/dcamera_client.h index 87c231f6f6850cd761fec243a890375898dd8901..1bf9d23b3350d546183d7d4ceda0ce88eacce82b 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 8d241716031f2cdb12ff4b9a7bfc7bd6f251aeee..985abdf6309c4426533309fe7bc6c5aff779d0e9 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 7e268cbbe05caf3d8d1bea4d821d30548d6fe226..04b421d84dc080a9eaaddf083add61f45a445e4f 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);