diff --git a/src/decode.c b/src/decode.c index 334812d8b..3fbbc9c8c 100644 --- a/src/decode.c +++ b/src/decode.c @@ -116,8 +116,6 @@ int waitOnDecode(PlayerControl * pc, AudioFormat * af, DecoderControl * dc, if(dc->start || dc->error!=DECODE_ERROR_NOERROR) { strncpy(pc->erroredFile,pc->file,MAXPATHLEN); - printf("error: %i, start: %i, decode_pid: %i\n",dc->error, - dc->start,*decode_pid); pc->error = PLAYER_ERROR_FILE; quitDecode(pc,dc); return -1; @@ -214,6 +212,7 @@ void decodeSeek(PlayerControl * pc, AudioFormat * af, DecoderControl * dc, int decoderInit(PlayerControl * pc, Buffer * cb, AudioFormat *af, DecoderControl * dc) { int pid; + int ret; decode_pid = &(pc->decode_pid); pid = fork(); @@ -226,36 +225,37 @@ int decoderInit(PlayerControl * pc, Buffer * cb, AudioFormat *af, switch(pc->decodeType) { #ifdef HAVE_MAD case DECODE_TYPE_MP3: - dc->error = mp3_decode(cb,af,dc); + ret = mp3_decode(cb,af,dc); break; #endif #ifdef HAVE_FAAD case DECODE_TYPE_AAC: - dc->error = aac_decode(cb,af,dc); + ret = aac_decode(cb,af,dc); break; case DECODE_TYPE_MP4: - dc->error = mp4_decode(cb,af,dc); + ret = mp4_decode(cb,af,dc); break; #endif #ifdef HAVE_OGG case DECODE_TYPE_OGG: - dc->error = ogg_decode(cb,af,dc); + ret = ogg_decode(cb,af,dc); break; #endif #ifdef HAVE_FLAC case DECODE_TYPE_FLAC: - dc->error = flac_decode(cb,af,dc); + ret = flac_decode(cb,af,dc); break; #endif #ifdef HAVE_AUDIOFILE case DECODE_TYPE_AUDIOFILE: - dc->error = audiofile_decode(cb,af,dc); + ret = audiofile_decode(cb,af,dc); break; #endif default: - dc->error = DECODE_ERROR_UNKTYPE; + ret = DECODE_ERROR_UNKTYPE; } - if(dc->error!=DECODE_ERROR_NOERROR) { + if(ret<0) { + dc->error = DECODE_ERROR_FILE; dc->start = 0; dc->stop = 0; dc->state = DECODE_STATE_STOP; diff --git a/src/decode.h b/src/decode.h index faf18f344..4bcc5abfa 100644 --- a/src/decode.h +++ b/src/decode.h @@ -38,6 +38,7 @@ #define DECODE_ERROR_NOERROR 0 #define DECODE_ERROR_UNKTYPE 1 +#define DECODE_ERROR_FILE 2 typedef struct _DecoderControl { mpd_sint8 state; diff --git a/src/mp4_decode.c b/src/mp4_decode.c index e9e3d22eb..6ecce1853 100644 --- a/src/mp4_decode.c +++ b/src/mp4_decode.c @@ -223,15 +223,6 @@ int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) { sampleBuffer = faacDecDecode(decoder,&frameInfo,mp4Buffer, mp4BufferSize); - if(dc->start) { - channels = frameInfo.channels; - scale = frameInfo.samplerate; - af->channels = frameInfo.channels; - af->sampleRate = frameInfo.samplerate; - dc->state = DECODE_STATE_DECODE; - dc->start = 0; - } - if(mp4Buffer) free(mp4Buffer); if(frameInfo.error > 0) { ERROR("error decoding MP4 file: %s\n",dc->file); @@ -241,6 +232,15 @@ int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) { break; } + if(dc->start) { + channels = frameInfo.channels; + scale = frameInfo.samplerate; + af->channels = frameInfo.channels; + af->sampleRate = frameInfo.samplerate; + dc->state = DECODE_STATE_DECODE; + dc->start = 0; + } + if(channels*(dur+offset) > frameInfo.samples) { dur = frameInfo.samples/channels; offset = 0;