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