From 81b7f15a0c1f9bf11f905c4aa02f30b0b4c67d9c Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 10 Jul 2015 15:31:05 +0200 Subject: [PATCH] pinossrc: also start streaming when caps don't change --- src/gst/gstpinossrc.c | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/src/gst/gstpinossrc.c b/src/gst/gstpinossrc.c index 26b4dec1d..9fcfcc677 100644 --- a/src/gst/gstpinossrc.c +++ b/src/gst/gstpinossrc.c @@ -71,7 +71,6 @@ gst_pinos_src_change_state (GstElement * element, GstStateChange transition); static gboolean gst_pinos_src_negotiate (GstBaseSrc * basesrc); static GstCaps *gst_pinos_src_getcaps (GstBaseSrc * bsrc, GstCaps * filter); -static gboolean gst_pinos_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps); static GstCaps *gst_pinos_src_src_fixate (GstBaseSrc * bsrc, GstCaps * caps); @@ -164,7 +163,6 @@ gst_pinos_src_class_init (GstPinosSrcClass * klass) gstbasesrc_class->negotiate = gst_pinos_src_negotiate; gstbasesrc_class->get_caps = gst_pinos_src_getcaps; - gstbasesrc_class->set_caps = gst_pinos_src_setcaps; gstbasesrc_class->fixate = gst_pinos_src_src_fixate; gstbasesrc_class->start = gst_pinos_src_start; gstbasesrc_class->stop = gst_pinos_src_stop; @@ -264,6 +262,23 @@ on_stream_notify (GObject *gobject, pinos_main_loop_signal (pinossrc->loop, FALSE); } +static gboolean +gst_pinos_src_stream_start (GstPinosSrc *pinossrc, GstCaps * caps) +{ + gchar *str; + GBytes *format; + gboolean res; + + str = gst_caps_to_string (caps); + format = g_bytes_new_take (str, strlen (str) + 1); + + pinos_main_loop_lock (pinossrc->loop); + res = pinos_stream_start (pinossrc->stream, format, PINOS_STREAM_MODE_BUFFER); + pinos_main_loop_unlock (pinossrc->loop); + + return res; +} + static gboolean gst_pinos_src_negotiate (GstBaseSrc * basesrc) { @@ -342,6 +357,9 @@ gst_pinos_src_negotiate (GstBaseSrc * basesrc) /* yay, fixed caps, use those then, it's possible that the subclass does * not accept this caps after all and we have to fail. */ result = gst_base_src_set_caps (basesrc, caps); + if (result) { + result = gst_pinos_src_stream_start (pinossrc, caps); + } } } gst_caps_unref (caps); @@ -382,26 +400,6 @@ gst_pinos_src_getcaps (GstBaseSrc * bsrc, GstCaps * filter) return GST_BASE_SRC_CLASS (parent_class)->get_caps (bsrc, filter); } -static gboolean -gst_pinos_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps) -{ - GstPinosSrc *pinossrc; - gchar *str; - GBytes *format; - gboolean res; - - pinossrc = GST_PINOS_SRC (bsrc); - - str = gst_caps_to_string (caps); - format = g_bytes_new_take (str, strlen (str) + 1); - - pinos_main_loop_lock (pinossrc->loop); - res = pinos_stream_start (pinossrc->stream, format, PINOS_STREAM_MODE_BUFFER); - pinos_main_loop_unlock (pinossrc->loop); - - return res; -} - static GstFlowReturn gst_pinos_src_create (GstPushSrc * psrc, GstBuffer ** buffer) {