diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/playback.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/apps/playback.c b/apps/playback.c index a804103006..3e046fad6c 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -261,6 +261,7 @@ void* codec_request_buffer_callback(size_t *realsize, size_t reqsize) | |||
261 | while ((int)*realsize > cur_ti->available) { | 261 | while ((int)*realsize > cur_ti->available) { |
262 | yield(); | 262 | yield(); |
263 | if (ci.stop_codec) { | 263 | if (ci.stop_codec) { |
264 | *realsize = 0; | ||
264 | return NULL; | 265 | return NULL; |
265 | } | 266 | } |
266 | } | 267 | } |
@@ -286,7 +287,7 @@ void codec_advance_buffer_callback(size_t amount) | |||
286 | codecbufused = 0; | 287 | codecbufused = 0; |
287 | buf_ridx = buf_widx; | 288 | buf_ridx = buf_widx; |
288 | cur_ti->available = 0; | 289 | cur_ti->available = 0; |
289 | while ((int)amount < cur_ti->available) | 290 | while ((int)amount < cur_ti->available && !ci.stop_codec) |
290 | yield(); | 291 | yield(); |
291 | } else { | 292 | } else { |
292 | cur_ti->available -= amount; | 293 | cur_ti->available -= amount; |
@@ -427,7 +428,8 @@ void yield_codecs(void) | |||
427 | #ifndef SIMULATOR | 428 | #ifndef SIMULATOR |
428 | if (!pcm_is_playing()) | 429 | if (!pcm_is_playing()) |
429 | sleep(5); | 430 | sleep(5); |
430 | while (pcm_is_lowdata()) | 431 | while (pcm_is_lowdata() && !ci.stop_codec && |
432 | playing && queue_empty(&audio_queue)) | ||
431 | yield(); | 433 | yield(); |
432 | #else | 434 | #else |
433 | yield(); | 435 | yield(); |