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:
parent
80e0fec683
commit
395281c7a0
20
src/decode.c
20
src/decode.c
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue