AVCodecContext avctx;
buf0 = p->buf;
- if(ff_id3v2_match(buf0, ID3v2_DEFAULT_MAGIC)) {
- buf0 += ff_id3v2_tag_len(buf0);
- }
end = p->buf + p->buf_size - sizeof(uint32_t);
while(buf0 < end && !*buf0)
buf0++;
static int mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, int64_t base)
{
uint32_t v, spf;
- int frames = -1; /* Total number of frames in file */
+ unsigned frames = 0; /* Total number of frames in file */
unsigned size = 0; /* Total number of bytes in the stream */
const int64_t xing_offtbl[2][2] = {{32, 17}, {17,9}};
MPADecodeHeader c;
}
}
- if(frames < 0 && !size)
+ if(!frames && !size)
return -1;
/* Skip the vbr tag frame */
url_fseek(s->pb, base + vbrtag_size, SEEK_SET);
spf = c.lsf ? 576 : 1152; /* Samples per frame, layer 3 */
- if(frames >= 0)
+ if(frames)
st->duration = av_rescale_q(frames, (AVRational){spf, c.sample_rate},
st->time_base);
if(size)
// lcm of all mp3 sample rates
av_set_pts_info(st, 64, 1, 14112000);
- ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC);
off = url_ftell(s->pb);
if (!av_metadata_get(s->metadata, "", NULL, AV_METADATA_IGNORE_SUFFIX))
mp3_read_packet,
.flags= AVFMT_GENERIC_INDEX,
.extensions = "mp2,mp3,m2a", /* XXX: use probe */
- .metadata_conv = ff_id3v2_metadata_conv,
};
#endif
NULL,
mp3_write_packet,
mp3_write_trailer,
- .metadata_conv = ff_id3v2_metadata_conv,
};
#endif
size_pos = url_ftell(s->pb);
put_be32(s->pb, 0);
+ ff_metadata_conv(&s->metadata, ff_id3v2_metadata_conv, NULL);
while ((t = av_metadata_get(s->metadata, "", t, AV_METADATA_IGNORE_SUFFIX))) {
uint32_t tag = 0;
mp3_write_packet,
mp3_write_trailer,
AVFMT_NOTIMESTAMPS,
- .metadata_conv = ff_id3v2_metadata_conv,
};
#endif