diff options
author | Warren Dukes <warren.dukes@gmail.com> | 2004-03-05 01:29:08 +0000 |
---|---|---|
committer | Warren Dukes <warren.dukes@gmail.com> | 2004-03-05 01:29:08 +0000 |
commit | 4e4faf61748d7f10b5d96aa0f9125bf248675de0 (patch) | |
tree | 7e4ee9054691892706851cb6cbfe3b28b5e71391 /src | |
parent | 124854ff511ebca49a219eb82b882595e1a12384 (diff) | |
download | mpd-4e4faf61748d7f10b5d96aa0f9125bf248675de0.tar.gz mpd-4e4faf61748d7f10b5d96aa0f9125bf248675de0.tar.xz mpd-4e4faf61748d7f10b5d96aa0f9125bf248675de0.zip |
see if we can skip past tags
git-svn-id: https://svn.musicpd.org/mpd/trunk@199 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'src')
-rw-r--r-- | src/decode.c | 6 | ||||
-rw-r--r-- | src/mp3_decode.c | 35 |
2 files changed, 35 insertions, 6 deletions
diff --git a/src/decode.c b/src/decode.c index 82909fcc7..b1c0bb012 100644 --- a/src/decode.c +++ b/src/decode.c @@ -47,8 +47,6 @@ #include <unistd.h> #include <string.h> -#define FADE_CHUNKS 1024 - int * decode_pid = NULL; void decodeSigHandler(int sig) { @@ -91,7 +89,7 @@ void quitDecode(PlayerControl * pc, DecoderControl * dc) { } int calculateCrossFadeChunks(PlayerControl * pc, AudioFormat * af) { - int chunks; + long chunks; if(pc->crossFade<=0) return 0; @@ -104,7 +102,7 @@ int calculateCrossFadeChunks(PlayerControl * pc, AudioFormat * af) { if(chunks<0) chunks = 0; - return chunks; + return (int)chunks; } int waitOnDecode(PlayerControl * pc, AudioFormat * af, DecoderControl * dc, diff --git a/src/mp3_decode.c b/src/mp3_decode.c index 780c3814c..42afdac6a 100644 --- a/src/mp3_decode.c +++ b/src/mp3_decode.c @@ -25,6 +25,13 @@ #else #include <mad.h> #endif +#ifdef HAVE_ID3TAG +#ifdef USE_MPD_ID3TAG +#include "libid3tag/id3tag.h" +#else +#include <id3tag.h> +#endif +#endif #include "playerData.h" #include "log.h" @@ -181,7 +188,19 @@ int decodeNextFrameHeader(mp3DecodeData * data) { } } 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; else { 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((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; else { if((data->stream).error==MAD_ERROR_BUFLEN) return DECODE_CONT; |