summaryrefslogtreecommitdiff
path: root/apps/codecs
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs')
-rw-r--r--apps/codecs/speex.c12
-rw-r--r--apps/codecs/vorbis.c4
2 files changed, 12 insertions, 4 deletions
diff --git a/apps/codecs/speex.c b/apps/codecs/speex.c
index e38a044..7a1efa9 100644
--- a/apps/codecs/speex.c
+++ b/apps/codecs/speex.c
@@ -393,6 +393,9 @@ enum codec_status codec_main(void)
void *st = NULL;
int j = 0;
+ memset(&bits, 0, sizeof(bits));
+ memset(&oy, 0, sizeof(oy));
+
/* Ogg handling still uses mallocs, so reset the malloc buffer per track */
next_track:
error = CODEC_OK;
@@ -401,16 +404,16 @@ next_track:
error = CODEC_ERROR;
goto exit;
}
+
stereo = speex_stereo_state_init();
+ spx_ogg_sync_init(&oy);
+ spx_ogg_alloc_buffer(&oy,2*CHUNKSIZE);
if (codec_wait_taginfo() != 0)
goto done;
strtoffset = ci->id3->offset;
- spx_ogg_sync_init(&oy);
- spx_ogg_alloc_buffer(&oy,2*CHUNKSIZE);
-
samplerate = ci->id3->frequency;
codec_set_replaygain(ci->id3);
@@ -558,7 +561,8 @@ done:
/* Clean things up for the next track */
- speex_decoder_destroy(st);
+ if (st)
+ speex_decoder_destroy(st);
if (stream_init == 1)
spx_ogg_stream_reset(&os);
diff --git a/apps/codecs/vorbis.c b/apps/codecs/vorbis.c
index 17cc4a0..0a36a37 100644
--- a/apps/codecs/vorbis.c
+++ b/apps/codecs/vorbis.c
@@ -110,6 +110,7 @@ enum codec_status codec_main(void)
OggVorbis_File vf;
ogg_int32_t **pcm;
+ bool initialized = false; /* First init done? */
int error;
long n;
int current_section;
@@ -185,6 +186,7 @@ next_track:
vf.end = ci->id3->filesize;
vf.ready_state = OPENED;
vf.links = 1;
+ initialized = true;
} else {
DEBUGF("Vorbis: ov_open failed: %d\n", error);
error = CODEC_ERROR;
@@ -248,6 +250,8 @@ done:
ogg_malloc_destroy();
if (ci->request_next_track()) {
+ if (!initialized)
+ goto next_track;
/* Clean things up for the next track */
vf.dataoffsets = NULL;
vf.offsets = NULL;