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