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