[FFmpeg-devel] [PATCH] au: add duration info
Stefano Sabatini
stefano.sabatini-lala at poste.it
Sat Jul 16 17:36:55 CEST 2011
On date Thursday 2011-07-14 12:06:17 +0200, ami_stuff encoded:
> Modified.
>
> Regards
> diff --git a/libavformat/au.c b/libavformat/au.c
> index 23365c4..f361a71 100644
> --- a/libavformat/au.c
> +++ b/libavformat/au.c
> @@ -120,7 +120,7 @@ static int au_probe(AVProbeData *p)
> static int au_read_header(AVFormatContext *s,
> AVFormatParameters *ap)
> {
> - int size;
> + int size, data_size = 0;
> unsigned int tag;
> AVIOContext *pb = s->pb;
> unsigned int id, channels, rate;
> @@ -132,7 +132,12 @@ static int au_read_header(AVFormatContext *s,
> if (tag != MKTAG('.', 's', 'n', 'd'))
> return -1;
> size = avio_rb32(pb); /* header size */
> - avio_rb32(pb); /* data size */
> + data_size = avio_rb32(pb); /* size in bytes */
> +
> + if (data_size < 0) {
> + av_log(s, AV_LOG_ERROR, "negative data_size\n");
> + return AVERROR_INVALIDDATA;
> + }
>
> id = avio_rb32(pb);
> rate = avio_rb32(pb);
> @@ -159,6 +164,10 @@ static int au_read_header(AVFormatContext *s,
> st->codec->codec_id = codec;
> st->codec->channels = channels;
> st->codec->sample_rate = rate;
> +
> + if (data_size)
> + st->duration = (int64_t)(data_size) / (st->codec->channels * (uint64_t)(av_get_bits_per_sample(st->codec->codec_id)>>3));
> +
> av_set_pts_info(st, 64, 1, rate);
> return 0;
> }
I'm going to push in a day if I see no more comments.
--
FFmpeg = Faithful and Free Mastering Pitiless Erratic Gorilla
More information about the ffmpeg-devel
mailing list