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 ×tamp, 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