diff --git a/bundle.json b/bundle.json index 85b71b13f5de7c9755b1d6098cdc491222f02829..4530a20ba94bbed54bfa92c3d47988b32cda8a7f 100644 --- a/bundle.json +++ b/bundle.json @@ -91,6 +91,7 @@ } ], "test":[ + "//foundation/distributedhardware/distributed_camera/services/cameraservice/cameraoperator/client/test/sample:dcamera_client_demo", "//foundation/distributedhardware/distributed_camera/services/cameraservice/cameraoperator/client/test/unittest:camera_client_test", "//foundation/distributedhardware/distributed_camera/services/cameraservice/cameraoperator/handler/test/unittest:camera_handler_test", "//foundation/distributedhardware/distributed_camera/services/cameraservice/sinkservice/test/unittest:sink_service_test", diff --git a/services/cameraservice/cameraoperator/client/include/dcamera_client.h b/services/cameraservice/cameraoperator/client/include/dcamera_client.h index 4d23013e45f8007f898a804437bef4b0b4689b4c..bcff63fcc51455950b57bfe04d8636779c6b90bd 100644 --- a/services/cameraservice/cameraoperator/client/include/dcamera_client.h +++ b/services/cameraservice/cameraoperator/client/include/dcamera_client.h @@ -55,9 +55,13 @@ private: int32_t StartCaptureInner(std::shared_ptr& info); int32_t StartPhotoOutput(std::shared_ptr& info); int32_t StartVideoOutput(); - void SetQualityAndGpsLocation(const std::shared_ptr& cameraMetadata, - std::shared_ptr& photoCaptureSettings); - void ReleasCaptureSession(); + void SetPhotoCaptureRotation(const std::shared_ptr& cameraMetadata, + std::shared_ptr& photoCaptureSetting); + void SetPhotoCaptureQuality(const std::shared_ptr& cameraMetadata, + std::shared_ptr& photoCaptureSetting); + void SetPhotoCaptureLocation(const std::shared_ptr& cameraMetadata, + std::shared_ptr& photoCaptureSetting); + void ReleaseCaptureSession(); int32_t CameraServiceErrorType(const int32_t errorType); bool isInit_; diff --git a/services/cameraservice/cameraoperator/client/src/dcamera_client.cpp b/services/cameraservice/cameraoperator/client/src/dcamera_client.cpp index 4a53fe658fe80c63551088a3c84db77a9a436d6b..8416ad962ac29d2137034cae918a230e3d1c0540 100644 --- a/services/cameraservice/cameraoperator/client/src/dcamera_client.cpp +++ b/services/cameraservice/cameraoperator/client/src/dcamera_client.cpp @@ -15,7 +15,6 @@ #include "dcamera_client.h" -#include #include "anonymous_string.h" #include "camera_util.h" #include "camera_metadata_operator.h" @@ -32,10 +31,6 @@ namespace OHOS { namespace DistributedHardware { -const int32_t LATITUDE = 0; -const int32_t LONGITUDE = 1; -const int32_t ALTITUDE = 2; - DCameraClient::DCameraClient(const std::string& dhId) { DHLOGI("DCameraClient Constructor dhId: %s", GetAnonyString(dhId).c_str()); @@ -96,7 +91,7 @@ int32_t DCameraClient::UnInit() int32_t DCameraClient::UpdateSettings(std::vector>& settings) { - DHLOGI("DCameraClient::UpdateCameraSettings cameraId: %s", GetAnonyString(cameraId_).c_str()); + DHLOGI("DCameraClient::UpdateSettings cameraId: %s", GetAnonyString(cameraId_).c_str()); if (cameraInput_ == nullptr) { DHLOGI("DCameraClient::UpdateSettings cameraInput is null, cameraId: %s", GetAnonyString(cameraId_).c_str()); return DCAMERA_BAD_VALUE; @@ -104,8 +99,7 @@ int32_t DCameraClient::UpdateSettings(std::vectortype_) { case UPDATE_METADATA: { - DHLOGI("DCameraClient::UpdateCameraSettings %s update metadata settings", - GetAnonyString(cameraId_).c_str()); + DHLOGI("DCameraClient::UpdateSettings %s update metadata settings", GetAnonyString(cameraId_).c_str()); std::string dcSettingValue = setting->value_; std::string metadataStr = Base64Decode(dcSettingValue); @@ -136,7 +130,7 @@ int32_t DCameraClient::UpdateSettings(std::vectorRelease(); photoOutput_ = nullptr; } - ReleasCaptureSession(); + ReleaseCaptureSession(); if (cameraInput_ != nullptr) { DHLOGI("DCameraClient::StopCapture %s release cameraInput", GetAnonyString(cameraId_).c_str()); cameraInput_->Release(); @@ -232,7 +227,7 @@ int32_t DCameraClient::StopCapture() return DCAMERA_OK; } -void DCameraClient::ReleasCaptureSession() +void DCameraClient::ReleaseCaptureSession() { if (captureSession_ == nullptr) { return; @@ -465,24 +460,14 @@ int32_t DCameraClient::StartPhotoOutput(std::shared_ptr& inf return DCAMERA_OK; } - camera_metadata_item_t item; - CameraStandard::PhotoCaptureSetting::RotationConfig rotation = - CameraStandard::PhotoCaptureSetting::RotationConfig::Rotation_0; - std::shared_ptr cameraMetadata = - Camera::MetadataUtils::DecodeFromString(Base64Decode(metadataSetting)); - int32_t ret = Camera::FindCameraMetadataItem(cameraMetadata->get(), OHOS_JPEG_ORIENTATION, &item); - if (ret == DCAMERA_OK) { - DHLOGI("DCameraClient::StartPhotoOutput %s find camera metadata item", GetAnonyString(cameraId_).c_str()); - rotation = static_cast(item.data.i32[0]); - } - - DHLOGI("DCameraClient::StartPhotoOutput %s photo capture settings set rotation: %d", - GetAnonyString(cameraId_).c_str(), rotation); - std::shared_ptr photoCaptureSettings = - std::make_shared(); - photoCaptureSettings->SetRotation(rotation); - SetQualityAndGpsLocation(cameraMetadata, photoCaptureSettings); - ret = ((sptr &)photoOutput_)->Capture(photoCaptureSettings); + std::string metadataStr = Base64Decode(metadataSetting); + std::shared_ptr cameraMetadata = Camera::MetadataUtils::DecodeFromString(metadataStr); + std::shared_ptr photoCaptureSetting = + std::make_shared(); + SetPhotoCaptureRotation(cameraMetadata, photoCaptureSetting); + SetPhotoCaptureQuality(cameraMetadata, photoCaptureSetting); + SetPhotoCaptureLocation(cameraMetadata, photoCaptureSetting); + int32_t ret = ((sptr &)photoOutput_)->Capture(photoCaptureSetting); if (ret != DCAMERA_OK) { DHLOGE("DCameraClient::StartPhotoOutput %s photoOutput capture failed, ret: %d", GetAnonyString(cameraId_).c_str(), ret); @@ -491,40 +476,55 @@ int32_t DCameraClient::StartPhotoOutput(std::shared_ptr& inf return DCAMERA_OK; } -void DCameraClient::SetQualityAndGpsLocation(const std::shared_ptr& cameraMetadata, - std::shared_ptr& photoCaptureSettings) +void DCameraClient::SetPhotoCaptureRotation(const std::shared_ptr& cameraMetadata, + std::shared_ptr& photoCaptureSetting) { + uint32_t rotationCount = 1; + camera_metadata_item_t item; + int32_t ret = Camera::FindCameraMetadataItem(cameraMetadata->get(), OHOS_JPEG_ORIENTATION, &item); + if ((ret == CAM_META_SUCCESS) && (rotationCount == item.count)) { + CameraStandard::PhotoCaptureSetting::RotationConfig rotation = + static_cast(item.data.i32[0]); + photoCaptureSetting->SetRotation(rotation); + DHLOGI("DCameraClient::SetPhotoCaptureRotation %s photo capture settings set %d rotation: %d", + GetAnonyString(cameraId_).c_str(), item.count, rotation); + } +} + +void DCameraClient::SetPhotoCaptureQuality(const std::shared_ptr& cameraMetadata, + std::shared_ptr& photoCaptureSetting) +{ + uint32_t qualityCount = 1; camera_metadata_item_t item; int32_t ret = Camera::FindCameraMetadataItem(cameraMetadata->get(), OHOS_JPEG_QUALITY, &item); - if (ret == CAM_META_SUCCESS) { - DHLOGI("DCameraClient::SetQualityAndGpsLocation %s find camera quality item", - GetAnonyString(cameraId_).c_str()); + if ((ret == CAM_META_SUCCESS) && (qualityCount == item.count)) { CameraStandard::PhotoCaptureSetting::QualityLevel quality = static_cast(item.data.u8[0]); - DHLOGI("DCameraClient::SetQualityAndGpsLocation %s photo capture settings set quality: %d", - GetAnonyString(cameraId_).c_str(), quality); - photoCaptureSettings->SetQuality(quality); + photoCaptureSetting->SetQuality(quality); + DHLOGI("DCameraClient::SetPhotoCaptureQuality %s photo capture settings set %d quality: %d", + GetAnonyString(cameraId_).c_str(), item.count, quality); } - ret = Camera::FindCameraMetadataItem(cameraMetadata->get(), OHOS_JPEG_GPS_COORDINATES, &item); - if (ret == CAM_META_SUCCESS) { - DHLOGI("DCameraClient::SetQualityAndGpsLocation %s find camera gpsCoordinates item", - GetAnonyString(cameraId_).c_str()); - double gpsCoordinates[3] = {-1.0, -1.0, -1.0}; - if (memcpy_s(gpsCoordinates, sizeof(gpsCoordinates), item.data.d, sizeof(gpsCoordinates)) != EOK) { - DHLOGE("DCameraClient::SetQualityAndGpsLocation memcpy_s gpsCoordinates failed"); - return; - } - DHLOGI("DCameraClient::SetQualityAndGpsLocation %s photo capture settings set " - "gpsCoordinates[LATITUDE]: %f, gpsCoordinates[LONGITUDE]: %f, gpsCoordinates[ALTITUDE]: %f", - GetAnonyString(cameraId_).c_str(), gpsCoordinates[LATITUDE], - gpsCoordinates[LONGITUDE], gpsCoordinates[ALTITUDE]); +} + +void DCameraClient::SetPhotoCaptureLocation(const std::shared_ptr& cameraMetadata, + std::shared_ptr& photoCaptureSetting) +{ + uint32_t locationCount = 3; + camera_metadata_item_t item; + int32_t ret = Camera::FindCameraMetadataItem(cameraMetadata->get(), OHOS_JPEG_GPS_COORDINATES, &item); + if ((ret == CAM_META_SUCCESS) && (locationCount == item.count)) { + int32_t latitudeIndex = 0; + int32_t longitudeIndex = 1; + int32_t altitudeIndex = 2; std::unique_ptr location = std::make_unique(); - location->latitude = gpsCoordinates[LATITUDE]; - location->longitude = gpsCoordinates[LONGITUDE]; - location->altitude = gpsCoordinates[ALTITUDE]; - photoCaptureSettings->SetLocation(location); + location->latitude = item.data.d[latitudeIndex]; + location->longitude = item.data.d[longitudeIndex]; + location->altitude = item.data.d[altitudeIndex]; + photoCaptureSetting->SetLocation(location); + DHLOGI("DCameraClient::SetPhotoCaptureLocation %s photo capture settings set %d location: " + + "latitude=%f, longitude=%f, altitude=%f", GetAnonyString(cameraId_).c_str(), item.count, + item.data.d[latitudeIndex], item.data.d[longitudeIndex], item.data.d[altitudeIndex]); } - return; } int32_t DCameraClient::StartVideoOutput() diff --git a/services/cameraservice/cameraoperator/client/src/dcamera_client_common.cpp b/services/cameraservice/cameraoperator/client/src/dcamera_client_common.cpp index f2bca51566a0bf2cab209c945c056986133cd835..627712a42ceddeea566a0a5ff8879d371de9ef4a 100644 --- a/services/cameraservice/cameraoperator/client/src/dcamera_client_common.cpp +++ b/services/cameraservice/cameraoperator/client/src/dcamera_client_common.cpp @@ -91,13 +91,19 @@ int32_t DCameraClient::UnInit() int32_t DCameraClient::UpdateSettings(std::vector>& settings) { - DHLOGI("DCameraClientCommon::UpdateCameraSettings cameraId: %s", GetAnonyString(cameraId_).c_str()); + DHLOGI("DCameraClientCommon::UpdateSettings cameraId: %s", GetAnonyString(cameraId_).c_str()); + if (cameraInput_ == nullptr) { + DHLOGI("DCameraClientCommon::UpdateSettings cameraInput is null, cameraId: %s", + GetAnonyString(cameraId_).c_str()); + return DCAMERA_BAD_VALUE; + } for (auto& setting : settings) { switch (setting->type_) { case UPDATE_METADATA: { - DHLOGI("DCameraClientCommon::UpdateCameraSettings %s update metadata settings", - GetAnonyString(cameraId_).c_str()); - std::string metadataStr = Base64Decode(setting->value_); + DHLOGI("DCameraClientCommon::UpdateSettings %s update metadata settings", + GetAnonyString(cameraId_).c_str()); + std::string dcSettingValue = setting->value_; + std::string metadataStr = Base64Decode(dcSettingValue); int32_t ret = ((sptr &)cameraInput_)->SetCameraSettings(metadataStr); if (ret != DCAMERA_OK) { DHLOGE("DCameraClientCommon::UpdateSettings %s update metadata settings failed, ret: %d", @@ -112,7 +118,7 @@ int32_t DCameraClient::UpdateSettings(std::vector& inf return DCAMERA_OK; } +void DCameraClient::SetPhotoCaptureRotation(const std::shared_ptr& cameraMetadata, + std::shared_ptr& photoCaptureSetting) +{ + DHLOGI("DCameraClientCommon::SetPhotoCaptureRotation cameraId: %s", GetAnonyString(cameraId_).c_str()); +} + +void DCameraClient::SetPhotoCaptureQuality(const std::shared_ptr& cameraMetadata, + std::shared_ptr& photoCaptureSetting) +{ + DHLOGI("DCameraClientCommon::SetPhotoCaptureQuality cameraId: %s", GetAnonyString(cameraId_).c_str()); +} + +void DCameraClient::SetPhotoCaptureLocation(const std::shared_ptr& cameraMetadata, + std::shared_ptr& photoCaptureSetting) +{ + DHLOGI("DCameraClientCommon::SetPhotoCaptureLocation cameraId: %s", GetAnonyString(cameraId_).c_str()); +} + int32_t DCameraClient::StartVideoOutput() { DHLOGI("DCameraClientCommon::StartVideoOutput cameraId: %s", GetAnonyString(cameraId_).c_str()); diff --git a/services/cameraservice/cameraoperator/client/test/sample/BUILD.gn b/services/cameraservice/cameraoperator/client/test/sample/BUILD.gn index 6bf2ea66df20d4d4b081fd37f9dc894effc114b7..c5c94684c87ce3e5199579d84974436c782bde86 100644 --- a/services/cameraservice/cameraoperator/client/test/sample/BUILD.gn +++ b/services/cameraservice/cameraoperator/client/test/sample/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (C) 2022 Huawei Device Co., Ltd. +# Copyright (c) 2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -18,11 +18,11 @@ import( config("module_private_config") { include_dirs = [ + "//drivers/peripheral/camera/interfaces/metadata/include", "//third_party/jsoncpp/include", "//utils/native/base/include", "//utils/system/safwk/native/include", "${graphicstandard_path}/frameworks/surface/include", - "//drivers/peripheral/camera/interfaces/metadata/include", "${camerastandard_path}/interfaces/inner_api/native/camera/include", "${camerastandard_path}/interfaces/inner_api/native/camera/include/input", "${camerastandard_path}/interfaces/inner_api/native/camera/include/output", @@ -38,7 +38,6 @@ config("module_private_config") { ] include_dirs += [ - "${distributedcamera_hdf_path}/interfaces/include", "${common_path}/include/constants", "${common_path}/include/utils", "${services_path}/cameraservice/base/include", @@ -56,10 +55,6 @@ ohos_executable("dcamera_client_demo") { "main.cpp", ] - cflags = [ "-fPIC" ] - cflags += [ "-Wall" ] - cflags_cc = cflags - configs = [ ":module_private_config" ] deps = [ @@ -74,16 +69,10 @@ ohos_executable("dcamera_client_demo") { "//utils/native/base:utils", ] - public_deps = [ "//drivers/interface/distributed_camera/v1_0:libdistributed_camera_provider_stub_1.0" ] - external_deps = [ - "eventhandler:libeventhandler", + "drivers_interface_distributed_camera:libdistributed_camera_provider_proxy_1.0", "hiviewdfx_hilog_native:libhilog", - "ipc:ipc_core", "multimedia_media_standard:media_client", - "safwk:system_ability_fwk", - "samgr_standard:samgr_proxy", - "startup_l2:syspara", ] defines = [