diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2011-02-20 15:27:10 +0000 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2011-02-20 15:27:10 +0000 |
commit | 85e40257dc65e3542b785898ddf60482e2d1ab0c (patch) | |
tree | f7bf9b33decce4296fbea0f437252f40aba6d5de /apps/codecs/speex.c | |
parent | 460d54977ae2f9c2c5997c6c4cd5541ab436d718 (diff) | |
download | rockbox-85e40257dc65e3542b785898ddf60482e2d1ab0c.tar.gz rockbox-85e40257dc65e3542b785898ddf60482e2d1ab0c.zip |
Enforce that codecs wait for their metadata in a proper-ish and consistent manner. Sort of a halfway patch; best would be to give them an internal copy of the current track information which lasts unaltered by playback until a track switch or unload.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29348 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/speex.c')
-rw-r--r-- | apps/codecs/speex.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/apps/codecs/speex.c b/apps/codecs/speex.c index 2a02ccb4b5..e38a04495c 100644 --- a/apps/codecs/speex.c +++ b/apps/codecs/speex.c | |||
@@ -371,7 +371,7 @@ static void *process_header(spx_ogg_packet *op, | |||
371 | enum codec_status codec_main(void) | 371 | enum codec_status codec_main(void) |
372 | { | 372 | { |
373 | SpeexBits bits; | 373 | SpeexBits bits; |
374 | int error = 0; | 374 | int error; |
375 | int eof = 0; | 375 | int eof = 0; |
376 | spx_ogg_sync_state oy; | 376 | spx_ogg_sync_state oy; |
377 | spx_ogg_page og; | 377 | spx_ogg_page og; |
@@ -395,16 +395,18 @@ enum codec_status codec_main(void) | |||
395 | 395 | ||
396 | /* Ogg handling still uses mallocs, so reset the malloc buffer per track */ | 396 | /* Ogg handling still uses mallocs, so reset the malloc buffer per track */ |
397 | next_track: | 397 | next_track: |
398 | error = CODEC_OK; | ||
398 | 399 | ||
399 | if (codec_init()) { | 400 | if (codec_init()) { |
400 | error = CODEC_ERROR; | 401 | error = CODEC_ERROR; |
401 | goto exit; | 402 | goto exit; |
402 | } | 403 | } |
403 | stereo = speex_stereo_state_init(); | 404 | stereo = speex_stereo_state_init(); |
404 | strtoffset = ci->id3->offset; | ||
405 | 405 | ||
406 | while (!*ci->taginfo_ready && !ci->stop_codec) | 406 | if (codec_wait_taginfo() != 0) |
407 | ci->sleep(1); | 407 | goto done; |
408 | |||
409 | strtoffset = ci->id3->offset; | ||
408 | 410 | ||
409 | spx_ogg_sync_init(&oy); | 411 | spx_ogg_sync_init(&oy); |
410 | spx_ogg_alloc_buffer(&oy,2*CHUNKSIZE); | 412 | spx_ogg_alloc_buffer(&oy,2*CHUNKSIZE); |
@@ -569,8 +571,6 @@ done: | |||
569 | goto next_track; | 571 | goto next_track; |
570 | } | 572 | } |
571 | 573 | ||
572 | error = CODEC_OK; | ||
573 | |||
574 | exit: | 574 | exit: |
575 | speex_bits_destroy(&bits); | 575 | speex_bits_destroy(&bits); |
576 | 576 | ||