Skip to content

Commit 2b6d76e

Browse files
committed
audio_render: yield task every loop
1 parent 94e90b8 commit 2b6d76e

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

main/src/user/audio_render.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ static void audio_buffer_reset(void)
6363

6464
EventBits_t uxBits = xEventGroupGetBits(user_event_group);
6565
if (uxBits & BT_A2DP_DATA_BIT) {
66-
goto reset_abort;
66+
xTaskResumeAll();
67+
return;
6768
}
6869

6970
#ifdef CONFIG_ENABLE_VFX
@@ -76,7 +77,6 @@ static void audio_buffer_reset(void)
7677
memset(&buff_struct, 0x00, sizeof(StaticRingbuffer_t));
7778
audio_buff = xRingbufferCreateStatic(sizeof(buff_data), RINGBUF_TYPE_BYTEBUF, buff_data, &buff_struct);
7879

79-
reset_abort:
8080
xTaskResumeAll();
8181
}
8282

@@ -103,30 +103,29 @@ static void audio_render_task(void *pvParameter)
103103
xEventGroupSetBits(user_event_group, AUDIO_RENDER_CLR_BIT);
104104
}
105105

106+
taskYIELD();
107+
106108
if (start) {
107109
remain = sizeof(buff_data) - xRingbufferGetCurFreeSize(audio_buff);
108110

109111
if (remain >= 512) {
112+
count = 0;
113+
110114
data = (uint8_t *)xRingbufferReceiveUpTo(audio_buff, &size, 16 / portTICK_RATE_MS, 512);
111-
} else if (remain > 0) {
112-
if ((remain % 4) != 0) {
113-
taskYIELD();
114-
continue;
115-
}
115+
} else if (remain > 0 && !(remain % 4)) {
116+
count = 0;
116117

117118
data = (uint8_t *)xRingbufferReceiveUpTo(audio_buff, &size, 16 / portTICK_RATE_MS, remain);
118119
} else {
119-
do {
120+
if (++count < 160) {
120121
vTaskDelay(1 / portTICK_RATE_MS);
121122

122-
remain = sizeof(buff_data) - xRingbufferGetCurFreeSize(audio_buff);
123-
} while (remain == 0 && ++count < 16);
124-
125-
if (remain == 0) {
126-
clear = false;
127-
start = false;
123+
continue;
128124
}
129125

126+
clear = false;
127+
start = false;
128+
130129
count = 0;
131130

132131
continue;

0 commit comments

Comments
 (0)