1 /*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "av_sender_engine_transport.h"
17
18 #include "daudio_constants.h"
19 #include "daudio_errorcode.h"
20 #include "daudio_log.h"
21 #include "daudio_util.h"
22
23 #undef DH_LOG_TAG
24 #define DH_LOG_TAG "AVTransSenderTransport"
25
26 namespace OHOS {
27 namespace DistributedHardware {
InitEngine(IAVEngineProvider * providerPtr)28 int32_t AVTransSenderTransport::InitEngine(IAVEngineProvider *providerPtr)
29 {
30 DHLOGI("Init av sender engine.");
31 if (senderAdapter_ == nullptr) {
32 senderAdapter_ = std::make_shared<AVTransSenderAdapter>();
33 }
34 int32_t ret = senderAdapter_->Initialize(providerPtr, devId_);
35 if (ret != DH_SUCCESS) {
36 DHLOGE("Init av adapter failed.");
37 return ret;
38 }
39 ret = senderAdapter_->RegisterAdapterCallback(shared_from_this());
40 if (ret != DH_SUCCESS) {
41 DHLOGE("Register callback failed.");
42 }
43 return ret;
44 }
45
SetUp(const AudioParam & localParam,const AudioParam & remoteParam,const std::shared_ptr<IAudioDataTransCallback> & callback,const PortCapType capType)46 int32_t AVTransSenderTransport::SetUp(const AudioParam &localParam, const AudioParam &remoteParam,
47 const std::shared_ptr<IAudioDataTransCallback> &callback, const PortCapType capType)
48 {
49 (void)remoteParam;
50 (void)callback;
51 (void)capType;
52 return SetParameter(localParam);
53 }
54
Start()55 int32_t AVTransSenderTransport::Start()
56 {
57 DHLOGI("Start av sender engine.");
58 CHECK_NULL_RETURN(senderAdapter_, ERR_DH_AUDIO_NULLPTR);
59 return senderAdapter_->Start();
60 }
61
CreateCtrl()62 int32_t AVTransSenderTransport::CreateCtrl()
63 {
64 DHLOGI("Create control channel.");
65 CHECK_NULL_RETURN(senderAdapter_, ERR_DH_AUDIO_NULLPTR);
66 return senderAdapter_->CreateControlChannel(devId_);
67 }
68
Stop()69 int32_t AVTransSenderTransport::Stop()
70 {
71 DHLOGI("Stop av sender engine.");
72 CHECK_NULL_RETURN(senderAdapter_, ERR_DH_AUDIO_NULLPTR);
73 return senderAdapter_->Stop();
74 }
75
Pause()76 int32_t AVTransSenderTransport::Pause()
77 {
78 DHLOGI("Pause av sender engine.");
79 CHECK_NULL_RETURN(senderAdapter_, ERR_DH_AUDIO_NULLPTR);
80 return senderAdapter_->SetParameter(AVTransTag::ENGINE_PAUSE, "");
81 }
82
Restart(const AudioParam & localParam,const AudioParam & remoteParam)83 int32_t AVTransSenderTransport::Restart(const AudioParam &localParam, const AudioParam &remoteParam)
84 {
85 DHLOGI("Restart av sender engine.");
86 (void)localParam;
87 (void)remoteParam;
88 CHECK_NULL_RETURN(senderAdapter_, ERR_DH_AUDIO_NULLPTR);
89 return senderAdapter_->SetParameter(AVTransTag::ENGINE_RESUME, "");
90 }
91
Release()92 int32_t AVTransSenderTransport::Release()
93 {
94 DHLOGI("Relase av sender engine.");
95 CHECK_NULL_RETURN(senderAdapter_, ERR_DH_AUDIO_NULLPTR);
96 return senderAdapter_->Release();
97 }
98
FeedAudioData(std::shared_ptr<AudioData> & audioData)99 int32_t AVTransSenderTransport::FeedAudioData(std::shared_ptr<AudioData> &audioData)
100 {
101 CHECK_NULL_RETURN(senderAdapter_, ERR_DH_AUDIO_NULLPTR);
102 return senderAdapter_->PushData(audioData);
103 }
104
SendMessage(uint32_t type,std::string content,std::string dstDevId)105 int32_t AVTransSenderTransport::SendMessage(uint32_t type, std::string content, std::string dstDevId)
106 {
107 DHLOGI("Send message, msg type: %{public}u, msg content: %{public}s.", type, content.c_str());
108 CHECK_NULL_RETURN(senderAdapter_, ERR_DH_AUDIO_NULLPTR);
109 auto message = std::make_shared<AVTransMessage>(type, content, dstDevId);
110 return senderAdapter_->SendMessageToRemote(message);
111 }
112
OnEngineEvent(const AVTransEvent & event)113 void AVTransSenderTransport::OnEngineEvent(const AVTransEvent &event)
114 {
115 CHECK_NULL_VOID(transCallback_);
116 transCallback_->OnEngineTransEvent(event);
117 }
118
OnEngineMessage(const std::shared_ptr<AVTransMessage> & message)119 void AVTransSenderTransport::OnEngineMessage(const std::shared_ptr<AVTransMessage> &message)
120 {
121 CHECK_NULL_VOID(message);
122 CHECK_NULL_VOID(transCallback_);
123 transCallback_->OnEngineTransMessage(message);
124 }
125
SetParameter(const AudioParam & audioParam)126 int32_t AVTransSenderTransport::SetParameter(const AudioParam &audioParam)
127 {
128 DHLOGI("Set audio parameter.");
129 CHECK_NULL_RETURN(senderAdapter_, ERR_DH_AUDIO_NULLPTR);
130 senderAdapter_->SetParameter(AVTransTag::AUDIO_SAMPLE_RATE, std::to_string(audioParam.comParam.sampleRate));
131 senderAdapter_->SetParameter(AVTransTag::AUDIO_SAMPLE_FORMAT, std::to_string(audioParam.comParam.bitFormat));
132 senderAdapter_->SetParameter(AVTransTag::AUDIO_CHANNEL_MASK, std::to_string(audioParam.comParam.channelMask));
133 senderAdapter_->SetParameter(AVTransTag::AUDIO_CHANNEL_LAYOUT, std::to_string(audioParam.comParam.channelMask));
134 senderAdapter_->SetParameter(AVTransTag::AUDIO_BIT_RATE, std::to_string(AUDIO_SET_HISTREAMER_BIT_RATE));
135 senderAdapter_->SetParameter(AVTransTag::AUDIO_FRAME_SIZE, std::to_string(audioParam.comParam.frameSize));
136 senderAdapter_->SetParameter(AVTransTag::AUDIO_CODEC_TYPE, std::to_string(audioParam.comParam.codecType));
137 senderAdapter_->SetParameter(AVTransTag::ENGINE_READY, OWNER_NAME_D_SPEAKER);
138 return DH_SUCCESS;
139 }
140 } // namespace DistributedHardware
141 } // namespace OHOS