Commit 462b2620 authored by Michael Niedermayer's avatar Michael Niedermayer

Set duration for wav files from sample size and data size or the wf64 sample value.

This should improve duration accuracy slightly and avoids a warning about its
inaccuracy when accurate values are available. Idea by Frank Barchard

Originally committed as revision 26366 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 13184036
......@@ -183,6 +183,7 @@ static int wav_read_header(AVFormatContext *s,
AVFormatParameters *ap)
{
int64_t size, av_uninit(data_size);
int64_t sample_count=0;
int rf64;
unsigned int tag;
ByteIOContext *pb = s->pb;
......@@ -208,6 +209,7 @@ static int wav_read_header(AVFormatContext *s,
return -1;
get_le64(pb); /* RIFF size */
data_size = get_le64(pb);
sample_count = get_le64(pb);
url_fskip(pb, size - 16); /* skip rest of ds64 chunk */
}
......@@ -233,6 +235,11 @@ static int wav_read_header(AVFormatContext *s,
wav->data_end = INT64_MAX;
} else
wav->data_end= url_ftell(pb) + size;
if (!sample_count && st->codec->channels && av_get_bits_per_sample(st->codec->codec_id))
sample_count = (size<<3) / (st->codec->channels * (uint64_t)av_get_bits_per_sample(st->codec->codec_id));
if (sample_count)
st->duration = sample_count;
return 0;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment