Browse Source

fix:避免无效的audio数据

alienwalker 3 years ago
parent
commit
a4f099f647
2 changed files with 17 additions and 4 deletions
  1. 14 2
      application/src/luat_audio_air105.c
  2. 3 2
      bsp/audio/src/audio_ll_drv.c

+ 14 - 2
application/src/luat_audio_air105.c

@@ -107,7 +107,14 @@ static int32_t luat_audio_mp3_decode(void *pData, void *pParam)
 
 int32_t luat_audio_decode_run(void *pData, void *pParam)
 {
-	prvAudioStream.Decoder(pData, pParam);
+	if (!prvAudioStream.IsStop)
+	{
+		prvAudioStream.Decoder(pData, pParam);
+	}
+	else
+	{
+		DBG("%d", prvAudioStream.waitRequire);
+	}
 	if (prvAudioStream.waitRequire)
 	{
 		prvAudioStream.waitRequire--;
@@ -141,6 +148,10 @@ int32_t luat_audio_play_cb(void *pData, void *pParam)
 			prvAudioStream.waitRequire++;
 			Core_ServiceRunUserAPIWithFile(luat_audio_decode_run, &prvAudioStream, prvAudioStream.CoderParam);
 		}
+		else
+		{
+			DBG("%d", prvAudioStream.waitRequire);
+		}
 	}
 	return 0;
 }
@@ -213,6 +224,7 @@ int luat_audio_play_stop(uint8_t multimedia_id)
 
 uint8_t luat_audio_is_finish(uint8_t multimedia_id)
 {
+	DBG("%d", prvAudioStream.waitRequire);
 	return !prvAudioStream.waitRequire;
 }
 
@@ -316,7 +328,7 @@ int luat_audio_play_file(uint8_t multimedia_id, const char *path)
 		result = luat_audio_start_raw(multimedia_id, audio_format, num_channels, sample_rate, bits_per_sample, is_signed);
 		if (!result)
 		{
-			LLOGD("decode %s ok,param,%d,%d,%d,%d,%d,%d,%u", path,multimedia_id, audio_format, num_channels, sample_rate, bits_per_sample, is_signed, prvAudioStream.FileDataBuffer.MaxLen);
+			LLOGD("decode %s ok,param,%d,%d,%d,%d,%d,%d,%u,%u", path,multimedia_id, audio_format, num_channels, sample_rate, bits_per_sample, is_signed, prvAudioStream.FileDataBuffer.MaxLen, prvAudioStream.AudioDataBuffer.MaxLen);
 			prvAudioStream.IsPlaying = 1;
 			prvAudioStream.pParam = multimedia_id;
 			prvAudioStream.Decoder(&prvAudioStream, prvAudioStream.CoderParam);

+ 3 - 2
bsp/audio/src/audio_ll_drv.c

@@ -126,7 +126,7 @@ static int32_t prvAudio_WriteDACRaw(Audio_StreamStruct *pStream, uint8_t *pByteD
 		if (!Block->uPV.pu8)
 		{
 			free(Block);
-			DBG("no mem!");
+			DBG("no mem!, %u,%u", ByteLen, VaildLen);
 			return -ERROR_NO_MEMORY;
 		}
 		Block->Len = VaildLen >> 1;
@@ -174,7 +174,7 @@ static int32_t prvAudio_WriteDACRaw(Audio_StreamStruct *pStream, uint8_t *pByteD
 		if (!Block->uPV.pu8)
 		{
 			free(Block);
-			DBG("no mem!");
+			DBG("no mem!, %u,%u", ByteLen, VaildLen);
 			return -ERROR_NO_MEMORY;
 		}
 		Block->Len = VaildLen;
@@ -209,6 +209,7 @@ static int32_t prvAudio_WriteDACRaw(Audio_StreamStruct *pStream, uint8_t *pByteD
 
 int32_t Audio_WriteRaw(Audio_StreamStruct *pStream, uint8_t *pByteData, uint32_t ByteLen)
 {
+	if (!ByteLen) {return -ERROR_PARAM_INVALID;}
 	switch(pStream->BusType)
 	{
 	case AUSTREAM_BUS_DAC: