From 03bde3f0d223fdd4914a2048b00cae890c550535 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Wed, 28 Mar 2012 14:48:46 +0200 Subject: [PATCH] flacenc: query downstream for BYTE seeking support --- ext/flac/gstflacenc.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/ext/flac/gstflacenc.c b/ext/flac/gstflacenc.c index f39b98fc94..2883ebb209 100644 --- a/ext/flac/gstflacenc.c +++ b/ext/flac/gstflacenc.c @@ -842,6 +842,26 @@ gst_flac_enc_seek_callback (const FLAC__StreamEncoder * encoder, if ((peerpad = gst_pad_get_peer (GST_AUDIO_ENCODER_SRC_PAD (flacenc)))) { GstEvent *event; gboolean ret; + GstQuery *query; + gboolean seekable = FALSE; + + /* try to seek to the beginning of the output */ + query = gst_query_new_seeking (GST_FORMAT_BYTES); + if (gst_pad_query (peerpad, query)) { + GstFormat format; + + gst_query_parse_seeking (query, &format, &seekable, NULL, NULL); + if (format != GST_FORMAT_BYTES) + seekable = FALSE; + } else { + GST_LOG_OBJECT (flacenc, "SEEKING query not handled"); + } + gst_query_unref (query); + + if (!seekable) { + GST_DEBUG_OBJECT (flacenc, "downstream not seekable; not rewriting"); + return FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED; + } gst_segment_init (&seg, GST_FORMAT_BYTES); seg.start = absolute_byte_offset; -- 2.34.1