From f0ceb74eb25daa4a2f467b82384c77040df59891 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 12 Nov 2002 20:56:13 +0000 Subject: [PATCH] use the rate of the logical stream to calculate duration instead of current rate. Original commit message from CVS: use the rate of the logical stream to calculate duration instead of current rate. --- ext/vorbis/vorbisfile.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/ext/vorbis/vorbisfile.c b/ext/vorbis/vorbisfile.c index 74d2b13..e1d8f92 100644 --- a/ext/vorbis/vorbisfile.c +++ b/ext/vorbis/vorbisfile.c @@ -721,26 +721,37 @@ gst_vorbisfile_src_convert (GstPad *pad, gint i; gint64 count = 0; - if (src_value >= vorbisfile->vf.links) { - count = ov_pcm_total (&vorbisfile->vf, -1); - } - else { - for (i = 0; i < src_value; i++) { - count += ov_pcm_total (&vorbisfile->vf, i); - } - } switch (*dest_format) { case GST_FORMAT_BYTES: - scale = bytes_per_sample; + res = FALSE; + break; case GST_FORMAT_UNITS: - *dest_value = count *scale; + if (src_value > vorbisfile->vf.links) { + src_value = vorbisfile->vf.links; + } + for (i = 0; i < src_value; i++) { + vi = ov_info (&vorbisfile->vf, i); + + count += ov_pcm_total (&vorbisfile->vf, i); + } + *dest_value = count; break; case GST_FORMAT_TIME: - if (vi->rate == 0) - return FALSE; + { + if (src_value > vorbisfile->vf.links) { + src_value = vorbisfile->vf.links; + } + for (i = 0; i < src_value; i++) { + vi = ov_info (&vorbisfile->vf, i); + if (vi->rate) + count += ov_pcm_total (&vorbisfile->vf, i) * GST_SECOND / vi->rate; + else + count += ov_time_total (&vorbisfile->vf, i) * GST_SECOND; + } /* we use the pcm totals to get the total time, it's more accurate */ - *dest_value = count * GST_SECOND / vi->rate; + *dest_value = count; break; + } default: res = FALSE; } -- 2.7.4