aboutsummaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/Makefile.in9
-rw-r--r--libs/gst/Makefile.in9
-rw-r--r--libs/gst/base/Makefile.in9
-rw-r--r--libs/gst/base/gstadapter.c21
-rw-r--r--libs/gst/base/gstbaseparse.c9
-rw-r--r--libs/gst/base/gstbasesink.c57
-rw-r--r--libs/gst/base/gstbasesink.h12
-rw-r--r--libs/gst/base/gstbasesrc.c87
-rw-r--r--libs/gst/base/gsttypefindhelper.c3
-rw-r--r--libs/gst/check/Makefile.in9
-rw-r--r--libs/gst/check/gstcheck.c4
-rw-r--r--libs/gst/check/libcheck/Makefile.in9
-rw-r--r--libs/gst/controller/Makefile.in9
-rw-r--r--libs/gst/helpers/Makefile.in9
-rw-r--r--libs/gst/net/Makefile.in9
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@