diff --git a/common/include/constants/distributed_camera_constants.h b/common/include/constants/distributed_camera_constants.h index e105f0e7a7487de840bdbc3b5fbabf7c57cf8b1b..00983ccbbdb3d38b61420b511073e50221bab77a 100644 --- a/common/include/constants/distributed_camera_constants.h +++ b/common/include/constants/distributed_camera_constants.h @@ -111,6 +111,7 @@ const std::string CAMERA_FORMAT_PHOTO = "Photo"; const std::string CAMERA_RESOLUTION_KEY = "Resolution"; const std::string CAMERA_SURFACE_FORMAT = "CAMERA_SURFACE_FORMAT"; const std::string HDF_DCAMERA_EXT_SERVICE = "distributed_camera_provider_service"; +const std::string CAMERA_SUPPORT_MODE = "Mode"; constexpr static int8_t FRAME_HEAD = 0; const int32_t RESOLUTION_MAX_WIDTH_SNAPSHOT = 4096; diff --git a/common/src/utils/dcamera_utils_tools.cpp b/common/src/utils/dcamera_utils_tools.cpp index 5739561444406ed0b4f38509c8c51a7c3f3a1b74..a229426109a30736033c07be6f2e089edc94a2db 100644 --- a/common/src/utils/dcamera_utils_tools.cpp +++ b/common/src/utils/dcamera_utils_tools.cpp @@ -317,23 +317,19 @@ FILE *DumpFileUtil::OpenDumpFileInner(std::string para, std::string fileName) std::string filePath = DUMP_SERVICE_DIR + fileName; std::string dumpPara; FILE *dumpFile = nullptr; - char path[PATH_MAX + 1] = {0x00}; - if (filePath.length() > PATH_MAX || realpath(filePath.c_str(), path) == nullptr) { - DHLOGE("The file path is invalid."); - return dumpFile; - } + bool res = GetSysPara(para.c_str(), dumpPara); if (!res || dumpPara.empty()) { DHLOGI("%{public}s is not set, dump dcamera is not required", para.c_str()); g_lastPara[para] = dumpPara; return dumpFile; } - DHLOGI("%{public}s = %{public}s, filePath: %{public}s", para.c_str(), dumpPara.c_str(), path); + DHLOGI("%{public}s = %{public}s, filePath: %{public}s", para.c_str(), dumpPara.c_str(), filePath.c_str()); if (dumpPara == "w") { - dumpFile = fopen(path, "wb+"); + dumpFile = fopen(filePath.c_str(), "wb+"); CHECK_AND_RETURN_RET_LOG(dumpFile == nullptr, dumpFile, "Error opening dump file!"); } else if (dumpPara == "a") { - dumpFile = fopen(path, "ab+"); + dumpFile = fopen(filePath.c_str(), "ab+"); CHECK_AND_RETURN_RET_LOG(dumpFile == nullptr, dumpFile, "Error opening dump file!"); } g_lastPara[para] = dumpPara; diff --git a/services/cameraservice/cameraoperator/handler/src/dcamera_handler.cpp b/services/cameraservice/cameraoperator/handler/src/dcamera_handler.cpp index da00df5c5f383279c3a23408338e565caa75e4cd..010e830798f8e24f04825e55e56f4ca2ea8841d7 100644 --- a/services/cameraservice/cameraoperator/handler/src/dcamera_handler.cpp +++ b/services/cameraservice/cameraoperator/handler/src/dcamera_handler.cpp @@ -228,14 +228,30 @@ int32_t DCameraHandler::CreateDHItem(sptr& info, D cJSON_AddStringToObject(root, CAMERA_POSITION_KEY.c_str(), GetCameraPosition(info->GetPosition()).c_str()); int32_t ret = CreateAVCodecList(root); CHECK_AND_FREE_RETURN_RET_LOG(ret != DCAMERA_OK, DCAMERA_BAD_VALUE, root, "CreateAVCodecList failed"); - sptr capability = cameraManager_->GetSupportedOutputCapability(info); - CHECK_AND_FREE_RETURN_RET_LOG(capability == nullptr, DCAMERA_BAD_VALUE, root, "get supported capability is null"); - std::vector photoProfiles = capability->GetPhotoProfiles(); - ConfigFormatphoto(SNAPSHOT_FRAME, root, photoProfiles); + std::vector supportedModes = cameraManager_->GetSupportedModes(info); + supportedModes.push_back(CameraStandard::SceneMode::NORMAL); + cJSON* modeArray = cJSON_CreateArray(); + CHECK_AND_FREE_RETURN_RET_LOG(modeArray == nullptr, DCAMERA_BAD_VALUE, root, "Create modeArray object failed"); + cJSON_AddItemToObject(root, CAMERA_SUPPORT_MODE.c_str(), modeArray); + + for (auto& mode : supportedModes) { + DHLOGI("The camera id: %{public}s, The supportedModes is : %{public}d", GetAnonyString(id).c_str(), mode); + cJSON_AddItemToArray(modeArray, cJSON_CreateNumber(mode)); - std::vector previewProfiles = capability->GetPreviewProfiles(); - ConfigFormatvideo(CONTINUOUS_FRAME, root, previewProfiles); + sptr capability = cameraManager_->GetSupportedOutputCapability(info, + mode); + CHECK_AND_FREE_RETURN_RET_LOG(capability == nullptr, DCAMERA_BAD_VALUE, root, "supported capability is null"); + cJSON* modeData = cJSON_CreateObject(); + CHECK_AND_FREE_RETURN_RET_LOG(modeData == nullptr, DCAMERA_BAD_VALUE, root, "Create cJSON object failed"); + std::vector photoProfiles = capability->GetPhotoProfiles(); + ConfigFormatphoto(SNAPSHOT_FRAME, modeData, photoProfiles); + + std::vector previewProfiles = capability->GetPreviewProfiles(); + ConfigFormatvideo(CONTINUOUS_FRAME, modeData, previewProfiles); + + cJSON_AddItemToObject(root, std::to_string(mode).c_str(), modeData); + } sptr cameraInput = nullptr; int rv = cameraManager_->CreateCameraInput(info, &cameraInput); CHECK_AND_FREE_RETURN_RET_LOG(rv != DCAMERA_OK, DCAMERA_BAD_VALUE, root, "create cameraInput failed"); @@ -249,15 +265,11 @@ int32_t DCameraHandler::CreateDHItem(sptr& info, D DHLOGI("encodeString hash: %zu, length: %zu", h(encodeString), encodeString.length()); cJSON_AddStringToObject(root, CAMERA_METADATA_KEY.c_str(), encodeString.c_str()); char *jsonstr = cJSON_Print(root); - if (jsonstr == nullptr) { - cJSON_Delete(root); - return DCAMERA_BAD_VALUE; - } + CHECK_AND_FREE_RETURN_RET_LOG(jsonstr == nullptr, DCAMERA_BAD_VALUE, root, "jsonstr is null"); item.attrs = jsonstr; - if (cameraInput->Release() != DCAMERA_OK) { - DHLOGE("cameraInput Release failed"); - } + CHECK_AND_LOG(cameraInput->Release() != DCAMERA_OK, "cameraInput Release failed"); + 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 c3eb318697b55146e8639284f36a300d1d3f8203..4e32e7e3e9074e204864fc6c3f1e626b766a1021 100644 --- a/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_service.cpp +++ b/services/cameraservice/sourceservice/src/distributedcamera/distributed_camera_source_service.cpp @@ -213,10 +213,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(), params.sinkVersion.c_str()); - return DCAMERA_ALREADY_EXISTS; } ret = camDev->RegisterDistributedHardware(devId, dhId, reqId, params);