Browse Source

update:增大MP3解码的任务栈区

alienwalker 3 years ago
parent
commit
09403abcf6
2 changed files with 25 additions and 12 deletions
  1. 23 11
      application/src/luat_audio_air105.c
  2. 2 1
      bsp/common/src/core_service.c

+ 23 - 11
application/src/luat_audio_air105.c

@@ -65,6 +65,7 @@ static int32_t luat_audio_mp3_decode(void *pData, void *pParam)
 	mp3dec_t *mp3_decoder = (mp3dec_t *)pParam;
 	Audio_StreamStruct *Stream = (Audio_StreamStruct *)pData;
 	Stream->AudioDataBuffer.Pos = 0;
+
 	while ((llist_num(&Stream->DataHead) < 3) && is_not_end && !Stream->IsStop)
 	{
 		while (( Stream->AudioDataBuffer.Pos < (Stream->AudioDataBuffer.MaxLen >> 1) ) && is_not_end && !Stream->IsStop)
@@ -85,9 +86,18 @@ static int32_t luat_audio_mp3_decode(void *pData, void *pParam)
 			do
 			{
 				memset(&info, 0, sizeof(info));
+
 				result = mp3dec_decode_frame(mp3_decoder, Stream->FileDataBuffer.Data + pos, Stream->FileDataBuffer.Pos - pos,
 						Stream->AudioDataBuffer.Data + Stream->AudioDataBuffer.Pos, &info);
-				Stream->AudioDataBuffer.Pos += (result * info.channels * 2);
+
+				if (result > 0)
+				{
+					Stream->AudioDataBuffer.Pos += (result * info.channels * 2);
+				}
+				else
+				{
+					DBG("no mp3!");
+				}
 				pos += info.frame_bytes;
 				if (Stream->AudioDataBuffer.Pos >= (Stream->AudioDataBuffer.MaxLen >> 1))
 				{
@@ -102,6 +112,7 @@ static int32_t luat_audio_mp3_decode(void *pData, void *pParam)
 		}
 		Stream->AudioDataBuffer.Pos = 0;
 	}
+
 	return 0;
 }
 
@@ -111,10 +122,6 @@ int32_t luat_audio_decode_run(void *pData, void *pParam)
 	{
 		prvAudioStream.Decoder(pData, pParam);
 	}
-	else
-	{
-		DBG("%d", prvAudioStream.waitRequire);
-	}
 	if (prvAudioStream.waitRequire)
 	{
 		prvAudioStream.waitRequire--;
@@ -146,12 +153,9 @@ int32_t luat_audio_play_cb(void *pData, void *pParam)
 		if (!prvAudioStream.IsStop)
 		{
 			prvAudioStream.waitRequire++;
+			ASSERT(prvAudioStream.waitRequire < 3);
 			Core_ServiceRunUserAPIWithFile(luat_audio_decode_run, &prvAudioStream, prvAudioStream.CoderParam);
 		}
-		else
-		{
-			DBG("%d", prvAudioStream.waitRequire);
-		}
 	}
 	return 0;
 }
@@ -224,7 +228,7 @@ int luat_audio_play_stop(uint8_t multimedia_id)
 
 uint8_t luat_audio_is_finish(uint8_t multimedia_id)
 {
-	DBG("%d", prvAudioStream.waitRequire);
+	ASSERT(prvAudioStream.waitRequire < 4);
 	return !prvAudioStream.waitRequire;
 }
 
@@ -332,7 +336,15 @@ int luat_audio_play_file(uint8_t multimedia_id, const char *path)
 			prvAudioStream.IsPlaying = 1;
 			prvAudioStream.pParam = multimedia_id;
 			prvAudioStream.Decoder(&prvAudioStream, prvAudioStream.CoderParam);
-			return 0;
+			if (!llist_num(&prvAudioStream.DataHead))
+			{
+				prvAudioStream.fd = NULL;
+			}
+			else
+			{
+				return 0;
+			}
+
 		}
 		else
 		{

+ 2 - 1
bsp/common/src/core_service.c

@@ -633,6 +633,7 @@ void Core_PrintServiceStack(void)
 	prvCore_PrintTaskStack(prvService.LCDHandle);
 	prvCore_PrintTaskStack(prvService.UserHandle);
 	prvCore_PrintTaskStack(prvService.ServiceHandle);
+	prvCore_PrintTaskStack(prvService.StorgeHandle);
 }
 
 void Core_DebugMem(uint8_t HeapID, const char *FuncName, uint32_t Line)
@@ -978,7 +979,7 @@ void Core_UserTaskInit(void)
 
 void Core_StorgeTaskInit(void)
 {
-	prvService.StorgeHandle = Task_Create(prvStorge_Task, NULL, 1024, SERVICE_TASK_PRO, "storge task");
+	prvService.StorgeHandle = Task_Create(prvStorge_Task, NULL, 2 * 1024, SERVICE_TASK_PRO, "storge task");
 }