diff --git a/bundle.json b/bundle.json index 02f11147e05a97cd38cbf3368780fd7940268c06..f537f86e3b11cd5abad17d6b2bd7fb3ef1d74340 100644 --- a/bundle.json +++ b/bundle.json @@ -30,6 +30,7 @@ "components": [ "dsoftbus", "hisysevent", + "init", "ipc", "hilog", "input", diff --git a/common/BUILD.gn b/common/BUILD.gn index 08aa3588dd7b7531e99afe0e844158cdd3cfe75c..2371814ebbffa9b7dafce4cad63914446f1d517c 100644 --- a/common/BUILD.gn +++ b/common/BUILD.gn @@ -39,6 +39,7 @@ ohos_shared_library("distributed_screen_utils") { "hilog:libhilog", "hisysevent:libhisysevent", "hitrace:hitrace_meter", + "init:libbegetutil", "ipc:ipc_core", ] diff --git a/common/include/dscreen_constants.h b/common/include/dscreen_constants.h index aff79392cfe2313431a6fec0806e1900ff3b4ecd..9e37aa03a5497814f37b813ca86b704d5ed3da48 100644 --- a/common/include/dscreen_constants.h +++ b/common/include/dscreen_constants.h @@ -103,14 +103,11 @@ constexpr uint32_t THREE = 3; constexpr uint32_t ZERO = 0; constexpr uint32_t ALIGNEDBITS = 32; -/* Version */ -constexpr uint32_t OLD = 1; -constexpr uint32_t NEW = 2; - /* Screen session name max len */ constexpr uint32_t DSCREEN_MAX_SESSION_NAME_LEN = 50; constexpr uint32_t DSCREEN_MAX_DEVICE_ID_LEN = 100; + /* Screen data received max length */ constexpr uint32_t DSCREEN_MAX_RECV_DATA_LEN = 104857600; @@ -183,7 +180,11 @@ 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 const char* PARTIAL_REFRESH_PARAM = "persist.distributedhardware.dscreen.partial.refresh.enable"; +constexpr int32_t DSCREEN_MIN_VERSION = 1; +constexpr int32_t AV_TRANS_SUPPORTED_VERSION = 3; +constexpr int32_t PARTIAL_REFRESH_ENABLED_VALUE = 1; constexpr uint32_t MAX_MESSAGES_LEN = 40 * 1024 * 1024; constexpr float DEFAULT_DENSITY = 2.0; constexpr int32_t DEFAULT_SCREEN_FLAGS = 0; @@ -207,6 +208,7 @@ constexpr uint8_t TASK_WAIT_SECONDS = 1; constexpr int32_t JPEG_QUALITY = 80; constexpr uint32_t BIT_RATE = 12000000; constexpr int32_t WAIT_TIMEOUT_MS = 5000; +constexpr uint32_t SYSTEM_PARAM_VALUE_SIZE = 50; } // namespace DistributedHardware } // namespace OHOS #endif \ No newline at end of file diff --git a/common/include/dscreen_util.h b/common/include/dscreen_util.h index 5b642c9c835878e5ce5c42ffdcdceca46e610ff7..ed6340311475b3386cfea7e5aed4c33c9acbe309 100644 --- a/common/include/dscreen_util.h +++ b/common/include/dscreen_util.h @@ -25,6 +25,9 @@ int32_t GetLocalDeviceNetworkId(std::string &networkId); std::string GetRandomID(); std::string GetAnonyString(const std::string &value); std::string GetInterruptString(const std::string &value); + +bool IsPartialRefreshEnabled(); +bool IsSupportAVTransEngine(const std::string &version); } // namespace DistributedHardware } // namespace OHOS #endif \ No newline at end of file diff --git a/common/src/dscreen_util.cpp b/common/src/dscreen_util.cpp index 22b4c4c3386ad564465d39fc4d4249e012c00d37..86782ea2de69867b96ef2ad6681b1dc6e40561d1 100644 --- a/common/src/dscreen_util.cpp +++ b/common/src/dscreen_util.cpp @@ -27,6 +27,7 @@ #include "dscreen_constants.h" #include "dscreen_errcode.h" #include "dscreen_log.h" +#include "parameter.h" namespace OHOS { namespace DistributedHardware { @@ -110,5 +111,22 @@ std::string GetInterruptString(const std::string &value) return res; } + +bool IsPartialRefreshEnabled() +{ + char tempValue[SYSTEM_PARAM_VALUE_SIZE] = {0}; + auto ret = GetParameter(PARTIAL_REFRESH_PARAM, "-1", tempValue, sizeof(tempValue)); + if (ret <= 0) { + DHLOGE("get system parameter (dscreen.partial.refresh.enable) failed, ret=%" PRId32, ret); + return false; + } + DHLOGI("get system parameter (dscreen.partial.refresh.enable) success, param value = %s", tempValue); + return (std::atoi(tempValue) == PARTIAL_REFRESH_ENABLED_VALUE); +} + +bool IsSupportAVTransEngine(const std::string &version) +{ + return (std::atoi(version.c_str()) >= AV_TRANS_SUPPORTED_VERSION) && !IsPartialRefreshEnabled(); +} } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/common/test/unittest/BUILD.gn b/common/test/unittest/BUILD.gn index 61c43f8ac9dc34a398c73ad5a8438338faec9692..1ac48b3c56f1709c8bb75d3732c3dc473deadc0a 100644 --- a/common/test/unittest/BUILD.gn +++ b/common/test/unittest/BUILD.gn @@ -51,6 +51,7 @@ ohos_unittest("ScreenCommonTest") { "dsoftbus:softbus_client", "hilog:libhilog", "hisysevent:libhisysevent", + "init:libbegetutil", "ipc:ipc_core", ] } diff --git a/services/screenservice/sinkservice/dscreenservice/include/dscreen_sink_service.h b/services/screenservice/sinkservice/dscreenservice/include/dscreen_sink_service.h index 876a964f62985be1b1cb4e65d4a6d3da68e9345f..2831d052b6a5e0edb4476ec2b0f4d07d97bfe27f 100644 --- a/services/screenservice/sinkservice/dscreenservice/include/dscreen_sink_service.h +++ b/services/screenservice/sinkservice/dscreenservice/include/dscreen_sink_service.h @@ -44,7 +44,6 @@ protected: DISALLOW_COPY_AND_MOVE(DScreenSinkService); private: - std::string version_ = "2.0"; bool registerToService_ = false; bool Init(); diff --git a/services/screenservice/sinkservice/dscreenservice/src/dscreen_sink_service.cpp b/services/screenservice/sinkservice/dscreenservice/src/dscreen_sink_service.cpp index 28f379de0a7dcd549c4116efdf96a4995f5f209c..6793a2b867b36c52a3e453b7c54b958f3d7d2906 100644 --- a/services/screenservice/sinkservice/dscreenservice/src/dscreen_sink_service.cpp +++ b/services/screenservice/sinkservice/dscreenservice/src/dscreen_sink_service.cpp @@ -53,7 +53,7 @@ void DScreenSinkService::OnStop() bool DScreenSinkService::Init() { - DHLOGI("dscreen sink service start init."); + DHLOGI("Init dscreen sink service."); if (!registerToService_) { bool ret = Publish(this); if (!ret) { @@ -62,32 +62,28 @@ bool DScreenSinkService::Init() } registerToService_ = true; } - DHLOGI("dscreenService init success."); + DHLOGI("dscreen sink service init success."); return true; } int32_t DScreenSinkService::InitSink(const std::string ¶ms) { - DHLOGI("InitSink"); - version_ = params; - DHLOGI("InitSink params: %s, version_: %s", params.c_str(), version_.c_str()); - if (version_ == "3.0") { + DHLOGI("Init sink dscreen region manager, params: %s", params.c_str()); + if (IsSupportAVTransEngine(params)) { int32_t ret = V2_0::ScreenRegionManager::GetInstance().Initialize(); if (ret != DH_SUCCESS) { - DHLOGE("Init ScreenRegionManager3.0 failed. err: %d", ret); - } + DHLOGE("Initialize V2_0::ScreenRegionManage failed. err: %d", ret); + } } return DH_SUCCESS; } int32_t DScreenSinkService::ReleaseSink() { - DHLOGI("ReleaseSink"); - if (version_ == "2.0") { - V1_0::ScreenRegionManager::GetInstance().ReleaseAllRegions(); - } else if (version_ == "3.0") { - V2_0::ScreenRegionManager::GetInstance().Release(); - } + DHLOGI("Release sink dscreen region manager."); + V2_0::ScreenRegionManager::GetInstance().Release(); + V1_0::ScreenRegionManager::GetInstance().ReleaseAllRegions(); + DHLOGI("exit sink sa process"); auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (systemAbilityMgr == nullptr) { @@ -122,22 +118,18 @@ void DScreenSinkService::DScreenNotify(const std::string &devId, int32_t eventCo { DHLOGI("DScreenNotify, devId:%s, eventCode: %" PRId32 ", eventContent:%s", GetAnonyString(devId).c_str(), eventCode, eventContent.c_str()); - if (version_ == "2.0") { - V1_0::ScreenRegionManager::GetInstance().HandleDScreenNotify(devId, eventCode, eventContent); - } + V1_0::ScreenRegionManager::GetInstance().HandleDScreenNotify(devId, eventCode, eventContent); } int32_t DScreenSinkService::Dump(int32_t fd, const std::vector& args) { DHLOGI("DScreenSinkService Dump."); (void)args; - std::string result; - if (version_ == "2.0") { - V1_0::ScreenRegionManager::GetInstance().GetScreenDumpInfo(result); - } else if (version_ == "3.0") { - V2_0::ScreenRegionManager::GetInstance().GetScreenDumpInfo(result); - } - int ret = dprintf(fd, "%s\n", result.c_str()); + std::string result_v1; + V1_0::ScreenRegionManager::GetInstance().GetScreenDumpInfo(result_v1); + std::string result_v2; + V2_0::ScreenRegionManager::GetInstance().GetScreenDumpInfo(result_v2); + int ret = dprintf(fd, "%s\n", (result_v1 + result_v2).c_str()); if (ret < 0) { DHLOGE("dprintf error"); return ERR_DH_SCREEN_SA_HIDUMPER_ERROR; diff --git a/services/screenservice/sinkservice/screenregionmgr/1.0/include/screenregion.h b/services/screenservice/sinkservice/screenregionmgr/1.0/include/screenregion.h index 27049e619f7c2249c786502c45937a69da6a3f16..398704246e76b8b09b136a39a4c1e3acf6f1f363 100644 --- a/services/screenservice/sinkservice/screenregionmgr/1.0/include/screenregion.h +++ b/services/screenservice/sinkservice/screenregionmgr/1.0/include/screenregion.h @@ -52,19 +52,16 @@ public: std::shared_ptr GetVideoParam(); int32_t GetWindowId(); int32_t SetUpWindow(); - int32_t SetUp(); + int32_t SetUp(const std::string &version); int32_t Start(); int32_t Stop(); std::shared_ptr GetWindowProperty(); - void SetScreenVersion(std::string version); - std::string GetScreenVersion(); private: std::string remoteDevId_; uint64_t screenId_; // local screen id uint64_t displayId_; // local display id bool isRunning = false; - std::string version_ = "2.0"; std::shared_ptr videoParam_ = nullptr; std::shared_ptr mapRelation_ = nullptr; diff --git a/services/screenservice/sinkservice/screenregionmgr/1.0/include/screenregionmgr.h b/services/screenservice/sinkservice/screenregionmgr/1.0/include/screenregionmgr.h index f37748624c9b02f4a8ec709ee865d972c722b4d5..258ecf3260ea2ced55d82ac81e8f3544ada7ec82 100644 --- a/services/screenservice/sinkservice/screenregionmgr/1.0/include/screenregionmgr.h +++ b/services/screenservice/sinkservice/screenregionmgr/1.0/include/screenregionmgr.h @@ -43,7 +43,6 @@ private: std::map> screenRegions_; std::mutex screenRegionsMtx_; std::string localDevId_; - std::string version_ = "2.0"; sptr GetDScreenSourceSA(const std::string &devId); int32_t NotifyRemoteScreenService(const std::string &remoteDevId, const std::string &dhId, diff --git a/services/screenservice/sinkservice/screenregionmgr/1.0/src/screenregion.cpp b/services/screenservice/sinkservice/screenregionmgr/1.0/src/screenregion.cpp index dfee0b809b55cf1dcbc7eed1f00f7ec99ddb1bdd..4bcfa18d79ee12c59b83facfb9e409794349b323 100644 --- a/services/screenservice/sinkservice/screenregionmgr/1.0/src/screenregion.cpp +++ b/services/screenservice/sinkservice/screenregionmgr/1.0/src/screenregion.cpp @@ -130,17 +130,7 @@ int32_t ScreenRegion::SetUpWindow() return DH_SUCCESS; } -void ScreenRegion::SetScreenVersion(std::string version) -{ - version_ = version; -} - -std::string ScreenRegion::GetScreenVersion() -{ - return version_; -} - -int32_t ScreenRegion::SetUp() +int32_t ScreenRegion::SetUp(const std::string &version) { DHLOGI("ScreenRegion::SetUp, remoteDevId: %s", GetAnonyString(remoteDevId_).c_str()); int32_t ret = SetUpWindow(); @@ -152,7 +142,7 @@ int32_t ScreenRegion::SetUp() if (sinkTrans_ == nullptr) { sinkTrans_ = std::make_shared(); } - sinkTrans_->SetScreenVersion(version_); + sinkTrans_->SetScreenVersion(version); sinkTrans_->RegisterStateCallback(shared_from_this()); sinkTrans_->SetImageSurface(surface_); ret = sinkTrans_->SetUp(*videoParam_, *videoParam_, remoteDevId_); diff --git a/services/screenservice/sinkservice/screenregionmgr/1.0/src/screenregionmgr.cpp b/services/screenservice/sinkservice/screenregionmgr/1.0/src/screenregionmgr.cpp index f371657c50519625ca5c2944feffe635b6b390ba..f1b65a6a2927f31dfbead94ebaaf107dcc854318 100644 --- a/services/screenservice/sinkservice/screenregionmgr/1.0/src/screenregionmgr.cpp +++ b/services/screenservice/sinkservice/screenregionmgr/1.0/src/screenregionmgr.cpp @@ -137,8 +137,9 @@ void ScreenRegionManager::HandleNotifySetUp(const std::string &remoteDevId, cons NotifyRemoteSourceSetUpResult(remoteDevId, "", ERR_DH_SCREEN_SA_SCREENREGION_SETUP_FAIL, ""); return; } + std::string version = "1.0"; if (IsString(eventContentJson, KEY_VERSION)) { - version_ = eventContentJson[KEY_VERSION].get(); + version = eventContentJson[KEY_VERSION].get(); } uint64_t screenId = eventContentJson[KEY_SCREEN_ID].get(); std::string dhId = eventContentJson[KEY_DH_ID].get(); @@ -168,8 +169,7 @@ void ScreenRegionManager::HandleNotifySetUp(const std::string &remoteDevId, cons } screenRegions_[remoteDevId] = screenRegion; } - screenRegion->SetScreenVersion(version_); - ret = screenRegion->SetUp(); + ret = screenRegion->SetUp(version); if (ret != DH_SUCCESS) { NotifyRemoteSourceSetUpResult(remoteDevId, dhId, ERR_DH_SCREEN_SA_SCREENREGION_SETUP_FAIL, ""); return; diff --git a/services/screenservice/sourceservice/dscreenmgr/1.0/include/dscreen.h b/services/screenservice/sourceservice/dscreenmgr/1.0/include/dscreen.h index 72bf959ad3814e5adacc26d31fc0174c748ca4e5..2266d35e26c1468238e005bd6bf39257f6cd3894 100644 --- a/services/screenservice/sourceservice/dscreenmgr/1.0/include/dscreen.h +++ b/services/screenservice/sourceservice/dscreenmgr/1.0/include/dscreen.h @@ -90,7 +90,7 @@ public: std::string GetDHId() const; std::string GetDevId() const; int32_t AddTask(const std::shared_ptr &task); - void SetScreenVersion(std::string &version); + void SetScreenVersion(const std::string &version); std::string GetScreenVersion(); private: diff --git a/services/screenservice/sourceservice/dscreenmgr/1.0/include/dscreen_manager.h b/services/screenservice/sourceservice/dscreenmgr/1.0/include/dscreen_manager.h index 26490b58e9b5f0171382c5c85ca5ebaecc4fbbf0..8910cb64331b1fce39b449c86d7611026d916b7e 100644 --- a/services/screenservice/sourceservice/dscreenmgr/1.0/include/dscreen_manager.h +++ b/services/screenservice/sourceservice/dscreenmgr/1.0/include/dscreen_manager.h @@ -23,6 +23,7 @@ #include "dscreen.h" #include "dscreen_maprelation.h" +#include "idistributed_hardware_source.h" #include "idscreen_sink.h" #include "idscreen_source_callback.h" #include "video_param.h" @@ -53,7 +54,7 @@ public: int32_t Init(); int32_t UnInit(); - int32_t EnableDistributedScreen(const std::string &devId, const std::string &dhId, const std::string &attrs, + int32_t EnableDistributedScreen(const std::string &devId, const std::string &dhId, const EnableParam ¶m, const std::string &reqId); int32_t DisableDistributedScreen(const std::string &devId, const std::string &dhId, const std::string &reqId); void HandleDScreenNotify(const std::string &devId, int32_t eventCode, const std::string &eventContent); @@ -64,8 +65,7 @@ public: int32_t RemoveFromGroup(const std::shared_ptr &changedScreen, uint64_t screenId); void GetScreenDumpInfo(std::string &result); void PublishMessage(const DHTopic topic, const std::shared_ptr &dScreen); - void SetScreenVersion(std::string &version); - std::string GetScreenVersion(); + private: ~DScreenManager(); DScreenManager(); @@ -77,7 +77,6 @@ private: sptr dScreenGroupListener_ = nullptr; std::shared_ptr dScreenCallback_ = nullptr; std::string localDevId_; - std::string version_ = "1.0"; 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/1.0/src/dscreen.cpp b/services/screenservice/sourceservice/dscreenmgr/1.0/src/dscreen.cpp index de78d72c08bbf4aa3f95ad925145167e2332bd51..9e7f96f3a8a19919957b99636a2723e99d17ae1d 100644 --- a/services/screenservice/sourceservice/dscreenmgr/1.0/src/dscreen.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/1.0/src/dscreen.cpp @@ -107,10 +107,11 @@ uint64_t DScreen::GetScreenId() const return screenId_; } -void DScreen::SetScreenVersion(std::string &version) +void DScreen::SetScreenVersion(const std::string &version) { version_ = version; } + std::string DScreen::GetScreenVersion() { return version_; diff --git a/services/screenservice/sourceservice/dscreenmgr/1.0/src/dscreen_manager.cpp b/services/screenservice/sourceservice/dscreenmgr/1.0/src/dscreen_manager.cpp index 8843ef5e858ff941f98e3cb2d44d9a03c71fa4ad..4cfac139ec665596d0569c036685d4833995ffe7 100644 --- a/services/screenservice/sourceservice/dscreenmgr/1.0/src/dscreen_manager.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/1.0/src/dscreen_manager.cpp @@ -70,35 +70,27 @@ int32_t DScreenManager::Init() return ret; } } - if (dScreenCallback_ == nullptr) { dScreenCallback_ = std::make_shared(); } - return DH_SUCCESS; } int32_t DScreenManager::UnInit() { DHLOGI("DScreenManager::UnInit"); - int32_t ret = ScreenMgrAdapter::GetInstance().UnregisterScreenGroupListener(dScreenGroupListener_); - if (ret != DH_SUCCESS) { - DHLOGE("DScreenManager UnInit failed, err: %" PRId32, ret); - } - - dScreenCallback_ = nullptr; - + ScreenMgrAdapter::GetInstance().UnregisterScreenGroupListener(dScreenGroupListener_); { std::lock_guard lock(dScreenMapMtx_); dScreens_.clear(); } - { std::lock_guard lock(dScreenMapRelationMtx_); mapRelations_.clear(); } + dScreenCallback_ = nullptr; DHLOGI("DScreenManager::UnInit success"); - return ret; + return DH_SUCCESS; } void DScreenGroupListener::OnChange(const std::vector &screenIds, Rosen::ScreenGroupChangeEvent event) @@ -248,7 +240,7 @@ void DScreenManager::OnUnregResult(const std::shared_ptr &dScreen, } int32_t DScreenManager::EnableDistributedScreen(const std::string &devId, const std::string &dhId, - const std::string &attrs, const std::string &reqId) + const EnableParam ¶m, const std::string &reqId) { DHLOGI("EnableDistributedScreen2.0, devId: %s, dhId:%s", GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str()); @@ -269,9 +261,9 @@ int32_t DScreenManager::EnableDistributedScreen(const std::string &devId, const DHLOGI("dScreen state Already is ENABLED or ENABLING."); return DH_SUCCESS; } - dScreen ->SetScreenVersion(version_); + dScreen ->SetScreenVersion(param.version); dScreens_[dScreenIdx] = dScreen; - int32_t ret = dScreen->AddTask(std::make_shared(TaskType::TASK_ENABLE, reqId, attrs)); + int32_t ret = dScreen->AddTask(std::make_shared(TaskType::TASK_ENABLE, reqId, param.attrs)); if (ret != DH_SUCCESS) { DHLOGE("EnableDistributedScreen, add task failed. devId: %s, dhId:%s", GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str()); @@ -289,9 +281,9 @@ int32_t DScreenManager::DisableDistributedScreen(const std::string &devId, const std::string dScreenIdx = devId + SEPERATOR + dhId; std::lock_guard lock(dScreenMapMtx_); if (dScreens_.count(dScreenIdx) == 0) { - DHLOGE("dscreen not found, devId: %s, dhId: %s", - GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str()); - return ERR_DH_SCREEN_SA_DISABLE_FAILED; + DHLOGE("dscreen has already disabled, devId: %s, dhId: %s", GetAnonyString(devId).c_str(), + GetAnonyString(dhId).c_str()); + return DH_SUCCESS; } int32_t dScreenState = dScreens_[dScreenIdx]->GetState(); @@ -353,7 +345,7 @@ void DScreenManager::GetScreenDumpInfo(std::string &result) std::lock_guard lock(dScreenMapMtx_); if (dScreens_.size() == 0) { result.append("]"); - DHLOGD("no virtualscreen"); + DHLOGD("no virtual screen enabled in V1_0::DScreenManager."); return; } @@ -546,16 +538,6 @@ void DScreenManager::HandleNotifySetUpResult(const std::string &remoteDevId, con dScreens_[dScreenIdx]->AddTask(std::make_shared(TaskType::TASK_CONNECT, "")); } - -void DScreenManager::SetScreenVersion(std::string &version) -{ - version_ = version; -} - -std::string DScreenManager::GetScreenVersion() -{ - return version_; -} } // namespace V1_0 } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen_manager.h b/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen_manager.h index 6ae815af89c8d6d3a3194372dd6c9bb4b6e27465..cb928f6c1b46563382a21f2edafea576a87cd185 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen_manager.h +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen_manager.h @@ -24,6 +24,7 @@ #include "av_sender_engine_adapter.h" #include "dscreen.h" #include "dscreen_maprelation.h" +#include "idistributed_hardware_source.h" #include "idscreen_sink.h" #include "idscreen_source_callback.h" #include "video_param.h" @@ -58,7 +59,7 @@ public: int32_t Initialize(); int32_t Release(); - int32_t EnableDistributedScreen(const std::string &devId, const std::string &dhId, const std::string &attrs, + int32_t EnableDistributedScreen(const std::string &devId, const std::string &dhId, const EnableParam ¶m, const std::string &reqId); int32_t DisableDistributedScreen(const std::string &devId, const std::string &dhId, const std::string &reqId); void RegisterDScreenCallback(const sptr &callback); diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen_manager.cpp b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen_manager.cpp index 4596920586735ddfb7926ef0beada9af40435765..944d69e7a30ce6f1fc44b906ffffbefc2dbbf363 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen_manager.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen_manager.cpp @@ -235,7 +235,7 @@ void DScreenManager::OnUnregResult(const std::shared_ptr &dScreen, } int32_t DScreenManager::EnableDistributedScreen(const std::string &devId, const std::string &dhId, - const std::string &attrs, const std::string &reqId) + const EnableParam ¶m, const std::string &reqId) { DHLOGI("EnableDistributedScreen3.0, devId: %s, dhId:%s", GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str()); @@ -255,7 +255,7 @@ int32_t DScreenManager::EnableDistributedScreen(const std::string &devId, const return DH_SUCCESS; } dScreens_[dScreenIdx] = dScreen; - int32_t ret = dScreen->AddTask(std::make_shared(TaskType::TASK_ENABLE, reqId, attrs)); + int32_t ret = dScreen->AddTask(std::make_shared(TaskType::TASK_ENABLE, reqId, param.attrs)); if (ret != DH_SUCCESS) { DHLOGE("EnableDistributedScreen, add task failed. devId: %s, dhId:%s", GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str()); @@ -270,9 +270,9 @@ int32_t DScreenManager::DisableDistributedScreen(const std::string &devId, const std::string dScreenIdx = devId + SEPERATOR + dhId; std::lock_guard lock(dScreenMapMtx_); if (dScreens_.count(dScreenIdx) == 0) { - DHLOGE("dscreen not found, devId: %s, dhId: %s", - GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str()); - return ERR_DH_SCREEN_SA_DISABLE_FAILED; + DHLOGE("dscreen has already disabled, devId: %s, dhId: %s", GetAnonyString(devId).c_str(), + GetAnonyString(dhId).c_str()); + return DH_SUCCESS; } int32_t dScreenState = dScreens_[dScreenIdx]->GetState(); int32_t ret = DH_SUCCESS; @@ -332,7 +332,7 @@ void DScreenManager::GetScreenDumpInfo(std::string &result) std::lock_guard lock(dScreenMapMtx_); if (dScreens_.size() == 0) { result.append("]"); - DHLOGD("no virtualscreen"); + DHLOGD("no virtual screen enabled in V2_0::DScreenManager."); return; } for (const auto &iter : dScreens_) { diff --git a/services/screenservice/sourceservice/dscreenservice/include/dscreen_source_service.h b/services/screenservice/sourceservice/dscreenservice/include/dscreen_source_service.h index 163a8b0512e0a6abb5b4d28e19faa56131bc8a7f..9cbd7e6f5c8438292c18bf8f72677ac7dfebe9b2 100644 --- a/services/screenservice/sourceservice/dscreenservice/include/dscreen_source_service.h +++ b/services/screenservice/sourceservice/dscreenservice/include/dscreen_source_service.h @@ -49,7 +49,6 @@ protected: DISALLOW_COPY_AND_MOVE(DScreenSourceService); private: - std::string version_ = "2.0"; bool Init(); bool registerToService_ = false; diff --git a/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp b/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp index 96024f1e101295569b8894291322590487c25391..6973b58833c4dff58746cac2925a72ac6aaf6102 100644 --- a/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp +++ b/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp @@ -46,12 +46,11 @@ void DScreenSourceService::OnStart() void DScreenSourceService::OnStop() { DHLOGI("dscreen source service stop."); - int32_t ret = -1; - if (version_ == "2.0") { - ret = V1_0::DScreenManager::GetInstance().UnInit(); - } else if (version_ == "3.0") { - ret = V2_0::DScreenManager::GetInstance().Release(); + int32_t ret = V2_0::DScreenManager::GetInstance().Release(); + if (ret != DH_SUCCESS) { + DHLOGE("Release V2_0::DScreenManager failed. err: %" PRId32, ret); } + ret = V1_0::DScreenManager::GetInstance().UnInit(); if (ret != DH_SUCCESS) { DHLOGE("UnInit V1_0::DScreenManager failed. err: %" PRId32, ret); } @@ -60,7 +59,7 @@ void DScreenSourceService::OnStop() bool DScreenSourceService::Init() { - DHLOGI("dscreen source service start init."); + DHLOGI("Init dscreen source service."); if (!registerToService_) { bool ret = Publish(this); if (!ret) { @@ -69,54 +68,46 @@ bool DScreenSourceService::Init() } registerToService_ = true; } - DHLOGI("dscreen init success."); + DHLOGI("dscreen source service init success."); return true; } int32_t DScreenSourceService::InitSource(const std::string ¶ms, const sptr &callback) { + DHLOGI("Init source dscreen manager, params: %s", params.c_str()); if (callback == nullptr) { DHLOGE("DScreenSourceService::InitSource, callback is nullptr."); return ERR_DH_SCREEN_SA_INIT_SOURCE_FAIL; } - DHLOGI("InitSource"); - version_ = params; - DHLOGI("InitSource params: %s, version_: %s", params.c_str(), version_.c_str()); - if (version_ == "2.0") { - int32_t ret = V1_0::DScreenManager::GetInstance().Init(); + if (IsSupportAVTransEngine(params)) { + int32_t ret = V2_0::DScreenManager::GetInstance().Initialize(); if (ret != DH_SUCCESS) { - DHLOGE("Init V1_0::DScreenManager failed. err: %" PRId32, ret); + DHLOGE("Initialize V2_0::DScreenManager failed. err: %" PRId32, ret); return ret; } - V1_0::DScreenManager::GetInstance().RegisterDScreenCallback(callback); - } else if (version_ == "3.0") { - int32_t ret = V2_0::DScreenManager::GetInstance().Initialize(); + V2_0::DScreenManager::GetInstance().RegisterDScreenCallback(callback); + } else { + int32_t ret = V1_0::DScreenManager::GetInstance().Init(); if (ret != DH_SUCCESS) { - DHLOGE("Init V2_0::DScreenManager failed. err: %" PRId32, ret); + DHLOGE("Init V1_0::DScreenManager failed. err: %" PRId32, ret); return ret; } - V2_0::DScreenManager::GetInstance().RegisterDScreenCallback(callback); + V1_0::DScreenManager::GetInstance().RegisterDScreenCallback(callback); } return DH_SUCCESS; } int32_t DScreenSourceService::ReleaseSource() { - DHLOGI("ReleaseSource"); - int32_t ret = -1; - if (version_ == "2.0") { - ret = V1_0::DScreenManager::GetInstance().UnInit(); - if (ret != DH_SUCCESS) { - DHLOGE("UnInit V1_0::DScreenManager failed. err: %" PRId32, ret); - return ret; - } - } else if (version_ == "3.0") { - ret = V2_0::DScreenManager::GetInstance().Release(); - if (ret != DH_SUCCESS) { - DHLOGE("UnInit V2_0::DScreenManager failed. err: %" PRId32, ret); - return ret; - } + DHLOGI("Release source dscreen manager."); + int32_t ret = V1_0::DScreenManager::GetInstance().UnInit(); + if (ret != DH_SUCCESS) { + DHLOGE("UnInit V1_0::DScreenManager failed. err: %" PRId32, ret); + } + ret = V2_0::DScreenManager::GetInstance().Release(); + if (ret != DH_SUCCESS) { + DHLOGE("Release V2_0::DScreenManager failed. err: %" PRId32, ret); } DHLOGI("exit source sa process"); auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); @@ -136,19 +127,16 @@ int32_t DScreenSourceService::ReleaseSource() int32_t DScreenSourceService::RegisterDistributedHardware(const std::string &devId, const std::string &dhId, const EnableParam ¶m, const std::string &reqId) { - std::string attrs = param.attrs; - version_ = param.version; - int32_t ret = -1; - DHLOGI("Source RegisterDistributedHardware params.version: %s", param.version.c_str()); - if (version_ == "2.0") { - V1_0::DScreenManager::GetInstance().SetScreenVersion(version_); - ret = V1_0::DScreenManager::GetInstance().EnableDistributedScreen(devId, dhId, attrs, reqId); - } else if (version_ == "3.0") { - ret = V2_0::DScreenManager::GetInstance().EnableDistributedScreen(devId, dhId, attrs, reqId); + DHLOGI("Register source distributed screen, peer dscreen version: %s", param.version.c_str()); + int32_t ret = DH_SUCCESS; + if (IsSupportAVTransEngine(param.version)) { + ret = V2_0::DScreenManager::GetInstance().EnableDistributedScreen(devId, dhId, param, reqId); + } else { + ret = V1_0::DScreenManager::GetInstance().EnableDistributedScreen(devId, dhId, param, reqId); } if (ret != DH_SUCCESS) { - DHLOGE("enable distributedScreen failed. devId: %s, dhId: %s, reqId: %s, attrs: %s", - GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str(), reqId.c_str(), attrs.c_str()); + DHLOGE("enable distributedScreen failed. devId: %s, dhId: %s, reqId: %s, param attrs: %s", + GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str(), reqId.c_str(), param.attrs.c_str()); ReportRegisterFail(DSCREEN_REGISTER_FAIL, ret, GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str(), "enable distributedScreen failed."); return ERR_DH_SCREEN_SA_ENABLE_FAILED; @@ -159,14 +147,18 @@ int32_t DScreenSourceService::RegisterDistributedHardware(const std::string &dev int32_t DScreenSourceService::UnregisterDistributedHardware(const std::string &devId, const std::string &dhId, const std::string &reqId) { - int ret = -1; - if (version_ == "2.0") { - ret = V1_0::DScreenManager::GetInstance().DisableDistributedScreen(devId, dhId, reqId); - } else if (version_ == "3.0") { - ret = V2_0::DScreenManager::GetInstance().DisableDistributedScreen(devId, dhId, reqId); + int ret = V1_0::DScreenManager::GetInstance().DisableDistributedScreen(devId, dhId, reqId); + if (ret != DH_SUCCESS) { + DHLOGE("V1_0::DScreenManager disable distributedScreen failed. devId: %s, dhId: %s, reqId: %s", + GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str(), reqId.c_str()); + ReportUnRegisterFail(DSCREEN_REGISTER_FAIL, ret, GetAnonyString(devId).c_str(), + GetAnonyString(dhId).c_str(), "disable distributedScreen failed."); + return ERR_DH_SCREEN_SA_DISABLE_FAILED; } + + ret = V2_0::DScreenManager::GetInstance().DisableDistributedScreen(devId, dhId, reqId); if (ret != DH_SUCCESS) { - DHLOGE("disable distributedScreen failed. devId: %s, dhId: %s, reqId: %s", + DHLOGE("V2_0::DScreenManager disable distributedScreen failed. devId: %s, dhId: %s, reqId: %s", GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str(), reqId.c_str()); ReportUnRegisterFail(DSCREEN_REGISTER_FAIL, ret, GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str(), "disable distributedScreen failed."); @@ -189,22 +181,18 @@ void DScreenSourceService::DScreenNotify(const std::string &devId, const int32_t const std::string &eventContent) { DHLOGI("DScreenNotify, devId: %s, eventCode: %" PRId32, GetAnonyString(devId).c_str(), eventCode); - if (version_ == "2.0") { - V1_0::DScreenManager::GetInstance().HandleDScreenNotify(devId, eventCode, eventContent); - } + V1_0::DScreenManager::GetInstance().HandleDScreenNotify(devId, eventCode, eventContent); } int32_t DScreenSourceService::Dump(int32_t fd, const std::vector& args) { DHLOGI("DScreenSourceService Dump."); (void)args; - std::string result; - if (version_ == "2.0") { - V1_0::DScreenManager::GetInstance().GetScreenDumpInfo(result); - } else if (version_ == "3.0") { - V2_0::DScreenManager::GetInstance().GetScreenDumpInfo(result); - } - int ret = dprintf(fd, "%s\n", result.c_str()); + std::string result_v1; + V1_0::DScreenManager::GetInstance().GetScreenDumpInfo(result_v1); + std::string result_v2; + V2_0::DScreenManager::GetInstance().GetScreenDumpInfo(result_v2); + int ret = dprintf(fd, "%s\n", (result_v1 + result_v2).c_str()); if (ret < 0) { DHLOGE("dprintf error"); return ERR_DH_SCREEN_SA_HIDUMPER_ERROR; diff --git a/services/screenservice/test/unittest/sinkservice/screenregionmgr/src/screenregion_test.cpp b/services/screenservice/test/unittest/sinkservice/screenregionmgr/src/screenregion_test.cpp index 47edb234d4d978e249cb2b791505139acd127b22..140fbadadfc20c70bd986ba05d1ff1dafedc8cc3 100644 --- a/services/screenservice/test/unittest/sinkservice/screenregionmgr/src/screenregion_test.cpp +++ b/services/screenservice/test/unittest/sinkservice/screenregionmgr/src/screenregion_test.cpp @@ -178,7 +178,8 @@ HWTEST_F(ScreenRegionTest, SetUp_001, TestSize.Level1) videoParam->videoFormat_ = VIDEO_DATA_FORMAT_YUVI420; videoParam->fps_ = 30; screenRegion_->SetVideoParam(videoParam); - int32_t ret = screenRegion_->SetUp(); + std::string version = "1.0"; + int32_t ret = screenRegion_->SetUp(version); EXPECT_EQ(ERR_DH_SCREEN_SA_DSCREEN_SCREENGION_SETUP_FAILED, ret); } @@ -192,7 +193,8 @@ HWTEST_F(ScreenRegionTest, SetUp_001, TestSize.Level1) HWTEST_F(ScreenRegionTest, SetUp_002, TestSize.Level1) { screenRegion_->mapRelation_ = nullptr; - int32_t ret = screenRegion_->SetUp(); + std::string version = "1.0"; + int32_t ret = screenRegion_->SetUp(version); EXPECT_EQ(ERR_DH_SCREEN_SA_DSCREEN_SCREENGION_SETUP_FAILED, ret); } diff --git a/services/screenservice/test/unittest/sourceservice/dscreenmgr/src/dscreen_manager_test.cpp b/services/screenservice/test/unittest/sourceservice/dscreenmgr/src/dscreen_manager_test.cpp index e47872e7aba445d96da44a9b21665cc72f792f51..dfe695382e94523021a9fb33b4487e8bbd04b905 100644 --- a/services/screenservice/test/unittest/sourceservice/dscreenmgr/src/dscreen_manager_test.cpp +++ b/services/screenservice/test/unittest/sourceservice/dscreenmgr/src/dscreen_manager_test.cpp @@ -170,7 +170,7 @@ HWTEST_F(DScreenManagerTest, EnableDistributedScreen_001, TestSize.Level1) int32_t ret = DScreenManager::GetInstance().UnInit(); EXPECT_EQ(DH_SUCCESS, ret); - ret = DScreenManager::GetInstance().EnableDistributedScreen("", "", "", ""); + ret = DScreenManager::GetInstance().EnableDistributedScreen("", "", EnableParam{"", ""}, ""); EXPECT_EQ(ERR_DH_SCREEN_SA_ENABLE_FAILED, ret); ret = DScreenManager::GetInstance().Init(); @@ -178,18 +178,18 @@ HWTEST_F(DScreenManagerTest, EnableDistributedScreen_001, TestSize.Level1) std::string devId = "devId000"; std::string dhId = "dhId000"; - std::string attrs = "attrs000"; + EnableParam param = {"2.0", "attrs000"}; std::string reqId = "reqId000"; - ret = DScreenManager::GetInstance().EnableDistributedScreen(devId, dhId, attrs, reqId); + ret = DScreenManager::GetInstance().EnableDistributedScreen(devId, dhId, param, reqId); EXPECT_EQ(DH_SUCCESS, ret); std::shared_ptr dScreen = DScreenManager::GetInstance().FindDScreenByScreenId(SCREEN_ID_INVALID); dScreen->SetState(DScreenState::ENABLED); - ret = DScreenManager::GetInstance().EnableDistributedScreen(devId, dhId, attrs, reqId); + ret = DScreenManager::GetInstance().EnableDistributedScreen(devId, dhId, param, reqId); EXPECT_EQ(DH_SUCCESS, ret); dScreen->SetState(DScreenState::ENABLING); - ret = DScreenManager::GetInstance().EnableDistributedScreen(devId, dhId, attrs, reqId); + ret = DScreenManager::GetInstance().EnableDistributedScreen(devId, dhId, param, reqId); EXPECT_EQ(DH_SUCCESS, ret); } @@ -327,7 +327,7 @@ HWTEST_F(DScreenManagerTest, HandleNotifySetUpResult_001, TestSize.Level1) HWTEST_F(DScreenManagerTest, DisableDistributedScreen_001, TestSize.Level1) { int32_t ret = DScreenManager::GetInstance().DisableDistributedScreen("devId111", "dhId111", "reqId111"); - EXPECT_EQ(ERR_DH_SCREEN_SA_DISABLE_FAILED, ret); + EXPECT_EQ(DH_SUCCESS, ret); ret = DScreenManager::GetInstance().UnInit(); EXPECT_EQ(DH_SUCCESS, ret); diff --git a/services/screentransport/screensinktrans/include/iscreen_sink_trans.h b/services/screentransport/screensinktrans/include/iscreen_sink_trans.h index 9b3857d8c80095d0ef516acf79ce127709181b1b..0dc3ce6f250d09226c92767666d5185b323bb79b 100644 --- a/services/screentransport/screensinktrans/include/iscreen_sink_trans.h +++ b/services/screentransport/screensinktrans/include/iscreen_sink_trans.h @@ -34,7 +34,7 @@ public: virtual int32_t Stop() = 0; virtual int32_t RegisterStateCallback(const std::shared_ptr &callBack) = 0; virtual int32_t SetImageSurface(const sptr &surface) = 0; - virtual void SetScreenVersion(std::string &version) = 0; + virtual void SetScreenVersion(const std::string &version) = 0; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/screentransport/screensinktrans/include/screen_sink_trans.h b/services/screentransport/screensinktrans/include/screen_sink_trans.h index 8738684ed5cd24ee72bf24a4597d1fed7f27a1e4..823348901b0f52b24d997167a4cfc2ad46cfe63f 100644 --- a/services/screentransport/screensinktrans/include/screen_sink_trans.h +++ b/services/screentransport/screensinktrans/include/screen_sink_trans.h @@ -40,7 +40,7 @@ public: int32_t Stop() override; int32_t RegisterStateCallback(const std::shared_ptr &callback) override; int32_t SetImageSurface(const sptr &surface) override; - void SetScreenVersion(std::string &version) override; + void SetScreenVersion(const std::string &version) override; void OnSessionOpened() override; void OnSessionClosed() override; diff --git a/services/screentransport/screensinktrans/src/screen_sink_trans.cpp b/services/screentransport/screensinktrans/src/screen_sink_trans.cpp index 03d88dbbe7e6d6337f7c09ecc08ea4ac761ab5eb..1a1fedafe528ae13dae3ce42963271258c1613f0 100644 --- a/services/screentransport/screensinktrans/src/screen_sink_trans.cpp +++ b/services/screentransport/screensinktrans/src/screen_sink_trans.cpp @@ -209,7 +209,7 @@ int32_t ScreenSinkTrans::InitScreenTrans(const VideoParam &localParam, const Vid const std::string &peerDevId) { screenChannel_ = std::make_shared(peerDevId); - if (atoi(version_.c_str()) == TWO) { + if (std::atoi(version_.c_str()) > DSCREEN_MIN_VERSION) { screenChannel_->SetJpegSessionFlag(true); } int32_t ret = RegisterChannelListener(); @@ -324,7 +324,7 @@ void ScreenSinkTrans::OnDataReceived(const std::shared_ptr &data) } } -void ScreenSinkTrans::SetScreenVersion(std::string &version) +void ScreenSinkTrans::SetScreenVersion(const std::string &version) { version_ = version; } diff --git a/services/screentransport/screensourcetrans/include/iscreen_source_trans.h b/services/screentransport/screensourcetrans/include/iscreen_source_trans.h index 528d67302949c90217be0eb02e11748a78d3cc1a..9ef0d0c89ab460588b2d0a5fb54991f3ba5928a3 100644 --- a/services/screentransport/screensourcetrans/include/iscreen_source_trans.h +++ b/services/screentransport/screensourcetrans/include/iscreen_source_trans.h @@ -35,8 +35,7 @@ public: virtual int32_t RegisterStateCallback(const std::shared_ptr &callBack) = 0; virtual sptr GetImageSurface() = 0; virtual int32_t SetConsumerSurface() = 0; - virtual void SetScreenVersion(std::string &version) = 0; - virtual std::string GetScreenVersion() = 0; + virtual void SetScreenVersion(const std::string &version) = 0; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/screentransport/screensourcetrans/include/screen_source_trans.h b/services/screentransport/screensourcetrans/include/screen_source_trans.h index 45bd7c8847ed33381d0cdf73e4401c7e44d574e8..dbc0f6affa82b434602106debd54d7d14361574a 100644 --- a/services/screentransport/screensourcetrans/include/screen_source_trans.h +++ b/services/screentransport/screensourcetrans/include/screen_source_trans.h @@ -53,8 +53,7 @@ public: void OnProcessorStateNotify(int32_t state) override; void OnDamageProcessDone(sptr &surfaceBuffer, const std::vector &damages) override; int32_t SetConsumerSurface() override; - void SetScreenVersion(std::string &version) override; - std::string GetScreenVersion() override; + void SetScreenVersion(const std::string &version) override; private: int32_t CheckVideoParam(const VideoParam ¶m); diff --git a/services/screentransport/screensourcetrans/src/screen_source_trans.cpp b/services/screentransport/screensourcetrans/src/screen_source_trans.cpp index 8ec4fa7c23ff5bb3f6541c6cb42369269770fd8a..7802c84b14b9aeeb7d74b8ed223c1fb1b1708a25 100644 --- a/services/screentransport/screensourcetrans/src/screen_source_trans.cpp +++ b/services/screentransport/screensourcetrans/src/screen_source_trans.cpp @@ -200,16 +200,11 @@ sptr ScreenSourceTrans::GetImageSurface() return imageProcessor_->GetImageSurface(); } -void ScreenSourceTrans::SetScreenVersion(std::string &version) +void ScreenSourceTrans::SetScreenVersion(const std::string &version) { version_ = version; } -std::string ScreenSourceTrans::GetScreenVersion() -{ - return version_; -} - int32_t ScreenSourceTrans::CheckVideoParam(const VideoParam ¶m) { if ((param.GetCodecType() != VIDEO_CODEC_TYPE_VIDEO_H264) && @@ -276,7 +271,7 @@ int32_t ScreenSourceTrans::InitScreenTrans(const VideoParam &localParam, const V { DHLOGI("%s:InitScreenTrans.", LOG_TAG); screenChannel_ = std::make_shared(peerDevId); - if (atoi(version_.c_str()) == TWO) { + if (std::atoi(version_.c_str()) > DSCREEN_MIN_VERSION) { screenChannel_->SetJpegSessionFlag(true); } int32_t ret = RegisterChannelListener(); @@ -397,24 +392,12 @@ void ScreenSourceTrans::OnDamageProcessDone(sptr &surfaceBuffer, DHLOGE("%s: Trans surfaceBuffer is null.", LOG_TAG); return; } - int32_t ret = DH_SUCCESS; - switch (atoi(version_.c_str())) { - case OLD: - DHLOGI("%s: ProcessFullImage.", LOG_TAG); - ret = imageProcessor_->ProcessFullImage(surfaceBuffer); - if (ret != DH_SUCCESS) { - DHLOGE("%s: ImageProcessor process full image failed.", LOG_TAG); - } - break; - case NEW: - DHLOGI("%s: InputBufferImage.", LOG_TAG); - ret = screenDecisionCenter_->InputBufferImage(surfaceBuffer, damages); - if (ret != DH_SUCCESS) { - DHLOGE("%s: DecisionCenter process full image failed.", LOG_TAG); - } - break; - default: - break; + if (std::atoi(version_.c_str()) == DSCREEN_MIN_VERSION) { + DHLOGI("%s: not support partial refresh, run full full image process.", LOG_TAG); + imageProcessor_->ProcessFullImage(surfaceBuffer); + } else { + DHLOGI("%s: run partial refresh image process.", LOG_TAG); + screenDecisionCenter_->InputBufferImage(surfaceBuffer, damages); } }