From 85e40257dc65e3542b785898ddf60482e2d1ab0c Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Sun, 20 Feb 2011 15:27:10 +0000 Subject: 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 --- apps/codecs/speex.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'apps/codecs/speex.c') 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, enum codec_status codec_main(void) { SpeexBits bits; - int error = 0; + int error; int eof = 0; spx_ogg_sync_state oy; spx_ogg_page og; @@ -395,16 +395,18 @@ enum codec_status codec_main(void) /* Ogg handling still uses mallocs, so reset the malloc buffer per track */ next_track: + error = CODEC_OK; if (codec_init()) { error = CODEC_ERROR; goto exit; } stereo = speex_stereo_state_init(); - strtoffset = ci->id3->offset; - while (!*ci->taginfo_ready && !ci->stop_codec) - ci->sleep(1); + if (codec_wait_taginfo() != 0) + goto done; + + strtoffset = ci->id3->offset; spx_ogg_sync_init(&oy); spx_ogg_alloc_buffer(&oy,2*CHUNKSIZE); @@ -569,8 +571,6 @@ done: goto next_track; } - error = CODEC_OK; - exit: speex_bits_destroy(&bits); -- cgit v1.2.3