aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/decode.c20
-rw-r--r--src/decode.h1
-rw-r--r--src/mp4_decode.c18
3 files changed, 20 insertions, 19 deletions
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;