# HG changeset patch # User kostya # Date 1167629393 0 # Node ID 9adbec516265342c72204f48b39f90a4a9e4c3fe # Parent 70ce246379b5c03a76924d59cc0a723986b07a8c Make MPC demuxer deal with ID3 tags at the beginning diff -r 70ce246379b5 -r 9adbec516265 mpc.c --- a/mpc.c Fri Dec 29 21:41:06 2006 +0000 +++ b/mpc.c Mon Jan 01 05:29:53 2007 +0000 @@ -45,6 +45,8 @@ return 0; if (d[0] == 'M' && d[1] == 'P' && d[2] == '+' && (d[3] == 0x17 || d[3] == 0x7)) return AVPROBE_SCORE_MAX; + if (d[0] == 'I' && d[1] == 'D' && d[2] == '3') + return AVPROBE_SCORE_MAX / 2; return 0; } @@ -52,10 +54,26 @@ { MPCContext *c = s->priv_data; AVStream *st; + int t; - if(get_le24(&s->pb) != MKTAG('M', 'P', '+', 0)){ - av_log(s, AV_LOG_ERROR, "Not a Musepack file\n"); - return -1; + t = get_le24(&s->pb); + if(t != MKTAG('M', 'P', '+', 0)){ + if(t != MKTAG('I', 'D', '3', 0)){ + av_log(s, AV_LOG_ERROR, "Not a Musepack file\n"); + return -1; + } + /* skip ID3 tags and try again */ + url_fskip(&s->pb, 3); + t = get_byte(&s->pb) << 21; + t |= get_byte(&s->pb) << 14; + t |= get_byte(&s->pb) << 7; + t |= get_byte(&s->pb); + av_log(s, AV_LOG_DEBUG, "Skipping %d(%X) bytes of ID3 data\n", t, t); + url_fskip(&s->pb, t); + if(get_le24(&s->pb) != MKTAG('M', 'P', '+', 0)){ + av_log(s, AV_LOG_ERROR, "Not a Musepack file\n"); + return -1; + } } c->ver = get_byte(&s->pb); if(c->ver != 0x07 && c->ver != 0x17){