From 8c9206639b5142dc62f560b6c89e544ba4896ead Mon Sep 17 00:00:00 2001 From: qinlong0101 Date: Wed, 3 Aug 2022 15:20:41 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=A7=A6=E6=91=B8=E5=B1=8F=E5=8F=8D?= =?UTF-8?q?=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qinlong0101 --- common/include/dscreen_constants.h | 12 +++++ services/screenservice/sinkservice/BUILD.gn | 2 + .../screenregionmgr/include/screenregion.h | 3 ++ .../screenregionmgr/include/screenregionmgr.h | 4 ++ .../screenregionmgr/src/screenregion.cpp | 6 +++ .../screenregionmgr/src/screenregionmgr.cpp | 40 ++++++++++++++++ services/screenservice/sourceservice/BUILD.gn | 2 + .../dscreenmgr/include/dscreen_manager.h | 3 ++ .../dscreenmgr/src/dscreen_manager.cpp | 48 +++++++++++++++++++ 9 files changed, 120 insertions(+) diff --git a/common/include/dscreen_constants.h b/common/include/dscreen_constants.h index 1eb156f2..afa86978 100644 --- a/common/include/dscreen_constants.h +++ b/common/include/dscreen_constants.h @@ -117,6 +117,17 @@ const std::string KEY_VIDEO_PARAM = "videoParam"; const std::string KEY_MAPRELATION = "mapRelation"; const std::string CODEC_NAME_H264 = "OMX_hisi_video_encoder_avc"; const std::string CODEC_NAME_MPEG4 = "avenc_mpeg4"; +// Publish massage +const std::string SOURCE_WIN_ID = "sourceWinId"; +const std::string SOURCE_DEV_ID = "screenDevId"; +const std::string SOURCE_WIN_WIDTH = "sourceWinWidth"; +const std::string SOURCE_WIN_HEIGHT = "sourceWinHeight"; +const std::string SINK_SHOW_WIN_ID = "sinkShowWinId"; +const std::string SINK_PROJ_SHOW_WIDTH = "sinkProjShowWidth"; +const std::string SINK_PROJ_SHOW_HEIGHT = "sinkProjShowHeight"; +const std::string SINK_WIN_SHOW_X = "sinkWinShowX"; +const std::string SINK_WIN_SHOW_Y = "sinkWinShowY"; + constexpr float DEFAULT_DENSITY = 2.0; constexpr int32_t DEFAULT_SCREEN_FLAGS = 0; constexpr uint32_t DEFAULT_FPS = 30; @@ -127,6 +138,7 @@ constexpr int32_t DISTRIBUTED_HARDWARE_SCREEN_SINK_SA_ID = 4808; constexpr uint64_t SCREEN_ID_INVALID = -1ULL; constexpr uint64_t SCREEN_ID_DEFAULT = 0; constexpr int32_t SCREEN_LOADSA_TIMEOUT_MS = 10000; +constexpr int32_t INIT_DHFWKKIT_TIME_MS = 10; } // namespace DistributedHardware } // namespace OHOS #endif \ No newline at end of file diff --git a/services/screenservice/sinkservice/BUILD.gn b/services/screenservice/sinkservice/BUILD.gn index 57e7f669..615b878b 100644 --- a/services/screenservice/sinkservice/BUILD.gn +++ b/services/screenservice/sinkservice/BUILD.gn @@ -25,6 +25,7 @@ ohos_shared_library("distributed_screen_sink") { "//foundation/graphic/graphic_2d/interfaces/innerkits/surface", "${windowmanager_path}/interfaces/innerkits/dm", "${fwk_common_path}/utils/include", + "${distributedhardwarefwk_path}/interfaces/inner_kits/include", ] include_dirs += [ @@ -61,6 +62,7 @@ ohos_shared_library("distributed_screen_sink") { "${services_path}/screentransport/screensinktrans:distributed_screen_sinktrans", "${windowmanager_path}/dm:libdm", "//foundation/graphic/graphic_2d/frameworks/surface:surface", + "${distributedhardwarefwk_path}/interfaces/inner_kits:libdhfwk_sdk", ] defines = [ diff --git a/services/screenservice/sinkservice/screenregionmgr/include/screenregion.h b/services/screenservice/sinkservice/screenregionmgr/include/screenregion.h index 6709424f..9e454294 100644 --- a/services/screenservice/sinkservice/screenregionmgr/include/screenregion.h +++ b/services/screenservice/sinkservice/screenregionmgr/include/screenregion.h @@ -21,6 +21,7 @@ #include "iscreen_sink_trans_callback.h" #include "iscreen_sink_trans.h" #include "dscreen_maprelation.h" +#include "screen_client_common.h" #include "video_param.h" namespace OHOS { @@ -50,6 +51,7 @@ public: int32_t SetUp(); int32_t Start(); int32_t Stop(); + std::shared_ptr GetWindowProperty(); private: std::string remoteDevId_; @@ -62,6 +64,7 @@ private: sptr surface_ = nullptr; int32_t windowId_ = INVALID_WINDOW_ID; std::shared_ptr sinkTrans_ = nullptr; + std::shared_ptr windowProperty_ = nullptr; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/screenservice/sinkservice/screenregionmgr/include/screenregionmgr.h b/services/screenservice/sinkservice/screenregionmgr/include/screenregionmgr.h index 89912f0a..f0633b73 100644 --- a/services/screenservice/sinkservice/screenregionmgr/include/screenregionmgr.h +++ b/services/screenservice/sinkservice/screenregionmgr/include/screenregionmgr.h @@ -19,6 +19,7 @@ #include #include +#include "distributed_hardware_fwk_kit.h" #include "single_instance.h" #include "screenregion.h" @@ -32,6 +33,8 @@ public: int32_t ReleaseAllRegions(); void HandleDScreenNotify(const std::string &devId, int32_t eventCode, const std::string &eventContent); void GetScreenDumpInfo(std::string &result); + void PublishMessage(const DHTopic topic, const uint64_t &screenId, const std::string &remoteDevId, + const int32_t &windowId, std::shared_ptr windowProperty); private: ScreenRegionManager(); @@ -39,6 +42,7 @@ private: std::map> screenRegions_; std::mutex screenRegionsMtx_; std::string localDevId_; + std::shared_ptr dhfwkKit_ = nullptr; sptr GetDScreenSourceSA(const std::string &devId); int32_t NotifyRemoteScreenService(const std::string &remoteDevId, const std::string &dhId, diff --git a/services/screenservice/sinkservice/screenregionmgr/src/screenregion.cpp b/services/screenservice/sinkservice/screenregionmgr/src/screenregion.cpp index ee5c18d7..408b7adb 100644 --- a/services/screenservice/sinkservice/screenregionmgr/src/screenregion.cpp +++ b/services/screenservice/sinkservice/screenregionmgr/src/screenregion.cpp @@ -84,6 +84,11 @@ int32_t ScreenRegion::GetWindowId() return windowId_; } +std::shared_ptr ScreenRegion::GetWindowProperty() +{ + return windowProperty_; +} + int32_t ScreenRegion::SetUp() { DHLOGI("ScreenRegion::SetUp, remoteDevId: %s", GetAnonyString(remoteDevId_).c_str()); @@ -96,6 +101,7 @@ int32_t ScreenRegion::SetUp() windowProperty->startY = screenRect.startY; windowProperty->width = screenRect.width; windowProperty->height = screenRect.height; + windowProperty_ = windowProperty; windowId_ = ScreenClient::GetInstance().AddWindow(windowProperty); if (windowId_ < 0) { diff --git a/services/screenservice/sinkservice/screenregionmgr/src/screenregionmgr.cpp b/services/screenservice/sinkservice/screenregionmgr/src/screenregionmgr.cpp index d01e4ff4..70fa6479 100644 --- a/services/screenservice/sinkservice/screenregionmgr/src/screenregionmgr.cpp +++ b/services/screenservice/sinkservice/screenregionmgr/src/screenregionmgr.cpp @@ -15,6 +15,10 @@ #include "screenregionmgr.h" +#include +#include +#include + #include "display_manager.h" #include "if_system_ability_manager.h" #include "iservice_registry.h" @@ -67,6 +71,17 @@ void ScreenRegionManager::HandleDScreenNotify(const std::string &remoteDevId, in const std::string &eventContent) { DHLOGI("HandleDScreenNotify, remoteDevId: %s, eventCode: %d", GetAnonyString(remoteDevId).c_str(), eventCode); + if (dhfwkKit_ == nullptr) { + dhfwkKit_ = std::make_shared(); + } + { + std::mutex kitMtx; + std::condition_variable dhfwkKitCond_; + std::unique_lock lck(kitMtx); + dhfwkKitCond_.wait_for(lck, std::chrono::milliseconds(INIT_DHFWKKIT_TIME_MS), [](){ return false; }); + DHLOGI("Init dhfwkKit time(%dms).", INIT_DHFWKKIT_TIME_MS); + } + if (eventCode == NOTIFY_SINK_SETUP) { HandleNotifySetUp(remoteDevId, eventContent); return; @@ -170,6 +185,8 @@ void ScreenRegionManager::HandleNotifySetUp(const std::string &remoteDevId, cons return; } + PublishMessage(DHTopic::TOPIC_SINK_PROJECT_WINDOW_INFO, screenId, remoteDevId, screenRegion->GetWindowId(), + screenRegion->GetWindowProperty()); NotifyRemoteSourceSetUpResult(remoteDevId, dhId, DH_SUCCESS, ""); } @@ -233,5 +250,28 @@ sptr ScreenRegionManager::GetDScreenSourceSA(const std::string & } return remoteSourceSA; } + +void ScreenRegionManager::PublishMessage(const DHTopic topic, const uint64_t &screenId, + const std::string &remoteDevId, const int32_t &windowId, std::shared_ptr windowProperty) +{ + DHLOGD("Sink PublishMessage"); + if (dhfwkKit_ == nullptr) { + DHLOGE("dhfwkKit is nullptr."); + return; + } + + json messageJosn; + std::string message; + messageJosn[SOURCE_WIN_ID] = screenId; + messageJosn[SOURCE_DEV_ID] = remoteDevId; + messageJosn[SINK_SHOW_WIN_ID] = windowId; + messageJosn[SINK_PROJ_SHOW_WIDTH] = windowProperty->width; + messageJosn[SINK_PROJ_SHOW_HEIGHT] = windowProperty->height; + messageJosn[SINK_WIN_SHOW_X] = windowProperty->startX; + messageJosn[SINK_WIN_SHOW_Y] = windowProperty->startY; + message = messageJosn.dump(); + + dhfwkKit_->PublishMessage(topic, message); +} } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/services/screenservice/sourceservice/BUILD.gn b/services/screenservice/sourceservice/BUILD.gn index 9937c878..67387695 100644 --- a/services/screenservice/sourceservice/BUILD.gn +++ b/services/screenservice/sourceservice/BUILD.gn @@ -26,6 +26,7 @@ ohos_shared_library("distributed_screen_source") { "//foundation/graphic/graphic_2d/interfaces/innerkits/surface", "${fwk_common_path}/utils/include", "${mediastandard_path}/interfaces/inner_api/native", + "${distributedhardwarefwk_path}/interfaces/inner_kits/include", ] include_dirs += [ @@ -65,6 +66,7 @@ ohos_shared_library("distributed_screen_source") { "${windowmanager_path}/dm:libdm", "//foundation/graphic/graphic_2d/frameworks/surface:surface", "//foundation/graphic/graphic_2d/rosen/modules/render_service_client:librender_service_client", + "${distributedhardwarefwk_path}/interfaces/inner_kits:libdhfwk_sdk", ] defines = [ diff --git a/services/screenservice/sourceservice/dscreenmgr/include/dscreen_manager.h b/services/screenservice/sourceservice/dscreenmgr/include/dscreen_manager.h index 3d951763..d17cf762 100644 --- a/services/screenservice/sourceservice/dscreenmgr/include/dscreen_manager.h +++ b/services/screenservice/sourceservice/dscreenmgr/include/dscreen_manager.h @@ -16,6 +16,7 @@ #ifndef OHOS_DSCREEN_MGR_H #define OHOS_DSCREEN_MGR_H +#include "distributed_hardware_fwk_kit.h" #include "dm_common.h" #include "single_instance.h" #include "screen_manager.h" @@ -59,6 +60,7 @@ public: void HandleScreenChange(const std::shared_ptr &changedScreen, Rosen::ScreenGroupChangeEvent event); std::shared_ptr FindDScreenByScreenId(uint64_t screenId); void GetScreenDumpInfo(std::string &result); + void PublishMessage(const DHTopic topic, const std::shared_ptr &dScreen); private: ~DScreenManager(); @@ -71,6 +73,7 @@ private: sptr dScreenGroupListener_ = nullptr; std::shared_ptr dScreenCallback_ = nullptr; std::string localDevId_; + std::shared_ptr dhfwkKit_ = nullptr; sptr GetDScreenSinkSA(const std::string &devId); int32_t NotifyRemoteScreenService(const std::string &devId, int32_t eventCode, const std::string &eventContent); diff --git a/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp b/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp index 4b4c31bd..c1123626 100644 --- a/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp @@ -15,7 +15,10 @@ #include "dscreen_manager.h" +#include +#include #include +#include #include "if_system_ability_manager.h" #include "iservice_registry.h" @@ -118,6 +121,18 @@ void DScreenManager::HandleScreenChange(const std::shared_ptr &changedS DHLOGE("DScreenManager::HandleScreenChange, dScreen is null."); return; } + + if (dhfwkKit_ == nullptr) { + dhfwkKit_ = std::make_shared(); + } + { + std::mutex kitMtx; + std::condition_variable dhfwkKitCond_; + std::unique_lock lck(kitMtx); + dhfwkKitCond_.wait_for(lck, std::chrono::milliseconds(INIT_DHFWKKIT_TIME_MS), [](){ return false; }); + DHLOGI("Init dhfwkKit time(%dms).", INIT_DHFWKKIT_TIME_MS); + } + uint64_t screenId = changedScreen->GetScreenId(); DHLOGI("DScreenManager::HandleScreenChange, screenId: %ulld, changeEvent: %", screenId, event); if (event == Rosen::ScreenGroupChangeEvent::ADD_TO_GROUP) { @@ -143,6 +158,7 @@ void DScreenManager::HandleScreenChange(const std::shared_ptr &changedS mapRelations_[screenId] = mapRelation; } NotifyRemoteSinkSetUp(changedScreen); + PublishMessage(DHTopic::TOPIC_START_DSCREEN, changedScreen); } else if (event == Rosen::ScreenGroupChangeEvent::REMOVE_FROM_GROUP) { if (changedScreen->GetState() == DISCONNECTING) { DHLOGD("screen is disconnecting, no need handle change"); @@ -159,6 +175,7 @@ void DScreenManager::HandleScreenChange(const std::shared_ptr &changedS mapRelations_.erase(screenId); } changedScreen->AddTask(std::make_shared(TaskType::TASK_DISCONNECT, "")); + PublishMessage(DHTopic::TOPIC_STOP_DSCREEN, changedScreen); } else if (event == Rosen::ScreenGroupChangeEvent::CHANGE_GROUP) { DHLOGE("CHANGE_GROUP not implement."); } else { @@ -239,6 +256,7 @@ int32_t DScreenManager::EnableDistributedScreen(const std::string &devId, const DHLOGE("EnableDistributedScreen, add task failed. devId: %s, dhId:%s", GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str()); } + return ret; } @@ -403,6 +421,36 @@ sptr DScreenManager::GetDScreenSinkSA(const std::string &devId) return remoteSinkSA; } +void DScreenManager::PublishMessage(const DHTopic topic, const std::shared_ptr &dScreen) +{ + DHLOGD("PublishMessage"); + if (dhfwkKit_ == nullptr) { + DHLOGE("dhfwkKit is nullptr."); + return; + } + + json messageJosn; + std::string message; + if (topic == DHTopic::TOPIC_START_DSCREEN) { + messageJosn[SOURCE_WIN_ID] = dScreen->GetScreenId(); + messageJosn[SOURCE_DEV_ID] = dScreen->GetDevId(); + std::shared_ptr videoParam = dScreen->GetVideoParam(); + if (videoParam == nullptr) { + DHLOGE("videoParam is nullptr"); + return; + } + messageJosn[SOURCE_WIN_WIDTH] = videoParam->GetScreenWidth(); + messageJosn[SOURCE_WIN_HEIGHT] = videoParam->GetScreenHeight(); + message = messageJosn.dump(); + } else if (topic == DHTopic::TOPIC_STOP_DSCREEN) { + messageJosn[SOURCE_WIN_ID] = dScreen->GetScreenId(); + messageJosn[SOURCE_DEV_ID] = dScreen->GetDevId(); + message = messageJosn.dump(); + } + + dhfwkKit_->PublishMessage(topic, message); +} + void DScreenManager::NotifyRemoteSinkSetUp(const std::shared_ptr &dScreen) { DHLOGI("NotifyRemoteSinkSetUp"); -- Gitee From 36c188c4ea649c1583eea4be160101552cedb05b Mon Sep 17 00:00:00 2001 From: qinlong0101 Date: Mon, 8 Aug 2022 11:20:09 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=A7=A6=E6=91=B8=E5=B1=8F=E5=8F=8D?= =?UTF-8?q?=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qinlong0101 --- common/include/dscreen_constants.h | 4 +- .../common/utils/include/dscreen_fwkkit.h | 38 +++++++++++++++++++ services/common/utils/src/dscreen_fwkkit.cpp | 32 ++++++++++++++++ services/screenservice/sinkservice/BUILD.gn | 3 +- .../screenregionmgr/include/screenregion.h | 2 + .../screenregionmgr/include/screenregionmgr.h | 1 - .../screenregionmgr/src/screenregionmgr.cpp | 28 +++----------- services/screenservice/sourceservice/BUILD.gn | 3 +- .../dscreenmgr/include/dscreen_manager.h | 2 - .../dscreenmgr/src/dscreen_manager.cpp | 24 +++--------- 10 files changed, 90 insertions(+), 47 deletions(-) create mode 100644 services/common/utils/include/dscreen_fwkkit.h create mode 100644 services/common/utils/src/dscreen_fwkkit.cpp diff --git a/common/include/dscreen_constants.h b/common/include/dscreen_constants.h index afa86978..4f2cabea 100644 --- a/common/include/dscreen_constants.h +++ b/common/include/dscreen_constants.h @@ -119,7 +119,8 @@ const std::string CODEC_NAME_H264 = "OMX_hisi_video_encoder_avc"; const std::string CODEC_NAME_MPEG4 = "avenc_mpeg4"; // Publish massage const std::string SOURCE_WIN_ID = "sourceWinId"; -const std::string SOURCE_DEV_ID = "screenDevId"; +const std::string SOURCE_DEV_ID = "sourceDevId"; +const std::string SINK_DEV_ID = "sinkDevId"; const std::string SOURCE_WIN_WIDTH = "sourceWinWidth"; const std::string SOURCE_WIN_HEIGHT = "sourceWinHeight"; const std::string SINK_SHOW_WIN_ID = "sinkShowWinId"; @@ -138,7 +139,6 @@ constexpr int32_t DISTRIBUTED_HARDWARE_SCREEN_SINK_SA_ID = 4808; constexpr uint64_t SCREEN_ID_INVALID = -1ULL; constexpr uint64_t SCREEN_ID_DEFAULT = 0; constexpr int32_t SCREEN_LOADSA_TIMEOUT_MS = 10000; -constexpr int32_t INIT_DHFWKKIT_TIME_MS = 10; } // namespace DistributedHardware } // namespace OHOS #endif \ No newline at end of file diff --git a/services/common/utils/include/dscreen_fwkkit.h b/services/common/utils/include/dscreen_fwkkit.h new file mode 100644 index 00000000..a1f7502b --- /dev/null +++ b/services/common/utils/include/dscreen_fwkkit.h @@ -0,0 +1,38 @@ +/* + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_DSCREEN_FWKKIT_H +#define OHOS_DSCREEN_FWKKIT_H + +#include + +#include "distributed_hardware_fwk_kit.h" +#include "single_instance.h" + +namespace OHOS { +namespace DistributedHardware { +class DScreenFwkKit { +DECLARE_SINGLE_INSTANCE_BASE(DScreenFwkKit); +public: + std::shared_ptr GetDHFwkKit(); +private: + DScreenFwkKit() = default; + ~DScreenFwkKit() = default; + std::shared_ptr dhfwkKit_ = nullptr; + std::mutex kitMtx_; +}; +} // namespace DistributedHardware +} // namespace OHOS +#endif \ No newline at end of file diff --git a/services/common/utils/src/dscreen_fwkkit.cpp b/services/common/utils/src/dscreen_fwkkit.cpp new file mode 100644 index 00000000..3f013e00 --- /dev/null +++ b/services/common/utils/src/dscreen_fwkkit.cpp @@ -0,0 +1,32 @@ +/* + * 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "dscreen_fwkkit.h" +#include "dscreen_log.h" + +namespace OHOS { +namespace DistributedHardware { +IMPLEMENT_SINGLE_INSTANCE(DScreenFwkKit); +std::shared_ptr DScreenFwkKit::GetDHFwkKit() +{ + DHLOGI("GetDHFwkKit"); + std::lock_guard lck(kitMtx_); + if (dhfwkKit_ == nullptr) { + dhfwkKit_ = std::make_shared(); + } + return dhfwkKit_; +} +} // namespace DistributedHardware +} // namespace OHOS \ No newline at end of file diff --git a/services/screenservice/sinkservice/BUILD.gn b/services/screenservice/sinkservice/BUILD.gn index 615b878b..7e5e1056 100644 --- a/services/screenservice/sinkservice/BUILD.gn +++ b/services/screenservice/sinkservice/BUILD.gn @@ -48,6 +48,7 @@ ohos_shared_library("distributed_screen_sink") { sources = [ "${interfaces_path}/innerkits/native_cpp/screen_sink/src/dscreen_sink_proxy.cpp", "${interfaces_path}/innerkits/native_cpp/screen_source/src/dscreen_source_proxy.cpp", + "${services_path}/common/utils/src/dscreen_fwkkit.cpp", "${services_path}/common/utils/src/dscreen_maprelation.cpp", "${services_path}/common/utils/src/video_param.cpp", "./dscreenservice/src/dscreen_sink_service.cpp", @@ -58,11 +59,11 @@ ohos_shared_library("distributed_screen_sink") { deps = [ "${common_path}:distributed_screen_utils", + "${distributedhardwarefwk_path}/interfaces/inner_kits:libdhfwk_sdk", "${services_path}/screenclient:distributed_screen_client", "${services_path}/screentransport/screensinktrans:distributed_screen_sinktrans", "${windowmanager_path}/dm:libdm", "//foundation/graphic/graphic_2d/frameworks/surface:surface", - "${distributedhardwarefwk_path}/interfaces/inner_kits:libdhfwk_sdk", ] defines = [ diff --git a/services/screenservice/sinkservice/screenregionmgr/include/screenregion.h b/services/screenservice/sinkservice/screenregionmgr/include/screenregion.h index 9e454294..23bfe298 100644 --- a/services/screenservice/sinkservice/screenregionmgr/include/screenregion.h +++ b/services/screenservice/sinkservice/screenregionmgr/include/screenregion.h @@ -16,6 +16,8 @@ #ifndef OHOS_DSCREEN_SCREEN_REGION_H #define OHOS_DSCREEN_SCREEN_REGION_H +#include + #include "surface.h" #include "iscreen_sink_trans_callback.h" diff --git a/services/screenservice/sinkservice/screenregionmgr/include/screenregionmgr.h b/services/screenservice/sinkservice/screenregionmgr/include/screenregionmgr.h index f0633b73..0495174f 100644 --- a/services/screenservice/sinkservice/screenregionmgr/include/screenregionmgr.h +++ b/services/screenservice/sinkservice/screenregionmgr/include/screenregionmgr.h @@ -42,7 +42,6 @@ private: std::map> screenRegions_; std::mutex screenRegionsMtx_; std::string localDevId_; - std::shared_ptr dhfwkKit_ = nullptr; sptr GetDScreenSourceSA(const std::string &devId); int32_t NotifyRemoteScreenService(const std::string &remoteDevId, const std::string &dhId, diff --git a/services/screenservice/sinkservice/screenregionmgr/src/screenregionmgr.cpp b/services/screenservice/sinkservice/screenregionmgr/src/screenregionmgr.cpp index 70fa6479..812126d6 100644 --- a/services/screenservice/sinkservice/screenregionmgr/src/screenregionmgr.cpp +++ b/services/screenservice/sinkservice/screenregionmgr/src/screenregionmgr.cpp @@ -15,10 +15,6 @@ #include "screenregionmgr.h" -#include -#include -#include - #include "display_manager.h" #include "if_system_ability_manager.h" #include "iservice_registry.h" @@ -26,6 +22,7 @@ #include "dscreen_constants.h" #include "dscreen_errcode.h" +#include "dscreen_fwkkit.h" #include "dscreen_log.h" #include "dscreen_maprelation.h" #include "dscreen_util.h" @@ -71,17 +68,6 @@ void ScreenRegionManager::HandleDScreenNotify(const std::string &remoteDevId, in const std::string &eventContent) { DHLOGI("HandleDScreenNotify, remoteDevId: %s, eventCode: %d", GetAnonyString(remoteDevId).c_str(), eventCode); - if (dhfwkKit_ == nullptr) { - dhfwkKit_ = std::make_shared(); - } - { - std::mutex kitMtx; - std::condition_variable dhfwkKitCond_; - std::unique_lock lck(kitMtx); - dhfwkKitCond_.wait_for(lck, std::chrono::milliseconds(INIT_DHFWKKIT_TIME_MS), [](){ return false; }); - DHLOGI("Init dhfwkKit time(%dms).", INIT_DHFWKKIT_TIME_MS); - } - if (eventCode == NOTIFY_SINK_SETUP) { HandleNotifySetUp(remoteDevId, eventContent); return; @@ -131,14 +117,12 @@ void ScreenRegionManager::HandleNotifySetUp(const std::string &remoteDevId, cons DHLOGI("HandleNotifySetUp, remoteDevId: %s", GetAnonyString(remoteDevId).c_str()); json eventContentJson = json::parse(eventContent, nullptr, false); if (eventContentJson.is_discarded()) { - DHLOGE("HandleNotifySetUp, eventJsonContent is invalid."); NotifyRemoteSourceSetUpResult(remoteDevId, "", ERR_DH_SCREEN_SA_SCREENREGION_SETUP_FAIL, ""); return; } if (!eventContentJson.contains(KEY_SCREEN_ID) || !eventContentJson.contains(KEY_DH_ID) || !eventContentJson.contains(KEY_VIDEO_PARAM) || !eventContentJson.contains(KEY_MAPRELATION)) { - DHLOGE("HandleNotifySetUp, eventJsonContent is invalid."); NotifyRemoteSourceSetUpResult(remoteDevId, "", ERR_DH_SCREEN_SA_SCREENREGION_SETUP_FAIL, ""); return; } @@ -173,7 +157,7 @@ void ScreenRegionManager::HandleNotifySetUp(const std::string &remoteDevId, cons ret = screenRegion->SetUp(); if (ret != DH_SUCCESS) { - DHLOGE("screen region start failed"); + DHLOGE("screen region setup failed"); NotifyRemoteSourceSetUpResult(remoteDevId, dhId, ERR_DH_SCREEN_SA_SCREENREGION_SETUP_FAIL, ""); return; } @@ -254,9 +238,9 @@ sptr ScreenRegionManager::GetDScreenSourceSA(const std::string & void ScreenRegionManager::PublishMessage(const DHTopic topic, const uint64_t &screenId, const std::string &remoteDevId, const int32_t &windowId, std::shared_ptr windowProperty) { - DHLOGD("Sink PublishMessage"); - if (dhfwkKit_ == nullptr) { - DHLOGE("dhfwkKit is nullptr."); + DHLOGD("PublishMessage"); + if (DScreenFwkKit::GetInstance().GetDHFwkKit() == nullptr) { + DHLOGE("GetDHFwkKit fail."); return; } @@ -271,7 +255,7 @@ void ScreenRegionManager::PublishMessage(const DHTopic topic, const uint64_t &sc messageJosn[SINK_WIN_SHOW_Y] = windowProperty->startY; message = messageJosn.dump(); - dhfwkKit_->PublishMessage(topic, message); + DScreenFwkKit::GetInstance().GetDHFwkKit()->PublishMessage(topic, message); } } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/services/screenservice/sourceservice/BUILD.gn b/services/screenservice/sourceservice/BUILD.gn index 67387695..8d98dfe4 100644 --- a/services/screenservice/sourceservice/BUILD.gn +++ b/services/screenservice/sourceservice/BUILD.gn @@ -49,6 +49,7 @@ ohos_shared_library("distributed_screen_source") { sources = [ "${interfaces_path}/innerkits/native_cpp/screen_sink/src/dscreen_sink_proxy.cpp", "${interfaces_path}/innerkits/native_cpp/screen_source/src/dscreen_source_proxy.cpp", + "${services_path}/common/utils/src/dscreen_fwkkit.cpp", "${services_path}/common/utils/src/dscreen_maprelation.cpp", "${services_path}/common/utils/src/video_param.cpp", "./dscreenmgr/src/dscreen.cpp", @@ -61,12 +62,12 @@ ohos_shared_library("distributed_screen_source") { deps = [ "${common_path}:distributed_screen_utils", + "${distributedhardwarefwk_path}/interfaces/inner_kits:libdhfwk_sdk", "${mediastandard_path}/interfaces/inner_api/native:media_client", "${services_path}/screentransport/screensourcetrans:distributed_screen_sourcetrans", "${windowmanager_path}/dm:libdm", "//foundation/graphic/graphic_2d/frameworks/surface:surface", "//foundation/graphic/graphic_2d/rosen/modules/render_service_client:librender_service_client", - "${distributedhardwarefwk_path}/interfaces/inner_kits:libdhfwk_sdk", ] defines = [ diff --git a/services/screenservice/sourceservice/dscreenmgr/include/dscreen_manager.h b/services/screenservice/sourceservice/dscreenmgr/include/dscreen_manager.h index d17cf762..11eeb995 100644 --- a/services/screenservice/sourceservice/dscreenmgr/include/dscreen_manager.h +++ b/services/screenservice/sourceservice/dscreenmgr/include/dscreen_manager.h @@ -61,7 +61,6 @@ public: std::shared_ptr FindDScreenByScreenId(uint64_t screenId); void GetScreenDumpInfo(std::string &result); void PublishMessage(const DHTopic topic, const std::shared_ptr &dScreen); - private: ~DScreenManager(); DScreenManager(); @@ -73,7 +72,6 @@ private: sptr dScreenGroupListener_ = nullptr; std::shared_ptr dScreenCallback_ = nullptr; std::string localDevId_; - std::shared_ptr dhfwkKit_ = nullptr; sptr GetDScreenSinkSA(const std::string &devId); int32_t NotifyRemoteScreenService(const std::string &devId, int32_t eventCode, const std::string &eventContent); diff --git a/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp b/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp index c1123626..9a7c47de 100644 --- a/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp @@ -15,10 +15,7 @@ #include "dscreen_manager.h" -#include -#include #include -#include #include "if_system_ability_manager.h" #include "iservice_registry.h" @@ -26,6 +23,7 @@ #include "dscreen_constants.h" #include "dscreen_errcode.h" +#include "dscreen_fwkkit.h" #include "dscreen_log.h" #include "dscreen_util.h" #include "idscreen_sink.h" @@ -70,6 +68,7 @@ int32_t DScreenManager::Init() if (!dScreenCallback_) { dScreenCallback_ = std::make_shared(); } + return ret; } @@ -122,17 +121,6 @@ void DScreenManager::HandleScreenChange(const std::shared_ptr &changedS return; } - if (dhfwkKit_ == nullptr) { - dhfwkKit_ = std::make_shared(); - } - { - std::mutex kitMtx; - std::condition_variable dhfwkKitCond_; - std::unique_lock lck(kitMtx); - dhfwkKitCond_.wait_for(lck, std::chrono::milliseconds(INIT_DHFWKKIT_TIME_MS), [](){ return false; }); - DHLOGI("Init dhfwkKit time(%dms).", INIT_DHFWKKIT_TIME_MS); - } - uint64_t screenId = changedScreen->GetScreenId(); DHLOGI("DScreenManager::HandleScreenChange, screenId: %ulld, changeEvent: %", screenId, event); if (event == Rosen::ScreenGroupChangeEvent::ADD_TO_GROUP) { @@ -424,8 +412,8 @@ sptr DScreenManager::GetDScreenSinkSA(const std::string &devId) void DScreenManager::PublishMessage(const DHTopic topic, const std::shared_ptr &dScreen) { DHLOGD("PublishMessage"); - if (dhfwkKit_ == nullptr) { - DHLOGE("dhfwkKit is nullptr."); + if (DScreenFwkKit::GetInstance().GetDHFwkKit() == nullptr) { + DHLOGE("GetDHFwkKit fail."); return; } @@ -433,7 +421,7 @@ void DScreenManager::PublishMessage(const DHTopic topic, const std::shared_ptrGetScreenId(); - messageJosn[SOURCE_DEV_ID] = dScreen->GetDevId(); + messageJosn[SINK_DEV_ID] = dScreen->GetDevId(); std::shared_ptr videoParam = dScreen->GetVideoParam(); if (videoParam == nullptr) { DHLOGE("videoParam is nullptr"); @@ -448,7 +436,7 @@ void DScreenManager::PublishMessage(const DHTopic topic, const std::shared_ptrPublishMessage(topic, message); + DScreenFwkKit::GetInstance().GetDHFwkKit()->PublishMessage(topic, message); } void DScreenManager::NotifyRemoteSinkSetUp(const std::shared_ptr &dScreen) -- Gitee