|
|
@@ -58,26 +58,32 @@ static int mpc_read_header(AVFormatContext *s, AVFormatParameters *ap) |
|
|
|
{ |
|
|
|
MPCContext *c = s->priv_data; |
|
|
|
AVStream *st; |
|
|
|
int t; |
|
|
|
int t, ret; |
|
|
|
int64_t pos = url_ftell(s->pb); |
|
|
|
|
|
|
|
t = get_le24(s->pb); |
|
|
|
if(t != MKTAG('M', 'P', '+', 0)){ |
|
|
|
if(t != MKTAG('I', 'D', '3', 0)){ |
|
|
|
uint8_t buf[ID3v2_HEADER_SIZE]; |
|
|
|
if (url_fseek(s->pb, pos, SEEK_SET) < 0) |
|
|
|
return -1; |
|
|
|
ret = get_buffer(s->pb, buf, ID3v2_HEADER_SIZE); |
|
|
|
if (ret != ID3v2_HEADER_SIZE || !ff_id3v2_match(buf)) { |
|
|
|
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); |
|
|
|
t = ff_id3v2_tag_len(buf) - ID3v2_HEADER_SIZE; |
|
|
|
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; |
|
|
|
} |
|
|
|
/* read ID3 tags */ |
|
|
|
if (url_fseek(s->pb, pos, SEEK_SET) < 0) |
|
|
|
return -1; |
|
|
|
ff_id3v2_read(s); |
|
|
|
get_le24(s->pb); |
|
|
|
} |
|
|
|
c->ver = get_byte(s->pb); |
|
|
|
if(c->ver != 0x07 && c->ver != 0x17){ |
|
|
|