diff options
author | cinap_lenrek <cinap_lenrek@rei2.9hal> | 2012-02-14 15:42:58 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@rei2.9hal> | 2012-02-14 15:42:58 +0100 |
commit | a57ad59bf0af4ff9548e97b94e5461f69b2db12f (patch) | |
tree | edd67684054d3127ba82f250c20e2385310f4e61 /sys/src/cmd/audio | |
parent | 72dc88448c13ec4fd3be8455f0c1b7ac94355efe (diff) |
mp3dec: skip ID3v2 tags
Diffstat (limited to 'sys/src/cmd/audio')
-rw-r--r-- | sys/src/cmd/audio/mp3dec/main.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/sys/src/cmd/audio/mp3dec/main.c b/sys/src/cmd/audio/mp3dec/main.c index ce7aa4b0c..10d2102b8 100644 --- a/sys/src/cmd/audio/mp3dec/main.c +++ b/sys/src/cmd/audio/mp3dec/main.c @@ -129,10 +129,21 @@ static enum mad_flow error(void *, struct mad_stream *stream, struct mad_frame *frame) { if(stream->error == MAD_ERROR_LOSTSYNC){ - if(memcmp(stream->this_frame, "TAG", 3)==0){ + uchar *p; + ulong n; + + p = stream->this_frame; + if(memcmp(p, "TAG", 3)==0){ mad_stream_skip(stream, 128); return MAD_FLOW_CONTINUE; } + if(memcmp(p, "ID3", 3)==0){ + if(((p[6] | p[7] | p[8] | p[9]) & 0x80) == 0){ + n = p[9] | p[8]<<7 | p[7]<<14 | p[6]<<21; + mad_stream_skip(stream, n+10); + return MAD_FLOW_CONTINUE; + } + } } if(debug) fprint(2, "#%lld: %s\n", |