wavpackenc: query downstream for BYTE seeking support
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Wed, 28 Mar 2012 12:49:03 +0000 (14:49 +0200)
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Wed, 28 Mar 2012 12:50:04 +0000 (14:50 +0200)
ext/wavpack/gstwavpackenc.c

index e7ea7f0..1ea6cc2 100644 (file)
@@ -783,6 +783,8 @@ gst_wavpack_enc_rewrite_first_block (GstWavpackEnc * enc)
 {
   GstSegment segment;
   gboolean ret;
+  GstQuery *query;
+  gboolean seekable = FALSE;
 
   g_return_if_fail (enc);
   g_return_if_fail (enc->first_block);
@@ -791,6 +793,23 @@ gst_wavpack_enc_rewrite_first_block (GstWavpackEnc * enc)
   WavpackUpdateNumSamples (enc->wp_context, enc->first_block);
 
   /* try to seek to the beginning of the output */
+  query = gst_query_new_seeking (GST_FORMAT_BYTES);
+  if (gst_pad_peer_query (GST_AUDIO_ENCODER_SRC_PAD (enc), query)) {
+    GstFormat format;
+
+    gst_query_parse_seeking (query, &format, &seekable, NULL, NULL);
+    if (format != GST_FORMAT_BYTES)
+      seekable = FALSE;
+  } else {
+    GST_LOG_OBJECT (enc, "SEEKING query not handled");
+  }
+  gst_query_unref (query);
+
+  if (!seekable) {
+    GST_DEBUG_OBJECT (enc, "downstream not seekable; not rewriting");
+    return;
+  }
+
   gst_segment_init (&segment, GST_FORMAT_BYTES);
   ret = gst_pad_push_event (GST_AUDIO_ENCODER_SRC_PAD (enc),
       gst_event_new_segment (&segment));