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 "audio_common_vdi.h"
16
17 #include "osal_mem.h"
18 #include "securec.h"
19 #include <hdf_base.h>
20 #include "audio_uhdf_log.h"
21
22 #define HDF_LOG_TAG HDF_AUDIO_PRIMARY_IMPL
23 #define AUDIO_FORMAT_NUM_MAX 15
24 #define AUDIO_ROUTE_NUM_MAX 2
25 #define AUDIO_SAMPLE_FORMAT_NUM_MAX 30
26 #define AUDIO_SUB_PORT_NUM_MAX 10
27
AudioCommonDevDescToVdiDevDescVdi(const struct AudioDeviceDescriptor * desc,struct AudioDeviceDescriptorVdi * vdiDesc)28 void AudioCommonDevDescToVdiDevDescVdi(const struct AudioDeviceDescriptor *desc,
29 struct AudioDeviceDescriptorVdi *vdiDesc)
30 {
31 CHECK_NULL_PTR_RETURN(desc);
32 CHECK_NULL_PTR_RETURN(vdiDesc);
33
34 vdiDesc->portId = desc->portId;
35 vdiDesc->pins = (enum AudioPortPinVdi)desc->pins;
36 vdiDesc->desc = strdup(desc->desc); // free by caller
37 }
38
AudioCommonAttrsToVdiAttrsVdi(const struct AudioSampleAttributes * attrs,struct AudioSampleAttributesVdi * vdiAttrs)39 void AudioCommonAttrsToVdiAttrsVdi(const struct AudioSampleAttributes *attrs, struct AudioSampleAttributesVdi *vdiAttrs)
40 {
41 CHECK_NULL_PTR_RETURN(attrs);
42 CHECK_NULL_PTR_RETURN(vdiAttrs);
43 AUDIO_FUNC_LOGI("render or capture type is %{public}d", attrs->type);
44 vdiAttrs->type = (enum AudioCategoryVdi)attrs->type;
45 vdiAttrs->interleaved = attrs->interleaved;
46 vdiAttrs->format = (enum AudioFormatVdi)attrs->format;
47 vdiAttrs->sampleRate = attrs->sampleRate;
48 vdiAttrs->channelCount = attrs->channelCount;
49 vdiAttrs->channelLayout = attrs->channelLayout;
50 vdiAttrs->period = attrs->period;
51 vdiAttrs->frameSize = attrs->frameSize;
52 vdiAttrs->isBigEndian = attrs->isBigEndian;
53 vdiAttrs->isSignedData = attrs->isSignedData;
54 vdiAttrs->startThreshold = attrs->startThreshold;
55 vdiAttrs->stopThreshold = attrs->stopThreshold;
56 vdiAttrs->silenceThreshold = attrs->silenceThreshold;
57 vdiAttrs->streamId = attrs->streamId;
58 vdiAttrs->sourceType = attrs->sourceType;
59 if (vdiAttrs->type == AUDIO_VDI_OFFLOAD) {
60 vdiAttrs->offloadInfo.sampleRate = attrs->offloadInfo.sampleRate;
61 vdiAttrs->offloadInfo.channelCount = attrs->offloadInfo.channelCount;
62 vdiAttrs->offloadInfo.channelLayout = attrs->offloadInfo.channelLayout;
63 vdiAttrs->offloadInfo.bitRate = attrs->offloadInfo.bitRate;
64 vdiAttrs->offloadInfo.bitWidth = attrs->offloadInfo.bitWidth;
65 vdiAttrs->offloadInfo.format = (enum AudioFormatVdi)attrs->offloadInfo.format;
66 vdiAttrs->offloadInfo.offloadBufferSize = attrs->offloadInfo.offloadBufferSize;
67 vdiAttrs->offloadInfo.duration = attrs->offloadInfo.duration;
68 }
69 }
70
AudioCommonPortToVdiPortVdi(const struct AudioPort * port,struct AudioPortVdi * vdiPort)71 int32_t AudioCommonPortToVdiPortVdi(const struct AudioPort *port, struct AudioPortVdi *vdiPort)
72 {
73 CHECK_NULL_PTR_RETURN_VALUE(vdiPort, HDF_ERR_INVALID_PARAM);
74 CHECK_NULL_PTR_RETURN_VALUE(port, HDF_ERR_INVALID_PARAM);
75
76 vdiPort->dir = (enum AudioPortDirectionVdi)port->dir;
77 vdiPort->portId = port->portId;
78 vdiPort->portName = strdup(port->portName); // free by caller
79
80 return HDF_SUCCESS;
81 }
82
AudioFormatsToFormatsVdi(const enum AudioFormatVdi * vdiFormats,uint32_t vdiFormatNum,enum AudioFormat ** formats,uint32_t * formatsLen)83 static int32_t AudioFormatsToFormatsVdi(const enum AudioFormatVdi *vdiFormats, uint32_t vdiFormatNum,
84 enum AudioFormat **formats, uint32_t *formatsLen)
85 {
86 CHECK_NULL_PTR_RETURN_VALUE(vdiFormats, HDF_ERR_INVALID_PARAM);
87 CHECK_NULL_PTR_RETURN_VALUE(formats, HDF_ERR_INVALID_PARAM);
88 CHECK_NULL_PTR_RETURN_VALUE(formatsLen, HDF_ERR_INVALID_PARAM);
89
90 if (vdiFormatNum >= AUDIO_FORMAT_NUM_MAX || vdiFormatNum == 0) {
91 AUDIO_FUNC_LOGE("VdiFormats to formats len fail");
92 return HDF_ERR_INVALID_PARAM;
93 }
94
95 uint32_t size = vdiFormatNum * sizeof(enum AudioFormat);
96 enum AudioFormat *formatTmp = (enum AudioFormat *)OsalMemCalloc(size); // free by caller
97 if (formatTmp == NULL) {
98 AUDIO_FUNC_LOGE("formatTmp malloc fail");
99 return HDF_ERR_MALLOC_FAIL;
100 }
101
102 int32_t ret = memcpy_s((void*)formatTmp, size, (void*)vdiFormats, vdiFormatNum * sizeof(enum AudioFormatVdi));
103 if (ret != HDF_SUCCESS) {
104 OsalMemFree((void *)formatTmp);
105 AUDIO_FUNC_LOGE("format cpy fail=%{public}d", ret);
106 return HDF_FAILURE;
107 }
108
109 *formats = formatTmp;
110 *formatsLen = size;
111 return HDF_SUCCESS;
112 }
113
AudioReleaseSubPortsVdi(struct AudioSubPortCapability ** subPorts,uint32_t * subPortsLen)114 static void AudioReleaseSubPortsVdi(struct AudioSubPortCapability **subPorts, uint32_t *subPortsLen)
115 {
116 struct AudioSubPortCapability *subPortsTmp = NULL;
117
118 CHECK_NULL_PTR_RETURN(subPorts);
119 CHECK_NULL_PTR_RETURN(subPortsLen);
120
121 uint32_t subPortsNum = *subPortsLen / sizeof(struct AudioSubPortCapability);
122 if (subPortsNum >= AUDIO_SUB_PORT_NUM_MAX) {
123 AUDIO_FUNC_LOGE("AudioReleaseSubPortsVdi len fail");
124 return;
125 }
126
127 subPortsTmp = *subPorts;
128 for (uint32_t i = 0; i < subPortsNum; i++) {
129 OsalMemFree((void *)subPortsTmp[i].desc);
130 }
131
132 OsalMemFree((void *)subPortsTmp);
133 subPortsTmp = NULL;
134 }
135
AudioSubPortsToSubPortsVdi(const struct AudioSubPortCapabilityVdi * vdiSubPorts,uint32_t vdiSubPortsNum,struct AudioSubPortCapability ** subPorts,uint32_t * subPortsLen)136 static int32_t AudioSubPortsToSubPortsVdi(const struct AudioSubPortCapabilityVdi *vdiSubPorts, uint32_t vdiSubPortsNum,
137 struct AudioSubPortCapability **subPorts, uint32_t *subPortsLen)
138 {
139 CHECK_NULL_PTR_RETURN_VALUE(vdiSubPorts, HDF_ERR_INVALID_PARAM);
140 CHECK_NULL_PTR_RETURN_VALUE(subPorts, HDF_ERR_INVALID_PARAM);
141 CHECK_NULL_PTR_RETURN_VALUE(subPortsLen, HDF_ERR_INVALID_PARAM);
142
143 if (vdiSubPortsNum >= AUDIO_SUB_PORT_NUM_MAX || vdiSubPortsNum == 0) {
144 AUDIO_FUNC_LOGE("VdiSubPorts to subPorts len fail");
145 return HDF_ERR_INVALID_PARAM;
146 }
147
148 uint32_t size = vdiSubPortsNum * sizeof(struct AudioSubPortCapability);
149 struct AudioSubPortCapability *subPortsTmp = (struct AudioSubPortCapability *)OsalMemCalloc(size);
150 if (subPortsTmp == NULL) {
151 AUDIO_FUNC_LOGE("subPortsTmp malloc fail");
152 return HDF_ERR_MALLOC_FAIL;
153 }
154
155 for (uint32_t i = 0; i < vdiSubPortsNum; i++) {
156 subPortsTmp[i].portId = vdiSubPorts[i].portId;
157 subPortsTmp[i].mask = (enum AudioPortPassthroughMode)vdiSubPorts[i].mask;
158 subPortsTmp[i].desc = strdup(vdiSubPorts[i].desc);
159 }
160
161 *subPorts = subPortsTmp;
162 *subPortsLen = size;
163 return HDF_SUCCESS;
164 }
165
AudioSampleFormatToSampleFormatsVdi(const enum AudioSampleFormatVdi * vdiSampleFormat,uint32_t vdiSupportSampleFormatNum,enum AudioSampleFormat ** sampleFormat,uint32_t * sampleFormatsLen)166 static int32_t AudioSampleFormatToSampleFormatsVdi(const enum AudioSampleFormatVdi *vdiSampleFormat,
167 uint32_t vdiSupportSampleFormatNum, enum AudioSampleFormat **sampleFormat, uint32_t *sampleFormatsLen)
168 {
169 CHECK_NULL_PTR_RETURN_VALUE(vdiSampleFormat, HDF_ERR_INVALID_PARAM);
170 CHECK_NULL_PTR_RETURN_VALUE(sampleFormat, HDF_ERR_INVALID_PARAM);
171 CHECK_NULL_PTR_RETURN_VALUE(sampleFormatsLen, HDF_ERR_INVALID_PARAM);
172
173 if (vdiSupportSampleFormatNum >= AUDIO_SAMPLE_FORMAT_NUM_MAX || vdiSupportSampleFormatNum == 0) {
174 AUDIO_FUNC_LOGE("vdiSampleFormat to sampleFormats len fail");
175 return HDF_ERR_INVALID_PARAM;
176 }
177
178 uint32_t size = vdiSupportSampleFormatNum * sizeof(enum AudioSampleFormat);
179 enum AudioSampleFormat *sampleFormatTmp = (enum AudioSampleFormat *)OsalMemCalloc(size);
180 if (sampleFormatTmp == NULL) {
181 AUDIO_FUNC_LOGE("sampleFormatTmp malloc fail");
182 return HDF_ERR_MALLOC_FAIL;
183 }
184
185 int32_t ret = memcpy_s((void *)sampleFormatTmp, size, (void*)vdiSampleFormat,
186 vdiSupportSampleFormatNum * sizeof(enum AudioSampleFormatVdi));
187 if (ret != HDF_SUCCESS) {
188 OsalMemFree((void *)sampleFormatTmp);
189 AUDIO_FUNC_LOGE("sampleFormatTmp cpy fail=%{public}d", ret);
190 return HDF_FAILURE;
191 }
192
193 *sampleFormat = sampleFormatTmp;
194 *sampleFormatsLen = size;
195 return HDF_SUCCESS;
196 }
197
AudioCommonVdiPortCapToPortCapVdi(const struct AudioPortCapabilityVdi * vdiPortCap,struct AudioPortCapability * portCap)198 void AudioCommonVdiPortCapToPortCapVdi(const struct AudioPortCapabilityVdi *vdiPortCap,
199 struct AudioPortCapability *portCap)
200 {
201 CHECK_NULL_PTR_RETURN(portCap);
202 CHECK_NULL_PTR_RETURN(vdiPortCap);
203
204 portCap->deviceType = vdiPortCap->deviceType;
205 portCap->deviceId = vdiPortCap->deviceId;
206 portCap->hardwareMode = vdiPortCap->hardwareMode;
207 portCap->sampleRateMasks = vdiPortCap->sampleRateMasks;
208 portCap->channelMasks = (enum AudioChannelMask)vdiPortCap->channelMasks;
209 portCap->channelCount = vdiPortCap->channelCount;
210
211 int32_t ret = AudioFormatsToFormatsVdi(vdiPortCap->formats, vdiPortCap->formatNum, &portCap->formats,
212 &portCap->formatsLen);
213 if (ret != HDF_SUCCESS) {
214 AUDIO_FUNC_LOGE("AudioFormatsToFormatsVdi fail");
215 return;
216 }
217
218 ret = AudioSubPortsToSubPortsVdi(vdiPortCap->subPorts, vdiPortCap->subPortsLen,
219 &portCap->subPorts, &portCap->subPortsLen);
220 if (ret != HDF_SUCCESS) {
221 OsalMemFree((void *)portCap->formats);
222 portCap->formats = NULL;
223 AUDIO_FUNC_LOGE("VdiSubPortsToSubPorts fail");
224 return;
225 }
226
227 ret = AudioSampleFormatToSampleFormatsVdi(vdiPortCap->supportSampleFormats, vdiPortCap->supportSampleFormatsLen,
228 &portCap->supportSampleFormats, &portCap->supportSampleFormatsLen);
229 if (ret != HDF_SUCCESS) {
230 OsalMemFree((void *)portCap->formats);
231 AudioReleaseSubPortsVdi(&portCap->subPorts, &portCap->subPortsLen);
232 portCap->formats = NULL;
233 AUDIO_FUNC_LOGE("VdiSampleFormatToSampleFormats fail");
234 return;
235 }
236 }
237
AudioCommonFreeVdiRouteVdi(struct AudioRouteVdi * vdiRoute)238 void AudioCommonFreeVdiRouteVdi(struct AudioRouteVdi *vdiRoute)
239 {
240 CHECK_NULL_PTR_RETURN(vdiRoute);
241
242 if (vdiRoute->sinks != NULL) {
243 if (vdiRoute->sinksLen > AUDIO_ROUTE_NUM_MAX) {
244 AUDIO_FUNC_LOGE("sinksLen para error");
245 return;
246 }
247
248 for (uint32_t i = 0; i < vdiRoute->sinksLen; i++) {
249 if (vdiRoute->sinks[i].type == AUDIO_VDI_PORT_DEVICE_TYPE) {
250 OsalMemFree((void *)vdiRoute->sinks[i].ext.device.desc);
251 }
252 }
253 OsalMemFree((void *)vdiRoute->sinks);
254 }
255
256 if (vdiRoute->sources != NULL) {
257 if (vdiRoute->sourcesLen > AUDIO_ROUTE_NUM_MAX) {
258 AUDIO_FUNC_LOGE("sourcesLen para error");
259 return;
260 }
261
262 for (uint32_t i = 0; i < vdiRoute->sourcesLen; i++) {
263 if (vdiRoute->sources[i].type == AUDIO_VDI_PORT_DEVICE_TYPE) {
264 OsalMemFree((void *)vdiRoute->sources[i].ext.device.desc);
265 }
266 }
267 OsalMemFree((void *)vdiRoute->sources);
268 }
269 }
270
AudioCommonRouteNodeToVdiRouteNodeVdi(struct AudioRouteNode * routeNode,struct AudioRouteNodeVdi * vdiRouteNode)271 static int32_t AudioCommonRouteNodeToVdiRouteNodeVdi(struct AudioRouteNode *routeNode,
272 struct AudioRouteNodeVdi *vdiRouteNode)
273 {
274 vdiRouteNode->portId = routeNode->portId;
275 vdiRouteNode->role = (enum AudioPortRoleVdi)routeNode->role;
276 vdiRouteNode->type = (enum AudioPortTypeVdi)routeNode->type;
277
278 if (routeNode->type == AUDIO_VDI_PORT_DEVICE_TYPE) {
279 vdiRouteNode->ext.device.moduleId = routeNode->ext.device.moduleId;
280 vdiRouteNode->ext.device.type = (enum AudioPortPinVdi)routeNode->ext.device.type;
281 vdiRouteNode->ext.device.desc = strdup(routeNode->ext.device.desc);
282 return HDF_SUCCESS;
283 }
284
285 if (routeNode->type == AUDIO_VDI_PORT_MIX_TYPE) {
286 vdiRouteNode->ext.mix.moduleId = routeNode->ext.mix.moduleId;
287 vdiRouteNode->ext.mix.streamId = routeNode->ext.mix.streamId;
288 return HDF_SUCCESS;
289 }
290
291 if (routeNode->type == AUDIO_VDI_PORT_SESSION_TYPE) {
292 vdiRouteNode->ext.session.sessionType = (enum AudioSessionTypeVdi)routeNode->ext.session.sessionType;
293 return HDF_SUCCESS;
294 }
295
296 AUDIO_FUNC_LOGE("not match route node type");
297 return HDF_FAILURE;
298 }
299
AudioCommonSinkToVdiSinkVdi(const struct AudioRoute * route,struct AudioRouteVdi * vdiRoute)300 static int32_t AudioCommonSinkToVdiSinkVdi(const struct AudioRoute *route, struct AudioRouteVdi *vdiRoute)
301 {
302 struct AudioRouteNodeVdi *nodes = NULL;
303 if (route->sinksLen > AUDIO_ROUTE_NUM_MAX) {
304 AUDIO_FUNC_LOGE("sinksLen para err");
305 return HDF_ERR_INVALID_PARAM;
306 }
307
308 nodes = (struct AudioRouteNodeVdi *)OsalMemCalloc(route->sinksLen * sizeof(struct AudioRouteNodeVdi));
309 if (nodes == NULL) {
310 AUDIO_FUNC_LOGE("nodes null");
311 return HDF_ERR_MALLOC_FAIL;
312 }
313 vdiRoute->sinks = nodes;
314 vdiRoute->sinksLen = route->sinksLen;
315
316 for (uint32_t i = 0; i < vdiRoute->sinksLen; i++) {
317 int32_t ret = AudioCommonRouteNodeToVdiRouteNodeVdi(&route->sinks[i], &vdiRoute->sinks[i]);
318 if (ret != HDF_SUCCESS) {
319 AUDIO_FUNC_LOGE("sink routeNode to vdiRouteNode fail");
320 /* nodes release by AudioCommonFreeVdiRouteVdi */
321 return HDF_FAILURE;
322 }
323 }
324
325 return HDF_SUCCESS;
326 }
327
AudioCommonSourceToVdiSourceVdi(const struct AudioRoute * route,struct AudioRouteVdi * vdiRoute)328 static int32_t AudioCommonSourceToVdiSourceVdi(const struct AudioRoute *route, struct AudioRouteVdi *vdiRoute)
329 {
330 struct AudioRouteNodeVdi *nodes = NULL;
331 if (route->sourcesLen > AUDIO_ROUTE_NUM_MAX) {
332 AUDIO_FUNC_LOGE("sinksLen para err");
333 return HDF_ERR_INVALID_PARAM;
334 }
335
336 nodes = (struct AudioRouteNodeVdi *)OsalMemCalloc(route->sourcesLen * sizeof(struct AudioRouteNodeVdi));
337 if (nodes == NULL) {
338 AUDIO_FUNC_LOGE("nodes null");
339 return HDF_ERR_MALLOC_FAIL;
340 }
341 vdiRoute->sources = nodes;
342 vdiRoute->sourcesLen = route->sourcesLen;
343
344 for (uint32_t i = 0; i < vdiRoute->sourcesLen; i++) {
345 int32_t ret = AudioCommonRouteNodeToVdiRouteNodeVdi(&route->sources[i], &vdiRoute->sources[i]);
346 if (ret != HDF_SUCCESS) {
347 AUDIO_FUNC_LOGE(" source routeNode to vdiRouteNode fail");
348 /* nodes release by AudioCommonFreeVdiRouteVdi */
349 return HDF_FAILURE;
350 }
351 }
352
353 return HDF_SUCCESS;
354 }
355
AudioCommonRouteToVdiRouteVdi(const struct AudioRoute * route,struct AudioRouteVdi * vdiRoute)356 int32_t AudioCommonRouteToVdiRouteVdi(const struct AudioRoute *route, struct AudioRouteVdi *vdiRoute)
357 {
358 int32_t sinkRet = HDF_SUCCESS;
359 int32_t sourcesRet = HDF_SUCCESS;
360
361 CHECK_NULL_PTR_RETURN_VALUE(route, HDF_ERR_INVALID_PARAM);
362 CHECK_NULL_PTR_RETURN_VALUE(vdiRoute, HDF_ERR_INVALID_PARAM);
363
364 if (route->sinks != NULL) {
365 sinkRet = AudioCommonSinkToVdiSinkVdi(route, vdiRoute);
366 if (sinkRet != HDF_SUCCESS) {
367 AUDIO_FUNC_LOGE(" sink routeNode to vdiRouteNode fail");
368 }
369 }
370
371 if (route->sources != NULL) {
372 sourcesRet = AudioCommonSourceToVdiSourceVdi(route, vdiRoute);
373 if (sourcesRet != HDF_SUCCESS) {
374 AUDIO_FUNC_LOGE(" source routeNode to vdiRouteNode fail");
375 return HDF_FAILURE;
376 }
377 }
378
379 if (sinkRet != HDF_SUCCESS || sourcesRet != HDF_SUCCESS) {
380 /* free nodes by sink and source malloc nodes memory */
381 AudioCommonFreeVdiRouteVdi(vdiRoute);
382 return HDF_FAILURE;
383 }
384
385 return HDF_SUCCESS;
386 }
387
AudioCommonSceneToVdiSceneVdi(const struct AudioSceneDescriptor * scene,struct AudioSceneDescriptorVdi * vdiScene)388 int32_t AudioCommonSceneToVdiSceneVdi(const struct AudioSceneDescriptor *scene,
389 struct AudioSceneDescriptorVdi *vdiScene)
390 {
391 CHECK_NULL_PTR_RETURN_VALUE(scene, HDF_ERR_INVALID_PARAM);
392 CHECK_NULL_PTR_RETURN_VALUE(vdiScene, HDF_ERR_INVALID_PARAM);
393
394 vdiScene->scene.id = scene->scene.id;
395 AudioCommonDevDescToVdiDevDescVdi(&scene->desc, &vdiScene->desc);
396
397 return HDF_SUCCESS;
398 }
399
AudioCommonSampleAttrToVdiSampleAttrVdi(const struct AudioSampleAttributes * attrs,struct AudioSampleAttributesVdi * vdiAttrs)400 int32_t AudioCommonSampleAttrToVdiSampleAttrVdi(const struct AudioSampleAttributes *attrs,
401 struct AudioSampleAttributesVdi *vdiAttrs)
402 {
403 CHECK_NULL_PTR_RETURN_VALUE(attrs, HDF_ERR_INVALID_PARAM);
404 CHECK_NULL_PTR_RETURN_VALUE(vdiAttrs, HDF_ERR_INVALID_PARAM);
405
406 vdiAttrs->type = (enum AudioCategoryVdi)attrs->type;
407 vdiAttrs->interleaved = attrs->interleaved;
408 vdiAttrs->format = (enum AudioFormatVdi)attrs->format;
409 vdiAttrs->sampleRate = attrs->sampleRate;
410 vdiAttrs->channelCount = attrs->channelCount;
411 vdiAttrs->channelLayout = attrs->channelLayout;
412 vdiAttrs->period = attrs->period;
413 vdiAttrs->frameSize = attrs->frameSize;
414 vdiAttrs->isBigEndian = attrs->isBigEndian;
415 vdiAttrs->isSignedData = attrs->isSignedData;
416 vdiAttrs->startThreshold = attrs->startThreshold;
417 vdiAttrs->stopThreshold = attrs->stopThreshold;
418 vdiAttrs->silenceThreshold = attrs->silenceThreshold;
419 vdiAttrs->streamId = attrs->streamId;
420 vdiAttrs->sourceType = attrs->sourceType;
421 if (vdiAttrs->type == AUDIO_VDI_OFFLOAD) {
422 vdiAttrs->offloadInfo.sampleRate = attrs->offloadInfo.sampleRate;
423 vdiAttrs->offloadInfo.channelCount = attrs->offloadInfo.channelCount;
424 vdiAttrs->offloadInfo.channelLayout = attrs->offloadInfo.channelLayout;
425 vdiAttrs->offloadInfo.bitRate = attrs->offloadInfo.bitRate;
426 vdiAttrs->offloadInfo.bitWidth = attrs->offloadInfo.bitWidth;
427 vdiAttrs->offloadInfo.format = (enum AudioFormatVdi)attrs->offloadInfo.format;
428 vdiAttrs->offloadInfo.offloadBufferSize = attrs->offloadInfo.offloadBufferSize;
429 vdiAttrs->offloadInfo.duration = attrs->offloadInfo.duration;
430 }
431 return HDF_SUCCESS;
432 }
433
AudioCommonVdiSampleAttrToSampleAttrVdi(const struct AudioSampleAttributesVdi * vdiAttrs,struct AudioSampleAttributes * attrs)434 int32_t AudioCommonVdiSampleAttrToSampleAttrVdi(const struct AudioSampleAttributesVdi *vdiAttrs,
435 struct AudioSampleAttributes *attrs)
436 {
437 CHECK_NULL_PTR_RETURN_VALUE(attrs, HDF_ERR_INVALID_PARAM);
438 CHECK_NULL_PTR_RETURN_VALUE(vdiAttrs, HDF_ERR_INVALID_PARAM);
439
440 attrs->type = (enum AudioCategory)vdiAttrs->type;
441 attrs->interleaved = vdiAttrs->interleaved;
442 attrs->format = (enum AudioFormat)vdiAttrs->format;
443 attrs->sampleRate = vdiAttrs->sampleRate;
444 attrs->channelCount = vdiAttrs->channelCount;
445 attrs->period = vdiAttrs->period;
446 attrs->frameSize = vdiAttrs->frameSize;
447 attrs->isBigEndian = vdiAttrs->isBigEndian;
448 attrs->isSignedData = vdiAttrs->isSignedData;
449 attrs->startThreshold = vdiAttrs->startThreshold;
450 attrs->stopThreshold = vdiAttrs->stopThreshold;
451 attrs->silenceThreshold = vdiAttrs->silenceThreshold;
452 attrs->streamId = vdiAttrs->streamId;
453
454 return HDF_SUCCESS;
455 }
456