diff --git a/framework/model/audio/common/src/audio_dma_base.c b/framework/model/audio/common/src/audio_dma_base.c index a56f9168d65bc4b7764deb18ac0738fb395d16ad..815006231c75ba2760ff6e1c3c660bdb085744cf 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 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..facc562b01186dbb1d7e51399c383e7e113373e8 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_STOP_START 0x0F0F0002 const int32_t PERIOD_COUNT = 4; const int32_t RENDER_TRAF_BUF_SIZE = 1024; @@ -300,7 +301,7 @@ int32_t AudioPcmWrite(const struct AudioCard *card, struct AudioTxData *txData) int32_t status; uint32_t wPtr; int32_t ret; - + AUDIO_DRIVER_LOG_INFO("ENTER."); if (card == NULL || txData == NULL || txData->buf == NULL) { AUDIO_DRIVER_LOG_ERR("input param is null."); return HDF_FAILURE; @@ -312,6 +313,12 @@ int32_t AudioPcmWrite(const struct AudioCard *card, struct AudioTxData *txData) return HDF_FAILURE; } + // if (data->dmaStopped) { + // AUDIO_DRIVER_LOG_WARNING("DMA Already Stopped."); + // txData->status = ENUM_CIR_BUFF_STOP; + // return HDF_SUCCESS; + // } + // 1. Computed buffer size data->renderBufInfo.trafBufSize = txData->frames * data->renderPcmInfo.frameSize; @@ -325,8 +332,12 @@ int32_t AudioPcmWrite(const struct AudioCard *card, struct AudioTxData *txData) } // 3. Buffer state checking status = AudioDmaBuffStatus(card, AUDIO_RENDER_STREAM); + AUDIO_DRIVER_LOG_INFO("ENTER.status:%d", status); if (status != ENUM_CIR_BUFF_NORMAL) { txData->status = status; + if (data->renderBufInfo.runStatus == DMA_PCM_STOP_START) { + txData->status = -4; + } return HDF_SUCCESS; } @@ -350,7 +361,7 @@ int32_t AudioPcmWrite(const struct AudioCard *card, struct AudioTxData *txData) txData->status = ENUM_CIR_BUFF_NORMAL; data->renderBufInfo.wptrOffSet = wPtr + data->renderBufInfo.trafBufSize; data->renderBufInfo.wbufOffSet += data->renderBufInfo.trafBufSize; - + AUDIO_DRIVER_LOG_INFO("out."); 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 { diff --git a/framework/model/audio/dispatch/src/audio_stream_dispatch.c b/framework/model/audio/dispatch/src/audio_stream_dispatch.c index 4e478490a8c450a28fef04556adb46b4892737a9..33856b85affe9f2fb123366797f933f956a9fe36 100644 --- a/framework/model/audio/dispatch/src/audio_stream_dispatch.c +++ b/framework/model/audio/dispatch/src/audio_stream_dispatch.c @@ -21,6 +21,7 @@ static inline struct StreamHost *StreamHostFromDevice(const struct HdfDeviceObje static int32_t HwCpuDaiDispatch(const struct AudioCard *audioCard, const struct AudioPcmHwParams *params) { + ADM_LOG_INFO("entry."); struct AudioRuntimeDeivces *rtd = NULL; struct DaiDevice *cpuDai = NULL; int32_t ret; @@ -49,12 +50,13 @@ static int32_t HwCpuDaiDispatch(const struct AudioCard *audioCard, const struct } else { ADM_LOG_WARNING("cpuDai not support the function of setting hardware parameter"); } - + ADM_LOG_INFO("out."); return HDF_SUCCESS; } static int32_t HwCodecDaiDispatch(const struct AudioCard *audioCard, const struct AudioPcmHwParams *params) { + ADM_LOG_INFO("entry."); struct AudioRuntimeDeivces *rtd = NULL; struct DaiDevice *codecDai = NULL; int32_t ret; @@ -82,7 +84,7 @@ static int32_t HwCodecDaiDispatch(const struct AudioCard *audioCard, const struc } else { ADM_LOG_WARNING("codecDai not support the function of setting hardware parameter"); } - + ADM_LOG_INFO("out."); return HDF_SUCCESS; } @@ -117,6 +119,7 @@ static int32_t HwDspDaiDispatch(const struct AudioCard *audioCard, const struct static int32_t HwPlatformDispatch(const struct AudioCard *audioCard, const struct AudioPcmHwParams *params) { + ADM_LOG_INFO("entry."); int32_t ret; struct AudioRuntimeDeivces *rtd = NULL; if ((audioCard == NULL) || (params == NULL)) { @@ -138,7 +141,7 @@ static int32_t HwPlatformDispatch(const struct AudioCard *audioCard, const struc ADM_LOG_ERR("platform hardware params failed ret=%d", ret); return HDF_ERR_IO; } - + ADM_LOG_INFO("out."); return HDF_SUCCESS; } @@ -195,7 +198,7 @@ static int32_t CpuDaiDevStartup(const struct AudioCard *audioCard, const struct return HDF_FAILURE; } } else { - ADM_LOG_DEBUG("cpu dai startup is null."); + ADM_LOG_INFO("cpu dai startup is null."); } return HDF_SUCCESS; } @@ -215,7 +218,7 @@ static int32_t CodecDaiDevStartup(const struct AudioCard *audioCard, const struc return HDF_FAILURE; } } else { - ADM_LOG_DEBUG("codec dai startup is null."); + ADM_LOG_INFO("codec dai startup is null."); } return HDF_SUCCESS; @@ -236,7 +239,7 @@ static int32_t DspDaiDevStartup(const struct AudioCard *audioCard, const struct return HDF_FAILURE; } } else { - ADM_LOG_DEBUG("dsp dai startup is null."); + ADM_LOG_INFO("dsp dai startup is null."); } return HDF_SUCCESS; } @@ -288,7 +291,7 @@ static int32_t CpuDaiDevShutdown(const struct AudioCard *audioCard, const struct return HDF_FAILURE; } } else { - ADM_LOG_DEBUG("cpu dai Shutdown is null."); + ADM_LOG_INFO("cpu dai Shutdown is null."); } return HDF_SUCCESS; } @@ -308,7 +311,7 @@ static int32_t CodecDaiDevShutdown(const struct AudioCard *audioCard, const stru return HDF_FAILURE; } } else { - ADM_LOG_DEBUG("codec dai Shutdown is null."); + ADM_LOG_INFO("codec dai Shutdown is null."); } return HDF_SUCCESS; @@ -329,7 +332,7 @@ static int32_t DspDaiDevShutdown(const struct AudioCard *audioCard, const struct return HDF_FAILURE; } } else { - ADM_LOG_DEBUG("dsp dai Shutdown is null."); + ADM_LOG_INFO("dsp dai Shutdown is null."); } return HDF_SUCCESS; } @@ -379,7 +382,7 @@ static int32_t CpuDaiDevMuteStream(const struct AudioCard *audioCard, const stru return HDF_FAILURE; } } else { - ADM_LOG_DEBUG("cpu dai MuteStream is null."); + ADM_LOG_INFO("cpu dai MuteStream is null."); } return HDF_SUCCESS; } @@ -400,7 +403,7 @@ static int32_t CodecDaiDevMuteStream(const struct AudioCard *audioCard, const st return HDF_FAILURE; } } else { - ADM_LOG_DEBUG("codec dai MuteStream is null."); + ADM_LOG_INFO("codec dai MuteStream is null."); } return HDF_SUCCESS; @@ -422,7 +425,7 @@ static int32_t DspDaiDevMuteStream(const struct AudioCard *audioCard, const stru return HDF_FAILURE; } } else { - ADM_LOG_DEBUG("dsp dai Shutdown is null."); + ADM_LOG_INFO("dsp dai Shutdown is null."); } return HDF_SUCCESS; } @@ -553,7 +556,7 @@ static int32_t StreamHostHwParams(const struct HdfDeviceIoClient *client, struct return HDF_FAILURE; } ADM_LOG_INFO("params->period = %d", params.period); - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } @@ -588,7 +591,7 @@ static int32_t StreamHostCapturePrepare(const struct HdfDeviceIoClient *client, return HDF_ERR_IO; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } @@ -622,13 +625,14 @@ static int32_t StreamHostCaptureOpen(const struct HdfDeviceIoClient *client, str return HDF_FAILURE; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } static int32_t StreamHostRenderPrepare(const struct HdfDeviceIoClient *client, struct HdfSBuf *data, struct HdfSBuf *reply) { + ADM_LOG_INFO("entry."); struct AudioCard *audioCard = NULL; int32_t ret; @@ -658,7 +662,7 @@ static int32_t StreamHostRenderPrepare(const struct HdfDeviceIoClient *client, s return HDF_ERR_IO; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } @@ -692,14 +696,14 @@ static int32_t StreamHostRenderOpen(const struct HdfDeviceIoClient *client, stru return HDF_FAILURE; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } static int32_t StreamTransferWrite(const struct AudioCard *audioCard, struct AudioTxData *transfer) { int32_t ret; - + ADM_LOG_INFO("entry."); if (audioCard == NULL || transfer == NULL) { ADM_LOG_ERR("input param is NULL."); return HDF_FAILURE; @@ -710,14 +714,14 @@ static int32_t StreamTransferWrite(const struct AudioCard *audioCard, struct Aud ADM_LOG_ERR("pcm write failed ret=%d", ret); return HDF_FAILURE; } - + ADM_LOG_INFO("OUT."); return HDF_SUCCESS; } static int32_t StreamTransferMmapWrite(const struct AudioCard *audioCard, const struct AudioMmapData *txMmapData) { int32_t ret; - ADM_LOG_DEBUG("entry."); + ADM_LOG_INFO("entry."); if (audioCard == NULL || txMmapData == NULL) { ADM_LOG_ERR("input param is NULL."); @@ -730,14 +734,14 @@ static int32_t StreamTransferMmapWrite(const struct AudioCard *audioCard, const return HDF_FAILURE; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } static int32_t StreamTransferMmapRead(const struct AudioCard *audioCard, const struct AudioMmapData *rxMmapData) { int32_t ret; - ADM_LOG_DEBUG("entry."); + ADM_LOG_INFO("entry."); if (audioCard == NULL || rxMmapData == NULL) { ADM_LOG_ERR("input param is NULL."); @@ -750,12 +754,13 @@ static int32_t StreamTransferMmapRead(const struct AudioCard *audioCard, const s return HDF_FAILURE; } - ADM_LOG_DEBUG("sucess."); + ADM_LOG_INFO("sucess."); return HDF_SUCCESS; } static int32_t StreamHostWrite(const struct HdfDeviceIoClient *client, struct HdfSBuf *data, struct HdfSBuf *reply) { + ADM_LOG_INFO("entry."); struct AudioTxData transfer; struct AudioCard *audioCard = NULL; int32_t ret; @@ -792,12 +797,13 @@ static int32_t StreamHostWrite(const struct HdfDeviceIoClient *client, struct Hd ADM_LOG_ERR("read response status failed!"); return HDF_FAILURE; } - ADM_LOG_DEBUG("card name: %s success.", audioCard->configData.cardServiceName); + ADM_LOG_INFO("card name: %s success, dataSize:%u, status:%d.", audioCard->configData.cardServiceName, dataSize, (int32_t)(transfer.status)); return HDF_SUCCESS; } static int32_t StreamHostRead(const struct HdfDeviceIoClient *client, struct HdfSBuf *data, struct HdfSBuf *reply) { + ADM_LOG_INFO("entry."); struct AudioCard *audioCard = NULL; struct AudioRxData rxData; int32_t ret; @@ -837,7 +843,7 @@ static int32_t StreamHostRead(const struct HdfDeviceIoClient *client, struct Hdf } } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } @@ -898,7 +904,7 @@ static int32_t StreamHostMmapWrite(const struct HdfDeviceIoClient *client, struc ADM_LOG_ERR("render mmap write reg value failed!"); return HDF_FAILURE; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } @@ -908,7 +914,7 @@ static int32_t StreamHostMmapPositionWrite(const struct HdfDeviceIoClient *clien struct AudioCard *audioCard = NULL; struct PlatformData *platform = NULL; - ADM_LOG_DEBUG("entry."); + ADM_LOG_INFO("entry."); (void)client; if (data == NULL || reply == NULL) { @@ -930,7 +936,7 @@ static int32_t StreamHostMmapPositionWrite(const struct HdfDeviceIoClient *clien ADM_LOG_ERR("render mmap write position failed!"); return HDF_FAILURE; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } @@ -992,7 +998,7 @@ static int32_t StreamHostMmapRead(const struct HdfDeviceIoClient *client, struct ADM_LOG_ERR("capture mmap read reg value failed!"); return HDF_FAILURE; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } @@ -1022,7 +1028,7 @@ static int32_t StreamHostMmapPositionRead(const struct HdfDeviceIoClient *client ADM_LOG_ERR("render mmap write position failed!"); return HDF_FAILURE; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } @@ -1074,7 +1080,7 @@ static int32_t StreamHostRenderStart(const struct HdfDeviceIoClient *client, struct AudioRuntimeDeivces *rtd = NULL; struct AudioCard *audioCard = NULL; int32_t ret; - + ADM_LOG_INFO("enter."); if (data == NULL) { ADM_LOG_ERR("RenderStart input param is NULL."); return HDF_FAILURE; @@ -1099,13 +1105,14 @@ static int32_t StreamHostRenderStart(const struct HdfDeviceIoClient *client, ADM_LOG_ERR("platform render start failed ret=%d", ret); return HDF_ERR_IO; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } static int32_t StreamHostCaptureStart(const struct HdfDeviceIoClient *client, struct HdfSBuf *data, struct HdfSBuf *reply) { + ADM_LOG_INFO("entry."); struct AudioRuntimeDeivces *rtd = NULL; struct AudioCard *audioCard = NULL; int32_t ret; @@ -1135,13 +1142,14 @@ static int32_t StreamHostCaptureStart(const struct HdfDeviceIoClient *client, return HDF_ERR_IO; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("OUT."); return HDF_SUCCESS; } static int32_t StreamHostRenderStop(const struct HdfDeviceIoClient *client, struct HdfSBuf *data, struct HdfSBuf *reply) { + ADM_LOG_INFO("entry."); struct AudioRuntimeDeivces *rtd = NULL; struct AudioCard *audioCard = NULL; int32_t ret; @@ -1174,7 +1182,7 @@ static int32_t StreamHostRenderStop(const struct HdfDeviceIoClient *client, stru return HDF_ERR_IO; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } @@ -1216,7 +1224,7 @@ static int32_t StreamHostRenderClose(const struct HdfDeviceIoClient *client, str return HDF_ERR_IO; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } @@ -1226,7 +1234,7 @@ static int32_t StreamHostCaptureStop(const struct HdfDeviceIoClient *client, struct AudioRuntimeDeivces *rtd = NULL; struct AudioCard *audioCard = NULL; int32_t ret; - + ADM_LOG_INFO("entry."); if (data == NULL) { ADM_LOG_ERR("CaptureStop input param is NULL."); return HDF_FAILURE; @@ -1257,7 +1265,7 @@ static int32_t StreamHostCaptureStop(const struct HdfDeviceIoClient *client, return HDF_ERR_IO; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } @@ -1299,13 +1307,14 @@ static int32_t StreamHostCaptureClose(const struct HdfDeviceIoClient *client, return HDF_ERR_IO; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } static int32_t StreamHostRenderPause(const struct HdfDeviceIoClient *client, struct HdfSBuf *data, struct HdfSBuf *reply) { + ADM_LOG_INFO("entry."); struct AudioRuntimeDeivces *rtd = NULL; struct AudioCard *audioCard = NULL; int32_t ret; @@ -1334,7 +1343,7 @@ static int32_t StreamHostRenderPause(const struct HdfDeviceIoClient *client, return HDF_ERR_IO; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } @@ -1344,7 +1353,7 @@ static int32_t StreamHostCapturePause(const struct HdfDeviceIoClient *client, st struct AudioRuntimeDeivces *rtd = NULL; struct AudioCard *audioCard = NULL; int32_t ret; - + ADM_LOG_INFO("entry."); if (data == NULL) { ADM_LOG_ERR("CapturePause input param is NULL."); return HDF_FAILURE; @@ -1370,7 +1379,7 @@ static int32_t StreamHostCapturePause(const struct HdfDeviceIoClient *client, st return HDF_ERR_IO; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("OUT."); return HDF_SUCCESS; } @@ -1380,7 +1389,7 @@ static int32_t StreamHostRenderResume(const struct HdfDeviceIoClient *client, st struct AudioRuntimeDeivces *rtd = NULL; struct AudioCard *audioCard = NULL; int32_t ret; - ADM_LOG_DEBUG("entry."); + ADM_LOG_INFO("entry."); if (data == NULL) { ADM_LOG_ERR("RenderResume input param is NULL."); @@ -1406,7 +1415,7 @@ static int32_t StreamHostRenderResume(const struct HdfDeviceIoClient *client, st return HDF_ERR_IO; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("success."); return HDF_SUCCESS; } @@ -1417,7 +1426,7 @@ static int32_t StreamHostCaptureResume(const struct HdfDeviceIoClient *client, s struct AudioCard *audioCard = NULL; int32_t ret; - ADM_LOG_DEBUG("entry."); + ADM_LOG_INFO("entry."); if (data == NULL) { ADM_LOG_ERR("CaptureResume input param is NULL."); return HDF_FAILURE; @@ -1443,7 +1452,7 @@ static int32_t StreamHostCaptureResume(const struct HdfDeviceIoClient *client, s return HDF_ERR_IO; } - ADM_LOG_DEBUG("success."); + ADM_LOG_INFO("OUT."); return HDF_SUCCESS; } @@ -1455,7 +1464,7 @@ static int32_t StreamHostDspDecode(const struct HdfDeviceIoClient *client, struc struct AudioCard *audioCard = NULL; int32_t ret; - ADM_LOG_DEBUG("Dsp Decode Entry."); + ADM_LOG_INFO("Dsp Decode Entry."); if (data == NULL) { ADM_LOG_ERR("DspDecode input param is NULL."); @@ -1483,7 +1492,7 @@ static int32_t StreamHostDspDecode(const struct HdfDeviceIoClient *client, struc return HDF_ERR_IO; } - ADM_LOG_DEBUG("Decode Success."); + ADM_LOG_INFO("Decode Success."); return HDF_SUCCESS; } @@ -1494,7 +1503,7 @@ static int32_t StreamHostDspEncode(const struct HdfDeviceIoClient *client, struc struct DspDevice *dspDev = NULL; struct AudioCard *audioCard = NULL; int32_t ret; - ADM_LOG_DEBUG("Dsp Encode Entry."); + ADM_LOG_INFO("Dsp Encode Entry."); if (data == NULL) { ADM_LOG_ERR("DspEncode input param is NULL."); @@ -1522,7 +1531,7 @@ static int32_t StreamHostDspEncode(const struct HdfDeviceIoClient *client, struc return HDF_ERR_IO; } - ADM_LOG_DEBUG("Encode Success."); + ADM_LOG_INFO("Encode Success."); return HDF_SUCCESS; } @@ -1533,7 +1542,7 @@ static int32_t StreamHostDspEqualizer(const struct HdfDeviceIoClient *client, st struct DspDevice *dspDev = NULL; struct AudioCard *audioCard = NULL; int32_t ret ; - ADM_LOG_DEBUG("Dsp Equalizer Entry."); + ADM_LOG_INFO("Dsp Equalizer Entry."); if (data == NULL) { ADM_LOG_ERR("DspEqualizer input param is NULL."); @@ -1562,7 +1571,7 @@ static int32_t StreamHostDspEqualizer(const struct HdfDeviceIoClient *client, st return HDF_ERR_IO; } - ADM_LOG_DEBUG("Equalizer Success."); + ADM_LOG_INFO("Equalizer Success."); return HDF_SUCCESS; } @@ -1628,7 +1637,7 @@ static struct StreamHost *StreamHostCreateAndBind(struct HdfDeviceObject *device static int32_t AudioStreamBind(struct HdfDeviceObject *device) { struct StreamHost *streamHost = NULL; - ADM_LOG_DEBUG("entry!"); + ADM_LOG_INFO("entry!"); if (device == NULL) { ADM_LOG_ERR("device is null!"); return HDF_ERR_INVALID_PARAM; @@ -1654,7 +1663,7 @@ static int32_t AudioStreamInit(struct HdfDeviceObject *device) ADM_LOG_ERR("device is NULL"); return HDF_FAILURE; } - ADM_LOG_DEBUG("entry."); + ADM_LOG_INFO("entry."); streamHost = StreamHostFromDevice(device); if (streamHost == NULL) {