diff --git a/framework/model/audio/common/src/audio_dma_base.c b/framework/model/audio/common/src/audio_dma_base.c index a56f9168d65bc4b7764deb18ac0738fb395d16ad..cfde4ae5b3455c717900a15f8b5ebeebedefba7a 100644 --- a/framework/model/audio/common/src/audio_dma_base.c +++ b/framework/model/audio/common/src/audio_dma_base.c @@ -12,6 +12,7 @@ #define HDF_LOG_TAG HDF_AUDIO_KADM #define DMA_TRANSFER_MAX_COUNT 12 // Support 96000 ~ 8000 sampling rate +#define DMA_PCM_STOP 0x0F0F0000 // meanings dma stopped int32_t AudioDmaBufAlloc(struct PlatformData *data, enum AudioStreamType streamType) { @@ -133,6 +134,7 @@ bool AudioDmaTransferStatusIsNormal(struct PlatformData *data, enum AudioStreamT data->renderBufInfo.trafCompCount++; if (data->renderBufInfo.trafCompCount > DMA_TRANSFER_MAX_COUNT) { AUDIO_DRIVER_LOG_ERR("audio render send data to DMA too slow DMA will stop!"); + data->renderBufInfo.runStatus |= DMA_PCM_STOP; return false; } } else { diff --git a/framework/model/audio/common/src/audio_platform_base.c b/framework/model/audio/common/src/audio_platform_base.c index b16fe518e30cf3a4281e805c6503d0df29718133..650ed302830d5b8cca782fd24e9842b12bf80b49 100755 --- a/framework/model/audio/common/src/audio_platform_base.c +++ b/framework/model/audio/common/src/audio_platform_base.c @@ -19,6 +19,7 @@ #define MAX_PERIOD_SIZE (8 * 1024) #define MIN_PERIOD_SIZE (2 * 1024) #define SECOND_TO_MILLISECOND 1000 +#define DMA_PCM_START_STOP 0x0f0f0002 const int32_t PERIOD_COUNT = 4; const int32_t RENDER_TRAF_BUF_SIZE = 1024; @@ -327,6 +328,9 @@ int32_t AudioPcmWrite(const struct AudioCard *card, struct AudioTxData *txData) status = AudioDmaBuffStatus(card, AUDIO_RENDER_STREAM); if (status != ENUM_CIR_BUFF_NORMAL) { txData->status = status; + if (data->renderBufInfo.runStatus == DMA_PCM_START_STOP) { + txData->status = ENUM_CIR_BUFF_STOP; + } return HDF_SUCCESS; } diff --git a/framework/model/audio/core/include/audio_host.h b/framework/model/audio/core/include/audio_host.h index 9b264edf5b9e26620fab162514bd54d75cde8087..a07725cdc7d0f616fb9972fac5f959b64568ea91 100644 --- a/framework/model/audio/core/include/audio_host.h +++ b/framework/model/audio/core/include/audio_host.h @@ -114,6 +114,7 @@ enum CriBuffStatus { ENUM_CIR_BUFF_NORMAL = -1, ENUM_CIR_BUFF_FULL = -2, ENUM_CIR_BUFF_EMPTY = -3, + ENUM_CIR_BUFF_STOP = -4, }; enum AudioStreamType {