see if we can skip past tags

git-svn-id: https://svn.musicpd.org/mpd/trunk@199 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Warren Dukes 2004-03-05 01:29:08 +00:00
parent 124854ff51
commit 4e4faf6174
2 changed files with 35 additions and 6 deletions

View File

@ -47,8 +47,6 @@
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
#define FADE_CHUNKS 1024
int * decode_pid = NULL; int * decode_pid = NULL;
void decodeSigHandler(int sig) { void decodeSigHandler(int sig) {
@ -91,7 +89,7 @@ void quitDecode(PlayerControl * pc, DecoderControl * dc) {
} }
int calculateCrossFadeChunks(PlayerControl * pc, AudioFormat * af) { int calculateCrossFadeChunks(PlayerControl * pc, AudioFormat * af) {
int chunks; long chunks;
if(pc->crossFade<=0) return 0; if(pc->crossFade<=0) return 0;
@ -104,7 +102,7 @@ int calculateCrossFadeChunks(PlayerControl * pc, AudioFormat * af) {
if(chunks<0) chunks = 0; if(chunks<0) chunks = 0;
return chunks; return (int)chunks;
} }
int waitOnDecode(PlayerControl * pc, AudioFormat * af, DecoderControl * dc, int waitOnDecode(PlayerControl * pc, AudioFormat * af, DecoderControl * dc,

View File

@ -25,6 +25,13 @@
#else #else
#include <mad.h> #include <mad.h>
#endif #endif
#ifdef HAVE_ID3TAG
#ifdef USE_MPD_ID3TAG
#include "libid3tag/id3tag.h"
#else
#include <id3tag.h>
#endif
#endif
#include "playerData.h" #include "playerData.h"
#include "log.h" #include "log.h"
@ -181,7 +188,19 @@ int decodeNextFrameHeader(mp3DecodeData * data) {
} }
} }
if(mad_header_decode(&data->frame.header,&data->stream)) { if(mad_header_decode(&data->frame.header,&data->stream)) {
if((data->stream).error==MAD_ERROR_LOSTSYNC) return DECODE_SKIP; if((data->stream).error==MAD_ERROR_LOSTSYNC) {
#ifdef HAVE_ID3TAG
signed long tagsize = id3_tag_query(
(data->stream).this_frame,
(data->stream).bufend-
(data->stream).this_frame);
if(tagsize>0) {
mad_stream_skip(&(data->stream),tagsize);
return DECODE_CONT;
}
#endif
return DECODE_SKIP;
}
if(MAD_RECOVERABLE((data->stream).error)) return DECODE_CONT; if(MAD_RECOVERABLE((data->stream).error)) return DECODE_CONT;
else { else {
if((data->stream).error==MAD_ERROR_BUFLEN) return DECODE_CONT; if((data->stream).error==MAD_ERROR_BUFLEN) return DECODE_CONT;
@ -206,7 +225,19 @@ int decodeNextFrame(mp3DecodeData * data) {
} }
} }
if(mad_frame_decode(&data->frame,&data->stream)) { if(mad_frame_decode(&data->frame,&data->stream)) {
if((data->stream).error==MAD_ERROR_LOSTSYNC) return DECODE_SKIP; if((data->stream).error==MAD_ERROR_LOSTSYNC) {
#ifdef HAVE_ID3TAG
signed long tagsize = id3_tag_query(
(data->stream).this_frame,
(data->stream).bufend-
(data->stream).this_frame);
if(tagsize>0) {
mad_stream_skip(&(data->stream),tagsize);
return DECODE_CONT;
}
#endif
return DECODE_SKIP;
}
if(MAD_RECOVERABLE((data->stream).error)) return DECODE_CONT; if(MAD_RECOVERABLE((data->stream).error)) return DECODE_CONT;
else { else {
if((data->stream).error==MAD_ERROR_BUFLEN) return DECODE_CONT; if((data->stream).error==MAD_ERROR_BUFLEN) return DECODE_CONT;