diff --git a/services/cameraservice/cameraoperator/client/include/dcamera_client.h b/services/cameraservice/cameraoperator/client/include/dcamera_client.h index f355d2f3e083050e5ac9dba12915a3efc909ed2a..f97d2ee431b14afdca13bc0b3b61887a6e0355e6 100644 --- a/services/cameraservice/cameraoperator/client/include/dcamera_client.h +++ b/services/cameraservice/cameraoperator/client/include/dcamera_client.h @@ -55,6 +55,8 @@ 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); bool isInit_; std::string cameraId_; diff --git a/services/cameraservice/cameraoperator/client/src/dcamera_client.cpp b/services/cameraservice/cameraoperator/client/src/dcamera_client.cpp index 462b99a7391a24542b7d7edac517328ef3ad8f6a..5f50dc95a392a9660a534d60777f9d621bb58fa1 100644 --- a/services/cameraservice/cameraoperator/client/src/dcamera_client.cpp +++ b/services/cameraservice/cameraoperator/client/src/dcamera_client.cpp @@ -15,7 +15,9 @@ #include "dcamera_client.h" +#include #include "anonymous_string.h" +#include "camera_metadata_operator.h" #include "dcamera_input_callback.h" #include "dcamera_manager_callback.h" #include "dcamera_photo_callback.h" @@ -409,6 +411,7 @@ int32_t DCameraClient::StartPhotoOutput(std::shared_ptr& inf std::shared_ptr photoCaptureSettings = std::make_shared(); photoCaptureSettings->SetRotation(rotation); + SetQualityAndGpsLocation(cameraMetadata, photoCaptureSettings); ret = ((sptr &)photoOutput_)->Capture(photoCaptureSettings); if (ret != DCAMERA_OK) { DHLOGE("DCameraClient::StartPhotoOutput %s photoOutput capture failed, ret: %d", @@ -418,6 +421,37 @@ int32_t DCameraClient::StartPhotoOutput(std::shared_ptr& inf return DCAMERA_OK; } +void DCameraClient::SetQualityAndGpsLocation(const std::shared_ptr& cameraMetadata, + std::shared_ptr& photoCaptureSettings) +{ + camera_metadata_item_t item; + int32_t ret = CameraStandard::FindCameraMetadataItem(cameraMetadata->get(), OHOS_JPEG_QUALITY, &item); + if (ret == CAM_META_SUCCESS) { + DHLOGI("DCameraClient::SetQualityAndGpsLocation %s find camera quality item", + GetAnonyString(cameraId_).c_str()); + 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); + } + ret = CameraStandard::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[2] = {-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[0]: %f, gpsCoordinates[1]: %f", + GetAnonyString(cameraId_).c_str(), gpsCoordinates[0], gpsCoordinates[1]); + photoCaptureSettings->SetGpsLocation(gpsCoordinates[0], gpsCoordinates[1]); + } + return; +} + int32_t DCameraClient::StartVideoOutput() { DHLOGI("DCameraClient::StartVideoOutput cameraId: %s", GetAnonyString(cameraId_).c_str());