From 6b0dd4758657630c6f043593a6b64ccb35b33ae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Sat, 25 Feb 2012 15:48:44 +0000 Subject: [PATCH] flvmux: create streamable output if downstream is not seekable Ignore the "streamable" property setting and create streamable output if downstream is known not to be seekable (as queried via a SEEKABLE query). Fixes pipelines like flvmux ! appsink possibly creating seemingly corrupted output if streamable has not been set to true. --- gst/flv/gstflvmux.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/gst/flv/gstflvmux.c b/gst/flv/gstflvmux.c index c427f529cc..f2b9688cd2 100644 --- a/gst/flv/gstflvmux.c +++ b/gst/flv/gstflvmux.c @@ -1106,6 +1106,29 @@ gst_flv_mux_write_header (GstFlvMux * mux) GSList *l; GstFlowReturn ret; + /* if not streaming, check if downstream is seekable */ + if (!mux->streamable) { + gboolean seekable; + GstQuery *query; + + query = gst_query_new_seeking (GST_FORMAT_BYTES); + if (gst_pad_peer_query (mux->srcpad, query)) { + gst_query_parse_seeking (query, NULL, &seekable, NULL, NULL); + GST_INFO_OBJECT (mux, "downstream is %sseekable", seekable ? "" : "not "); + if (!seekable) { + mux->streamable = TRUE; + g_object_notify (G_OBJECT (mux), "streamable"); + GST_WARNING_OBJECT (mux, "downstream is not seekable, but " + "streamable=false. Will ignore that and create streamable output " + "instead"); + } + } else { + /* have to assume seeking is supported if query not handled downstream */ + /* FIXME 0.11: change to query not handled => seeking not supported */ + GST_WARNING_OBJECT (mux, "downstream did not handle seeking query"); + } + } + header = gst_flv_mux_create_header (mux); metadata = gst_flv_mux_create_metadata (mux, TRUE); video_codec_data = NULL;