• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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