1 /*
2 * Copyright (c) 2022-2025 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 #ifndef LOG_TAG
16 #define LOG_TAG "IAudioRendererSink"
17 #endif
18
19 #include "i_audio_renderer_sink.h"
20 #include "i_audio_renderer_sink_intf.h"
21
22 #include "audio_errors.h"
23 #include "audio_hdi_log.h"
24
25 #include "audio_renderer_sink.h"
26 #include "audio_renderer_file_sink.h"
27 #include "bluetooth_renderer_sink.h"
28 #ifdef DAUDIO_ENABLE
29 #include "remote_audio_renderer_sink.h"
30 #endif
31 #include "offload_audio_renderer_sink.h"
32 #include "multichannel_audio_renderer_sink.h"
33 #include "fast_audio_renderer_sink.h"
34
35
36 namespace OHOS {
37 namespace AudioStandard {
38 const char *DEVICE_CLASS_PRIMARY = "primary";
39 const char *DEVICE_CLASS_USB = "usb";
40 const char *DEVICE_CLASS_DP = "dp";
41 const char *DEVICE_CLASS_A2DP = "a2dp";
42 const char *DEVICE_CLASS_A2DPFAST = "a2dp_fast";
43 #ifdef FEATURE_FILE_IO
44 const char *DEVICE_CLASS_FILE = "file_io";
45 #endif
46 #ifdef DAUDIO_ENABLE
47 const char *DEVICE_CLASS_REMOTE = "remote";
48 #endif
49 const char *DEVICE_CLASS_OFFLOAD = "offload";
50 const char *DEVICE_CLASS_MULTICHANNEL = "multichannel";
51 const char *DEVICE_CLASS_DIRECT_VOIP = "primary_direct_voip";
52 const char *DEVICE_CLASS_MMAP_VOIP = "primary_mmap_voip";
53 const int32_t CLASS_TYPE_REMOTE = 3;
54
GetInstance(const char * devceClass,const char * deviceNetworkId)55 IAudioRendererSink *IAudioRendererSink::GetInstance(const char *devceClass, const char *deviceNetworkId)
56 {
57 CHECK_AND_RETURN_RET_LOG(devceClass != nullptr && deviceNetworkId != nullptr, nullptr,
58 "GetInstance null class or networkid");
59 AUDIO_DEBUG_LOG("%{public}s Sink:GetInstance[%{public}s]", devceClass, deviceNetworkId);
60
61 IAudioRendererSink *iAudioRendererSink = nullptr;
62 if (!strcmp(devceClass, DEVICE_CLASS_PRIMARY)) {
63 iAudioRendererSink = AudioRendererSink::GetInstance("primary");
64 }
65 if (!strcmp(devceClass, DEVICE_CLASS_USB)) {
66 iAudioRendererSink = AudioRendererSink::GetInstance("usb");
67 }
68 if (!strcmp(devceClass, DEVICE_CLASS_DP)) {
69 iAudioRendererSink = AudioRendererSink::GetInstance("dp");
70 }
71 if (!strcmp(devceClass, DEVICE_CLASS_A2DP)) {
72 iAudioRendererSink = BluetoothRendererSink::GetInstance();
73 }
74 if (!strcmp(devceClass, DEVICE_CLASS_A2DPFAST)) {
75 iAudioRendererSink = BluetoothRendererSink::GetMmapInstance();
76 }
77 #ifdef FEATURE_FILE_IO
78 if (!strcmp(devceClass, DEVICE_CLASS_FILE)) {
79 iAudioRendererSink = AudioRendererFileSink::GetInstance();
80 }
81 #endif
82 #ifdef DAUDIO_ENABLE
83 if (!strcmp(devceClass, DEVICE_CLASS_REMOTE)) {
84 iAudioRendererSink = RemoteAudioRendererSink::GetInstance(deviceNetworkId);
85 }
86 #endif
87 if (!strcmp(devceClass, DEVICE_CLASS_OFFLOAD)) {
88 iAudioRendererSink = OffloadRendererSink::GetInstance();
89 }
90 if (!strcmp(devceClass, DEVICE_CLASS_MULTICHANNEL)) {
91 iAudioRendererSink = MultiChannelRendererSink::GetInstance("multichannel");
92 }
93 if (!strcmp(devceClass, DEVICE_CLASS_DIRECT_VOIP)) {
94 iAudioRendererSink = AudioRendererSink::GetInstance("voip");
95 }
96 if (!strcmp(devceClass, DEVICE_CLASS_MMAP_VOIP)) {
97 iAudioRendererSink = FastAudioRendererSink::GetVoipInstance();
98 }
99
100 if (iAudioRendererSink == nullptr) {
101 AUDIO_ERR_LOG("GetInstance failed with device[%{public}s]:[%{private}s]", devceClass,
102 deviceNetworkId);
103 }
104 return iAudioRendererSink;
105 }
106 } // namespace AudioStandard
107 } // namespace OHOS
108
109 #ifdef __cplusplus
110 extern "C" {
111 #endif
112
113 using namespace OHOS::AudioStandard;
114
FillinSinkWapper(const char * device,const char * deviceNetworkId,struct RendererSinkAdapter * adapter)115 int32_t FillinSinkWapper(const char *device, const char *deviceNetworkId, struct RendererSinkAdapter *adapter)
116 {
117 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
118 IAudioRendererSink *instance = IAudioRendererSink::GetInstance(device, deviceNetworkId);
119 if (instance != nullptr) {
120 adapter->wapper = static_cast<void *>(instance);
121 } else {
122 adapter->wapper = nullptr;
123 return ERROR;
124 }
125
126 return SUCCESS;
127 }
128
IAudioRendererSinkInit(struct RendererSinkAdapter * adapter,const SinkAttr * attr)129 int32_t IAudioRendererSinkInit(struct RendererSinkAdapter *adapter, const SinkAttr *attr)
130 {
131 if (adapter == nullptr || adapter->wapper == nullptr || attr == nullptr) {
132 AUDIO_ERR_LOG("%{public}s: Invalid parameter", __func__);
133 return ERROR;
134 }
135 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
136 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
137 if (audioRendererSink->IsInited()) {
138 return SUCCESS;
139 }
140 IAudioSinkAttr iAttr = {};
141 iAttr.adapterName = attr->adapterName;
142 iAttr.openMicSpeaker = attr->openMicSpeaker;
143 iAttr.format = attr->format;
144 iAttr.sampleRate = attr->sampleRate;
145 iAttr.channel = attr->channel;
146 iAttr.volume = attr->volume;
147 iAttr.filePath = attr->filePath;
148 iAttr.deviceNetworkId = attr->deviceNetworkId;
149 iAttr.deviceType = attr->deviceType;
150 iAttr.channelLayout = attr->channelLayout;
151 iAttr.aux = attr->aux;
152
153 return audioRendererSink->Init(iAttr);
154 }
155
IAudioRendererSinkDeInit(struct RendererSinkAdapter * adapter)156 void IAudioRendererSinkDeInit(struct RendererSinkAdapter *adapter)
157 {
158 CHECK_AND_RETURN_LOG(adapter != nullptr, "null RendererSinkAdapter");
159 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
160 CHECK_AND_RETURN_LOG(audioRendererSink != nullptr, "null audioRendererSink");
161 // remove the sink in allsinks.
162 if ((adapter->deviceClass == CLASS_TYPE_REMOTE) || audioRendererSink->IsInited()) {
163 audioRendererSink->DeInit();
164 }
165 }
166
IAudioRendererSinkStop(struct RendererSinkAdapter * adapter)167 int32_t IAudioRendererSinkStop(struct RendererSinkAdapter *adapter)
168 {
169 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
170 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
171 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
172 if (!audioRendererSink->IsInited()) {
173 return SUCCESS;
174 }
175
176 return audioRendererSink->Stop();
177 }
178
IAudioRendererSinkStart(struct RendererSinkAdapter * adapter)179 int32_t IAudioRendererSinkStart(struct RendererSinkAdapter *adapter)
180 {
181 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
182 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
183 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
184 CHECK_AND_RETURN_RET_LOG(audioRendererSink->IsInited(), ERR_NOT_STARTED,
185 "audioRenderer Not Inited! Init the renderer first");
186
187 return audioRendererSink->Start();
188 }
189
IAudioRendererSinkPause(struct RendererSinkAdapter * adapter)190 int32_t IAudioRendererSinkPause(struct RendererSinkAdapter *adapter)
191 {
192 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
193 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
194 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
195 bool isInited = audioRendererSink->IsInited();
196 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED, "Renderer pause failed");
197
198 return audioRendererSink->Pause();
199 }
200
IAudioRendererSinkResume(struct RendererSinkAdapter * adapter)201 int32_t IAudioRendererSinkResume(struct RendererSinkAdapter *adapter)
202 {
203 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
204 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
205 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
206 bool isInited = audioRendererSink->IsInited();
207 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED, "Renderer resume failed");
208
209 return audioRendererSink->Resume();
210 }
211
IAudioRendererSinkRenderFrame(struct RendererSinkAdapter * adapter,char * data,uint64_t len,uint64_t * writeLen)212 int32_t IAudioRendererSinkRenderFrame(struct RendererSinkAdapter *adapter, char *data, uint64_t len, uint64_t *writeLen)
213 {
214 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
215
216 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
217 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
218 bool isInited = audioRendererSink->IsInited();
219 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED, "audioRenderer Not Inited! Init the renderer first");
220
221 int32_t ret = audioRendererSink->RenderFrame(*data, len, *writeLen);
222 return ret;
223 }
224
IAudioRendererSinkSplitRenderFrame(struct RendererSinkAdapter * adapter,char * data,uint64_t len,uint64_t * writeLen,char * streamType)225 int32_t IAudioRendererSinkSplitRenderFrame(struct RendererSinkAdapter *adapter, char *data, uint64_t len,
226 uint64_t *writeLen, char *streamType)
227 {
228 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
229
230 IRemoteAudioRendererSink *audioRendererSink = static_cast<IRemoteAudioRendererSink *>(adapter->wapper);
231 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
232 bool isInited = audioRendererSink->IsInited();
233 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED, "audioRenderer Not Inited! Init the renderer first\n");
234
235 int32_t ret = audioRendererSink->SplitRenderFrame(*data, len, *writeLen, streamType);
236 return ret;
237 }
238
IAudioRendererSinkSetVolume(struct RendererSinkAdapter * adapter,float left,float right)239 int32_t IAudioRendererSinkSetVolume(struct RendererSinkAdapter *adapter, float left, float right)
240 {
241 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
242
243 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
244 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
245 bool isInited = audioRendererSink->IsInited();
246 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED, "audioRenderer Not Inited! Init the renderer first");
247
248 int32_t ret = audioRendererSink->SetVolume(left, right);
249 return ret;
250 }
251
IAudioRendererSinkGetVolume(struct RendererSinkAdapter * adapter,float * left,float * right)252 int32_t IAudioRendererSinkGetVolume(struct RendererSinkAdapter *adapter, float *left, float *right)
253 {
254 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
255
256 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
257 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
258 bool isInited = audioRendererSink->IsInited();
259 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED, "audioRenderer Not Inited! Init the renderer first");
260
261 int32_t ret = audioRendererSink->GetVolume(*left, *right);
262 return ret;
263 }
264
IAudioRendererSinkGetLatency(struct RendererSinkAdapter * adapter,uint32_t * latency)265 int32_t IAudioRendererSinkGetLatency(struct RendererSinkAdapter *adapter, uint32_t *latency)
266 {
267 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
268
269 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
270 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
271 bool isInited = audioRendererSink->IsInited();
272 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED, "audioRenderer Not Inited! Init the renderer first");
273
274 CHECK_AND_RETURN_RET_LOG(latency, ERR_INVALID_PARAM, "IAudioRendererSinkGetLatency failed latency null");
275
276 int32_t ret = audioRendererSink->GetLatency(latency);
277 return ret;
278 }
279
IAudioRendererSinkRegCallback(struct RendererSinkAdapter * adapter,int8_t * cb,int8_t * userdata)280 int32_t IAudioRendererSinkRegCallback(struct RendererSinkAdapter *adapter, int8_t *cb, int8_t *userdata)
281 {
282 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
283
284 IOffloadAudioRendererSink *audioRendererSink = static_cast<IOffloadAudioRendererSink *>(adapter->wapper);
285 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
286 bool isInited = audioRendererSink->IsInited();
287 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED, "audioRenderer Not Inited! Init the renderer first");
288 auto *callback = reinterpret_cast<OnRenderCallback*>(cb);
289 audioRendererSink->RegisterRenderCallback(callback, userdata);
290 return SUCCESS;
291 }
292
IAudioRendererSinkGetPresentationPosition(struct RendererSinkAdapter * adapter,uint64_t * frames,int64_t * timeSec,int64_t * timeNanoSec)293 int32_t IAudioRendererSinkGetPresentationPosition(struct RendererSinkAdapter *adapter, uint64_t *frames,
294 int64_t *timeSec, int64_t *timeNanoSec)
295 {
296 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
297
298 IOffloadAudioRendererSink *audioRendererSink = static_cast<IOffloadAudioRendererSink *>(adapter->wapper);
299 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
300 bool isInited = audioRendererSink->IsInited();
301 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED, "audioRenderer Not Inited! Init the renderer first");
302
303 return audioRendererSink->GetPresentationPosition(*frames, *timeSec, *timeNanoSec);
304 }
305
IAudioRendererSinkFlush(struct RendererSinkAdapter * adapter)306 int32_t IAudioRendererSinkFlush(struct RendererSinkAdapter *adapter)
307 {
308 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
309
310 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
311 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
312 bool isInited = audioRendererSink->IsInited();
313 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED,
314 "audioRenderer Not Inited! Init the renderer first, Renderer Flush failed");
315
316 return audioRendererSink->Flush();
317 }
318
IAudioRendererSinkReset(struct RendererSinkAdapter * adapter)319 int32_t IAudioRendererSinkReset(struct RendererSinkAdapter *adapter)
320 {
321 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
322
323 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
324 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
325 bool isInited = audioRendererSink->IsInited();
326 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED,
327 "audioRenderer Not Inited! Init the renderer first, Renderer Reset failed");
328
329 return audioRendererSink->Reset();
330 }
331
IAudioRendererSinkSetBufferSize(struct RendererSinkAdapter * adapter,uint32_t sizeMs)332 int32_t IAudioRendererSinkSetBufferSize(struct RendererSinkAdapter *adapter, uint32_t sizeMs)
333 {
334 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
335
336 IOffloadAudioRendererSink *audioRendererSink = static_cast<IOffloadAudioRendererSink *>(adapter->wapper);
337 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
338 bool isInited = audioRendererSink->IsInited();
339 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED,
340 "audioRenderer Not Inited! Init the renderer first, Renderer SetBufferSize failed");
341
342 return audioRendererSink->SetBufferSize(sizeMs);
343 }
344
IAudioRendererSinkOffloadRunningLockInit(struct RendererSinkAdapter * adapter)345 int32_t IAudioRendererSinkOffloadRunningLockInit(struct RendererSinkAdapter *adapter)
346 {
347 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
348
349 IOffloadAudioRendererSink *audioRendererSink = static_cast<IOffloadAudioRendererSink *>(adapter->wapper);
350 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
351 bool isInited = audioRendererSink->IsInited();
352 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED,
353 "audioRenderer Not Inited! Init the renderer first, Renderer Resume failed");
354
355 return audioRendererSink->OffloadRunningLockInit();
356 }
357
IAudioRendererSinkOffloadRunningLockLock(struct RendererSinkAdapter * adapter)358 int32_t IAudioRendererSinkOffloadRunningLockLock(struct RendererSinkAdapter *adapter)
359 {
360 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
361
362 IOffloadAudioRendererSink *audioRendererSink = static_cast<IOffloadAudioRendererSink *>(adapter->wapper);
363 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
364 bool isInited = audioRendererSink->IsInited();
365 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED,
366 "audioRenderer Not Inited! Init the renderer first, Renderer Resume failed");
367
368 return audioRendererSink->OffloadRunningLockLock();
369 }
370
IAudioRendererSinkOffloadRunningLockUnlock(struct RendererSinkAdapter * adapter)371 int32_t IAudioRendererSinkOffloadRunningLockUnlock(struct RendererSinkAdapter *adapter)
372 {
373 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
374
375 IOffloadAudioRendererSink *audioRendererSink = static_cast<IOffloadAudioRendererSink *>(adapter->wapper);
376 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
377 bool isInited = audioRendererSink->IsInited();
378 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED,
379 "audioRenderer Not Inited! Init the renderer first, Renderer Resume failed");
380
381 return audioRendererSink->OffloadRunningLockUnlock();
382 }
383
IAudioRendererSinkSetPaPower(struct RendererSinkAdapter * adapter,int32_t flag)384 int32_t IAudioRendererSinkSetPaPower(struct RendererSinkAdapter *adapter, int32_t flag)
385 {
386 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
387
388 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
389 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
390 bool isInited = audioRendererSink->IsInited();
391 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED,
392 "audioRenderer Not Inited! Init the renderer first, Renderer Resume failed");
393
394 int32_t ret = audioRendererSink->SetPaPower(flag);
395 return ret;
396 }
397
IAudioRendererSinkSetPriPaPower(struct RendererSinkAdapter * adapter)398 int32_t IAudioRendererSinkSetPriPaPower(struct RendererSinkAdapter *adapter)
399 {
400 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
401
402 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
403 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
404 bool isInited = audioRendererSink->IsInited();
405 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED,
406 "audioRenderer Not Inited! Init the renderer first, Renderer Resume failed");
407
408 int32_t ret = audioRendererSink->SetPriPaPower();
409 return ret;
410 }
411
IAudioRendererSinkUpdateAppsUid(struct RendererSinkAdapter * adapter,const int32_t appsUid[MAX_MIX_CHANNELS],const size_t size)412 int32_t IAudioRendererSinkUpdateAppsUid(struct RendererSinkAdapter *adapter, const int32_t appsUid[MAX_MIX_CHANNELS],
413 const size_t size)
414 {
415 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
416
417 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
418 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
419 bool isInited = audioRendererSink->IsInited();
420 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED,
421 "audioRenderer Not Inited! Init the renderer first, Renderer Resume failed");
422
423 int32_t ret = audioRendererSink->UpdateAppsUid(appsUid, size);
424 return ret;
425 }
426
IAudioRendererSinkGetRenderId(struct RendererSinkAdapter * adapter,uint32_t * renderId)427 int32_t IAudioRendererSinkGetRenderId(struct RendererSinkAdapter *adapter, uint32_t *renderId)
428 {
429 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
430
431 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
432 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
433 bool isInited = audioRendererSink->IsInited();
434 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED,
435 "audioRenderer Not Inited! Init the renderer first, Renderer GetRenderId failed");
436
437 int32_t ret = audioRendererSink->GetRenderId(*renderId);
438 return ret;
439 }
440
IAudioRendererSinkGetAudioScene(struct RendererSinkAdapter * adapter)441 int32_t IAudioRendererSinkGetAudioScene(struct RendererSinkAdapter *adapter)
442 {
443 CHECK_AND_RETURN_RET_LOG(adapter != nullptr, ERR_INVALID_HANDLE, "null RendererSinkAdapter");
444
445 IAudioRendererSink *audioRendererSink = static_cast<IAudioRendererSink *>(adapter->wapper);
446 CHECK_AND_RETURN_RET_LOG(audioRendererSink != nullptr, ERR_INVALID_HANDLE, "null audioRendererSink");
447 bool isInited = audioRendererSink->IsInited();
448 CHECK_AND_RETURN_RET_LOG(isInited, ERR_NOT_STARTED,
449 "audioRenderer Not Inited! Init the renderer first, Renderer GetAudioScene failed");
450
451 int32_t ret = audioRendererSink->GetAudioScene();
452 return ret;
453 }
454 #ifdef __cplusplus
455 }
456 #endif
457