From d391f713546fc408f2ae27bc54c36f9ac152d8db Mon Sep 17 00:00:00 2001 From: byndyx Date: Fri, 26 Apr 2024 11:41:15 +0800 Subject: [PATCH] v-d Signed-off-by: byndyx --- .../handler/include/dcamera_handler.h | 1 + .../handler/src/dcamera_handler.cpp | 47 ++++++++++++++++++- .../distributed_camera_source_service.cpp | 4 -- 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/services/cameraservice/cameraoperator/handler/include/dcamera_handler.h b/services/cameraservice/cameraoperator/handler/include/dcamera_handler.h index 20f7a265..d7bb56b4 100644 --- a/services/cameraservice/cameraoperator/handler/include/dcamera_handler.h +++ b/services/cameraservice/cameraoperator/handler/include/dcamera_handler.h @@ -51,6 +51,7 @@ private: private: const int32_t INVALID_FORMAT = -1; + int32_t CreateMetaDHItem(sptr& info, DHItem& item); int32_t CreateDHItem(sptr& info, DHItem& item); int32_t CreateAVCodecList(cJSON* root); std::string GetCameraPosition(CameraStandard::CameraPosition position); diff --git a/services/cameraservice/cameraoperator/handler/src/dcamera_handler.cpp b/services/cameraservice/cameraoperator/handler/src/dcamera_handler.cpp index aec4b6b6..9a43491f 100644 --- a/services/cameraservice/cameraoperator/handler/src/dcamera_handler.cpp +++ b/services/cameraservice/cameraoperator/handler/src/dcamera_handler.cpp @@ -54,7 +54,29 @@ int32_t DCameraHandler::Initialize() std::vector DCameraHandler::QueryMeta() { - return {}; + std::vector itemList; + std::vector> cameraList = cameraManager_->GetSupportedCameras(); + uint64_t listSize = static_cast(cameraList.size()); + DHLOGI("get %{public}" PRIu64" cameras", listSize); + if (cameraList.empty()) { + DHLOGE("no camera device"); + return itemList; + } + for (auto& info : cameraList) { + if (info->GetConnectionType() != CameraStandard::ConnectionType::CAMERA_CONNECTION_BUILT_IN) { + DHLOGI("connection type: %{public}d", info->GetConnectionType()); + continue; + } + DHLOGI("get %{public}s, position: %{public}d, cameraType: %{public}d", + GetAnonyString(info->GetID()).c_str(), info->GetPosition(), info->GetCameraType()); + DHItem item; + if (CreateMetaDHItem(info, item) == DCAMERA_OK) { + itemList.emplace_back(item); + } + } + listSize = static_cast(itemList.size()); + DHLOGI("success, get %{public}" PRIu64" items", listSize); + return itemList; } std::vector DCameraHandler::Query() @@ -173,6 +195,27 @@ int32_t DCameraHandler::CreateAVCodecList(cJSON *root) return DCAMERA_OK; } +int32_t DCameraHandler::CreateMetaDHItem(sptr& info, DHItem& item) +{ + std::string id = info->GetID(); + item.dhId = CAMERA_ID_PREFIX + id; + item.subtype = "camera"; + DHLOGI("camera id: %{public}s", GetAnonyString(id).c_str()); + + cJSON *root = cJSON_CreateObject(); + CHECK_AND_RETURN_RET_LOG(root == nullptr, DCAMERA_BAD_VALUE, "Create cJSON object failed"); + cJSON_AddStringToObject(root, CAMERA_METADATA_KEY.c_str(), CAMERA_METADATA_KEY.c_str()); + char *jsonstr = cJSON_Print(root); + if (jsonstr == nullptr) { + cJSON_Delete(root); + return DCAMERA_BAD_VALUE; + } + item.attrs = jsonstr; + cJSON_free(jsonstr); + cJSON_Delete(root); + return DCAMERA_OK; +} + int32_t DCameraHandler::CreateDHItem(sptr& info, DHItem& item) { std::string id = info->GetID(); @@ -216,8 +259,8 @@ int32_t DCameraHandler::CreateDHItem(sptr& info, D if (cameraInput->Release() != DCAMERA_OK) { DHLOGE("cameraInput Release failed"); } - cJSON_Delete(root); cJSON_free(jsonstr); + cJSON_Delete(root); return DCAMERA_OK; } diff --git a/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_service.cpp b/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_service.cpp index 36b94f6b..0e31a9a0 100644 --- a/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_service.cpp +++ b/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_service.cpp @@ -163,10 +163,6 @@ int32_t DistributedCameraSourceService::RegisterDistributedHardware(const std::s return ret; } CamDevInsert(camIndex, camDev); - } else { - DHLOGE("RegisterDistributedHardware exist devId: %{public}s, dhId: %{public}s, sinkVersion: %{public}s", - GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str(), param.sinkVersion.c_str()); - return DCAMERA_ALREADY_EXISTS; } ret = camDev->RegisterDistributedHardware(devId, dhId, reqId, param); -- Gitee