• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "OHAudioRenderer.h"
16 #include "audio_errors.h"
17 
18 using OHOS::AudioStandard::Timestamp;
19 
20 const int64_t SECOND_TO_NANOSECOND = 1000000000;
21 
convertRenderer(OH_AudioRenderer * renderer)22 static OHOS::AudioStandard::OHAudioRenderer *convertRenderer(OH_AudioRenderer* renderer)
23 {
24     return (OHOS::AudioStandard::OHAudioRenderer*) renderer;
25 }
26 
OH_AudioRenderer_Start(OH_AudioRenderer * renderer)27 OH_AudioStream_Result OH_AudioRenderer_Start(OH_AudioRenderer* renderer)
28 {
29     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
30     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
31     if (audioRenderer->Start()) {
32         return AUDIOSTREAM_SUCCESS;
33     } else {
34         return AUDIOSTREAM_ERROR_ILLEGAL_STATE;
35     }
36 }
37 
OH_AudioRenderer_Pause(OH_AudioRenderer * renderer)38 OH_AudioStream_Result OH_AudioRenderer_Pause(OH_AudioRenderer* renderer)
39 {
40     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
41     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
42 
43     if (audioRenderer->Pause()) {
44         return AUDIOSTREAM_SUCCESS;
45     } else {
46         return AUDIOSTREAM_ERROR_ILLEGAL_STATE;
47     }
48 }
49 
OH_AudioRenderer_Stop(OH_AudioRenderer * renderer)50 OH_AudioStream_Result OH_AudioRenderer_Stop(OH_AudioRenderer* renderer)
51 {
52     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
53     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
54 
55     if (audioRenderer->Stop()) {
56         return AUDIOSTREAM_SUCCESS;
57     } else {
58         return AUDIOSTREAM_ERROR_ILLEGAL_STATE;
59     }
60 }
61 
OH_AudioRenderer_Flush(OH_AudioRenderer * renderer)62 OH_AudioStream_Result OH_AudioRenderer_Flush(OH_AudioRenderer* renderer)
63 {
64     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
65     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
66 
67     if (audioRenderer->Flush()) {
68         return AUDIOSTREAM_SUCCESS;
69     } else {
70         return AUDIOSTREAM_ERROR_ILLEGAL_STATE;
71     }
72 }
73 
OH_AudioRenderer_Release(OH_AudioRenderer * renderer)74 OH_AudioStream_Result OH_AudioRenderer_Release(OH_AudioRenderer* renderer)
75 {
76     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
77     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
78 
79     if (audioRenderer->Release()) {
80         return AUDIOSTREAM_SUCCESS;
81     } else {
82         return AUDIOSTREAM_ERROR_ILLEGAL_STATE;
83     }
84 }
85 
OH_AudioRenderer_GetCurrentState(OH_AudioRenderer * renderer,OH_AudioStream_State * state)86 OH_AudioStream_Result OH_AudioRenderer_GetCurrentState(OH_AudioRenderer* renderer, OH_AudioStream_State* state)
87 {
88     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
89     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
90 
91     OHOS::AudioStandard::RendererState rendererState = audioRenderer->GetCurrentState();
92     *state = (OH_AudioStream_State)rendererState;
93     return AUDIOSTREAM_SUCCESS;
94 }
95 
OH_AudioRenderer_GetSamplingRate(OH_AudioRenderer * renderer,int32_t * rate)96 OH_AudioStream_Result OH_AudioRenderer_GetSamplingRate(OH_AudioRenderer* renderer, int32_t* rate)
97 {
98     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
99     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
100 
101     *rate = audioRenderer->GetSamplingRate();
102     return AUDIOSTREAM_SUCCESS;
103 }
104 
OH_AudioRenderer_GetStreamId(OH_AudioRenderer * renderer,uint32_t * streamId)105 OH_AudioStream_Result OH_AudioRenderer_GetStreamId(OH_AudioRenderer* renderer, uint32_t* streamId)
106 {
107     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
108     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
109     audioRenderer->GetStreamId(*streamId);
110     return AUDIOSTREAM_SUCCESS;
111 }
112 
OH_AudioRenderer_GetChannelCount(OH_AudioRenderer * renderer,int32_t * channelCount)113 OH_AudioStream_Result OH_AudioRenderer_GetChannelCount(OH_AudioRenderer* renderer, int32_t* channelCount)
114 {
115     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
116     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
117     *channelCount = audioRenderer->GetChannelCount();
118     return AUDIOSTREAM_SUCCESS;
119 }
120 
OH_AudioRenderer_GetSampleFormat(OH_AudioRenderer * renderer,OH_AudioStream_SampleFormat * sampleFormat)121 OH_AudioStream_Result OH_AudioRenderer_GetSampleFormat(OH_AudioRenderer* renderer,
122     OH_AudioStream_SampleFormat* sampleFormat)
123 {
124     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
125     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
126     *sampleFormat = (OH_AudioStream_SampleFormat)audioRenderer->GetSampleFormat();
127     return AUDIOSTREAM_SUCCESS;
128 }
129 
OH_AudioRenderer_GetLatencyMode(OH_AudioRenderer * renderer,OH_AudioStream_LatencyMode * latencyMode)130 OH_AudioStream_Result OH_AudioRenderer_GetLatencyMode(OH_AudioRenderer* renderer,
131     OH_AudioStream_LatencyMode* latencyMode)
132 {
133     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
134     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
135     OHOS::AudioStandard::AudioRendererInfo rendererInfo;
136     audioRenderer->GetRendererInfo(rendererInfo);
137     *latencyMode = (OH_AudioStream_LatencyMode)rendererInfo.rendererFlags;
138 
139     return AUDIOSTREAM_SUCCESS;
140 }
141 
OH_AudioRenderer_GetRendererInfo(OH_AudioRenderer * renderer,OH_AudioStream_Usage * usage)142 OH_AudioStream_Result OH_AudioRenderer_GetRendererInfo(OH_AudioRenderer* renderer,
143     OH_AudioStream_Usage* usage)
144 {
145     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
146     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
147 
148     OHOS::AudioStandard::AudioRendererInfo rendererInfo;
149     audioRenderer->GetRendererInfo(rendererInfo);
150     *usage = (OH_AudioStream_Usage)rendererInfo.streamUsage;
151     return AUDIOSTREAM_SUCCESS;
152 }
153 
OH_AudioRenderer_GetEncodingType(OH_AudioRenderer * renderer,OH_AudioStream_EncodingType * encodingType)154 OH_AudioStream_Result OH_AudioRenderer_GetEncodingType(OH_AudioRenderer* renderer,
155     OH_AudioStream_EncodingType* encodingType)
156 {
157     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
158     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
159     *encodingType = (OH_AudioStream_EncodingType)audioRenderer->GetEncodingType();
160     return AUDIOSTREAM_SUCCESS;
161 }
162 
OH_AudioRenderer_GetFramesWritten(OH_AudioRenderer * renderer,int64_t * frames)163 OH_AudioStream_Result OH_AudioRenderer_GetFramesWritten(OH_AudioRenderer* renderer, int64_t* frames)
164 {
165     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
166     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
167     *frames = audioRenderer->GetFramesWritten();
168     return AUDIOSTREAM_SUCCESS;
169 }
170 
OH_AudioRenderer_GetTimestamp(OH_AudioRenderer * renderer,clockid_t clockId,int64_t * framePosition,int64_t * timestamp)171 OH_AudioStream_Result OH_AudioRenderer_GetTimestamp(OH_AudioRenderer* renderer,
172     clockid_t clockId, int64_t* framePosition, int64_t* timestamp)
173 {
174     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
175     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
176     Timestamp stamp;
177     Timestamp::Timestampbase base = Timestamp::Timestampbase::MONOTONIC;
178     audioRenderer->GetAudioTime(stamp, base);
179     *framePosition = stamp.framePosition;
180     *timestamp = stamp.time.tv_sec * SECOND_TO_NANOSECOND + stamp.time.tv_nsec;
181     return AUDIOSTREAM_SUCCESS;
182 }
183 
OH_AudioRenderer_GetFrameSizeInCallback(OH_AudioRenderer * renderer,int32_t * frameSize)184 OH_AudioStream_Result OH_AudioRenderer_GetFrameSizeInCallback(OH_AudioRenderer* renderer, int32_t* frameSize)
185 {
186     OHOS::AudioStandard::OHAudioRenderer *audioRenderer = convertRenderer(renderer);
187     CHECK_AND_RETURN_RET_LOG(audioRenderer != nullptr, AUDIOSTREAM_ERROR_INVALID_PARAM, "convert renderer failed");
188     *frameSize = audioRenderer->GetFrameSizeInCallback();
189     return AUDIOSTREAM_SUCCESS;
190 }
191 
192 namespace OHOS {
193 namespace AudioStandard {
OHAudioRenderer()194 OHAudioRenderer::OHAudioRenderer()
195 {
196     AUDIO_INFO_LOG("OHAudioRenderer created!");
197 }
198 
~OHAudioRenderer()199 OHAudioRenderer::~OHAudioRenderer()
200 {
201     AUDIO_INFO_LOG("OHAudioRenderer destroyed!");
202 }
203 
Initialize(const AudioRendererOptions & rendererOptions)204 bool OHAudioRenderer::Initialize(const AudioRendererOptions &rendererOptions)
205 {
206     std::string cacheDir = "/data/storage/el2/base/temp";
207     audioRenderer_ = AudioRenderer::Create(cacheDir, rendererOptions);
208     return audioRenderer_ != nullptr;
209 }
210 
Start()211 bool OHAudioRenderer::Start()
212 {
213     CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, ERROR, "renderer client is nullptr");
214     return audioRenderer_->Start();
215 }
216 
Pause()217 bool OHAudioRenderer::Pause()
218 {
219     CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, ERROR, "renderer client is nullptr");
220     return audioRenderer_->Pause();
221 }
222 
Stop()223 bool OHAudioRenderer::Stop()
224 {
225     CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, ERROR, "renderer client is nullptr");
226     return audioRenderer_->Stop();
227 }
228 
Flush()229 bool OHAudioRenderer::Flush()
230 {
231     CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, ERROR, "renderer client is nullptr");
232     return audioRenderer_->Flush();
233 }
234 
Release()235 bool OHAudioRenderer::Release()
236 {
237     CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, ERROR, "renderer client is nullptr");
238     return audioRenderer_->Release();
239 }
240 
GetCurrentState()241 RendererState OHAudioRenderer::GetCurrentState()
242 {
243     CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, RENDERER_INVALID, "renderer client is nullptr");
244     return audioRenderer_->GetStatus();
245 }
246 
GetStreamId(uint32_t & streamId)247 void OHAudioRenderer::GetStreamId(uint32_t &streamId)
248 {
249     CHECK_AND_RETURN_LOG(audioRenderer_ != nullptr, "renderer client is nullptr");
250     audioRenderer_->GetAudioStreamId(streamId);
251 }
252 
GetChannelCount()253 AudioChannel OHAudioRenderer::GetChannelCount()
254 {
255     CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, MONO, "renderer client is nullptr");
256     AudioRendererParams params;
257     audioRenderer_->GetParams(params);
258     return params.channelCount;
259 }
260 
GetSamplingRate()261 int32_t OHAudioRenderer::GetSamplingRate()
262 {
263     CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, MONO, "renderer client is nullptr");
264     AudioRendererParams params;
265     audioRenderer_->GetParams(params);
266     return params.sampleRate;
267 }
268 
GetSampleFormat()269 AudioSampleFormat OHAudioRenderer::GetSampleFormat()
270 {
271     CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, INVALID_WIDTH, "renderer client is nullptr");
272     AudioRendererParams params;
273     audioRenderer_->GetParams(params);
274     return params.sampleFormat;
275 }
276 
GetRendererInfo(AudioRendererInfo & rendererInfo)277 void OHAudioRenderer::GetRendererInfo(AudioRendererInfo& rendererInfo)
278 {
279     CHECK_AND_RETURN_LOG(audioRenderer_ != nullptr, "renderer client is nullptr");
280     audioRenderer_->GetRendererInfo(rendererInfo);
281 }
282 
GetEncodingType()283 AudioEncodingType OHAudioRenderer::GetEncodingType()
284 {
285     CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, ENCODING_INVALID, "renderer client is nullptr");
286     AudioRendererParams params;
287     audioRenderer_->GetParams(params);
288     return params.encodingType;
289 }
290 
GetFramesWritten()291 int64_t OHAudioRenderer::GetFramesWritten()
292 {
293     CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, ERROR, "renderer client is nullptr");
294     return audioRenderer_->GetFramesWritten();
295 }
296 
GetAudioTime(Timestamp & timestamp,Timestamp::Timestampbase base)297 void OHAudioRenderer::GetAudioTime(Timestamp &timestamp, Timestamp::Timestampbase base)
298 {
299     CHECK_AND_RETURN_LOG(audioRenderer_ != nullptr, "renderer client is nullptr");
300     audioRenderer_->GetAudioTime(timestamp, base);
301 }
302 
GetFrameSizeInCallback()303 int32_t OHAudioRenderer::GetFrameSizeInCallback()
304 {
305     CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, ERROR, "renderer client is nullptr");
306     uint32_t frameSize;
307     audioRenderer_->GetFrameCount(frameSize);
308     return static_cast<int32_t>(frameSize);
309 }
310 
GetBufferDesc(BufferDesc & bufDesc) const311 int32_t OHAudioRenderer::GetBufferDesc(BufferDesc &bufDesc) const
312 {
313     CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, ERROR, "renderer client is nullptr");
314     return audioRenderer_->GetBufferDesc(bufDesc);
315 }
316 
Enqueue(const BufferDesc & bufDesc) const317 int32_t OHAudioRenderer::Enqueue(const BufferDesc &bufDesc) const
318 {
319     CHECK_AND_RETURN_RET_LOG(audioRenderer_ != nullptr, ERROR, "renderer client is nullptr");
320     return audioRenderer_->Enqueue(bufDesc);
321 }
322 
SetRendererCallback(OH_AudioRenderer_Callbacks callbacks,void * userData)323 void OHAudioRenderer::SetRendererCallback(OH_AudioRenderer_Callbacks callbacks, void* userData)
324 {
325     CHECK_AND_RETURN_LOG(audioRenderer_ != nullptr, "renderer client is nullptr");
326     audioRenderer_->SetRenderMode(RENDER_MODE_CALLBACK);
327 
328     if (callbacks.OH_AudioRenderer_OnWriteData != nullptr) {
329         std::shared_ptr<AudioRendererWriteCallback> callback = std::make_shared<OHAudioRendererModeCallback>(callbacks,
330                 (OH_AudioRenderer*)this, userData);
331         audioRenderer_->SetRendererWriteCallback(callback);
332     } else {
333         AUDIO_ERR_LOG("write callback is nullptr");
334     }
335 
336     if (callbacks.OH_AudioRenderer_OnStreamEvent != nullptr) {
337         std::shared_ptr<AudioRendererDeviceChangeCallback> callback =
338             std::make_shared<OHAudioRendererDeviceChangeCallback>(callbacks, (OH_AudioRenderer*)this, userData);
339         int32_t clientPid = getpid();
340         audioRenderer_->RegisterAudioRendererEventListener(clientPid, callback);
341     } else {
342         AUDIO_ERR_LOG("stream event callback is nullptr");
343     }
344 
345     if (callbacks.OH_AudioRenderer_OnInterruptEvent != nullptr) {
346         std::shared_ptr<AudioRendererCallback> callback =
347             std::make_shared<OHAudioRendererCallback>(callbacks, (OH_AudioRenderer*)this, userData);
348         audioRenderer_->SetRendererCallback(callback);
349     } else {
350         AUDIO_ERR_LOG("audio renderer callback is nullptr");
351     }
352 
353     if (callbacks.OH_AudioRenderer_OnError != nullptr) {
354         std::shared_ptr<AudioRendererPolicyServiceDiedCallback> callback =
355             std::make_shared<OHServiceDiedCallback>(callbacks, (OH_AudioRenderer*)this, userData);
356         int32_t clientPid = getpid();
357         audioRenderer_->RegisterAudioPolicyServerDiedCb(clientPid, callback);
358 
359         std::shared_ptr<AudioRendererErrorCallback> errorCallback =
360             std::make_shared<OHAudioRendererErrorCallback>(callbacks, (OH_AudioRenderer*)this, userData);
361         audioRenderer_->SetAudioRendererErrorCallback(errorCallback);
362     } else {
363         AUDIO_ERR_LOG("audio error callback is nullptr");
364     }
365 }
366 
OnWriteData(size_t length)367 void OHAudioRendererModeCallback::OnWriteData(size_t length)
368 {
369     OHAudioRenderer* audioRenderer = (OHAudioRenderer*)ohAudioRenderer_;
370     CHECK_AND_RETURN_LOG(audioRenderer != nullptr, "renderer client is nullptr");
371     CHECK_AND_RETURN_LOG(callbacks_.OH_AudioRenderer_OnWriteData != nullptr, "pointer to the fuction is nullptr");
372     BufferDesc bufDesc;
373     audioRenderer->GetBufferDesc(bufDesc);
374     callbacks_.OH_AudioRenderer_OnWriteData(ohAudioRenderer_,
375         userData_,
376         (void*)bufDesc.buffer,
377         bufDesc.bufLength);
378     audioRenderer->Enqueue(bufDesc);
379 }
380 
OnStateChange(const DeviceInfo & deviceInfo)381 void OHAudioRendererDeviceChangeCallback::OnStateChange(const DeviceInfo &deviceInfo)
382 {
383     CHECK_AND_RETURN_LOG(ohAudioRenderer_ != nullptr, "renderer client is nullptr");
384     CHECK_AND_RETURN_LOG(callbacks_.OH_AudioRenderer_OnStreamEvent != nullptr, "pointer to the fuction is nullptr");
385 
386     OH_AudioStream_Event event =  AUDIOSTREAM_EVENT_ROUTING_CHANGED;
387     callbacks_.OH_AudioRenderer_OnStreamEvent(ohAudioRenderer_, userData_, event);
388 }
389 
OnInterrupt(const InterruptEvent & interruptEvent)390 void OHAudioRendererCallback::OnInterrupt(const InterruptEvent &interruptEvent)
391 {
392     CHECK_AND_RETURN_LOG(ohAudioRenderer_ != nullptr, "renderer client is nullptr");
393     CHECK_AND_RETURN_LOG(callbacks_.OH_AudioRenderer_OnInterruptEvent != nullptr, "pointer to the fuction is nullptr");
394     OH_AudioInterrupt_ForceType type = (OH_AudioInterrupt_ForceType)(interruptEvent.forceType);
395     OH_AudioInterrupt_Hint hint = OH_AudioInterrupt_Hint(interruptEvent.hintType);
396     callbacks_.OH_AudioRenderer_OnInterruptEvent(ohAudioRenderer_, userData_, type, hint);
397 }
398 
OnAudioPolicyServiceDied()399 void OHServiceDiedCallback::OnAudioPolicyServiceDied()
400 {
401     CHECK_AND_RETURN_LOG(ohAudioRenderer_ != nullptr, "renderer client is nullptr");
402     CHECK_AND_RETURN_LOG(callbacks_.OH_AudioRenderer_OnError != nullptr, "pointer to the fuction is nullptr");
403     OH_AudioStream_Result error = AUDIOSTREAM_ERROR_SYSTEM;
404     callbacks_.OH_AudioRenderer_OnError(ohAudioRenderer_, userData_, error);
405 }
406 
GetErrorResult(AudioErrors errorCode) const407 OH_AudioStream_Result OHAudioRendererErrorCallback::GetErrorResult(AudioErrors errorCode) const
408 {
409     switch (errorCode) {
410         case ERROR_ILLEGAL_STATE:
411             return AUDIOSTREAM_ERROR_ILLEGAL_STATE;
412         case ERROR_INVALID_PARAM:
413             return AUDIOSTREAM_ERROR_INVALID_PARAM;
414         case ERROR_SYSTEM:
415             return AUDIOSTREAM_ERROR_SYSTEM;
416         default:
417             return AUDIOSTREAM_ERROR_SYSTEM;
418     }
419 }
420 
OnError(AudioErrors errorCode)421 void OHAudioRendererErrorCallback::OnError(AudioErrors errorCode)
422 {
423     CHECK_AND_RETURN_LOG(ohAudioRenderer_ != nullptr && callbacks_.OH_AudioRenderer_OnError != nullptr,
424         "renderer client or error callback funtion is nullptr");
425     OH_AudioStream_Result error = GetErrorResult(errorCode);
426     callbacks_.OH_AudioRenderer_OnError(ohAudioRenderer_, userData_, error);
427 }
428 }  // namespace AudioStandard
429 }  // namespace OHOS
430