summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--ext/wavpack/gstwavpackparse.c19
-rw-r--r--ext/wavpack/gstwavpackparse.h2
3 files changed, 19 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 2682f7d7..81aa8a82 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2008-02-22 Sebastian Dröge <slomo@circular-chaos.org>
+ * ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_src_query),
+ (gst_wavpack_parse_create_src_pad):
+ * ext/wavpack/gstwavpackparse.h:
+ Always report the duration if we know it in push mode and don't
+ return 0 just to make totem believe we can't seek in push mode.
+ Newer totem version use the SEEKING query which properly reports
+ if we can seek or not.
+
+2008-02-22 Sebastian Dröge <slomo@circular-chaos.org>
+
Patch by: Jens Granseuer <jensgr at gmx dot net>
* tests/examples/equalizer/demo.c: (main):
diff --git a/ext/wavpack/gstwavpackparse.c b/ext/wavpack/gstwavpackparse.c
index 0c34401e..2cdf0071 100644
--- a/ext/wavpack/gstwavpackparse.c
+++ b/ext/wavpack/gstwavpackparse.c
@@ -275,16 +275,15 @@ gst_wavpack_parse_src_query (GstPad * pad, GstQuery * query)
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_POSITION:{
- gint64 cur, len;
+ gint64 cur;
guint rate;
GST_OBJECT_LOCK (parse);
cur = parse->segment.last_stop;
- len = parse->total_samples;
rate = parse->samplerate;
GST_OBJECT_UNLOCK (parse);
- if (len < 0 || rate == 0) {
+ if (rate == 0) {
GST_DEBUG_OBJECT (parse, "haven't read header yet");
break;
}
@@ -315,12 +314,10 @@ gst_wavpack_parse_src_query (GstPad * pad, GstQuery * query)
GST_OBJECT_LOCK (parse);
rate = parse->samplerate;
- /* FIXME: return 0 if we work in push based mode to let totem
- * recognize that we can't seek */
- len = (parse->adapter) ? 0 : parse->total_samples;
+ len = parse->total_samples;
GST_OBJECT_UNLOCK (parse);
- if (len < 0 || rate == 0) {
+ if (rate == 0) {
GST_DEBUG_OBJECT (parse, "haven't read header yet");
break;
}
@@ -329,7 +326,8 @@ gst_wavpack_parse_src_query (GstPad * pad, GstQuery * query)
switch (format) {
case GST_FORMAT_TIME:
- len = gst_util_uint64_scale_int (len, GST_SECOND, rate);
+ if (len != -1)
+ len = gst_util_uint64_scale_int (len, GST_SECOND, rate);
gst_query_set_duration (query, GST_FORMAT_TIME, len);
ret = TRUE;
break;
@@ -827,9 +825,8 @@ gst_wavpack_parse_create_src_pad (GstWavpackParse * wvparse, GstBuffer * buf,
wvparse->samplerate = WavpackGetSampleRate (wpc);
wvparse->channels = WavpackGetNumChannels (wpc);
- wvparse->total_samples = header->total_samples;
- if (wvparse->total_samples == (int32_t) - 1)
- wvparse->total_samples = 0;
+ wvparse->total_samples = (header->total_samples == (int32_t) - 1) ?
+ -1 : header->total_samples;
caps = gst_caps_new_simple ("audio/x-wavpack",
"width", G_TYPE_INT, WavpackGetBitsPerSample (wpc),
diff --git a/ext/wavpack/gstwavpackparse.h b/ext/wavpack/gstwavpackparse.h
index 67d093fa..60504a7c 100644
--- a/ext/wavpack/gstwavpackparse.h
+++ b/ext/wavpack/gstwavpackparse.h
@@ -57,7 +57,7 @@ struct _GstWavpackParse
guint samplerate;
guint channels;
- guint total_samples;
+ gint64 total_samples;
gboolean need_newsegment;
gboolean discont;