summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--gst/wavparse/gstwavparse.c52
2 files changed, 44 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 6ad2506a..0124f5b3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-03-06 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
+ (gst_wavparse_pad_convert), (gst_wavparse_pad_query):
+ debug updates
+
2004-03-06 Christophe Fergeau <teuf@gnome.org>
* ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c
index 31f439eb..77e18263 100644
--- a/gst/wavparse/gstwavparse.c
+++ b/gst/wavparse/gstwavparse.c
@@ -645,8 +645,7 @@ gst_wavparse_parse_fmt (GstWavParse *wavparse, guint size)
gst_caps_free (caps);
}
- GST_DEBUG ("frequency %d, channels %d",
- wavparse->rate, wavparse->channels);
+ GST_DEBUG ("frequency %d, channels %d", wavparse->rate, wavparse->channels);
}
}
@@ -914,13 +913,16 @@ gst_wavparse_pad_convert (GstPad *pad,
gint bytes_per_sample;
glong byterate;
GstWavParse *wavparse;
+ const GstFormat *formats;
+ gboolean src_format_ok = FALSE;
+ gboolean dest_format_ok = FALSE;
wavparse = GST_WAVPARSE (gst_pad_get_parent (pad));
bytes_per_sample = wavparse->channels * wavparse->width / 8;
if (bytes_per_sample == 0) {
- GST_DEBUG ("bytes_per_sample is 0, probably an mp3 - channels %d, width %d\n",
- wavparse->channels, wavparse->width);
+ GST_DEBUG ("bytes_per_sample 0, probably an mp3 - channels %d, width %d",
+ wavparse->channels, wavparse->width);
return FALSE;
}
byterate = (glong) (bytes_per_sample * wavparse->rate);
@@ -928,7 +930,20 @@ gst_wavparse_pad_convert (GstPad *pad,
g_warning ("byterate is 0, internal error\n");
return FALSE;
}
- GST_DEBUG ("bytes per sample: %d\n", bytes_per_sample);
+ GST_DEBUG ("bytes per sample: %d", bytes_per_sample);
+ /* check if both src_format and sink_format are in the supported formats */
+ formats = gst_pad_get_formats (pad);
+
+ while (formats && *formats) {
+ if (src_format == *formats) { src_format_ok = TRUE; }
+ if (*dest_format == *formats) { dest_format_ok = TRUE; }
+ formats++;
+ }
+ if (!src_format_ok || !dest_format_ok) {
+ GST_DEBUG ("src or dest format not supported");
+ return FALSE;
+ }
+
switch (src_format) {
case GST_FORMAT_BYTES:
@@ -936,30 +951,37 @@ gst_wavparse_pad_convert (GstPad *pad,
*dest_value = src_value / bytes_per_sample;
else if (*dest_format == GST_FORMAT_TIME)
*dest_value = src_value * GST_SECOND / byterate;
- else
- return FALSE;
+ else {
+ GST_DEBUG ("can't convert from bytes to other than units/time");
+ return FALSE;
+ }
+
break;
case GST_FORMAT_DEFAULT:
if (*dest_format == GST_FORMAT_BYTES)
*dest_value = src_value * bytes_per_sample;
else if (*dest_format == GST_FORMAT_TIME)
*dest_value = src_value * GST_SECOND / wavparse->rate;
- else
- return FALSE;
+ else {
+ GST_DEBUG ("can't convert from units to other than bytes/time");
+ return FALSE;
+ }
break;
case GST_FORMAT_TIME:
if (*dest_format == GST_FORMAT_BYTES)
*dest_value = src_value * byterate / GST_SECOND;
else if (*dest_format == GST_FORMAT_DEFAULT)
*dest_value = src_value * wavparse->rate / GST_SECOND;
- else
- return FALSE;
+ else {
+ GST_DEBUG ("can't convert from time to other than bytes/units");
+ return FALSE;
+ }
*dest_value = *dest_value & ~(bytes_per_sample - 1);
break;
default:
g_warning ("unhandled format for wavparse\n");
- break;
+ return FALSE;
}
return TRUE;
}
@@ -987,15 +1009,17 @@ gst_wavparse_pad_query (GstPad *pad, GstQueryType type,
/* probe sink's peer pad, convert value, and that's it :) */
/* FIXME: ideally we'd loop over possible formats of peer instead
* of only using BYTE */
+
+ /* only support byte, time and unit queries */
wavparse = GST_WAVPARSE (gst_pad_get_parent (pad));
if (!gst_pad_query (GST_PAD_PEER (wavparse->sinkpad), type,
&peer_format, &peer_value)) {
- g_warning ("Could not query sink pad's peer\n");
+ GST_DEBUG ("Could not query sink pad's peer");
return FALSE;
}
if (!gst_pad_convert (wavparse->sinkpad, peer_format, peer_value,
format, value)) {
- g_warning ("Could not query sink pad's peer\n");
+ GST_DEBUG ("Could not convert sink pad's peer");
return FALSE;
}
GST_DEBUG ("pad_query done, value %" G_GINT64_FORMAT "\n", *value);