• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 "audio_container_base.h"
17 #include "audio_stream_death_recipient.h"
18 #include "audio_log.h"
19 #include "unistd.h"
20 #include "securec.h"
21 #include "system_ability_definition.h"
22 
23 using namespace std;
24 
25 namespace OHOS {
26 namespace AudioStandard {
27 
28 static bool g_isConnected = false;
29 static sptr<IAudioContainerService> g_sProxy = nullptr;
30 
InitAudioStreamManagerGa(int serviceId)31 void AudioContainerBase::InitAudioStreamManagerGa(int serviceId)
32 {
33     AUDIO_ERR_LOG("AudioContainerBase::InitAudioStreamManagerGa serviceId %d", serviceId);
34     auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
35     CHECK_AND_RETURN_LOG(samgr != nullptr, "AudioContainerBase::init failed");
36 
37     sptr<IRemoteObject> object = samgr->GetSystemAbility(serviceId);
38     CHECK_AND_RETURN_LOG(object != nullptr, "AudioContainerBase::object is NULL");
39 
40     g_sProxy = iface_cast<IAudioContainerService>(object);
41     CHECK_AND_RETURN_LOG(g_sProxy != nullptr, "AudioContainerBase::init g_sProxy is NULL");
42     g_isConnected = true;
43     RegisterAudioStreamDeathRecipient(object);
44     AUDIO_INFO_LOG("AudioContainerBase::init g_sProxy is assigned.");
45 }
46 
RegisterAudioStreamDeathRecipient(sptr<IRemoteObject> & object)47 void AudioContainerBase::RegisterAudioStreamDeathRecipient(sptr<IRemoteObject> &object)
48 {
49     AUDIO_INFO_LOG("AudioContainerBase Register audio renderer death recipient");
50     pid_t pid = 0;
51     sptr<AudioStreamDeathRecipient> recipient = new(std::nothrow) AudioStreamDeathRecipient(pid);
52     if (recipient != nullptr) {
53         recipient->SetServerDiedCallback([](auto &&PH1) {
54             AudioStreamDeathRecipient(std::forward<decltype(PH1)>(PH1));
55         });
56         bool result = object->AddDeathRecipient(recipient);
57         if (!result) {
58             AUDIO_ERR_LOG("AudioContainerBase failed to add recipient");
59         }
60     }
61 }
62 
AudioStreamDied(pid_t pid)63 void AudioContainerBase::AudioStreamDied(pid_t pid)
64 {
65     AUDIO_INFO_LOG("AudioContainerBase, Audio renderer died, reestablish connection");
66     g_isConnected = false;
67 }
68 
Initialize(ASClientType eClientType,int serviceId)69 int32_t AudioContainerBase::Initialize(ASClientType eClientType, int serviceId)
70 {
71     if (g_sProxy == nullptr) {
72         InitAudioStreamManagerGa(serviceId);
73     }
74 
75     return g_sProxy->InitializeGa(eClientType);
76 }
77 
CreateStream(AudioStreamParams audioParams,AudioStreamType audioType)78 int32_t AudioContainerBase::CreateStream(AudioStreamParams audioParams, AudioStreamType audioType)
79 {
80     return g_sProxy->CreateStreamGa(audioParams, audioType);
81 }
82 
GetSessionID(uint32_t & sessionID,const int32_t & trackId) const83 int32_t AudioContainerBase::GetSessionID(uint32_t &sessionID, const int32_t &trackId) const
84 {
85     return g_sProxy->GetSessionIDGa(sessionID, trackId);
86 }
87 
StartStream(const int32_t & trackId)88 int32_t AudioContainerBase::StartStream(const int32_t &trackId)
89 {
90     return g_sProxy->StartStreamGa(trackId);
91 }
92 
PauseStream(const int32_t & trackId)93 int32_t AudioContainerBase::PauseStream(const int32_t &trackId)
94 {
95     return g_sProxy->PauseStreamGa(trackId);
96 }
97 
StopStream(const int32_t & trackId)98 int32_t AudioContainerBase::StopStream(const int32_t &trackId)
99 {
100     return g_sProxy->StopStreamGa(trackId);
101 }
102 
FlushStream(const int32_t & trackId)103 int32_t AudioContainerBase::FlushStream(const int32_t &trackId)
104 {
105     return g_sProxy->FlushStreamGa(trackId);
106 }
107 
DrainStream(const int32_t & trackId)108 int32_t AudioContainerBase::DrainStream(const int32_t &trackId)
109 {
110     return g_sProxy->DrainStreamGa(trackId);
111 }
112 
SetAudioRenderMode(AudioRenderMode renderMode,const int32_t & trackId)113 int32_t AudioContainerBase::SetAudioRenderMode(AudioRenderMode renderMode, const int32_t &trackId)
114 {
115     return g_sProxy->SetAudioRenderModeGa(renderMode, trackId);
116 }
117 
GetAudioRenderMode()118 AudioRenderMode AudioContainerBase::GetAudioRenderMode()
119 {
120     return g_sProxy->GetAudioRenderModeGa();
121 }
122 
SetStreamVolume(uint32_t sessionID,uint32_t volume)123 int32_t AudioContainerBase::SetStreamVolume(uint32_t sessionID, uint32_t volume)
124 {
125     return g_sProxy->SetStreamVolumeGa(sessionID, volume);
126 }
127 
WriteStreamInCb(const StreamBuffer & stream,int32_t & pError,const int32_t & trackId)128 size_t AudioContainerBase::WriteStreamInCb(const StreamBuffer &stream, int32_t &pError, const int32_t &trackId)
129 {
130     return g_sProxy->WriteStreamInCbGa(stream, pError, trackId);
131 }
132 
WriteStream(const StreamBuffer & stream,int32_t & pError,const int32_t & trackId)133 size_t AudioContainerBase::WriteStream(const StreamBuffer &stream, int32_t &pError, const int32_t &trackId)
134 {
135     return g_sProxy->WriteStreamGa(stream, pError, trackId);
136 }
137 
ReadStream(StreamBuffer & stream,bool isBlocking,const int32_t & trackId)138 int32_t AudioContainerBase::ReadStream(StreamBuffer &stream, bool isBlocking, const int32_t &trackId)
139 {
140     return g_sProxy->ReadStreamGa(stream, isBlocking, trackId);
141 }
142 
ReleaseStream(const int32_t & trackId)143 int32_t AudioContainerBase::ReleaseStream(const int32_t &trackId)
144 {
145     return g_sProxy->ReleaseStreamGa(trackId);
146 }
147 
GetMinimumBufferSize(size_t & minBufferSize,const int32_t & trackId) const148 int32_t AudioContainerBase::GetMinimumBufferSize(size_t &minBufferSize, const int32_t &trackId) const
149 {
150     return g_sProxy->GetMinimumBufferSizeGa(minBufferSize, trackId);
151 }
152 
GetMinimumFrameCount(uint32_t & frameCount,const int32_t & trackId) const153 int32_t AudioContainerBase::GetMinimumFrameCount(uint32_t &frameCount, const int32_t &trackId) const
154 {
155     return g_sProxy->GetMinimumFrameCountGa(frameCount, trackId);
156 }
157 
GetAudioStreamParams(AudioStreamParams & audioParams,const int32_t & trackId)158 int32_t AudioContainerBase::GetAudioStreamParams(AudioStreamParams& audioParams, const int32_t &trackId)
159 {
160     return g_sProxy->GetAudioStreamParamsGa(audioParams, trackId);
161 }
162 
GetStreamVolume(uint32_t sessionID)163 uint32_t AudioContainerBase::GetStreamVolume(uint32_t sessionID)
164 {
165     return g_sProxy->GetStreamVolumeGa();
166 }
167 
GetCurrentTimeStamp(uint64_t & timeStamp,const int32_t & trackId)168 int32_t AudioContainerBase::GetCurrentTimeStamp(uint64_t &timeStamp, const int32_t &trackId)
169 {
170     return g_sProxy->GetCurrentTimeStampGa(timeStamp, trackId);
171 }
172 
GetAudioLatency(uint64_t & latency,const int32_t & trackId) const173 int32_t AudioContainerBase::GetAudioLatency(uint64_t &latency, const int32_t &trackId) const
174 {
175     return g_sProxy->GetAudioLatencyGa(latency, trackId);
176 }
177 
SetStreamType(AudioStreamType audioStreamType,const int32_t & trackId)178 int32_t AudioContainerBase::SetStreamType(AudioStreamType audioStreamType, const int32_t &trackId)
179 {
180     return g_sProxy->SetStreamTypeGa(audioStreamType, trackId);
181 }
182 
SetStreamVolume(float volume,const int32_t & trackId)183 int32_t AudioContainerBase::SetStreamVolume(float volume, const int32_t &trackId)
184 {
185     return g_sProxy->SetStreamVolumeGa(volume, trackId);
186 }
187 
GetStreamVolume()188 float AudioContainerBase::GetStreamVolume()
189 {
190     return g_sProxy->GetStreamVolumeGa();
191 }
192 
SetStreamRenderRate(AudioRendererRate audioRendererRate,const int32_t & trackId)193 int32_t AudioContainerBase::SetStreamRenderRate(AudioRendererRate audioRendererRate, const int32_t &trackId)
194 {
195     return g_sProxy->SetStreamRenderRateGa(audioRendererRate, trackId);
196 }
197 
GetStreamRenderRate()198 AudioRendererRate AudioContainerBase::GetStreamRenderRate()
199 {
200     return g_sProxy->GetStreamRenderRateGa();
201 }
202 
SaveStreamCallback(const std::weak_ptr<AudioStreamCallback> & callback)203 void AudioContainerBase::SaveStreamCallback(const std::weak_ptr<AudioStreamCallback> &callback)
204 {
205     return g_sProxy->SaveStreamCallbackGa(callback);
206 }
207 
SetBufferSizeInMsec(int32_t bufferSizeInMsec)208 int32_t AudioContainerBase::SetBufferSizeInMsec(int32_t bufferSizeInMsec)
209 {
210     return g_sProxy->SetBufferSizeInMsecGa(bufferSizeInMsec);
211 }
212 
SetRendererPositionCallback(int64_t markPosition,const std::shared_ptr<RendererPositionCallback> & callback)213 void AudioContainerBase::SetRendererPositionCallback(int64_t markPosition,
214     const std::shared_ptr<RendererPositionCallback> &callback)
215 {
216     return g_sProxy->SetRendererPositionCallbackGa(markPosition, callback);
217 }
218 
UnsetRendererPositionCallback()219 void AudioContainerBase::UnsetRendererPositionCallback()
220 {
221     return g_sProxy->UnsetRendererPositionCallbackGa();
222 }
223 
SetRendererPeriodPositionCallback(int64_t periodPosition,const std::shared_ptr<RendererPeriodPositionCallback> & callback)224 void AudioContainerBase::SetRendererPeriodPositionCallback(int64_t periodPosition,
225     const std::shared_ptr<RendererPeriodPositionCallback> &callback)
226 {
227     return g_sProxy->SetRendererPeriodPositionCallbackGa(periodPosition, callback);
228 }
229 
UnsetRendererPeriodPositionCallback()230 void AudioContainerBase::UnsetRendererPeriodPositionCallback()
231 {
232     return g_sProxy->UnsetRendererPeriodPositionCallbackGa();
233 }
234 
SetCapturerPositionCallback(int64_t markPosition,const std::shared_ptr<CapturerPositionCallback> & callback)235 void AudioContainerBase::SetCapturerPositionCallback(int64_t markPosition,
236     const std::shared_ptr<CapturerPositionCallback> &callback)
237 {
238     return g_sProxy->SetCapturerPositionCallbackGa(markPosition, callback);
239 }
240 
UnsetCapturerPositionCallback()241 void AudioContainerBase::UnsetCapturerPositionCallback()
242 {
243     return g_sProxy->UnsetCapturerPositionCallbackGa();
244 }
245 
SetCapturerPeriodPositionCallback(int64_t periodPosition,const std::shared_ptr<CapturerPeriodPositionCallback> & callback)246 void AudioContainerBase::SetCapturerPeriodPositionCallback(int64_t periodPosition,
247     const std::shared_ptr<CapturerPeriodPositionCallback> &callback)
248 {
249     return g_sProxy->SetCapturerPeriodPositionCallbackGa(periodPosition, callback);
250 }
251 
UnsetCapturerPeriodPositionCallback()252 void AudioContainerBase::UnsetCapturerPeriodPositionCallback()
253 {
254     return g_sProxy->UnsetCapturerPeriodPositionCallbackGa();
255 }
256 
OnTimeOut()257 void AudioContainerBase::OnTimeOut()
258 {
259     AUDIO_ERR_LOG("Inside read timeout callback");
260 }
261 
SetAudioCaptureMode(AudioCaptureMode captureMode)262 int32_t AudioContainerBase::SetAudioCaptureMode(AudioCaptureMode captureMode)
263 {
264     return g_sProxy->SetAudioCaptureMode(captureMode);
265 }
266 
SaveReadCallback(const std::weak_ptr<AudioCapturerReadCallback> & callback)267 int32_t AudioContainerBase::SaveReadCallback(const std::weak_ptr<AudioCapturerReadCallback> &callback)
268 {
269     return g_sProxy->SaveReadCallback(callback);
270 }
271 
GetAudioCaptureMode()272 AudioCaptureMode AudioContainerBase::GetAudioCaptureMode()
273 {
274     return g_sProxy->GetAudioCaptureMode();
275 }
276 
SetAppCachePath(const std::string cachePath)277 void AudioContainerBase::SetAppCachePath(const std::string cachePath)
278 {
279     AUDIO_INFO_LOG("SetAppCachePath cachePath %{public}s", cachePath.c_str());
280 }
281 
SaveWriteCallback(const std::weak_ptr<AudioRendererWriteCallback> & callback,const int32_t & trackId)282 int32_t AudioContainerBase::SaveWriteCallback(const std::weak_ptr<AudioRendererWriteCallback> &callback,
283     const int32_t &trackId)
284 {
285     AUDIO_INFO_LOG("AudioContainerBase::SaveWriteCallback");
286     return g_sProxy->SaveWriteCallbackGa(callback, trackId);
287 }
288 } // namespace AudioStandard
289 } // namespace OHOS
290