fix error reporting for mp4 files

git-svn-id: https://svn.musicpd.org/mpd/trunk@370 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Warren Dukes 2004-03-22 18:44:15 +00:00
parent 80e0fec683
commit 395281c7a0
3 changed files with 20 additions and 19 deletions

View File

@ -116,8 +116,6 @@ int waitOnDecode(PlayerControl * pc, AudioFormat * af, DecoderControl * dc,
if(dc->start || dc->error!=DECODE_ERROR_NOERROR) { if(dc->start || dc->error!=DECODE_ERROR_NOERROR) {
strncpy(pc->erroredFile,pc->file,MAXPATHLEN); 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; pc->error = PLAYER_ERROR_FILE;
quitDecode(pc,dc); quitDecode(pc,dc);
return -1; return -1;
@ -214,6 +212,7 @@ void decodeSeek(PlayerControl * pc, AudioFormat * af, DecoderControl * dc,
int decoderInit(PlayerControl * pc, Buffer * cb, AudioFormat *af, int decoderInit(PlayerControl * pc, Buffer * cb, AudioFormat *af,
DecoderControl * dc) { DecoderControl * dc) {
int pid; int pid;
int ret;
decode_pid = &(pc->decode_pid); decode_pid = &(pc->decode_pid);
pid = fork(); pid = fork();
@ -226,36 +225,37 @@ int decoderInit(PlayerControl * pc, Buffer * cb, AudioFormat *af,
switch(pc->decodeType) { switch(pc->decodeType) {
#ifdef HAVE_MAD #ifdef HAVE_MAD
case DECODE_TYPE_MP3: case DECODE_TYPE_MP3:
dc->error = mp3_decode(cb,af,dc); ret = mp3_decode(cb,af,dc);
break; break;
#endif #endif
#ifdef HAVE_FAAD #ifdef HAVE_FAAD
case DECODE_TYPE_AAC: case DECODE_TYPE_AAC:
dc->error = aac_decode(cb,af,dc); ret = aac_decode(cb,af,dc);
break; break;
case DECODE_TYPE_MP4: case DECODE_TYPE_MP4:
dc->error = mp4_decode(cb,af,dc); ret = mp4_decode(cb,af,dc);
break; break;
#endif #endif
#ifdef HAVE_OGG #ifdef HAVE_OGG
case DECODE_TYPE_OGG: case DECODE_TYPE_OGG:
dc->error = ogg_decode(cb,af,dc); ret = ogg_decode(cb,af,dc);
break; break;
#endif #endif
#ifdef HAVE_FLAC #ifdef HAVE_FLAC
case DECODE_TYPE_FLAC: case DECODE_TYPE_FLAC:
dc->error = flac_decode(cb,af,dc); ret = flac_decode(cb,af,dc);
break; break;
#endif #endif
#ifdef HAVE_AUDIOFILE #ifdef HAVE_AUDIOFILE
case DECODE_TYPE_AUDIOFILE: case DECODE_TYPE_AUDIOFILE:
dc->error = audiofile_decode(cb,af,dc); ret = audiofile_decode(cb,af,dc);
break; break;
#endif #endif
default: 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->start = 0;
dc->stop = 0; dc->stop = 0;
dc->state = DECODE_STATE_STOP; dc->state = DECODE_STATE_STOP;

View File

@ -38,6 +38,7 @@
#define DECODE_ERROR_NOERROR 0 #define DECODE_ERROR_NOERROR 0
#define DECODE_ERROR_UNKTYPE 1 #define DECODE_ERROR_UNKTYPE 1
#define DECODE_ERROR_FILE 2
typedef struct _DecoderControl { typedef struct _DecoderControl {
mpd_sint8 state; mpd_sint8 state;

View File

@ -223,15 +223,6 @@ int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) {
sampleBuffer = faacDecDecode(decoder,&frameInfo,mp4Buffer, sampleBuffer = faacDecDecode(decoder,&frameInfo,mp4Buffer,
mp4BufferSize); 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(mp4Buffer) free(mp4Buffer);
if(frameInfo.error > 0) { if(frameInfo.error > 0) {
ERROR("error decoding MP4 file: %s\n",dc->file); ERROR("error decoding MP4 file: %s\n",dc->file);
@ -241,6 +232,15 @@ int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) {
break; 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) { if(channels*(dur+offset) > frameInfo.samples) {
dur = frameInfo.samples/channels; dur = frameInfo.samples/channels;
offset = 0; offset = 0;