diff --git a/audio/hdi_service/primary_impl/include/audio_internal.h b/audio/hdi_service/primary_impl/include/audio_internal.h index 80381902f8f57c7e32c07c6a48b563ff4fa4ad57..025bef7f3b73aaf51ae49fb5feb21c8dff413d9a 100644 --- a/audio/hdi_service/primary_impl/include/audio_internal.h +++ b/audio/hdi_service/primary_impl/include/audio_internal.h @@ -264,6 +264,7 @@ struct AudioHwRender { struct DevHandle *devCtlHandle; // Bind Ctl handle struct HdfRemoteService *proxyRemoteHandle; // proxyPriRemoteHandle struct ErrorLog errorLog; + bool started; }; struct AudioHwCaptureMode { diff --git a/audio/hdi_service/primary_impl/src/audio_render.c b/audio/hdi_service/primary_impl/src/audio_render.c index 1f1257a6b880ffe2453e8c8f6d3b7d8e5993960f..3ddd9d9b1c6b6a10040215abc1f881694ce388cd 100644 --- a/audio/hdi_service/primary_impl/src/audio_render.c +++ b/audio/hdi_service/primary_impl/src/audio_render.c @@ -104,7 +104,7 @@ int32_t AudioRenderStart(struct IAudioRender *handle) } int32_t ret = - (*pInterfaceLibModeRender)(hwRender->devDataHandle, &hwRender->renderParam, AUDIO_DRV_PCM_IOCTRL_START); + (*pInterfaceLibModeRender)(hwRender->devDataHandle, &hwRender->renderParam, AUDIO_DRV_PCM_IOCTRL_RESUME); if (ret < 0) { pthread_mutex_unlock(&hwRender->renderParam.frameRenderMode.mutex); AUDIO_FUNC_LOGE("AudioRenderStart SetParams FAIL"); @@ -820,6 +820,10 @@ static int32_t AudioRenderRenderFramSplit(struct AudioHwRender *hwRender) AUDIO_FUNC_LOGE("hwRender->devDataHandle is null!"); return HDF_FAILURE; } + if (!hwRender->started) { + (void)(*pInterfaceLibModeRender)(hwRender->devDataHandle, &hwRender->renderParam, AUDIO_DRV_PCM_IOCTRL_START); + hwRender->started = true; + } int32_t ret = (*pInterfaceLibModeRender)(hwRender->devDataHandle, &hwRender->renderParam, AUDIO_DRV_PCM_IOCTL_WRITE);