Mercurial > libavformat.hg
changeset 1609:9adbec516265 libavformat
Make MPC demuxer deal with ID3 tags at the beginning
author | kostya |
---|---|
date | Mon, 01 Jan 2007 05:29:53 +0000 |
parents | 70ce246379b5 |
children | cde17266ad08 |
files | mpc.c |
diffstat | 1 files changed, 21 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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){