From 47f6582d87407cf3c9259aebf7f02eda7035ef87 Mon Sep 17 00:00:00 2001 From: JanierVan Date: Tue, 11 Apr 2023 11:13:21 +0800 Subject: [PATCH] fix: audio create render and capture Signed-off-by: JanierVan --- .../vendor_src/audio_adapter_vendor.c | 8 +++---- .../vendor_src/audio_capture_vendor.c | 23 +++++++++++++++---- .../vendor_src/audio_capture_vendor.h | 5 ++-- .../vendor_src/audio_render_vendor.c | 17 ++++++++++---- .../vendor_src/audio_render_vendor.h | 5 ++-- 5 files changed, 40 insertions(+), 18 deletions(-) diff --git a/audio/hdi_service/primary_impl/vendor_src/audio_adapter_vendor.c b/audio/hdi_service/primary_impl/vendor_src/audio_adapter_vendor.c index ad058bb522..2eb99a212d 100644 --- a/audio/hdi_service/primary_impl/vendor_src/audio_adapter_vendor.c +++ b/audio/hdi_service/primary_impl/vendor_src/audio_adapter_vendor.c @@ -107,7 +107,7 @@ int32_t AudioHwiCreateRender(struct IAudioAdapter *adapter, const struct AudioDe CHECK_NULL_PTR_RETURN_VALUE(render, HDF_ERR_INVALID_PARAM); CHECK_NULL_PTR_RETURN_VALUE(renderId, HDF_ERR_INVALID_PARAM); - *render = FindRenderCreated(desc->pins, attrs->type, renderId); + *render = FindRenderCreated(desc->pins, attrs, renderId); if (*render != NULL) { AUDIO_FUNC_LOGE("already created"); return HDF_SUCCESS; @@ -128,7 +128,7 @@ int32_t AudioHwiCreateRender(struct IAudioAdapter *adapter, const struct AudioDe return HDF_FAILURE; } - *render = AudioHwiCreateRenderById(attrs->type, renderId, hwiRender, desc); + *render = AudioHwiCreateRenderById(attrs, renderId, hwiRender, desc); if (*render == NULL) { (void)hwiAdapter->DestroyRender(hwiAdapter, hwiRender); AUDIO_FUNC_LOGE("Create audio render failed"); @@ -169,7 +169,7 @@ int32_t AudioHwiCreateCapture(struct IAudioAdapter *adapter, const struct AudioD CHECK_NULL_PTR_RETURN_VALUE(capture, HDF_ERR_INVALID_PARAM); CHECK_NULL_PTR_RETURN_VALUE(captureId, HDF_ERR_INVALID_PARAM); - *capture = FindCaptureCreated(desc->pins, attrs->type, captureId); + *capture = FindCaptureCreated(desc->pins, attrs, captureId); if (*capture != NULL) { AUDIO_FUNC_LOGE("already created"); return HDF_SUCCESS; @@ -194,7 +194,7 @@ int32_t AudioHwiCreateCapture(struct IAudioAdapter *adapter, const struct AudioD return HDF_FAILURE; } - *capture = AudioHwiCreateCaptureById(attrs->type, captureId, hwiCapture, desc); + *capture = AudioHwiCreateCaptureById(attrs, captureId, hwiCapture, desc); if (*capture == NULL) { (void)hwiAdapter->DestroyCapture(hwiAdapter, hwiCapture); AUDIO_FUNC_LOGE("create audio capture failed"); diff --git a/audio/hdi_service/primary_impl/vendor_src/audio_capture_vendor.c b/audio/hdi_service/primary_impl/vendor_src/audio_capture_vendor.c index a5b0fd3dda..52ea616ab1 100644 --- a/audio/hdi_service/primary_impl/vendor_src/audio_capture_vendor.c +++ b/audio/hdi_service/primary_impl/vendor_src/audio_capture_vendor.c @@ -27,6 +27,8 @@ struct AudioCaptureInfo { struct AudioDeviceDescriptor desc; enum AudioCategory streamType; + unsigned int sampleRate; + unsigned int channelCount; struct IAudioCapture *capture; struct AudioHwiCapture *hwiCapture; uint32_t captureId; @@ -710,9 +712,16 @@ static void AudioHwiInitCaptureInstance(struct IAudioCapture *capture) capture->GetVersion = AudioHwiCaptureGetVersion; } -struct IAudioCapture *FindCaptureCreated(enum AudioPortPin pin, enum AudioCategory streamType, uint32_t *captureId) +struct IAudioCapture *FindCaptureCreated(enum AudioPortPin pin, const struct AudioSampleAttributes *attrs, + uint32_t *captureId) { uint32_t index = 0; + + if (captureId == NULL || attrs == NULL) { + AUDIO_FUNC_LOGE("audio params is null"); + return NULL; + } + struct AudioHwiCapturePriv *capturePriv = AudioHwiCaptureGetPriv(); if (capturePriv == NULL) { AUDIO_FUNC_LOGE("Parameter error!"); @@ -727,7 +736,9 @@ struct IAudioCapture *FindCaptureCreated(enum AudioPortPin pin, enum AudioCatego for (index = 0; index < AUDIO_HW_STREAM_NUM_MAX; index++) { if ((capturePriv->captureInfos[index] != NULL) && (capturePriv->captureInfos[index]->desc.pins == pin) && - (capturePriv->captureInfos[index]->streamType == streamType)) { + (capturePriv->captureInfos[index]->streamType == attrs->type) && + (capturePriv->captureInfos[index]->sampleRate == attrs->sampleRate) && + (capturePriv->captureInfos[index]->channelCount == attrs->channelCount)) { *captureId = capturePriv->captureInfos[index]->captureId; return capturePriv->captureInfos[index]->capture; } @@ -760,10 +771,10 @@ static uint32_t GetAvailableCaptureId(struct AudioHwiCapturePriv *capturePriv) return captureId; } -struct IAudioCapture *AudioHwiCreateCaptureById(enum AudioCategory streamType, uint32_t *captureId, +struct IAudioCapture *AudioHwiCreateCaptureById(const struct AudioSampleAttributes *attrs, uint32_t *captureId, struct AudioHwiCapture *hwiCapture, const struct AudioDeviceDescriptor *desc) { - if (captureId == NULL || hwiCapture == NULL || desc == NULL) { + if (attrs == NULL || captureId == NULL || hwiCapture == NULL || desc == NULL) { AUDIO_FUNC_LOGE("audio capture is null"); return NULL; } @@ -791,7 +802,9 @@ struct IAudioCapture *AudioHwiCreateCaptureById(enum AudioCategory streamType, u } priv->captureInfos[*captureId]->capture = capture; priv->captureInfos[*captureId]->hwiCapture = hwiCapture; - priv->captureInfos[*captureId]->streamType = streamType; + priv->captureInfos[*captureId]->streamType = attrs->type; + priv->captureInfos[*captureId]->sampleRate = attrs->sampleRate; + priv->captureInfos[*captureId]->channelCount = attrs->channelCount; priv->captureInfos[*captureId]->desc.portId = desc->portId; priv->captureInfos[*captureId]->desc.pins = desc->pins; priv->captureInfos[*captureId]->desc.desc = strdup(desc->desc); diff --git a/audio/hdi_service/primary_impl/vendor_src/audio_capture_vendor.h b/audio/hdi_service/primary_impl/vendor_src/audio_capture_vendor.h index fcfa41d20e..617d0e0e4f 100644 --- a/audio/hdi_service/primary_impl/vendor_src/audio_capture_vendor.h +++ b/audio/hdi_service/primary_impl/vendor_src/audio_capture_vendor.h @@ -19,10 +19,11 @@ #include "i_audio_capture.h" #include "v1_0/iaudio_capture.h" -struct IAudioCapture *AudioHwiCreateCaptureById(enum AudioCategory streamType, uint32_t *captureId, +struct IAudioCapture *AudioHwiCreateCaptureById(const struct AudioSampleAttributes *attrs, uint32_t *captureId, struct AudioHwiCapture *hwiCapture, const struct AudioDeviceDescriptor *desc); void AudioHwiDestroyCaptureById(uint32_t captureId); struct AudioHwiCapture *AudioHwiGetHwiCaptureById(uint32_t captureId); -struct IAudioCapture *FindCaptureCreated(enum AudioPortPin pin, enum AudioCategory streamType, uint32_t *captureId); +struct IAudioCapture *FindCaptureCreated(enum AudioPortPin pin, const struct AudioSampleAttributes *attrs, + uint32_t *captureId); #endif // AUDIO_CAPTURE_VENDOR_H diff --git a/audio/hdi_service/primary_impl/vendor_src/audio_render_vendor.c b/audio/hdi_service/primary_impl/vendor_src/audio_render_vendor.c index d33620236e..2ce12324a7 100644 --- a/audio/hdi_service/primary_impl/vendor_src/audio_render_vendor.c +++ b/audio/hdi_service/primary_impl/vendor_src/audio_render_vendor.c @@ -27,6 +27,8 @@ struct AudioRenderInfo { struct AudioDeviceDescriptor desc; enum AudioCategory streamType; + unsigned int sampleRate; + unsigned int channelCount; struct IAudioRender *render; struct AudioHwiRender *hwiRender; uint32_t renderId; @@ -885,7 +887,8 @@ static void AudioHwiInitRenderInstance(struct IAudioRender *render) render->GetVersion = AudioHwiRenderGetVersion; } -struct IAudioRender *FindRenderCreated(enum AudioPortPin pin, enum AudioCategory streamType, uint32_t *rendrId) +struct IAudioRender *FindRenderCreated(enum AudioPortPin pin, const struct AudioSampleAttributes *attrs, + uint32_t *rendrId) { uint32_t index = 0; struct AudioHwiRenderPriv *renderPriv = AudioHwiRenderGetPriv(); @@ -902,7 +905,9 @@ struct IAudioRender *FindRenderCreated(enum AudioPortPin pin, enum AudioCategory for (index = 0; index < AUDIO_HW_STREAM_NUM_MAX; index++) { if ((renderPriv->renderInfos[index] != NULL) && (renderPriv->renderInfos[index]->desc.pins == pin) && - (renderPriv->renderInfos[index]->streamType == streamType)) { + (renderPriv->renderInfos[index]->streamType == attrs->type) && + (renderPriv->renderInfos[index]->sampleRate == attrs->sampleRate) && + (renderPriv->renderInfos[index]->channelCount == attrs->channelCount)) { *rendrId = renderPriv->renderInfos[index]->renderId; return renderPriv->renderInfos[index]->render; } @@ -935,11 +940,11 @@ static uint32_t GetAvailableRenderId(struct AudioHwiRenderPriv *renderPriv) return renderId; } -struct IAudioRender *AudioHwiCreateRenderById(enum AudioCategory streamType, uint32_t *renderId, +struct IAudioRender *AudioHwiCreateRenderById(const struct AudioSampleAttributes *attrs, uint32_t *renderId, struct AudioHwiRender *hwiRender, const struct AudioDeviceDescriptor *desc) { struct IAudioRender *render = NULL; - if (renderId == NULL || hwiRender == NULL || desc == NULL) { + if (attrs == NULL || renderId == NULL || hwiRender == NULL || desc == NULL) { AUDIO_FUNC_LOGE("audio render is null"); return NULL; } @@ -966,7 +971,9 @@ struct IAudioRender *AudioHwiCreateRenderById(enum AudioCategory streamType, uin } priv->renderInfos[*renderId]->render = render; priv->renderInfos[*renderId]->hwiRender = hwiRender; - priv->renderInfos[*renderId]->streamType = streamType; + priv->renderInfos[*renderId]->streamType = attrs->type; + priv->renderInfos[*renderId]->sampleRate = attrs->sampleRate; + priv->renderInfos[*renderId]->channelCount = attrs->channelCount; priv->renderInfos[*renderId]->desc.portId = desc->portId; priv->renderInfos[*renderId]->desc.pins = desc->pins; priv->renderInfos[*renderId]->desc.desc = strdup(desc->desc); diff --git a/audio/hdi_service/primary_impl/vendor_src/audio_render_vendor.h b/audio/hdi_service/primary_impl/vendor_src/audio_render_vendor.h index ce77907efc..c1fadd823a 100644 --- a/audio/hdi_service/primary_impl/vendor_src/audio_render_vendor.h +++ b/audio/hdi_service/primary_impl/vendor_src/audio_render_vendor.h @@ -19,10 +19,11 @@ #include "i_audio_render.h" #include "v1_0/iaudio_render.h" -struct IAudioRender *AudioHwiCreateRenderById(enum AudioCategory streamType, uint32_t *renderId, +struct IAudioRender *AudioHwiCreateRenderById(const struct AudioSampleAttributes *attrs, uint32_t *renderId, struct AudioHwiRender *hwiRender, const struct AudioDeviceDescriptor *desc); void AudioHwiDestroyRenderById(uint32_t renderId); struct AudioHwiRender *AudioHwiGetHwiRenderById(uint32_t renderId); -struct IAudioRender *FindRenderCreated(enum AudioPortPin pin, enum AudioCategory streamType, uint32_t *rendrId); +struct IAudioRender *FindRenderCreated(enum AudioPortPin pin, const struct AudioSampleAttributes *attrs, + uint32_t *rendrId); #endif // AUDIO_RENDER_VENDOR_H -- Gitee