• 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     InitAudioStreamManagerGa(serviceId);
72     return g_sProxy->InitializeGa(eClientType);
73 }
74 
CreateStream(AudioStreamParams audioParams,AudioStreamType audioType)75 int32_t AudioContainerBase::CreateStream(AudioStreamParams audioParams, AudioStreamType audioType)
76 {
77     return g_sProxy->CreateStreamGa(audioParams, audioType);
78 }
79 
GetSessionID(uint32_t & sessionID,const int32_t & trackId) const80 int32_t AudioContainerBase::GetSessionID(uint32_t &sessionID, const int32_t &trackId) const
81 {
82     return g_sProxy->GetSessionIDGa(sessionID, trackId);
83 }
84 
StartStream(const int32_t & trackId)85 int32_t AudioContainerBase::StartStream(const int32_t &trackId)
86 {
87     return g_sProxy->StartStreamGa(trackId);
88 }
89 
PauseStream(const int32_t & trackId)90 int32_t AudioContainerBase::PauseStream(const int32_t &trackId)
91 {
92     return g_sProxy->PauseStreamGa(trackId);
93 }
94 
StopStream(const int32_t & trackId)95 int32_t AudioContainerBase::StopStream(const int32_t &trackId)
96 {
97     return g_sProxy->StopStreamGa(trackId);
98 }
99 
FlushStream(const int32_t & trackId)100 int32_t AudioContainerBase::FlushStream(const int32_t &trackId)
101 {
102     return g_sProxy->FlushStreamGa(trackId);
103 }
104 
DrainStream(const int32_t & trackId)105 int32_t AudioContainerBase::DrainStream(const int32_t &trackId)
106 {
107     return g_sProxy->DrainStreamGa(trackId);
108 }
109 
SetAudioRenderMode(AudioRenderMode renderMode,const int32_t & trackId)110 int32_t AudioContainerBase::SetAudioRenderMode(AudioRenderMode renderMode, const int32_t &trackId)
111 {
112     return g_sProxy->SetAudioRenderModeGa(renderMode, trackId);
113 }
114 
GetAudioRenderMode()115 AudioRenderMode AudioContainerBase::GetAudioRenderMode()
116 {
117     return g_sProxy->GetAudioRenderModeGa();
118 }
119 
WriteStreamInCb(const StreamBuffer & stream,int32_t & pError,const int32_t & trackId)120 size_t AudioContainerBase::WriteStreamInCb(const StreamBuffer &stream, int32_t &pError, const int32_t &trackId)
121 {
122     return g_sProxy->WriteStreamInCbGa(stream, pError, trackId);
123 }
124 
WriteStream(const StreamBuffer & stream,int32_t & pError,const int32_t & trackId)125 size_t AudioContainerBase::WriteStream(const StreamBuffer &stream, int32_t &pError, const int32_t &trackId)
126 {
127     return g_sProxy->WriteStreamGa(stream, pError, trackId);
128 }
129 
ReadStream(StreamBuffer & stream,bool isBlocking,const int32_t & trackId)130 int32_t AudioContainerBase::ReadStream(StreamBuffer &stream, bool isBlocking, const int32_t &trackId)
131 {
132     return g_sProxy->ReadStreamGa(stream, isBlocking, trackId);
133 }
134 
ReleaseStream(const int32_t & trackId)135 int32_t AudioContainerBase::ReleaseStream(const int32_t &trackId)
136 {
137     return g_sProxy->ReleaseStreamGa(trackId);
138 }
139 
GetMinimumBufferSize(size_t & minBufferSize,const int32_t & trackId) const140 int32_t AudioContainerBase::GetMinimumBufferSize(size_t &minBufferSize, const int32_t &trackId) const
141 {
142     return g_sProxy->GetMinimumBufferSizeGa(minBufferSize, trackId);
143 }
144 
GetMinimumFrameCount(uint32_t & frameCount,const int32_t & trackId) const145 int32_t AudioContainerBase::GetMinimumFrameCount(uint32_t &frameCount, const int32_t &trackId) const
146 {
147     return g_sProxy->GetMinimumFrameCountGa(frameCount, trackId);
148 }
149 
GetAudioStreamParams(AudioStreamParams & audioParams,const int32_t & trackId)150 int32_t AudioContainerBase::GetAudioStreamParams(AudioStreamParams& audioParams, const int32_t &trackId)
151 {
152     return g_sProxy->GetAudioStreamParamsGa(audioParams, trackId);
153 }
154 
GetCurrentTimeStamp(uint64_t & timeStamp,const int32_t & trackId)155 int32_t AudioContainerBase::GetCurrentTimeStamp(uint64_t &timeStamp, const int32_t &trackId)
156 {
157     return g_sProxy->GetCurrentTimeStampGa(timeStamp, trackId);
158 }
159 
GetAudioLatency(uint64_t & latency,const int32_t & trackId) const160 int32_t AudioContainerBase::GetAudioLatency(uint64_t &latency, const int32_t &trackId) const
161 {
162     return g_sProxy->GetAudioLatencyGa(latency, trackId);
163 }
164 
SetStreamType(AudioStreamType audioStreamType,const int32_t & trackId)165 int32_t AudioContainerBase::SetStreamType(AudioStreamType audioStreamType, const int32_t &trackId)
166 {
167     return g_sProxy->SetStreamTypeGa(audioStreamType, trackId);
168 }
169 
SetStreamVolume(float volume,const int32_t & trackId)170 int32_t AudioContainerBase::SetStreamVolume(float volume, const int32_t &trackId)
171 {
172     return g_sProxy->SetStreamVolumeGa(volume, trackId);
173 }
174 
GetStreamVolume()175 float AudioContainerBase::GetStreamVolume()
176 {
177     return g_sProxy->GetStreamVolumeGa();
178 }
179 
SetStreamRenderRate(AudioRendererRate audioRendererRate,const int32_t & trackId)180 int32_t AudioContainerBase::SetStreamRenderRate(AudioRendererRate audioRendererRate, const int32_t &trackId)
181 {
182     return g_sProxy->SetStreamRenderRateGa(audioRendererRate, trackId);
183 }
184 
GetStreamRenderRate()185 AudioRendererRate AudioContainerBase::GetStreamRenderRate()
186 {
187     return g_sProxy->GetStreamRenderRateGa();
188 }
189 
SaveStreamCallback(const std::weak_ptr<AudioStreamCallback> & callback)190 void AudioContainerBase::SaveStreamCallback(const std::weak_ptr<AudioStreamCallback> &callback)
191 {
192     return g_sProxy->SaveStreamCallbackGa(callback);
193 }
194 
SetBufferSizeInMsec(int32_t bufferSizeInMsec)195 int32_t AudioContainerBase::SetBufferSizeInMsec(int32_t bufferSizeInMsec)
196 {
197     return g_sProxy->SetBufferSizeInMsecGa(bufferSizeInMsec);
198 }
199 
SetRendererPositionCallback(int64_t markPosition,const std::shared_ptr<RendererPositionCallback> & callback)200 void AudioContainerBase::SetRendererPositionCallback(int64_t markPosition,
201     const std::shared_ptr<RendererPositionCallback> &callback)
202 {
203     return g_sProxy->SetRendererPositionCallbackGa(markPosition, callback);
204 }
205 
UnsetRendererPositionCallback()206 void AudioContainerBase::UnsetRendererPositionCallback()
207 {
208     return g_sProxy->UnsetRendererPositionCallbackGa();
209 }
210 
SetRendererPeriodPositionCallback(int64_t periodPosition,const std::shared_ptr<RendererPeriodPositionCallback> & callback)211 void AudioContainerBase::SetRendererPeriodPositionCallback(int64_t periodPosition,
212     const std::shared_ptr<RendererPeriodPositionCallback> &callback)
213 {
214     return g_sProxy->SetRendererPeriodPositionCallbackGa(periodPosition, callback);
215 }
216 
UnsetRendererPeriodPositionCallback()217 void AudioContainerBase::UnsetRendererPeriodPositionCallback()
218 {
219     return g_sProxy->UnsetRendererPeriodPositionCallbackGa();
220 }
221 
SetCapturerPositionCallback(int64_t markPosition,const std::shared_ptr<CapturerPositionCallback> & callback)222 void AudioContainerBase::SetCapturerPositionCallback(int64_t markPosition,
223     const std::shared_ptr<CapturerPositionCallback> &callback)
224 {
225     return g_sProxy->SetCapturerPositionCallbackGa(markPosition, callback);
226 }
227 
UnsetCapturerPositionCallback()228 void AudioContainerBase::UnsetCapturerPositionCallback()
229 {
230     return g_sProxy->UnsetCapturerPositionCallbackGa();
231 }
232 
SetCapturerPeriodPositionCallback(int64_t periodPosition,const std::shared_ptr<CapturerPeriodPositionCallback> & callback)233 void AudioContainerBase::SetCapturerPeriodPositionCallback(int64_t periodPosition,
234     const std::shared_ptr<CapturerPeriodPositionCallback> &callback)
235 {
236     return g_sProxy->SetCapturerPeriodPositionCallbackGa(periodPosition, callback);
237 }
238 
UnsetCapturerPeriodPositionCallback()239 void AudioContainerBase::UnsetCapturerPeriodPositionCallback()
240 {
241     return g_sProxy->UnsetCapturerPeriodPositionCallbackGa();
242 }
243 
OnTimeOut()244 void AudioContainerBase::OnTimeOut()
245 {
246     AUDIO_ERR_LOG("Inside read timeout callback");
247 }
248 
SetAudioCaptureMode(AudioCaptureMode captureMode)249 int32_t AudioContainerBase::SetAudioCaptureMode(AudioCaptureMode captureMode)
250 {
251     return g_sProxy->SetAudioCaptureMode(captureMode);
252 }
253 
SaveReadCallback(const std::weak_ptr<AudioCapturerReadCallback> & callback)254 int32_t AudioContainerBase::SaveReadCallback(const std::weak_ptr<AudioCapturerReadCallback> &callback)
255 {
256     return g_sProxy->SaveReadCallback(callback);
257 }
258 
GetAudioCaptureMode()259 AudioCaptureMode AudioContainerBase::GetAudioCaptureMode()
260 {
261     return g_sProxy->GetAudioCaptureMode();
262 }
263 
SetAppCachePath(const std::string cachePath)264 void AudioContainerBase::SetAppCachePath(const std::string cachePath)
265 {
266     AUDIO_INFO_LOG("SetAppCachePath cachePath %{public}s", cachePath.c_str());
267 }
268 
SaveWriteCallback(const std::weak_ptr<AudioRendererWriteCallback> & callback,const int32_t & trackId)269 int32_t AudioContainerBase::SaveWriteCallback(const std::weak_ptr<AudioRendererWriteCallback> &callback,
270     const int32_t &trackId)
271 {
272     AUDIO_INFO_LOG("AudioContainerBase::SaveWriteCallback");
273     return g_sProxy->SaveWriteCallbackGa(callback, trackId);
274 }
275 } // namespace AudioStandard
276 } // namespace OHOS
277