diff --git a/services/screenservice/sinkservice/screenregionmgr/2.0/include/av_receiver_engine_adpater.h b/services/screenservice/sinkservice/screenregionmgr/2.0/include/av_receiver_engine_adapter.h similarity index 96% rename from services/screenservice/sinkservice/screenregionmgr/2.0/include/av_receiver_engine_adpater.h rename to services/screenservice/sinkservice/screenregionmgr/2.0/include/av_receiver_engine_adapter.h index b995223e04a290ee688529e0d717be8dae5584a5..15d8e941c0b5505d8fe50b1a92b2169c758599cb 100644 --- a/services/screenservice/sinkservice/screenregionmgr/2.0/include/av_receiver_engine_adpater.h +++ b/services/screenservice/sinkservice/screenregionmgr/2.0/include/av_receiver_engine_adapter.h @@ -13,8 +13,8 @@ * limitations under the License. */ -#ifndef OHOS_AV_TRANSPORT_SENDER_ADAPTER_H -#define OHOS_AV_TRANSPORT_SENDER_ADAPTER_H +#ifndef OHOS_AV_TRANSPORT_RECEIVER_ADAPTER_H +#define OHOS_AV_TRANSPORT_RECEIVER_ADAPTER_H #include #include diff --git a/services/screenservice/sinkservice/screenregionmgr/2.0/include/screenregion.h b/services/screenservice/sinkservice/screenregionmgr/2.0/include/screenregion.h index dd914e07c126d4f76c5f69d6b8fe52c271d50e68..61f6fa1fe1faa4ead19703f9bdca17c30a400246 100644 --- a/services/screenservice/sinkservice/screenregionmgr/2.0/include/screenregion.h +++ b/services/screenservice/sinkservice/screenregionmgr/2.0/include/screenregion.h @@ -20,7 +20,7 @@ #include "surface.h" -#include "2.0/include/av_receiver_engine_adpater.h" +#include "2.0/include/av_receiver_engine_adapter.h" #include "distributed_hardware_fwk_kit.h" #include "dscreen_maprelation.h" #include "screen_client_common.h" @@ -38,7 +38,7 @@ public: void OnEngineEvent(DScreenEventType event, const std::string &content) override; void OnEngineMessage(const std::shared_ptr &message) override; void OnEngineDataDone(const std::shared_ptr &buffer) override; - std::sptr GetWSBuffer(); + void GetWSBuffer(sptr::SurfaceBuffer &wsBuffer, const std::shared_ptr &buffer); int32_t Release(); int32_t InitReceiverEngine(IAVEngineProvider *providerPtr); diff --git a/services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adpater.cpp b/services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp similarity index 100% rename from services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adpater.cpp rename to services/screenservice/sinkservice/screenregionmgr/2.0/src/av_receiver_engine_adapter.cpp diff --git a/services/screenservice/sinkservice/screenregionmgr/2.0/src/screenregion.cpp b/services/screenservice/sinkservice/screenregionmgr/2.0/src/screenregion.cpp index 928ff15982c2eb22243c18a2559629b6497336db..10b9f0023eebc2b0eba3a98ffe88bfa1ff843018 100644 --- a/services/screenservice/sinkservice/screenregionmgr/2.0/src/screenregion.cpp +++ b/services/screenservice/sinkservice/screenregionmgr/2.0/src/screenregion.cpp @@ -259,39 +259,8 @@ void ScreenRegion::OnEngineMessage(const std::shared_ptr &messag } } -std::sptr ScreenRegion::GetWSBuffer() +void ScreenRegion::GetWSBuffer(sptr::SurfaceBuffer &wsBuffer, const std::shared_ptr &buffer) { - if (windowSurface_ == nullptr) { - DHLOGE("window surface is nullptr."); - return; - } - sptr wsBuffer = nullptr; - int32_t releaseFence = -1; - OHOS::BufferRequestConfig requestConfig = { - .width = videoParam_->GetVideoWidth(), - .height = videoParam_->GetVideoHeight(), - .strideAlignment = STRIDE_ALIGNMENT, - .format = PIXEL_FMT_YCRCB_420_SP, - .usage = HBM_USE_CPU_READ | HBM_USE_CPU_WRITE | HBM_USE_MEM_DMA, - }; - SurfaceError surfaceErr = windowSurface_->RequestBuffer(wsBuffer, releaseFence, requestConfig); - if (surfaceErr != SURFACE_ERROR_OK || wsBuffer == nullptr) { - DHLOGE("surface request buffer failed, surfaceErr: %d.", surfaceErr); - windowSurface_->CancelBuffer(wsBuffer); - return; - } - return wsBuffer; -} - -void ScreenRegion::OnEngineDataDone(const std::shared_ptr &buffer) -{ - ++frameNumber_; - DHLOGI("OnEngineDataDone enter"); - if (buffer == nullptr) { - DHLOGE("received video buffer data is nullptr."); - return; - } - sptr wsBuffer = GetWSBuffer(); auto bufferData = buffer->GetBufferData(0); auto bufferAddr = bufferData->GetAddress(); auto wsBufAddr = static_cast(wsBuffer->GetVirAddr()); @@ -327,7 +296,37 @@ void ScreenRegion::OnEngineDataDone(const std::shared_ptr &buffer dstOffset += videoParam_->GetVideoWidth(); srcOffset += alignedWidth; } +} +void ScreenRegion::OnEngineDataDone(const std::shared_ptr &buffer) +{ + ++frameNumber_; + DHLOGI("OnEngineDataDone enter"); + if (buffer == nullptr) { + DHLOGE("received video buffer data is nullptr."); + return; + } + if (windowSurface_ == nullptr) { + DHLOGE("window surface is nullptr."); + return; + } + sptr wsBuffer = nullptr; + int32_t releaseFence = -1; + OHOS::BufferRequestConfig requestConfig = { + .width = videoParam_->GetVideoWidth(), + .height = videoParam_->GetVideoHeight(), + .strideAlignment = STRIDE_ALIGNMENT, + .format = PIXEL_FMT_YCRCB_420_SP, + .usage = HBM_USE_CPU_READ | HBM_USE_CPU_WRITE | HBM_USE_MEM_DMA, + }; + SurfaceError surfaceErr = windowSurface_->RequestBuffer(wsBuffer, releaseFence, requestConfig); + if (surfaceErr != SURFACE_ERROR_OK || wsBuffer == nullptr) { + DHLOGE("surface request buffer failed, surfaceErr: %d.", surfaceErr); + windowSurface_->CancelBuffer(wsBuffer); + return; + } + SetWSBuffer(wsBuffer, buffer); + BufferFlushConfig flushConfig = { {0, 0, wsBuffer->GetWidth(), wsBuffer->GetHeight()}, 0}; surfaceErr = windowSurface_->FlushBuffer(wsBuffer, -1, flushConfig); if (surfaceErr != SURFACE_ERROR_OK) { diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/include/av_sender_engine_adpater.h b/services/screenservice/sourceservice/dscreenmgr/2.0/include/av_sender_engine_adapter.h similarity index 100% rename from services/screenservice/sourceservice/dscreenmgr/2.0/include/av_sender_engine_adpater.h rename to services/screenservice/sourceservice/dscreenmgr/2.0/include/av_sender_engine_adapter.h diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h b/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h index 02e4f13e8b0691106d47407438fc174eae2c33eb..b4d20b3f29cf334f8c7fc5aa3f4ba0db08a52bbe 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h @@ -108,7 +108,7 @@ private: int32_t ConfigSurface(); int32_t RemoveSurface(); int32_t SetUp(); - void Judgment(); + void ChooseParameter(std::string &codecType, std::string &pixelFormat); bool CheckJsonData(json &attrJson); void SetState(DScreenState state); 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 289cafb79f29a75c490d7f567f1fa5003e4da9e9..fa5c4cb3471b2738dae7ba41d79ba6ca9949b32a 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen_manager.h +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen_manager.h @@ -21,7 +21,7 @@ #include "single_instance.h" #include "screen_manager.h" -#include "av_sender_engine_adpater.h" +#include "av_sender_engine_adapter.h" #include "dscreen.h" #include "dscreen_maprelation.h" #include "idscreen_sink.h" diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/src/av_sender_engine_adpater.cpp b/services/screenservice/sourceservice/dscreenmgr/2.0/src/av_sender_engine_adapter.cpp similarity index 99% rename from services/screenservice/sourceservice/dscreenmgr/2.0/src/av_sender_engine_adpater.cpp rename to services/screenservice/sourceservice/dscreenmgr/2.0/src/av_sender_engine_adapter.cpp index b421a696ff7858d91b685071f71580d6d1e2673f..9464606ae505f6c45e01ee42985ef246a6f4d6eb 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/src/av_sender_engine_adpater.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/src/av_sender_engine_adapter.cpp @@ -13,7 +13,7 @@ * limitations under the License. */ -#include "2.0/include/av_sender_engine_adpater.h" +#include "2.0/include/av_sender_engine_adapter.h" #include "dscreen_errcode.h" #include "dscreen_log.h" diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp index 93378d30ecd092f1d2126b187ea7a3c16505df3a..805b96e7e61af830580c922b2670e269c61b21a3 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp @@ -17,7 +17,7 @@ #include "avcodec_info.h" #include "avcodec_list.h" -#include "2.0/include/av_sender_engine_adpater.h" +#include "2.0/include/av_sender_engine_adapter.h" #include "dscreen_constants.h" #include "dscreen_errcode.h" #include "dscreen_hisysevent.h" @@ -365,7 +365,33 @@ int32_t DScreen::StopSenderEngine() return DH_SUCCESS; } -void DScreen::Judgment() +void DScreen::ChooseParameter(std::string &codecType, std::string &pixelFormat) +{ + if (videoParam_->GetCodecType() == VIDEO_CODEC_TYPE_VIDEO_H265) { + codecType = MINE_VIDEO_H265; + } else if (videoParam_->GetCodecType() == VIDEO_CODEC_TYPE_VIDEO_H264) { + codecType = MINE_VIDEO_H264; + } else { + codecType = MINE_VIDEO_RAW; + } + if (videoParam_->GetVideoFormat() == VIDEO_DATA_FORMAT_YUVI420) { + pixelFormat = VIDEO_FORMAT_YUVI420; + } else if (videoParam_->GetVideoFormat() == VIDEO_DATA_FORMAT_NV12) { + pixelFormat = VIDEO_FORMAT_NV12; + } else if (videoParam_->GetVideoFormat() == VIDEO_DATA_FORMAT_NV21) { + pixelFormat = VIDEO_FORMAT_NV21; + } else { + pixelFormat = VIDEO_FORMAT_RGBA8888; + } + senderAdapter_->SetParameter(AVTransTag::VIDEO_CODEC_TYPE, codecType); + senderAdapter_->SetParameter(AVTransTag::VIDEO_PIXEL_FORMAT, pixelFormat); + senderAdapter_->SetParameter(AVTransTag::VIDEO_WIDTH, std::to_string(videoParam_->GetVideoWidth())); + senderAdapter_->SetParameter(AVTransTag::VIDEO_HEIGHT, std::to_string(videoParam_->GetVideoHeight())); + senderAdapter_->SetParameter(AVTransTag::VIDEO_FRAME_RATE, std::to_string(videoParam_->GetFps())); + senderAdapter_->SetParameter(AVTransTag::VIDEO_BIT_RATE, std::to_string(BIT_RATE)); +} + +int32_t DScreen::SetUp() { DHLOGI("SetUp, devId: %s, dhId: %s", GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str()); if (senderAdapter_ == nullptr) { @@ -376,11 +402,6 @@ void DScreen::Judgment() DHLOGE("videoParam is nullptr."); return ERR_DH_SCREEN_SA_VALUE_NOT_INIT; } -} - -int32_t DScreen::SetUp() -{ - Judgment() auto mapRelation = ScreenMgrAdapter::GetInstance().GetMapRelation(screenId_); if (mapRelation == nullptr) { DHLOGE("get map relation failed."); @@ -403,31 +424,9 @@ int32_t DScreen::SetUp() DHLOGE("set message to remote engine failed."); return ret; } - std::string codecType; - if (videoParam_->GetCodecType() == VIDEO_CODEC_TYPE_VIDEO_H265) { - codecType = MINE_VIDEO_H265; - } else if (videoParam_->GetCodecType() == VIDEO_CODEC_TYPE_VIDEO_H264) { - codecType = MINE_VIDEO_H264; - } else { - codecType = MINE_VIDEO_RAW; - } std::string pixelFormat; - if (videoParam_->GetVideoFormat() == VIDEO_DATA_FORMAT_YUVI420) { - pixelFormat = VIDEO_FORMAT_YUVI420; - } else if (videoParam_->GetVideoFormat() == VIDEO_DATA_FORMAT_NV12) { - pixelFormat = VIDEO_FORMAT_NV12; - } else if (videoParam_->GetVideoFormat() == VIDEO_DATA_FORMAT_NV21) { - pixelFormat = VIDEO_FORMAT_NV21; - } else { - pixelFormat = VIDEO_FORMAT_RGBA8888; - } - senderAdapter_->SetParameter(AVTransTag::VIDEO_CODEC_TYPE, codecType); - senderAdapter_->SetParameter(AVTransTag::VIDEO_PIXEL_FORMAT, pixelFormat); - senderAdapter_->SetParameter(AVTransTag::VIDEO_WIDTH, std::to_string(videoParam_->GetVideoWidth())); - senderAdapter_->SetParameter(AVTransTag::VIDEO_HEIGHT, std::to_string(videoParam_->GetVideoHeight())); - senderAdapter_->SetParameter(AVTransTag::VIDEO_FRAME_RATE, std::to_string(videoParam_->GetFps())); - senderAdapter_->SetParameter(AVTransTag::VIDEO_BIT_RATE, std::to_string(BIT_RATE)); + ChooseParameter(codecType, pixelFormat); return senderAdapter_->SetParameter(AVTransTag::ENGINE_READY, OWNER_NAME_D_SCREEN); } diff --git a/services/screentransport/screendatachannel/src/screen_data_channel_impl.cpp b/services/screentransport/screendatachannel/src/screen_data_channel_impl.cpp index 47a2811d9ef2732b92afdeb862e24e05be22168d..8229d625f14b149372e5df4c222c2dad422115d6 100644 --- a/services/screentransport/screendatachannel/src/screen_data_channel_impl.cpp +++ b/services/screentransport/screendatachannel/src/screen_data_channel_impl.cpp @@ -139,7 +139,7 @@ int32_t ScreenDataChannelImpl::CloseSession() } sessionId_ = 0; if (jpegSessionFlag_ == true && jpegSessionId_ != 0) { - ret = SoftbusAdapter::GetInstance().CloseSoftbusSession(sessionId_); + ret = SoftbusAdapter::GetInstance().CloseSoftbusSession(jpegSessionId_); if (ret != DH_SUCCESS) { DHLOGE("%s: Close jpeg session failed ret: %" PRId32, LOG_TAG, ret); return ret;