From 5a6b727cb8209d269e30e530c7364fa3f754fe5b Mon Sep 17 00:00:00 2001 From: liqiao49 Date: Sat, 7 Oct 2023 14:25:32 +0800 Subject: [PATCH] add interface for dcamera Signed-off-by: liqiao49 --- .../av_trans_engine/av_receiver/BUILD.gn | 1 + .../av_receiver/include/av_receiver_engine.h | 8 ++ .../av_receiver/src/av_receiver_engine.cpp | 86 +++++++++++++++++++ .../av_trans_engine/av_sender/BUILD.gn | 1 + .../av_sender/include/av_sender_engine.h | 8 ++ .../av_sender/src/av_sender_engine.cpp | 86 +++++++++++++++++++ av_transport/av_trans_engine/filters/BUILD.gn | 2 + .../av_transport_input_filter.cpp | 26 ++++++ .../av_transport_input_filter.h | 7 ++ .../av_transport_output_filter.cpp | 28 +++++- .../av_transport_output_filter.h | 7 ++ .../dsoftbus_input/dsoftbus_input_plugin.cpp | 13 ++- .../dsoftbus_input/dsoftbus_input_plugin.h | 1 + .../dsoftbus_output_plugin.cpp | 20 ++--- .../dsoftbus_output/dsoftbus_output_plugin.h | 1 + av_transport/interface/i_av_receiver_engine.h | 7 ++ av_transport/interface/i_av_sender_engine.h | 7 ++ interfaces/inner_kits/BUILD.gn | 19 +++- 18 files changed, 309 insertions(+), 19 deletions(-) diff --git a/av_transport/av_trans_engine/av_receiver/BUILD.gn b/av_transport/av_trans_engine/av_receiver/BUILD.gn index 42e5771f..75182be9 100644 --- a/av_transport/av_trans_engine/av_receiver/BUILD.gn +++ b/av_transport/av_trans_engine/av_receiver/BUILD.gn @@ -22,6 +22,7 @@ config("receiver_external_config") { "${engine_path}/av_sender/include", "${engine_path}/av_receiver/include", "${interface_path}", + "//third_party/json/include", ] } diff --git a/av_transport/av_trans_engine/av_receiver/include/av_receiver_engine.h b/av_transport/av_trans_engine/av_receiver/include/av_receiver_engine.h index 8af459c1..7da1aeed 100644 --- a/av_transport/av_trans_engine/av_receiver/include/av_receiver_engine.h +++ b/av_transport/av_trans_engine/av_receiver/include/av_receiver_engine.h @@ -63,6 +63,11 @@ public: const ChannelAttribute &attribution) override; int32_t RegisterReceiverCallback(const std::shared_ptr &callback) override; + std::shared_ptr CreatePipeline(const std::string &pipelineName) override; + int32_t PreparePipelineByName(const std::string &pipelineName) override; + int32_t StartPipeline(const std::string &pipelineName) override; + int32_t StopPipeline(const std::string &pipelineName) override; + // interfaces from ISoftbusChannelListener void OnChannelEvent(const AVTransEvent &event) override; void OnStreamReceived(const StreamData *data, const StreamData *ext) override; @@ -126,6 +131,9 @@ private: std::shared_ptr audioDecoder_ = nullptr; std::shared_ptr videoDecoder_ = nullptr; + std::mutex pipelineMutex_; + std::map> pipelinePool_; + using SetParaFunc = void (AVReceiverEngine::*)(const std::string &value); std::map funcMap_; }; diff --git a/av_transport/av_trans_engine/av_receiver/src/av_receiver_engine.cpp b/av_transport/av_trans_engine/av_receiver/src/av_receiver_engine.cpp index 5c3395d6..126b6a1e 100644 --- a/av_transport/av_trans_engine/av_receiver/src/av_receiver_engine.cpp +++ b/av_transport/av_trans_engine/av_receiver/src/av_receiver_engine.cpp @@ -223,6 +223,7 @@ int32_t AVReceiverEngine::Release() audioDecoder_ = nullptr; videoDecoder_ = nullptr; ctlCtrCallback_ = nullptr; + pipelinePool_.clear(); SetCurrentState(StateId::IDLE); return DH_AVT_SUCCESS; } @@ -482,5 +483,90 @@ void AVReceiverEngine::OnEvent(const OHOS::Media::Event &event) AVTRANS_LOGE("Invalid event type."); } } + +std::shared_ptr AVReceiverEngine::CreatePipeline(const std::string &pipelineName) +{ + std::lock_guard lock(pipelineMutex_); + if (pipelineName.length() == 0) { + AVTRANS_LOGE("Invalid pipelineName."); + return nullptr; + } + + auto pipeline = std::make_shared(); + if (pipeline == nullptr) { + AVTRANS_LOGE("pipeline create failed."); + return nullptr; + } + + pipeline->Init(this, nullptr); + pipelinePool_[pipelineName] = pipeline; + return pipeline; +} + +int32_t AVReceiverEngine::PreparePipelineByName(const std::string &pipelineName) +{ + std::lock_guard lock(pipelineMutex_); + if (pipelineName.length() == 0) { + AVTRANS_LOGE("Invalid pipelineName."); + return -1; + } + + std::shared_ptr pipeline = pipelinePool_[pipelineName]; + if (pipeline == nullptr) { + AVTRANS_LOGE("pipeline not exist. %s", pipelineName.c_str()); + return -1; + } + + ErrorCode ret = pipeline->Prepare(); + if (ret != ErrorCode::SUCCESS) { + AVTRANS_LOGE("pipeline stop failed. %s", pipelineName.c_str()); + return -1; + } + return 0; +} + +int32_t AVReceiverEngine::StartPipeline(const std::string &pipelineName) +{ + std::lock_guard lock(pipelineMutex_); + if (pipelineName.length() == 0) { + AVTRANS_LOGE("Invalid pipelineName."); + return -1; + } + + auto pipeline = pipelinePool_[pipelineName]; + if (pipeline == nullptr) { + AVTRANS_LOGE("pipeline not exist. %s", pipelineName.c_str()); + return -1; + } + + ErrorCode ret = pipeline->Start(); + if (ret != ErrorCode::SUCCESS) { + AVTRANS_LOGE("pipeline stop failed. %s", pipelineName.c_str()); + return -1; + } + return 0; +} + +int32_t AVReceiverEngine::StopPipeline(const std::string &pipelineName) +{ + std::lock_guard lock(pipelineMutex_); + if (pipelineName.length() == 0) { + AVTRANS_LOGE("Invalid pipelineName."); + return -1; + } + + auto pipeline = pipelinePool_[pipelineName]; + if (pipeline == nullptr) { + AVTRANS_LOGE("pipeline not exist. %s", pipelineName.c_str()); + return -1; + } + + ErrorCode ret = pipeline->Stop(); + if (ret != ErrorCode::SUCCESS) { + AVTRANS_LOGE("pipeline stop failed. %s", pipelineName.c_str()); + return -1; + } + return 0; +} } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/av_transport/av_trans_engine/av_sender/BUILD.gn b/av_transport/av_trans_engine/av_sender/BUILD.gn index e817cd6e..6fb5c771 100644 --- a/av_transport/av_trans_engine/av_sender/BUILD.gn +++ b/av_transport/av_trans_engine/av_sender/BUILD.gn @@ -22,6 +22,7 @@ config("sender_external_config") { "${engine_path}/av_sender/include", "${engine_path}/av_receiver/include", "${interface_path}", + "//third_party/json/include", ] } diff --git a/av_transport/av_trans_engine/av_sender/include/av_sender_engine.h b/av_transport/av_trans_engine/av_sender/include/av_sender_engine.h index 0c73af02..f8d95c42 100644 --- a/av_transport/av_trans_engine/av_sender/include/av_sender_engine.h +++ b/av_transport/av_trans_engine/av_sender/include/av_sender_engine.h @@ -63,6 +63,11 @@ public: const ChannelAttribute &attribution) override; int32_t RegisterSenderCallback(const std::shared_ptr &callback) override; + std::shared_ptr CreatePipeline(const std::string &pipelineName) override; + int32_t PreparePipelineByName(const std::string &pipelineName) override; + int32_t StartPipeline(const std::string &pipelineName) override; + int32_t StopPipeline(const std::string &pipelineName) override; + // interfaces from ISoftbusChannelListener void OnChannelEvent(const AVTransEvent &event) override; void OnStreamReceived(const StreamData *data, const StreamData *ext) override; @@ -127,6 +132,9 @@ private: std::shared_ptr audioEncoder_ = nullptr; std::shared_ptr videoEncoder_ = nullptr; + std::mutex pipelineMutex_; + std::map> pipelinePool_; + using SetParaFunc = void (AVSenderEngine::*)(const std::string &value); std::map funcMap_; }; diff --git a/av_transport/av_trans_engine/av_sender/src/av_sender_engine.cpp b/av_transport/av_trans_engine/av_sender/src/av_sender_engine.cpp index 984e5c71..3b6cf599 100644 --- a/av_transport/av_trans_engine/av_sender/src/av_sender_engine.cpp +++ b/av_transport/av_trans_engine/av_sender/src/av_sender_engine.cpp @@ -203,6 +203,7 @@ int32_t AVSenderEngine::Release() videoEncoder_ = nullptr; senderCallback_ = nullptr; ctlCenCallback_ = nullptr; + pipelinePool_.clear(); SetCurrentState(StateId::IDLE); return DH_AVT_SUCCESS; } @@ -547,5 +548,90 @@ void AVSenderEngine::OnEvent(const Event &event) AVTRANS_LOGE("Invalid event type."); } } + +std::shared_ptr AVSenderEngine::CreatePipeline(const std::string &pipelineName) +{ + std::lock_guard lock(pipelineMutex_); + if (pipelineName.length() == 0) { + AVTRANS_LOGE("Invalid pipelineName."); + return nullptr; + } + + auto pipeline = std::make_shared(); + if (pipeline == nullptr) { + AVTRANS_LOGE("pipeline create failed."); + return nullptr; + } + + pipeline->Init(this, nullptr); + pipelinePool_[pipelineName] = pipeline; + return pipeline; +} + +int32_t AVSenderEngine::PreparePipelineByName(const std::string &pipelineName) +{ + std::lock_guard lock(pipelineMutex_); + if (pipelineName.length() == 0) { + AVTRANS_LOGE("Invalid pipelineName."); + return -1; + } + + std::shared_ptr pipeline = pipelinePool_[pipelineName]; + if (pipeline == nullptr) { + AVTRANS_LOGE("pipeline not exist. %s", pipelineName.c_str()); + return -1; + } + + ErrorCode ret = pipeline->Prepare(); + if (ret != ErrorCode::SUCCESS) { + AVTRANS_LOGE("pipeline stop failed. %s", pipelineName.c_str()); + return -1; + } + return 0; +} + +int32_t AVSenderEngine::StartPipeline(const std::string &pipelineName) +{ + std::lock_guard lock(pipelineMutex_); + if (pipelineName.length() == 0) { + AVTRANS_LOGE("Invalid pipelineName."); + return -1; + } + + auto pipeline = pipelinePool_[pipelineName]; + if (pipeline == nullptr) { + AVTRANS_LOGE("pipeline not exist. %s", pipelineName.c_str()); + return -1; + } + + ErrorCode ret = pipeline->Start(); + if (ret != ErrorCode::SUCCESS) { + AVTRANS_LOGE("pipeline stop failed. %s", pipelineName.c_str()); + return -1; + } + return 0; +} + +int32_t AVSenderEngine::StopPipeline(const std::string &pipelineName) +{ + std::lock_guard lock(pipelineMutex_); + if (pipelineName.length() == 0) { + AVTRANS_LOGE("Invalid pipelineName."); + return -1; + } + + auto pipeline = pipelinePool_[pipelineName]; + if (pipeline == nullptr) { + AVTRANS_LOGE("pipeline not exist. %s", pipelineName.c_str()); + return -1; + } + + ErrorCode ret = pipeline->Stop(); + if (ret != ErrorCode::SUCCESS) { + AVTRANS_LOGE("pipeline stop failed. %s", pipelineName.c_str()); + return -1; + } + return 0; +} } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/av_transport/av_trans_engine/filters/BUILD.gn b/av_transport/av_trans_engine/filters/BUILD.gn index 5afe86d9..049d4a15 100644 --- a/av_transport/av_trans_engine/filters/BUILD.gn +++ b/av_transport/av_trans_engine/filters/BUILD.gn @@ -20,6 +20,7 @@ ohos_source_set("avtrans_input_filter") { "${plugin_path}/core", "${plugin_path}/interface", "${common_path}/include", + "//third_party/json/include", ] sources = [ @@ -68,6 +69,7 @@ ohos_source_set("avtrans_output_filter") { "${plugin_path}/core", "${plugin_path}/interface", "${common_path}/include", + "//third_party/json/include", ] sources = [ diff --git a/av_transport/av_trans_engine/filters/av_transport_input/av_transport_input_filter.cpp b/av_transport/av_trans_engine/filters/av_transport_input/av_transport_input_filter.cpp index e0876194..14210c91 100644 --- a/av_transport/av_trans_engine/filters/av_transport_input/av_transport_input_filter.cpp +++ b/av_transport/av_trans_engine/filters/av_transport_input/av_transport_input_filter.cpp @@ -17,6 +17,8 @@ #include "av_transport_input_filter.h" #include "av_trans_log.h" #include "av_trans_constants.h" +#include "av_trans_utils.h" +#include "softbus_channel_adapter.h" #include "pipeline/filters/common/plugin_utils.h" #include "pipeline/factory/filter_factory.h" #include "plugin/common/plugin_attr_desc.h" @@ -31,6 +33,10 @@ static AutoRegisterFilter g_registerFilterHelper("builtin.avtrans AVInputFilter::AVInputFilter(const std::string& name) : FilterBase(name), plugin_(nullptr), pluginInfo_(nullptr) { AVTRANS_LOGI("ctor called"); + ownerName_ = ""; + sessionName_ = ""; + sessionNameMid_ = ""; + peerDevId_ = ""; } AVInputFilter::~AVInputFilter() @@ -53,6 +59,12 @@ ErrorCode AVInputFilter::SetParameter(int32_t key, const Any& value) if (plugin_ != nullptr) { plugin_->SetParameter(static_cast(key), value); } + if (tag == Tag::MEDIA_DESCRIPTION) { + ParseChannelDescription(Plugin::AnyCast(value), ownerName_, peerDevId_); + } + if (tag == Tag::MEDIA_TITLE) { + sessionNameMid_ = Plugin::AnyCast(value); + } { OSAL::ScopedLock lock(inputFilterMutex_); paramsMap_[tag] = value; @@ -513,6 +525,9 @@ ErrorCode AVInputFilter::SetPluginParams() if (paramsMap_.find(Tag::MEDIA_DESCRIPTION) != paramsMap_.end()) { plugin_->SetParameter(Tag::MEDIA_DESCRIPTION, paramsMap_[Tag::MEDIA_DESCRIPTION]); } + if (paramsMap_.find(Tag::MEDIA_TITLE) != paramsMap_.end()) { + plugin_->SetParameter(Tag::MEDIA_TITLE, paramsMap_[Tag::MEDIA_TITLE]); + } return ErrorCode::SUCCESS; } @@ -585,5 +600,16 @@ void AVInputFilter::OnDataCallback(std::shared_ptr buffer) } outPorts_[0]->PushData(buffer, 0); } + +ErrorCode AVInputFilter::CreateDataChannelServer() +{ + sessionName_ = ownerName_ + "_" + sessionNameMid_ + RECEIVER_DATA_SESSION_NAME_SUFFIX; + int32_t ret = SoftbusChannelAdapter::GetInstance().CreateChannelServer(TransName2PkgName(ownerName_), sessionName_); + if (static_cast(ret) != ErrorCode::SUCCESS) { + AVTRANS_LOGE("Create Session Server failed ret: %d.", ret); + return ErrorCode::ERROR_INVALID_PARAMETER_VALUE; + } + return ErrorCode::SUCCESS; +} } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/av_transport/av_trans_engine/filters/av_transport_input/av_transport_input_filter.h b/av_transport/av_trans_engine/filters/av_transport_input/av_transport_input_filter.h index 8debcd5f..55d6482d 100644 --- a/av_transport/av_trans_engine/filters/av_transport_input/av_transport_input_filter.h +++ b/av_transport/av_trans_engine/filters/av_transport_input/av_transport_input_filter.h @@ -50,6 +50,8 @@ public: ErrorCode Resume() override; ErrorCode PushData(const std::string& inPort, const AVBufferPtr& buffer, int64_t offset) override; + ErrorCode CreateDataChannelServer(); + private: void InitPorts() override; ErrorCode FindPlugin(); @@ -76,6 +78,11 @@ private: Capability capNegWithDownstream_ {}; std::unordered_map paramsMap_; OSAL::Mutex inputFilterMutex_ {}; + + std::string ownerName_; + std::string sessionName_; + std::string sessionNameMid_; + std::string peerDevId_; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/av_transport/av_trans_engine/filters/av_transport_output/av_transport_output_filter.cpp b/av_transport/av_trans_engine/filters/av_transport_output/av_transport_output_filter.cpp index 4c46b491..6a6c96ae 100644 --- a/av_transport/av_trans_engine/filters/av_transport_output/av_transport_output_filter.cpp +++ b/av_transport/av_trans_engine/filters/av_transport_output/av_transport_output_filter.cpp @@ -17,6 +17,8 @@ #include "av_transport_output_filter.h" #include "av_trans_log.h" #include "av_trans_constants.h" +#include "av_trans_utils.h" +#include "softbus_channel_adapter.h" #include "pipeline/filters/common/plugin_utils.h" #include "pipeline/factory/filter_factory.h" #include "plugin/common/plugin_attr_desc.h" @@ -31,6 +33,10 @@ static AutoRegisterFilter g_registerFilterHelper("builtin.avtran AVOutputFilter::AVOutputFilter(const std::string& name) : FilterBase(name), plugin_(nullptr), pluginInfo_(nullptr) { AVTRANS_LOGI("ctor called"); + ownerName_ = ""; + sessionName_ = ""; + sessionNameMid_ = ""; + peerDevId_ = ""; } AVOutputFilter::~AVOutputFilter() @@ -53,6 +59,12 @@ ErrorCode AVOutputFilter::SetParameter(int32_t key, const Any& value) if (plugin_ != nullptr) { plugin_->SetParameter(static_cast(key), value); } + if (tag == Tag::MEDIA_DESCRIPTION) { + ParseChannelDescription(Plugin::AnyCast(value), ownerName_, peerDevId_); + } + if (tag == Tag::MEDIA_TITLE) { + sessionNameMid_ = Plugin::AnyCast(value); + } { OSAL::ScopedLock lock(outputFilterMutex_); paramsMap_[tag] = value; @@ -309,6 +321,9 @@ ErrorCode AVOutputFilter::SetPluginParams() if (paramsMap_.find(Tag::MEDIA_DESCRIPTION) != paramsMap_.end()) { plugin_->SetParameter(Tag::MEDIA_DESCRIPTION, paramsMap_[Tag::MEDIA_DESCRIPTION]); } + if (paramsMap_.find(Tag::MEDIA_TITLE) != paramsMap_.end()) { + plugin_->SetParameter(Tag::MEDIA_TITLE, paramsMap_[Tag::MEDIA_TITLE]); + } if (paramsMap_.find(Tag::AUDIO_CHANNELS) != paramsMap_.end()) { plugin_->SetParameter(Tag::AUDIO_CHANNELS, paramsMap_[Tag::AUDIO_CHANNELS]); } @@ -350,7 +365,18 @@ void AVOutputFilter::OnDataCallback(std::shared_ptr buffer) AVTRANS_LOGE("buffer is nullptr!"); return; } - OnEvent(Event{name_, EventType::EVENT_BUFFER_PROGRESS, buffer}); + OnEvent(Event{name_, OHOS::Media::EventType::EVENT_BUFFER_PROGRESS, buffer}); +} + +ErrorCode AVOutputFilter::CreateDataChannelServer() +{ + sessionName_ = ownerName_ + "_" + sessionNameMid_ + SENDER_DATA_SESSION_NAME_SUFFIX; + int32_t ret = SoftbusChannelAdapter::GetInstance().CreateChannelServer(TransName2PkgName(ownerName_), sessionName_); + if (static_cast(ret) != ErrorCode::SUCCESS) { + AVTRANS_LOGE("Create Session Server failed ret: %d.", ret); + return ErrorCode::ERROR_INVALID_PARAMETER_VALUE; + } + return ErrorCode::SUCCESS; } } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/av_transport/av_trans_engine/filters/av_transport_output/av_transport_output_filter.h b/av_transport/av_trans_engine/filters/av_transport_output/av_transport_output_filter.h index 5390ae79..e742ac71 100644 --- a/av_transport/av_trans_engine/filters/av_transport_output/av_transport_output_filter.h +++ b/av_transport/av_trans_engine/filters/av_transport_output/av_transport_output_filter.h @@ -55,6 +55,8 @@ public: bool Configure(const std::string& inPort, const std::shared_ptr& upstreamMeta, Plugin::Meta& upstreamParams, Plugin::Meta& downstreamParams) override; + ErrorCode CreateDataChannelServer(); + private: void InitPorts() override; ErrorCode FindPlugin(); @@ -71,6 +73,11 @@ private: std::shared_ptr pluginInfo_ {nullptr}; std::unordered_map paramsMap_; OSAL::Mutex outputFilterMutex_ {}; + + std::string ownerName_; + std::string sessionName_; + std::string sessionNameMid_; + std::string peerDevId_; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input/dsoftbus_input_plugin.cpp b/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input/dsoftbus_input_plugin.cpp index 1555cf0c..8a7a782c 100644 --- a/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input/dsoftbus_input_plugin.cpp +++ b/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input/dsoftbus_input_plugin.cpp @@ -59,6 +59,7 @@ DsoftbusInputPlugin::DsoftbusInputPlugin(std::string name) : AvTransInputPlugin(std::move(name)) { AVTRANS_LOGI("ctor"); + sessionNameMid_ = ""; } DsoftbusInputPlugin::~DsoftbusInputPlugin() @@ -89,13 +90,8 @@ Status DsoftbusInputPlugin::Prepare() return Status::ERROR_WRONG_STATE; } - sessionName_ = ownerName_ + "_" + RECEIVER_DATA_SESSION_NAME_SUFFIX; - int32_t ret = SoftbusChannelAdapter::GetInstance().CreateChannelServer(TransName2PkgName(ownerName_), sessionName_); - if (ret != DH_AVT_SUCCESS) { - AVTRANS_LOGE("Create Session Server failed ret: %d.", ret); - return Status::ERROR_INVALID_OPERATION; - } - ret = SoftbusChannelAdapter::GetInstance().RegisterChannelListener(sessionName_, peerDevId_, this); + sessionName_ = ownerName_ + "_" + sessionNameMid_ + RECEIVER_DATA_SESSION_NAME_SUFFIX; + int32_t ret = SoftbusChannelAdapter::GetInstance().RegisterChannelListener(sessionName_, peerDevId_, this); if (ret != DH_AVT_SUCCESS) { AVTRANS_LOGE("Register channel listener failed ret: %d.", ret); return Status::ERROR_INVALID_OPERATION; @@ -183,6 +179,9 @@ Status DsoftbusInputPlugin::SetParameter(Tag tag, const ValueType &value) if (tag == Tag::MEDIA_DESCRIPTION) { ParseChannelDescription(Plugin::AnyCast(value), ownerName_, peerDevId_); } + if (tag == Tag::MEDIA_TITLE) { + sessionNameMid_ = Plugin::AnyCast(value); + } paramsMap_.insert(std::pair(tag, value)); return Status::OK; } diff --git a/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input/dsoftbus_input_plugin.h b/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input/dsoftbus_input_plugin.h index 9970d000..7f6d89de 100644 --- a/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input/dsoftbus_input_plugin.h +++ b/av_transport/av_trans_engine/plugin/plugins/av_trans_input/dsoftbus_input/dsoftbus_input_plugin.h @@ -80,6 +80,7 @@ private: private: std::string ownerName_; std::string sessionName_; + std::string sessionNameMid_; std::string peerDevId_; std::condition_variable dataCond_; std::shared_ptr bufferPopTask_; diff --git a/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output/dsoftbus_output_plugin.cpp b/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output/dsoftbus_output_plugin.cpp index abcd5dc4..f42aa8ef 100644 --- a/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output/dsoftbus_output_plugin.cpp +++ b/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output/dsoftbus_output_plugin.cpp @@ -57,6 +57,7 @@ DsoftbusOutputPlugin::DsoftbusOutputPlugin(std::string name) : AvTransOutputPlugin(std::move(name)) { AVTRANS_LOGI("ctor."); + sessionNameMid_ = ""; } DsoftbusOutputPlugin::~DsoftbusOutputPlugin() @@ -87,10 +88,9 @@ Status DsoftbusOutputPlugin::Prepare() return Status::ERROR_WRONG_STATE; } - sessionName_ = ownerName_ + "_" + SENDER_DATA_SESSION_NAME_SUFFIX; - int32_t ret = SoftbusChannelAdapter::GetInstance().CreateChannelServer(TransName2PkgName(ownerName_), sessionName_); - if (ret != DH_AVT_SUCCESS) { - AVTRANS_LOGE("Create Session Server failed ret: %d.", ret); + Status ret = OpenSoftbusChannel(); + if (ret != Status::OK) { + AVTRANS_LOGE("OpenSoftbusSession failed."); return Status::ERROR_INVALID_OPERATION; } @@ -127,11 +127,7 @@ Status DsoftbusOutputPlugin::Start() AVTRANS_LOGE("The state is wrong."); return Status::ERROR_WRONG_STATE; } - Status ret = OpenSoftbusChannel(); - if (ret != Status::OK) { - AVTRANS_LOGE("OpenSoftbusSession failed."); - return Status::ERROR_INVALID_OPERATION; - } + DataQueueClear(dataQueue_); bufferPopTask_->Start(); state_ = State::RUNNING; @@ -168,6 +164,9 @@ Status DsoftbusOutputPlugin::SetParameter(Tag tag, const ValueType &value) if (tag == Tag::MEDIA_DESCRIPTION) { ParseChannelDescription(Plugin::AnyCast(value), ownerName_, peerDevId_); } + if (tag == Tag::MEDIA_TITLE) { + sessionNameMid_ = Plugin::AnyCast(value); + } paramsMap_.insert(std::pair(tag, value)); return Status::OK; } @@ -186,12 +185,13 @@ Status DsoftbusOutputPlugin::SetCallback(Callback *cb) Status DsoftbusOutputPlugin::OpenSoftbusChannel() { + sessionName_ = ownerName_ + "_" + sessionNameMid_ + SENDER_DATA_SESSION_NAME_SUFFIX; int32_t ret = SoftbusChannelAdapter::GetInstance().RegisterChannelListener(sessionName_, peerDevId_, this); if (ret != DH_AVT_SUCCESS) { AVTRANS_LOGE("Register channel listener failed ret: %d.", ret); return Status::ERROR_INVALID_OPERATION; } - std::string peerSessName_ = ownerName_ + "_" + RECEIVER_DATA_SESSION_NAME_SUFFIX; + std::string peerSessName_ = ownerName_ + "_" + sessionNameMid_ + RECEIVER_DATA_SESSION_NAME_SUFFIX; ret = SoftbusChannelAdapter::GetInstance().OpenSoftbusChannel(sessionName_, peerSessName_, peerDevId_); if ((ret != DH_AVT_SUCCESS) && (ret != ERR_DH_AVT_SESSION_HAS_OPENED)) { AVTRANS_LOGE("Open softbus channel failed ret: %d.", ret); diff --git a/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output/dsoftbus_output_plugin.h b/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output/dsoftbus_output_plugin.h index 3ad6c4aa..a15230e1 100644 --- a/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output/dsoftbus_output_plugin.h +++ b/av_transport/av_trans_engine/plugin/plugins/av_trans_output/dsoftbus_output/dsoftbus_output_plugin.h @@ -78,6 +78,7 @@ private: private: std::string ownerName_; std::string sessionName_; + std::string sessionNameMid_; std::string peerDevId_; std::condition_variable dataCond_; std::mutex dataQueueMtx_; diff --git a/av_transport/interface/i_av_receiver_engine.h b/av_transport/interface/i_av_receiver_engine.h index 7ad79e35..b9322df3 100644 --- a/av_transport/interface/i_av_receiver_engine.h +++ b/av_transport/interface/i_av_receiver_engine.h @@ -24,6 +24,8 @@ #include "av_trans_types.h" #include "i_av_receiver_engine_callback.h" +#include "pipeline_core.h" + namespace OHOS { namespace DistributedHardware { /** @@ -97,6 +99,11 @@ public: * @return Returns DH_AVT_SUCCESS(0) if successful, otherwise returns other error code. */ virtual int32_t RegisterReceiverCallback(const std::shared_ptr &callback) = 0; + + virtual std::shared_ptr CreatePipeline(const std::string &pipelineName) = 0; + virtual int32_t PreparePipelineByName(const std::string &pipelineName) = 0; + virtual int32_t StartPipeline(const std::string &pipelineName) = 0; + virtual int32_t StopPipeline(const std::string &pipelineName) = 0; }; } // DistributedHardware } // OHOS diff --git a/av_transport/interface/i_av_sender_engine.h b/av_transport/interface/i_av_sender_engine.h index ac2067eb..ab305b1d 100644 --- a/av_transport/interface/i_av_sender_engine.h +++ b/av_transport/interface/i_av_sender_engine.h @@ -25,6 +25,8 @@ #include "av_trans_types.h" #include "i_av_sender_engine_callback.h" +#include "pipeline_core.h" + namespace OHOS { namespace DistributedHardware { /** @@ -105,6 +107,11 @@ public: * @return Returns DH_AVT_SUCCESS(0) if successful, otherwise returns other error code. */ virtual int32_t RegisterSenderCallback(const std::shared_ptr &callback) = 0; + + virtual std::shared_ptr CreatePipeline(const std::string &pipelineName) = 0; + virtual int32_t PreparePipelineByName(const std::string &pipelineName) = 0; + virtual int32_t StartPipeline(const std::string &pipelineName) = 0; + virtual int32_t StopPipeline(const std::string &pipelineName) = 0; }; } // DistributedHardware } // OHOS diff --git a/interfaces/inner_kits/BUILD.gn b/interfaces/inner_kits/BUILD.gn index a79b85d5..0108f0a1 100644 --- a/interfaces/inner_kits/BUILD.gn +++ b/interfaces/inner_kits/BUILD.gn @@ -52,12 +52,29 @@ ohos_shared_library("libdhfwk_sdk") { external_deps = [ "c_utils:utils", + "histreamer:histreamer_base", + "histreamer:histreamer_plugin_base", "ipc:ipc_core", "safwk:system_ability_fwk", "samgr:samgr_proxy", ] - cflags_cc = [ "-DHILOG_ENABLE" ] + cflags = [ + "-O2", + "-fPIC", + "-Wall", + "-frtti", + "-fexceptions", + "-Wno-unused-but-set-variable", + "-Wno-format", + ] + + cflags_cc = cflags + + remove_configs = [ + "//build/config/compiler:no_rtti", + "//build/config/compiler:no_exceptions", + ] subsystem_name = "distributedhardware" -- Gitee