From 302f968bf62716ec25ecc7c4d43967721b38d9dd Mon Sep 17 00:00:00 2001 From: zhouaoteng Date: Sat, 18 Nov 2023 15:39:19 +0800 Subject: [PATCH] resolve the crash Signed-off-by: zhouaoteng --- .../handler/include/dcamera_handler.h | 1 + .../handler/src/dcamera_handler.cpp | 36 +++++++++++++------ .../handler/src/dcamera_handler_common.cpp | 36 +++++++++++++------ 3 files changed, 53 insertions(+), 20 deletions(-) diff --git a/services/cameraservice/cameraoperator/handler/include/dcamera_handler.h b/services/cameraservice/cameraoperator/handler/include/dcamera_handler.h index 0fc68362..09feb347 100644 --- a/services/cameraservice/cameraoperator/handler/include/dcamera_handler.h +++ b/services/cameraservice/cameraoperator/handler/include/dcamera_handler.h @@ -50,6 +50,7 @@ private: private: int32_t CreateDHItem(sptr& info, DHItem& item); + int32_t CreateAVCodecList(Json::Value& root); std::string GetCameraPosition(CameraStandard::CameraPosition position); void ConfigFormatAndResolution(const DCStreamType type, Json::Value& root, std::vector& profileList); diff --git a/services/cameraservice/cameraoperator/handler/src/dcamera_handler.cpp b/services/cameraservice/cameraoperator/handler/src/dcamera_handler.cpp index 53bc17bd..8505f8e0 100644 --- a/services/cameraservice/cameraoperator/handler/src/dcamera_handler.cpp +++ b/services/cameraservice/cameraoperator/handler/src/dcamera_handler.cpp @@ -131,28 +131,44 @@ std::vector DCameraHandler::GetCameras() return cameras; } -int32_t DCameraHandler::CreateDHItem(sptr& info, DHItem& item) +int32_t DCameraHandler::CreateAVCodecList(Json::Value& root) { - std::string id = info->GetID(); - item.dhId = CAMERA_ID_PREFIX + id; - item.subtype = "camera"; - DHLOGI("camera id: %s", GetAnonyString(id).c_str()); - - Json::Value root; - root[CAMERA_PROTOCOL_VERSION_KEY] = Json::Value(CAMERA_PROTOCOL_VERSION_VALUE); - root[CAMERA_POSITION_KEY] = Json::Value(GetCameraPosition(info->GetPosition())); - std::shared_ptr avCodecList = MediaAVCodec::AVCodecListFactory::CreateAVCodecList(); + if (avCodecList == nullptr) { + DHLOGI("Create avCodecList failed"); + return DCAMERA_BAD_VALUE; + } const std::vector encoderName = {std::string(MediaAVCodec::CodecMimeType::VIDEO_AVC), std::string(MediaAVCodec::CodecMimeType::VIDEO_HEVC)}; for (auto &coder : encoderName) { MediaAVCodec::CapabilityData *capData = avCodecList->GetCapability(coder, true, MediaAVCodec::AVCodecCategory::AVCODEC_HARDWARE); + if (capData == nullptr) { + DHLOGI("capData is nullptr"); + return DCAMERA_BAD_VALUE; + } std::string mimeType = capData->mimeType; root[CAMERA_CODEC_TYPE_KEY].append(mimeType); DHLOGI("codec name: %s, mimeType: %s", coder.c_str(), mimeType.c_str()); } + return DCAMERA_OK; +} +int32_t DCameraHandler::CreateDHItem(sptr& info, DHItem& item) +{ + std::string id = info->GetID(); + item.dhId = CAMERA_ID_PREFIX + id; + item.subtype = "camera"; + DHLOGI("camera id: %s", GetAnonyString(id).c_str()); + + Json::Value root; + root[CAMERA_PROTOCOL_VERSION_KEY] = Json::Value(CAMERA_PROTOCOL_VERSION_VALUE); + root[CAMERA_POSITION_KEY] = Json::Value(GetCameraPosition(info->GetPosition())); + int32_t ret = CreateAVCodecList(root); + if (ret != DCAMERA_OK) { + DHLOGI("CreateAVCodecList failed"); + return DCAMERA_BAD_VALUE; + } sptr capability = cameraManager_->GetSupportedOutputCapability(info); if (capability == nullptr) { DHLOGI("get supported capability is null"); diff --git a/services/cameraservice/cameraoperator/handler/src/dcamera_handler_common.cpp b/services/cameraservice/cameraoperator/handler/src/dcamera_handler_common.cpp index 53bc17bd..8505f8e0 100644 --- a/services/cameraservice/cameraoperator/handler/src/dcamera_handler_common.cpp +++ b/services/cameraservice/cameraoperator/handler/src/dcamera_handler_common.cpp @@ -131,28 +131,44 @@ std::vector DCameraHandler::GetCameras() return cameras; } -int32_t DCameraHandler::CreateDHItem(sptr& info, DHItem& item) +int32_t DCameraHandler::CreateAVCodecList(Json::Value& root) { - std::string id = info->GetID(); - item.dhId = CAMERA_ID_PREFIX + id; - item.subtype = "camera"; - DHLOGI("camera id: %s", GetAnonyString(id).c_str()); - - Json::Value root; - root[CAMERA_PROTOCOL_VERSION_KEY] = Json::Value(CAMERA_PROTOCOL_VERSION_VALUE); - root[CAMERA_POSITION_KEY] = Json::Value(GetCameraPosition(info->GetPosition())); - std::shared_ptr avCodecList = MediaAVCodec::AVCodecListFactory::CreateAVCodecList(); + if (avCodecList == nullptr) { + DHLOGI("Create avCodecList failed"); + return DCAMERA_BAD_VALUE; + } const std::vector encoderName = {std::string(MediaAVCodec::CodecMimeType::VIDEO_AVC), std::string(MediaAVCodec::CodecMimeType::VIDEO_HEVC)}; for (auto &coder : encoderName) { MediaAVCodec::CapabilityData *capData = avCodecList->GetCapability(coder, true, MediaAVCodec::AVCodecCategory::AVCODEC_HARDWARE); + if (capData == nullptr) { + DHLOGI("capData is nullptr"); + return DCAMERA_BAD_VALUE; + } std::string mimeType = capData->mimeType; root[CAMERA_CODEC_TYPE_KEY].append(mimeType); DHLOGI("codec name: %s, mimeType: %s", coder.c_str(), mimeType.c_str()); } + return DCAMERA_OK; +} +int32_t DCameraHandler::CreateDHItem(sptr& info, DHItem& item) +{ + std::string id = info->GetID(); + item.dhId = CAMERA_ID_PREFIX + id; + item.subtype = "camera"; + DHLOGI("camera id: %s", GetAnonyString(id).c_str()); + + Json::Value root; + root[CAMERA_PROTOCOL_VERSION_KEY] = Json::Value(CAMERA_PROTOCOL_VERSION_VALUE); + root[CAMERA_POSITION_KEY] = Json::Value(GetCameraPosition(info->GetPosition())); + int32_t ret = CreateAVCodecList(root); + if (ret != DCAMERA_OK) { + DHLOGI("CreateAVCodecList failed"); + return DCAMERA_BAD_VALUE; + } sptr capability = cameraManager_->GetSupportedOutputCapability(info); if (capability == nullptr) { DHLOGI("get supported capability is null"); -- Gitee