gst/wavparse/gstwavparse.c: Fix the scaling code.

Original commit message from CVS:
* gst/wavparse/gstwavparse.c: (uint64_ceiling_scale_int),
(uint64_ceiling_scale), (gst_wavparse_calculate_duration),
(gst_wavparse_stream_headers):
Fix the scaling code.
Fix parsing of the INFO chunks, we were reading the wrong number of
bytes.  Fixes #561580.
This commit is contained in:
Wim Taymans 2008-11-20 20:07:26 +00:00
parent fe7d1d7ae0
commit 380b64d670
2 changed files with 13 additions and 3 deletions

View File

@ -1,3 +1,12 @@
2008-11-20 Wim Taymans <wim.taymans@collabora.co.uk>
* gst/wavparse/gstwavparse.c: (uint64_ceiling_scale_int),
(uint64_ceiling_scale), (gst_wavparse_calculate_duration),
(gst_wavparse_stream_headers):
Fix the scaling code.
Fix parsing of the INFO chunks, we were reading the wrong number of
bytes. Fixes #561580.
2008-11-20 Jan Schmidt <jan.schmidt@sun.com> 2008-11-20 Jan Schmidt <jan.schmidt@sun.com>
* gst/matroska/matroska-mux.c: * gst/matroska/matroska-mux.c:

View File

@ -248,7 +248,7 @@ gst_wavparse_create_sourcepad (GstWavParse * wavparse)
static guint64 static guint64
uint64_ceiling_scale_int (guint64 val, gint num, gint denom) uint64_ceiling_scale_int (guint64 val, gint num, gint denom)
{ {
guint64 result = gst_util_uint64_scale (val, num, denom); guint64 result = gst_util_uint64_scale_int (val, num, denom);
if (uint64_scale_modulo (val, num, denom) == 0) if (uint64_scale_modulo (val, num, denom) == 0)
return result; return result;
@ -260,7 +260,7 @@ uint64_ceiling_scale_int (guint64 val, gint num, gint denom)
static guint64 static guint64
uint64_ceiling_scale (guint64 val, guint64 num, guint64 denom) uint64_ceiling_scale (guint64 val, guint64 num, guint64 denom)
{ {
guint64 result = gst_util_uint64_scale_int (val, num, denom); guint64 result = gst_util_uint64_scale (val, num, denom);
if (uint64_scale_modulo (val, num, denom) == 0) if (uint64_scale_modulo (val, num, denom) == 0)
return result; return result;
@ -1046,6 +1046,7 @@ gst_wavparse_calculate_duration (GstWavParse * wav)
return TRUE; return TRUE;
if (wav->bps > 0) { if (wav->bps > 0) {
GST_INFO_OBJECT (wav, "Got datasize %" G_GUINT64_FORMAT, wav->datasize);
wav->duration = wav->duration =
uint64_ceiling_scale (wav->datasize, GST_SECOND, (guint64) wav->bps); uint64_ceiling_scale (wav->datasize, GST_SECOND, (guint64) wav->bps);
GST_INFO_OBJECT (wav, "Got duration (bps) %" GST_TIME_FORMAT, GST_INFO_OBJECT (wav, "Got duration (bps) %" GST_TIME_FORMAT,
@ -1371,7 +1372,7 @@ gst_wavparse_stream_headers (GstWavParse * wav)
} }
switch (ltag) { switch (ltag) {
case GST_RIFF_LIST_INFO:{ case GST_RIFF_LIST_INFO:{
const guint data_size = size - 12; const guint data_size = size - 4;
GstTagList *new; GstTagList *new;
GST_INFO_OBJECT (wav, "Have LIST chunk INFO"); GST_INFO_OBJECT (wav, "Have LIST chunk INFO");