diff options
Diffstat (limited to 'libs')
-rw-r--r-- | libs/Makefile.in | 9 | ||||
-rw-r--r-- | libs/gst/Makefile.in | 9 | ||||
-rw-r--r-- | libs/gst/base/Makefile.in | 9 | ||||
-rw-r--r-- | libs/gst/base/gstadapter.c | 21 | ||||
-rw-r--r-- | libs/gst/base/gstbaseparse.c | 9 | ||||
-rw-r--r-- | libs/gst/base/gstbasesink.c | 57 | ||||
-rw-r--r-- | libs/gst/base/gstbasesink.h | 12 | ||||
-rw-r--r-- | libs/gst/base/gstbasesrc.c | 87 | ||||
-rw-r--r-- | libs/gst/base/gsttypefindhelper.c | 3 | ||||
-rw-r--r-- | libs/gst/check/Makefile.in | 9 | ||||
-rw-r--r-- | libs/gst/check/gstcheck.c | 4 | ||||
-rw-r--r-- | libs/gst/check/libcheck/Makefile.in | 9 | ||||
-rw-r--r-- | libs/gst/controller/Makefile.in | 9 | ||||
-rw-r--r-- | libs/gst/helpers/Makefile.in | 9 | ||||
-rw-r--r-- | libs/gst/net/Makefile.in | 9 |
15 files changed, 189 insertions, 76 deletions
diff --git a/libs/Makefile.in b/libs/Makefile.in index dc97f29..90abb56 100644 --- a/libs/Makefile.in +++ b/libs/Makefile.in @@ -50,6 +50,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = libs DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -257,6 +258,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -409,7 +414,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/libs/gst/Makefile.in b/libs/gst/Makefile.in index 2f91786..9e2ee97 100644 --- a/libs/gst/Makefile.in +++ b/libs/gst/Makefile.in @@ -50,6 +50,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = libs/gst DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -256,6 +257,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -408,7 +413,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/libs/gst/base/Makefile.in b/libs/gst/base/Makefile.in index ed702b5..474b77e 100644 --- a/libs/gst/base/Makefile.in +++ b/libs/gst/base/Makefile.in @@ -53,6 +53,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = libs/gst/base DIST_COMMON = README $(libgstbase_@GST_API_VERSION@include_HEADERS) \ @@ -300,6 +301,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -452,7 +457,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/libs/gst/base/gstadapter.c b/libs/gst/base/gstadapter.c index b27edcf..2e61430 100644 --- a/libs/gst/base/gstadapter.c +++ b/libs/gst/base/gstadapter.c @@ -550,16 +550,7 @@ gst_adapter_copy (GstAdapter * adapter, gpointer dest, gsize offset, gsize size) copy_into_unchecked (adapter, dest, offset + adapter->skip, size); } -/** - * gst_adapter_flush: - * @adapter: a #GstAdapter - * @flush: the number of bytes to flush - * - * Flushes the first @flush bytes in the @adapter. The caller must ensure that - * at least this many bytes are available. - * - * See also: gst_adapter_map(), gst_adapter_unmap() - */ +/*Flushes the first @flush bytes in the @adapter*/ static void gst_adapter_flush_unchecked (GstAdapter * adapter, gsize flush) { @@ -615,6 +606,16 @@ gst_adapter_flush_unchecked (GstAdapter * adapter, gsize flush) adapter->scan_entry = NULL; } +/** + * gst_adapter_flush: + * @adapter: a #GstAdapter + * @flush: the number of bytes to flush + * + * Flushes the first @flush bytes in the @adapter. The caller must ensure that + * at least this many bytes are available. + * + * See also: gst_adapter_map(), gst_adapter_unmap() + */ void gst_adapter_flush (GstAdapter * adapter, gsize flush) { diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c index 8067e53..e2f9d97 100644 --- a/libs/gst/base/gstbaseparse.c +++ b/libs/gst/base/gstbaseparse.c @@ -1407,7 +1407,8 @@ gst_base_parse_post_bitrates (GstBaseParse * parse, gboolean post_min, parse->priv->max_bitrate); if (taglist != NULL) { - gst_pad_push_event (parse->srcpad, gst_event_new_tag (taglist)); + gst_pad_push_event (parse->srcpad, gst_event_new_tag ("GstParser", + taglist)); } } @@ -1778,11 +1779,6 @@ gst_base_parse_handle_buffer (GstBaseParse * parse, GstBuffer * buffer, GST_LOG_OBJECT (parse, "handle_frame skipped %d, flushed %d", *skip, *flushed); - if (ret != GST_FLOW_OK) { - GST_DEBUG_OBJECT (parse, "handle_frame returned %d", ret); - goto exit; - } - /* subclass can only do one of these, or semantics are too unclear */ g_assert (*skip == 0 || *flushed == 0); @@ -1817,7 +1813,6 @@ gst_base_parse_handle_buffer (GstBaseParse * parse, GstBuffer * buffer, parse->priv->offset += *flushed; -exit: if (parse->priv->pad_mode == GST_PAD_MODE_PULL) { gst_adapter_clear (parse->priv->adapter); } diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c index e404ed4..d1e9e70 100644 --- a/libs/gst/base/gstbasesink.c +++ b/libs/gst/base/gstbasesink.c @@ -523,7 +523,7 @@ gst_base_sink_class_init (GstBaseSinkClass * klass) */ g_object_class_install_property (gobject_class, PROP_THROTTLE_TIME, g_param_spec_uint64 ("throttle-time", "Throttle time", - "The time to keep between rendered buffers (unused)", 0, G_MAXUINT64, + "The time to keep between rendered buffers", 0, G_MAXUINT64, DEFAULT_THROTTLE_TIME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gstelement_class->change_state = @@ -2003,8 +2003,8 @@ gst_base_sink_wait_clock (GstBaseSink * sink, GstClockTime time, /* FIXME: Casting to GstClockEntry only works because the types * are the same */ if (G_LIKELY (sink->priv->cached_clock_id != NULL - && GST_CLOCK_ENTRY_CLOCK ((GstClockEntry *) sink->priv-> - cached_clock_id) == clock)) { + && GST_CLOCK_ENTRY_CLOCK ((GstClockEntry *) sink-> + priv->cached_clock_id) == clock)) { if (!gst_clock_single_shot_id_reinit (clock, sink->priv->cached_clock_id, time)) { gst_clock_id_unref (sink->priv->cached_clock_id); @@ -2148,6 +2148,11 @@ gst_base_sink_do_preroll (GstBaseSink * sink, GstMiniObject * obj) GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf))); bclass = GST_BASE_SINK_GET_CLASS (sink); + + if (bclass->prepare) + if ((ret = bclass->prepare (sink, buf)) != GST_FLOW_OK) + goto prepare_canceled; + if (bclass->preroll) if ((ret = bclass->preroll (sink, buf)) != GST_FLOW_OK) goto preroll_canceled; @@ -2174,6 +2179,12 @@ gst_base_sink_do_preroll (GstBaseSink * sink, GstMiniObject * obj) return GST_FLOW_OK; /* ERRORS */ +prepare_canceled: + { + GST_DEBUG_OBJECT (sink, "prepare failed, abort state"); + gst_element_abort_state (GST_ELEMENT_CAST (sink)); + return ret; + } preroll_canceled: { GST_DEBUG_OBJECT (sink, "preroll failed, abort state"); @@ -3068,7 +3079,7 @@ gst_base_sink_needs_preroll (GstBaseSink * basesink) */ static GstFlowReturn gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad, - gpointer obj) + gpointer obj, gboolean is_list) { GstBaseSinkClass *bclass; GstBaseSinkPrivate *priv = basesink->priv; @@ -3085,7 +3096,7 @@ gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad, if (G_UNLIKELY (priv->received_eos)) goto was_eos; - if (GST_IS_BUFFER_LIST (obj)) { + if (is_list) { sync_buf = gst_buffer_list_get (GST_BUFFER_LIST_CAST (obj), 0); g_assert (NULL != sync_buf); } else { @@ -3138,6 +3149,20 @@ gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad, goto out_of_segment; } + if (!is_list) { + if (bclass->prepare) { + ret = bclass->prepare (basesink, GST_BUFFER_CAST (obj)); + if (G_UNLIKELY (ret != GST_FLOW_OK)) + goto prepare_failed; + } + } else { + if (bclass->prepare_list) { + ret = bclass->prepare_list (basesink, GST_BUFFER_LIST_CAST (obj)); + if (G_UNLIKELY (ret != GST_FLOW_OK)) + goto prepare_failed; + } + } + again: late = FALSE; step_end = FALSE; @@ -3162,7 +3187,7 @@ again: if (do_qos) gst_base_sink_do_render_stats (basesink, TRUE); - if (!GST_IS_BUFFER_LIST (obj)) { + if (!is_list) { /* For buffer lists do not set last buffer for now. */ gst_base_sink_set_last_buffer (basesink, GST_BUFFER_CAST (obj)); @@ -3219,6 +3244,13 @@ out_of_segment: gst_mini_object_unref (GST_MINI_OBJECT_CAST (obj)); return GST_FLOW_OK; } +prepare_failed: + { + GST_DEBUG_OBJECT (basesink, "prepare buffer failed %s", + gst_flow_get_name (ret)); + gst_mini_object_unref (GST_MINI_OBJECT_CAST (obj)); + return ret; + } sync_failed: { GST_DEBUG_OBJECT (basesink, "do_sync returned %s", gst_flow_get_name (ret)); @@ -3262,7 +3294,8 @@ dropped: /* with STREAM_LOCK */ static GstFlowReturn -gst_base_sink_chain_main (GstBaseSink * basesink, GstPad * pad, gpointer obj) +gst_base_sink_chain_main (GstBaseSink * basesink, GstPad * pad, gpointer obj, + gboolean is_list) { GstFlowReturn result; @@ -3270,7 +3303,7 @@ gst_base_sink_chain_main (GstBaseSink * basesink, GstPad * pad, gpointer obj) goto wrong_mode; GST_BASE_SINK_PREROLL_LOCK (basesink); - result = gst_base_sink_chain_unlocked (basesink, pad, obj); + result = gst_base_sink_chain_unlocked (basesink, pad, obj, is_list); GST_BASE_SINK_PREROLL_UNLOCK (basesink); done: @@ -3299,7 +3332,7 @@ gst_base_sink_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) basesink = GST_BASE_SINK (parent); - return gst_base_sink_chain_main (basesink, pad, buf); + return gst_base_sink_chain_main (basesink, pad, buf, FALSE); } static GstFlowReturn @@ -3314,7 +3347,7 @@ gst_base_sink_chain_list (GstPad * pad, GstObject * parent, bclass = GST_BASE_SINK_GET_CLASS (basesink); if (G_LIKELY (bclass->render_list)) { - result = gst_base_sink_chain_main (basesink, pad, list); + result = gst_base_sink_chain_main (basesink, pad, list, TRUE); } else { guint i, len; GstBuffer *buffer; @@ -3327,7 +3360,7 @@ gst_base_sink_chain_list (GstPad * pad, GstObject * parent, for (i = 0; i < len; i++) { buffer = gst_buffer_list_get (list, i); result = gst_base_sink_chain_main (basesink, pad, - gst_buffer_ref (buffer)); + gst_buffer_ref (buffer), FALSE); if (result != GST_FLOW_OK) break; } @@ -3672,7 +3705,7 @@ gst_base_sink_loop (GstPad * pad) basesink->segment.position = offset; GST_BASE_SINK_PREROLL_LOCK (basesink); - result = gst_base_sink_chain_unlocked (basesink, pad, buf); + result = gst_base_sink_chain_unlocked (basesink, pad, buf, FALSE); GST_BASE_SINK_PREROLL_UNLOCK (basesink); if (G_UNLIKELY (result != GST_FLOW_OK)) goto paused; diff --git a/libs/gst/base/gstbasesink.h b/libs/gst/base/gstbasesink.h index f4ab7e6..bf7a41f 100644 --- a/libs/gst/base/gstbasesink.h +++ b/libs/gst/base/gstbasesink.h @@ -125,15 +125,19 @@ struct _GstBaseSink { * unblock any blocked function ASAP * @unlock_stop: Clear the previous unlock request. Subclasses should clear * any state they set during unlock(), such as clearing command queues. + * @query: perform a #GstQuery on the element. Since: 0.10.36 * @event: Override this to handle events arriving on the sink pad * @wait_eos: Override this to implement custom logic to wait for the EOS time. * subclasses should always first chain up to the default implementation. - * @preroll: Called to present the preroll buffer if desired + * @prepare: Called to prepare the buffer for @render and @preroll. This + * function is called before synchronisation is performed. + * @prepare_list: Called to prepare the buffer list for @render_list. This + * function is called before synchronisation is performed. + * @preroll: Called to present the preroll buffer if desired. * @render: Called when a buffer should be presented or output, at the * correct moment if the #GstBaseSink has been set to sync to the clock. * @render_list: Same as @render but used whith buffer lists instead of * buffers. Since: 0.10.24 - * @query: perform a #GstQuery on the element. Since: 0.10.36 * * Subclasses can override any of the available virtual methods or not, as * needed. At the minimum, the @render method should be overridden to @@ -179,6 +183,10 @@ struct _GstBaseSinkClass { /* wait for eos, subclasses should chain up to parent first */ GstFlowReturn (*wait_eos) (GstBaseSink *sink, GstEvent *event); + /* notify subclass of buffer or list before doing sync */ + GstFlowReturn (*prepare) (GstBaseSink *sink, GstBuffer *buffer); + GstFlowReturn (*prepare_list) (GstBaseSink *sink, GstBufferList *buffer_list); + /* notify subclass of preroll buffer or real buffer */ GstFlowReturn (*preroll) (GstBaseSink *sink, GstBuffer *buffer); GstFlowReturn (*render) (GstBaseSink *sink, GstBuffer *buffer); diff --git a/libs/gst/base/gstbasesrc.c b/libs/gst/base/gstbasesrc.c index 7b8ec85..c5fad37 100644 --- a/libs/gst/base/gstbasesrc.c +++ b/libs/gst/base/gstbasesrc.c @@ -318,7 +318,7 @@ static gboolean gst_base_src_decide_allocation_default (GstBaseSrc * basesrc, GstQuery * query); static gboolean gst_base_src_set_flushing (GstBaseSrc * basesrc, - gboolean flushing, gboolean live_play, gboolean unlock, gboolean * playing); + gboolean flushing, gboolean live_play, gboolean * playing); static gboolean gst_base_src_start (GstBaseSrc * basesrc); static gboolean gst_base_src_stop (GstBaseSrc * basesrc); @@ -1481,15 +1481,8 @@ not_ok: * when we reach the segment.stop we have to post a segment.done * instead of EOS when doing a segment seek. */ -/* FIXME (0.11), we have the unlock gboolean here because most current - * implementations (fdsrc, -base/gst/tcp/, ...) unconditionally unlock, even when - * the streaming thread isn't running, resulting in bogus unlocks later when it - * starts. This is fixed by adding unlock_stop, but we should still avoid unlocking - * unnecessarily for backwards compatibility. Ergo, the unlock variable stays - * until 0.11 - */ static gboolean -gst_base_src_perform_seek (GstBaseSrc * src, GstEvent * event, gboolean unlock) +gst_base_src_perform_seek (GstBaseSrc * src, GstEvent * event) { gboolean res = TRUE, tres; gdouble rate; @@ -1548,7 +1541,7 @@ gst_base_src_perform_seek (GstBaseSrc * src, GstEvent * event, gboolean unlock) gst_pad_pause_task (src->srcpad); /* unblock streaming thread. */ - gst_base_src_set_flushing (src, TRUE, FALSE, unlock, &playing); + gst_base_src_set_flushing (src, TRUE, FALSE, &playing); /* grab streaming lock, this should eventually be possible, either * because the task is paused, our streaming thread stopped @@ -1563,7 +1556,7 @@ gst_base_src_perform_seek (GstBaseSrc * src, GstEvent * event, gboolean unlock) GST_DEBUG_OBJECT (src, "seek with seqnum %" G_GUINT32_FORMAT, seqnum); } - gst_base_src_set_flushing (src, FALSE, playing, unlock, NULL); + gst_base_src_set_flushing (src, FALSE, playing, NULL); /* If we configured the seeksegment above, don't overwrite it now. Otherwise * copy the current segment info into the temp segment that we can actually @@ -1767,8 +1760,8 @@ gst_base_src_send_event (GstElement * element, GstEvent * event) if (started) { GST_DEBUG_OBJECT (src, "performing seek"); /* when we are running in push mode, we can execute the - * seek right now, we need to unlock. */ - result = gst_base_src_perform_seek (src, event, TRUE); + * seek right now. */ + result = gst_base_src_perform_seek (src, event); } else { GstEvent **event_p; @@ -1863,15 +1856,15 @@ gst_base_src_default_event (GstBaseSrc * src, GstEvent * event) if (!gst_base_src_seekable (src)) goto not_seekable; - result = gst_base_src_perform_seek (src, event, TRUE); + result = gst_base_src_perform_seek (src, event); break; case GST_EVENT_FLUSH_START: /* cancel any blocking getrange, is normally called * when in pull mode. */ - result = gst_base_src_set_flushing (src, TRUE, FALSE, TRUE, NULL); + result = gst_base_src_set_flushing (src, TRUE, FALSE, NULL); break; case GST_EVENT_FLUSH_STOP: - result = gst_base_src_set_flushing (src, FALSE, TRUE, TRUE, NULL); + result = gst_base_src_set_flushing (src, FALSE, TRUE, NULL); break; case GST_EVENT_QOS: { @@ -2020,7 +2013,7 @@ gst_base_src_do_sync (GstBaseSrc * basesrc, GstBuffer * buffer) GstClockTime base_time; GstClock *clock; GstClockTime now = GST_CLOCK_TIME_NONE, timestamp; - gboolean do_timestamp, first, pseudo_live; + gboolean do_timestamp, first, pseudo_live, is_live; bclass = GST_BASE_SRC_GET_CLASS (basesrc); @@ -2035,8 +2028,9 @@ gst_base_src_do_sync (GstBaseSrc * basesrc, GstBuffer * buffer) * latency. */ GST_OBJECT_LOCK (basesrc); + is_live = basesrc->is_live; /* if we are asked to sync against the clock we are a pseudo live element */ - pseudo_live = (start != -1 && basesrc->is_live); + pseudo_live = (start != -1 && is_live); /* check for the first buffer */ first = (basesrc->priv->latency == -1); @@ -2064,17 +2058,20 @@ gst_base_src_do_sync (GstBaseSrc * basesrc, GstBuffer * buffer) } } else if (first) { GST_DEBUG_OBJECT (basesrc, "no latency needed, live %d, sync %d", - basesrc->is_live, start != -1); + is_live, start != -1); basesrc->priv->latency = 0; } /* get clock, if no clock, we can't sync or do timestamps */ if ((clock = GST_ELEMENT_CLOCK (basesrc)) == NULL) goto no_clock; + else + gst_object_ref (clock); base_time = GST_ELEMENT_CAST (basesrc)->base_time; do_timestamp = basesrc->priv->do_timestamp; + GST_OBJECT_UNLOCK (basesrc); /* first buffer, calculate the timestamp offset */ if (first) { @@ -2132,7 +2129,7 @@ gst_base_src_do_sync (GstBaseSrc * basesrc, GstBuffer * buffer) if (!GST_CLOCK_TIME_IS_VALID (start)) goto no_sync; - if (basesrc->is_live && GST_CLOCK_TIME_IS_VALID (timestamp)) { + if (is_live && GST_CLOCK_TIME_IS_VALID (timestamp)) { /* for pseudo live sources, add our ts_offset to the timestamp */ GST_BUFFER_TIMESTAMP (buffer) += basesrc->priv->ts_offset; start += basesrc->priv->ts_offset; @@ -2142,10 +2139,11 @@ gst_base_src_do_sync (GstBaseSrc * basesrc, GstBuffer * buffer) "waiting for clock, base time %" GST_TIME_FORMAT ", stream_start %" GST_TIME_FORMAT, GST_TIME_ARGS (base_time), GST_TIME_ARGS (start)); - GST_OBJECT_UNLOCK (basesrc); result = gst_base_src_wait (basesrc, clock, start + base_time); + gst_object_unref (clock); + GST_LOG_OBJECT (basesrc, "clock entry done: %d", result); return result; @@ -2160,7 +2158,7 @@ no_clock: no_sync: { GST_DEBUG_OBJECT (basesrc, "no sync needed"); - GST_OBJECT_UNLOCK (basesrc); + gst_object_unref (clock); return GST_CLOCK_OK; } } @@ -3130,7 +3128,7 @@ gst_base_src_start_complete (GstBaseSrc * basesrc, GstFlowReturn ret) /* stop flushing now but for live sources, still block in the LIVE lock when * we are not yet PLAYING */ - gst_base_src_set_flushing (basesrc, FALSE, FALSE, FALSE, NULL); + gst_base_src_set_flushing (basesrc, FALSE, FALSE, NULL); gst_pad_mark_reconfigure (GST_BASE_SRC_PAD (basesrc)); @@ -3138,6 +3136,9 @@ gst_base_src_start_complete (GstBaseSrc * basesrc, GstFlowReturn ret) mode = GST_PAD_MODE (basesrc->srcpad); GST_OBJECT_UNLOCK (basesrc->srcpad); + /* take the stream lock here, we only want to let the task run when we have + * set the STARTED flag */ + GST_PAD_STREAM_LOCK (basesrc->srcpad); if (mode == GST_PAD_MODE_PUSH) { /* do initial seek, which will start the task */ GST_OBJECT_LOCK (basesrc); @@ -3145,10 +3146,8 @@ gst_base_src_start_complete (GstBaseSrc * basesrc, GstFlowReturn ret) basesrc->pending_seek = NULL; GST_OBJECT_UNLOCK (basesrc); - /* no need to unlock anything, the task is certainly - * not running here. The perform seek code will start the task when - * finished. */ - if (G_UNLIKELY (!gst_base_src_perform_seek (basesrc, event, FALSE))) + /* The perform seek code will start the task when finished. */ + if (G_UNLIKELY (!gst_base_src_perform_seek (basesrc, event))) goto seek_failed; if (event) @@ -3166,12 +3165,15 @@ gst_base_src_start_complete (GstBaseSrc * basesrc, GstFlowReturn ret) GST_LIVE_SIGNAL (basesrc); GST_LIVE_UNLOCK (basesrc); + GST_PAD_STREAM_UNLOCK (basesrc->srcpad); + return; seek_failed: { + GST_PAD_STREAM_UNLOCK (basesrc->srcpad); GST_ERROR_OBJECT (basesrc, "Failed to perform initial seek"); - gst_base_src_set_flushing (basesrc, TRUE, FALSE, TRUE, NULL); + gst_base_src_set_flushing (basesrc, TRUE, FALSE, NULL); if (event) gst_event_unref (event); ret = GST_FLOW_ERROR; @@ -3179,7 +3181,8 @@ seek_failed: } no_get_range: { - gst_base_src_set_flushing (basesrc, TRUE, FALSE, TRUE, NULL); + GST_PAD_STREAM_UNLOCK (basesrc->srcpad); + gst_base_src_set_flushing (basesrc, TRUE, FALSE, NULL); GST_ERROR_OBJECT (basesrc, "Cannot operate in pull mode, stopping"); ret = GST_FLOW_ERROR; goto error; @@ -3241,7 +3244,7 @@ gst_base_src_stop (GstBaseSrc * basesrc) GST_DEBUG_OBJECT (basesrc, "stopping source"); /* flush all */ - gst_base_src_set_flushing (basesrc, TRUE, FALSE, TRUE, NULL); + gst_base_src_set_flushing (basesrc, TRUE, FALSE, NULL); /* stop the task */ gst_pad_stop_task (basesrc->srcpad); @@ -3275,13 +3278,13 @@ was_stopped: */ static gboolean gst_base_src_set_flushing (GstBaseSrc * basesrc, - gboolean flushing, gboolean live_play, gboolean unlock, gboolean * playing) + gboolean flushing, gboolean live_play, gboolean * playing) { GstBaseSrcClass *bclass; bclass = GST_BASE_SRC_GET_CLASS (basesrc); - if (flushing && unlock) { + if (flushing) { gst_base_src_activate_pool (basesrc, FALSE); /* unlock any subclasses, we need to do this before grabbing the * LIVE_LOCK since we hold this lock before going into ::create. We pass an @@ -3316,18 +3319,16 @@ gst_base_src_set_flushing (GstBaseSrc * basesrc, gst_base_src_activate_pool (basesrc, TRUE); - /* When unlocking drop all delayed events */ - if (unlock) { - GST_OBJECT_LOCK (basesrc); - if (basesrc->priv->pending_events) { - g_list_foreach (basesrc->priv->pending_events, (GFunc) gst_event_unref, - NULL); - g_list_free (basesrc->priv->pending_events); - basesrc->priv->pending_events = NULL; - g_atomic_int_set (&basesrc->priv->have_events, FALSE); - } - GST_OBJECT_UNLOCK (basesrc); + /* Drop all delayed events */ + GST_OBJECT_LOCK (basesrc); + if (basesrc->priv->pending_events) { + g_list_foreach (basesrc->priv->pending_events, (GFunc) gst_event_unref, + NULL); + g_list_free (basesrc->priv->pending_events); + basesrc->priv->pending_events = NULL; + g_atomic_int_set (&basesrc->priv->have_events, FALSE); } + GST_OBJECT_UNLOCK (basesrc); } GST_LIVE_SIGNAL (basesrc); GST_LIVE_UNLOCK (basesrc); diff --git a/libs/gst/base/gsttypefindhelper.c b/libs/gst/base/gsttypefindhelper.c index cdb267a..23412b7 100644 --- a/libs/gst/base/gsttypefindhelper.c +++ b/libs/gst/base/gsttypefindhelper.c @@ -43,7 +43,8 @@ /* ********************** typefinding in pull mode ************************ */ static void -helper_find_suggest (gpointer data, guint probability, GstCaps * caps); +helper_find_suggest (gpointer data, GstTypeFindProbability probability, + GstCaps * caps); typedef struct { diff --git a/libs/gst/check/Makefile.in b/libs/gst/check/Makefile.in index 617f5a6..5c57700 100644 --- a/libs/gst/check/Makefile.in +++ b/libs/gst/check/Makefile.in @@ -53,6 +53,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = libs/gst/check DIST_COMMON = $(libgstcheck_@GST_API_VERSION@include_HEADERS) \ @@ -331,6 +332,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -483,7 +488,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/libs/gst/check/gstcheck.c b/libs/gst/check/gstcheck.c index 745b68c..98934f9 100644 --- a/libs/gst/check/gstcheck.c +++ b/libs/gst/check/gstcheck.c @@ -130,7 +130,9 @@ gst_check_init (int *argc, char **argv[]) gst_check_log_critical_func, NULL); g_log_set_handler ("GLib-GObject", G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING, gst_check_log_critical_func, NULL); - g_log_set_handler ("Gst-Phonon", G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING, + g_log_set_handler ("GLib-GIO", G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING, + gst_check_log_critical_func, NULL); + g_log_set_handler ("GLib", G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING, gst_check_log_critical_func, NULL); print_plugins (); diff --git a/libs/gst/check/libcheck/Makefile.in b/libs/gst/check/libcheck/Makefile.in index 085986e..a02142b 100644 --- a/libs/gst/check/libcheck/Makefile.in +++ b/libs/gst/check/libcheck/Makefile.in @@ -52,6 +52,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ subdir = libs/gst/check/libcheck DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/check.h.in @@ -264,6 +265,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -416,7 +421,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/libs/gst/controller/Makefile.in b/libs/gst/controller/Makefile.in index aa3cbda..897da92 100644 --- a/libs/gst/controller/Makefile.in +++ b/libs/gst/controller/Makefile.in @@ -53,6 +53,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = libs/gst/controller DIST_COMMON = $(libgstcontroller_@GST_API_VERSION@_include_HEADERS) \ @@ -296,6 +297,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -448,7 +453,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/libs/gst/helpers/Makefile.in b/libs/gst/helpers/Makefile.in index c12b276..7a9fc3f 100644 --- a/libs/gst/helpers/Makefile.in +++ b/libs/gst/helpers/Makefile.in @@ -51,6 +51,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ helpers_PROGRAMS = gst-plugin-scanner$(EXEEXT) subdir = libs/gst/helpers DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in @@ -255,6 +256,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -407,7 +412,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff --git a/libs/gst/net/Makefile.in b/libs/gst/net/Makefile.in index c4b49a1..770630b 100644 --- a/libs/gst/net/Makefile.in +++ b/libs/gst/net/Makefile.in @@ -53,6 +53,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA) subdir = libs/gst/net DIST_COMMON = $(libgstnet_@GST_API_VERSION@_include_HEADERS) \ @@ -294,6 +295,10 @@ GST_VERSION_MICRO = @GST_VERSION_MICRO@ GST_VERSION_MINOR = @GST_VERSION_MINOR@ GST_VERSION_NANO = @GST_VERSION_NANO@ GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_DOCBOOK2HTML = @HAVE_DOCBOOK2HTML@ HAVE_DOCBOOK2PS = @HAVE_DOCBOOK2PS@ HAVE_DVIPS = @HAVE_DVIPS@ @@ -446,7 +451,11 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ |