summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2011-02-22 19:09:48 +0100
committerWim Taymans <wim.taymans@collabora.co.uk>2011-02-22 19:09:48 +0100
commit1218511185697762078d810c0f44b28a7c5ad56f (patch)
tree54be458dc0483a797fde6d59340ec46ea2ebf784 /libs
parent5dd9ab1cab9cd8e2d8c9ee116df9bf5a5e5e7954 (diff)
libs: cleanups for 0.11
Remove deprecated stuff, fix padding, rearrange methods.
Diffstat (limited to 'libs')
-rw-r--r--libs/gst/base/gstadapter.h8
-rw-r--r--libs/gst/base/gstbasesink.c50
-rw-r--r--libs/gst/base/gstbasesink.h46
-rw-r--r--libs/gst/base/gstbasesrc.c30
-rw-r--r--libs/gst/base/gstbasesrc.h64
-rw-r--r--libs/gst/base/gstbasetransform.h33
-rw-r--r--libs/gst/base/gstdataqueue.c20
-rw-r--r--libs/gst/base/gstdataqueue.h10
8 files changed, 105 insertions, 156 deletions
diff --git a/libs/gst/base/gstadapter.h b/libs/gst/base/gstadapter.h
index ae8b7813b..290dfbec6 100644
--- a/libs/gst/base/gstadapter.h
+++ b/libs/gst/base/gstadapter.h
@@ -52,6 +52,7 @@ struct _GstAdapter {
/*< private >*/
GSList * buflist;
+ GSList * buflist_end;
guint size;
guint skip;
@@ -60,14 +61,9 @@ struct _GstAdapter {
guint assembled_size;
guint assembled_len;
- /* ABI added */
- /* Remember where the end of our buffer list is to
- * speed up the push */
- GSList *buflist_end;
-
GstAdapterPrivate *priv;
- gpointer _gst_reserved[GST_PADDING - 2];
+ gpointer _gst_reserved[GST_PADDING];
};
struct _GstAdapterClass {
diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c
index 040c25f82..9f76928fd 100644
--- a/libs/gst/base/gstbasesink.c
+++ b/libs/gst/base/gstbasesink.c
@@ -696,14 +696,14 @@ gst_base_sink_init (GstBaseSink * basesink, gpointer g_class)
basesink->pad_mode = GST_ACTIVATE_NONE;
basesink->preroll_queue = g_queue_new ();
- basesink->abidata.ABI.clip_segment = gst_segment_new ();
+ basesink->clip_segment = gst_segment_new ();
priv->have_latency = FALSE;
basesink->can_activate_push = DEFAULT_CAN_ACTIVATE_PUSH;
basesink->can_activate_pull = DEFAULT_CAN_ACTIVATE_PULL;
basesink->sync = DEFAULT_SYNC;
- basesink->abidata.ABI.max_lateness = DEFAULT_MAX_LATENESS;
+ basesink->max_lateness = DEFAULT_MAX_LATENESS;
g_atomic_int_set (&priv->qos_enabled, DEFAULT_QOS);
priv->async_enabled = DEFAULT_ASYNC;
priv->ts_offset = DEFAULT_TS_OFFSET;
@@ -724,7 +724,7 @@ gst_base_sink_finalize (GObject * object)
basesink = GST_BASE_SINK (object);
g_queue_free (basesink->preroll_queue);
- gst_segment_free (basesink->abidata.ABI.clip_segment);
+ gst_segment_free (basesink->clip_segment);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -795,7 +795,7 @@ gst_base_sink_set_max_lateness (GstBaseSink * sink, gint64 max_lateness)
g_return_if_fail (GST_IS_BASE_SINK (sink));
GST_OBJECT_LOCK (sink);
- sink->abidata.ABI.max_lateness = max_lateness;
+ sink->max_lateness = max_lateness;
GST_OBJECT_UNLOCK (sink);
}
@@ -820,7 +820,7 @@ gst_base_sink_get_max_lateness (GstBaseSink * sink)
g_return_val_if_fail (GST_IS_BASE_SINK (sink), -1);
GST_OBJECT_LOCK (sink);
- res = sink->abidata.ABI.max_lateness;
+ res = sink->max_lateness;
GST_OBJECT_UNLOCK (sink);
return res;
@@ -1564,7 +1564,6 @@ gst_base_sink_commit_state (GstBaseSink * basesink)
case GST_STATE_PLAYING:
{
GstBaseSinkClass *bclass;
- GstStateChangeReturn ret;
bclass = GST_BASE_SINK_GET_CLASS (basesink);
@@ -1578,14 +1577,6 @@ gst_base_sink_commit_state (GstBaseSink * basesink)
if (current == GST_STATE_READY) {
post_paused = TRUE;
}
-
- /* make sure we notify the subclass of async playing */
- if (bclass->async_play) {
- GST_WARNING_OBJECT (basesink, "deprecated async_play");
- ret = bclass->async_play (basesink);
- if (ret == GST_STATE_CHANGE_FAILURE)
- goto async_failed;
- }
break;
}
case GST_STATE_PAUSED:
@@ -1670,13 +1661,6 @@ stopping:
GST_OBJECT_UNLOCK (basesink);
return FALSE;
}
-async_failed:
- {
- GST_DEBUG_OBJECT (basesink, "async commit failed");
- GST_STATE_RETURN (basesink) = GST_STATE_CHANGE_FAILURE;
- GST_OBJECT_UNLOCK (basesink);
- return FALSE;
- }
}
static void
@@ -1803,7 +1787,7 @@ stop_stepping (GstBaseSink * sink, GstSegment * segment,
segment->start = current->start_start;
/* the clip segment is used for position report in paused... */
- memcpy (sink->abidata.ABI.clip_segment, segment, sizeof (GstSegment));
+ memcpy (sink->clip_segment, segment, sizeof (GstSegment));
/* post the step done when we know the stepped duration in TIME */
message =
@@ -2824,7 +2808,7 @@ gst_base_sink_is_too_late (GstBaseSink * basesink, GstMiniObject * obj,
if (G_LIKELY (status != GST_CLOCK_EARLY))
goto in_time;
- max_lateness = basesink->abidata.ABI.max_lateness;
+ max_lateness = basesink->max_lateness;
/* check if frame dropping is enabled */
if (max_lateness == -1)
@@ -3401,7 +3385,7 @@ gst_base_sink_flush_stop (GstBaseSink * basesink, GstPad * pad)
/* we need new segment info after the flush. */
basesink->have_newsegment = FALSE;
gst_segment_init (&basesink->segment, GST_FORMAT_UNDEFINED);
- gst_segment_init (basesink->abidata.ABI.clip_segment, GST_FORMAT_UNDEFINED);
+ gst_segment_init (basesink->clip_segment, GST_FORMAT_UNDEFINED);
}
GST_OBJECT_UNLOCK (basesink);
}
@@ -3471,7 +3455,7 @@ gst_base_sink_event (GstPad * pad, GstEvent * event)
* we need to configure the current clipping segment and insert the event
* in the queue to serialize it with the buffers for rendering. */
gst_base_sink_configure_segment (basesink, pad, event,
- basesink->abidata.ABI.clip_segment);
+ basesink->clip_segment);
ret =
gst_base_sink_queue_object_unlocked (basesink, pad,
@@ -3608,7 +3592,7 @@ gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad,
}
/* for code clarity */
- clip_segment = basesink->abidata.ABI.clip_segment;
+ clip_segment = basesink->clip_segment;
if (G_UNLIKELY (!basesink->have_newsegment)) {
gboolean sync;
@@ -3933,7 +3917,7 @@ gst_base_sink_perform_seek (GstBaseSink * sink, GstPad * pad, GstEvent * event)
GST_DEBUG_OBJECT (sink, "stop flushing upstream");
gst_pad_push_event (pad, gst_event_new_flush_stop ());
gst_base_sink_flush_stop (sink, pad);
- } else if (res && sink->abidata.ABI.running) {
+ } else if (res && sink->running) {
/* we are running the current segment and doing a non-flushing seek,
* close the segment first based on the last_stop. */
GST_DEBUG_OBJECT (sink, "closing running segment %" G_GINT64_FORMAT
@@ -3961,7 +3945,7 @@ gst_base_sink_perform_seek (GstBaseSink * sink, GstPad * pad, GstEvent * event)
}
sink->priv->discont = TRUE;
- sink->abidata.ABI.running = TRUE;
+ sink->running = TRUE;
GST_PAD_STREAM_UNLOCK (pad);
@@ -4393,7 +4377,7 @@ gst_base_sink_pad_activate_pull (GstPad * pad, gboolean active)
format = GST_FORMAT_BYTES;
gst_segment_init (&basesink->segment, format);
- gst_segment_init (basesink->abidata.ABI.clip_segment, format);
+ gst_segment_init (basesink->clip_segment, format);
GST_OBJECT_LOCK (basesink);
basesink->have_newsegment = TRUE;
GST_OBJECT_UNLOCK (basesink);
@@ -4403,8 +4387,7 @@ gst_base_sink_pad_activate_pull (GstPad * pad, gboolean active)
if (result) {
GST_DEBUG_OBJECT (basesink,
"setting duration in bytes to %" G_GINT64_FORMAT, duration);
- gst_segment_set_duration (basesink->abidata.ABI.clip_segment, format,
- duration);
+ gst_segment_set_duration (basesink->clip_segment, format, duration);
gst_segment_set_duration (&basesink->segment, format, duration);
} else {
GST_DEBUG_OBJECT (basesink, "unknown duration");
@@ -4548,7 +4531,7 @@ gst_base_sink_get_position (GstBaseSink * basesink, GstFormat format,
* main segment directly with the new segment values without it having to be
* activated by the rendering after preroll */
if (basesink->pad_mode == GST_ACTIVATE_PUSH)
- segment = basesink->abidata.ABI.clip_segment;
+ segment = basesink->clip_segment;
else
segment = &basesink->segment;
@@ -4943,8 +4926,7 @@ gst_base_sink_change_state (GstElement * element, GstStateChange transition)
GST_DEBUG_OBJECT (basesink, "READY to PAUSED");
basesink->have_newsegment = FALSE;
gst_segment_init (&basesink->segment, GST_FORMAT_UNDEFINED);
- gst_segment_init (basesink->abidata.ABI.clip_segment,
- GST_FORMAT_UNDEFINED);
+ gst_segment_init (basesink->clip_segment, GST_FORMAT_UNDEFINED);
basesink->offset = 0;
basesink->have_preroll = FALSE;
priv->step_unlock = FALSE;
diff --git a/libs/gst/base/gstbasesink.h b/libs/gst/base/gstbasesink.h
index a4215b8de..2c83eaf1e 100644
--- a/libs/gst/base/gstbasesink.h
+++ b/libs/gst/base/gstbasesink.h
@@ -80,26 +80,21 @@ struct _GstBaseSink {
/*< protected >*/ /* with STREAM_LOCK */
gboolean have_newsegment;
GstSegment segment;
+ GstSegment *clip_segment;
/*< private >*/ /* with LOCK */
GstClockID clock_id;
GstClockTime end_time;
gboolean sync;
gboolean flushing;
+ gboolean running;
- /*< private >*/
- union {
- struct {
- /* segment used for clipping incoming buffers */
- GstSegment *clip_segment;
- /* max amount of time a buffer can be late, -1 no limit. */
- gint64 max_lateness;
- gboolean running;
- } ABI;
- gpointer _gst_reserved[GST_PADDING_LARGE - 1];
- } abidata;
+ gint64 max_lateness;
+ /*< private >*/
GstBaseSinkPrivate *priv;
+
+ gpointer _gst_reserved[GST_PADDING_LARGE];
};
/**
@@ -146,6 +141,11 @@ struct _GstBaseSinkClass {
/* notify subclass of new caps */
gboolean (*set_caps) (GstBaseSink *sink, GstCaps *caps);
+ /* fixate sink caps during pull-mode negotiation */
+ void (*fixate) (GstBaseSink *sink, GstCaps *caps);
+ /* start or stop a pulling thread */
+ gboolean (*activate_pull)(GstBaseSink *sink, gboolean active);
+
/* allocate a new buffer with given caps */
GstFlowReturn (*buffer_alloc) (GstBaseSink *sink, guint64 offset, guint size,
GstCaps *caps, GstBuffer **buf);
@@ -161,33 +161,21 @@ struct _GstBaseSinkClass {
/* unlock any pending access to the resource. subclasses should unlock
* any function ASAP. */
gboolean (*unlock) (GstBaseSink *sink);
-
- /* notify subclass of event, preroll buffer or real buffer */
- gboolean (*event) (GstBaseSink *sink, GstEvent *event);
- GstFlowReturn (*preroll) (GstBaseSink *sink, GstBuffer *buffer);
- GstFlowReturn (*render) (GstBaseSink *sink, GstBuffer *buffer);
-
- /* ABI additions */
-
- /* when an ASYNC state change to PLAYING happens */ /* with LOCK */
- GstStateChangeReturn (*async_play) (GstBaseSink *sink);
-
- /* start or stop a pulling thread */
- gboolean (*activate_pull)(GstBaseSink *sink, gboolean active);
-
- /* fixate sink caps during pull-mode negotiation */
- void (*fixate) (GstBaseSink *sink, GstCaps *caps);
-
/* Clear a previously indicated unlock request not that unlocking is
* complete. Sub-classes should clear any command queue or indicator they
* set during unlock */
gboolean (*unlock_stop) (GstBaseSink *sink);
+ /* notify subclass of event, preroll buffer or real buffer */
+ gboolean (*event) (GstBaseSink *sink, GstEvent *event);
+
+ GstFlowReturn (*preroll) (GstBaseSink *sink, GstBuffer *buffer);
+ GstFlowReturn (*render) (GstBaseSink *sink, GstBuffer *buffer);
/* Render a BufferList */
GstFlowReturn (*render_list) (GstBaseSink *sink, GstBufferList *buffer_list);
/*< private >*/
- gpointer _gst_reserved[GST_PADDING_LARGE-5];
+ gpointer _gst_reserved[GST_PADDING_LARGE];
};
GType gst_base_sink_get_type(void);
diff --git a/libs/gst/base/gstbasesrc.c b/libs/gst/base/gstbasesrc.c
index 287047567..e678549dc 100644
--- a/libs/gst/base/gstbasesrc.c
+++ b/libs/gst/base/gstbasesrc.c
@@ -436,7 +436,7 @@ gst_base_src_init (GstBaseSrc * basesrc, gpointer g_class)
basesrc->clock_id = NULL;
/* we operate in BYTES by default */
gst_base_src_set_format (basesrc, GST_FORMAT_BYTES);
- basesrc->data.ABI.typefind = DEFAULT_TYPEFIND;
+ basesrc->typefind = DEFAULT_TYPEFIND;
basesrc->priv->do_timestamp = DEFAULT_DO_TIMESTAMP;
g_atomic_int_set (&basesrc->priv->have_tags, FALSE);
@@ -457,7 +457,7 @@ gst_base_src_finalize (GObject * object)
g_mutex_free (basesrc->live_lock);
g_cond_free (basesrc->live_cond);
- event_p = &basesrc->data.ABI.pending_seek;
+ event_p = &basesrc->pending_seek;
gst_event_replace (event_p, NULL);
if (basesrc->priv->pending_tags) {
@@ -755,7 +755,7 @@ gst_base_src_new_seamless_segment (GstBaseSrc * src, gint64 start, gint64 stop,
GST_TIME_ARGS (stop), GST_TIME_ARGS (position));
GST_OBJECT_LOCK (src);
- if (src->data.ABI.running && !src->priv->newsegment_pending) {
+ if (src->running && !src->priv->newsegment_pending) {
if (src->priv->close_segment)
gst_event_unref (src->priv->close_segment);
src->priv->close_segment =
@@ -785,7 +785,7 @@ gst_base_src_new_seamless_segment (GstBaseSrc * src, gint64 start, gint64 stop,
GST_OBJECT_UNLOCK (src);
src->priv->discont = TRUE;
- src->data.ABI.running = TRUE;
+ src->running = TRUE;
return res;
}
@@ -1409,7 +1409,7 @@ gst_base_src_perform_seek (GstBaseSrc * src, GstEvent * event, gboolean unlock)
/* send flush stop, peer will accept data and events again. We
* are not yet providing data as we still have the STREAM_LOCK. */
gst_pad_push_event (src->srcpad, tevent);
- } else if (res && src->data.ABI.running) {
+ } else if (res && src->running) {
/* we are running the current segment and doing a non-flushing seek,
* close the segment first based on the last_stop. */
GST_DEBUG_OBJECT (src, "closing running segment %" G_GINT64_FORMAT
@@ -1480,7 +1480,7 @@ gst_base_src_perform_seek (GstBaseSrc * src, GstEvent * event, gboolean unlock)
}
src->priv->discont = TRUE;
- src->data.ABI.running = TRUE;
+ src->running = TRUE;
/* and restart the task in case it got paused explicitly or by
* the FLUSH_START event we pushed out. */
tres = gst_pad_start_task (src->srcpad, (GstTaskFunction) gst_base_src_loop,
@@ -1624,7 +1624,7 @@ gst_base_src_send_event (GstElement * element, GstEvent * event)
* get activated */
GST_OBJECT_LOCK (src);
GST_DEBUG_OBJECT (src, "queueing seek");
- event_p = &src->data.ABI.pending_seek;
+ event_p = &src->pending_seek;
gst_event_replace ((GstEvent **) event_p, event);
GST_OBJECT_UNLOCK (src);
/* assume the seek will work */
@@ -1795,7 +1795,7 @@ gst_base_src_set_property (GObject * object, guint prop_id,
src->num_buffers = g_value_get_int (value);
break;
case PROP_TYPEFIND:
- src->data.ABI.typefind = g_value_get_boolean (value);
+ src->typefind = g_value_get_boolean (value);
break;
case PROP_DO_TIMESTAMP:
gst_base_src_set_do_timestamp (src, g_value_get_boolean (value));
@@ -1822,7 +1822,7 @@ gst_base_src_get_property (GObject * object, guint prop_id, GValue * value,
g_value_set_int (value, src->num_buffers);
break;
case PROP_TYPEFIND:
- g_value_set_boolean (value, src->data.ABI.typefind);
+ g_value_set_boolean (value, src->typefind);
break;
case PROP_DO_TIMESTAMP:
g_value_set_boolean (value, gst_base_src_get_do_timestamp (src));
@@ -2535,7 +2535,7 @@ pause:
GstEvent *event;
GST_DEBUG_OBJECT (src, "pausing task, reason %s", reason);
- src->data.ABI.running = FALSE;
+ src->running = FALSE;
gst_pad_pause_task (pad);
if (ret == GST_FLOW_UNEXPECTED) {
gboolean flag_segment;
@@ -2699,7 +2699,7 @@ gst_base_src_start (GstBaseSrc * basesrc)
gst_segment_init (&basesrc->segment, basesrc->segment.format);
GST_OBJECT_UNLOCK (basesrc);
- basesrc->data.ABI.running = FALSE;
+ basesrc->running = FALSE;
basesrc->priv->newsegment_pending = FALSE;
bclass = GST_BASE_SRC_GET_CLASS (basesrc);
@@ -2748,7 +2748,7 @@ gst_base_src_start (GstBaseSrc * basesrc)
GST_DEBUG_OBJECT (basesrc, "is random_access: %d", basesrc->random_access);
/* run typefind if we are random_access and the typefinding is enabled. */
- if (basesrc->random_access && basesrc->data.ABI.typefind && size != -1) {
+ if (basesrc->random_access && basesrc->typefind && size != -1) {
GstCaps *caps;
if (!(caps = gst_type_find_helper (basesrc->srcpad, size)))
@@ -2939,8 +2939,8 @@ gst_base_src_activate_push (GstPad * pad, gboolean active)
/* do initial seek, which will start the task */
GST_OBJECT_LOCK (basesrc);
- event = basesrc->data.ABI.pending_seek;
- basesrc->data.ABI.pending_seek = NULL;
+ event = basesrc->pending_seek;
+ basesrc->pending_seek = NULL;
GST_OBJECT_UNLOCK (basesrc);
/* no need to unlock anything, the task is certainly
@@ -3104,7 +3104,7 @@ gst_base_src_change_state (GstElement * element, GstStateChange transition)
basesrc->priv->last_sent_eos = TRUE;
}
g_atomic_int_set (&basesrc->priv->pending_eos, FALSE);
- event_p = &basesrc->data.ABI.pending_seek;
+ event_p = &basesrc->pending_seek;
gst_event_replace (event_p, NULL);
event_p = &basesrc->priv->close_segment;
gst_event_replace (event_p, NULL);
diff --git a/libs/gst/base/gstbasesrc.h b/libs/gst/base/gstbasesrc.h
index 971597205..2ccea4f5e 100644
--- a/libs/gst/base/gstbasesrc.h
+++ b/libs/gst/base/gstbasesrc.h
@@ -101,18 +101,14 @@ struct _GstBaseSrc {
gint num_buffers;
gint num_buffers_left;
- /*< private >*/
- union {
- struct {
- /* FIXME: those fields should be moved into the private struct */
- gboolean typefind;
- gboolean running;
- GstEvent *pending_seek;
- } ABI;
- gpointer _gst_reserved[GST_PADDING_LARGE-1];
- } data;
+ gboolean typefind;
+ gboolean running;
+ GstEvent *pending_seek;
GstBaseSrcPrivate *priv;
+
+ /*< private >*/
+ gpointer _gst_reserved[GST_PADDING_LARGE];
};
/**
@@ -178,9 +174,8 @@ struct _GstBaseSrcClass {
/* decide on caps */
gboolean (*negotiate) (GstBaseSrc *src);
-
- /* generate and send a newsegment (UNUSED) */
- gboolean (*newsegment) (GstBaseSrc *src);
+ /* called if, in negotiation, caps need fixating */
+ void (*fixate) (GstBaseSrc *src, GstCaps *caps);
/* start and stop processing, ideal for opening/closing the resource */
gboolean (*start) (GstBaseSrc *src);
@@ -196,23 +191,6 @@ struct _GstBaseSrcClass {
/* check if the resource is seekable */
gboolean (*is_seekable) (GstBaseSrc *src);
- /* unlock any pending access to the resource. subclasses should unlock
- * any function ASAP. */
- gboolean (*unlock) (GstBaseSrc *src);
-
- /* notify subclasses of an event */
- gboolean (*event) (GstBaseSrc *src, GstEvent *event);
-
- /* ask the subclass to create a buffer with offset and size */
- GstFlowReturn (*create) (GstBaseSrc *src, guint64 offset, guint size,
- GstBuffer **buf);
-
- /* additions that change padding... */
- /* notify subclasses of a seek */
- gboolean (*do_seek) (GstBaseSrc *src, GstSegment *segment);
- /* notify subclasses of a query */
- gboolean (*query) (GstBaseSrc *src, GstQuery *query);
-
/* check whether the source would support pull-based operation if
* it were to be opened now. This vfunc is optional, but should be
* implemented if possible to avoid unnecessary start/stop cycles.
@@ -221,19 +199,31 @@ struct _GstBaseSrcClass {
* undesirable. */
gboolean (*check_get_range) (GstBaseSrc *src);
- /* called if, in negotiation, caps need fixating */
- void (*fixate) (GstBaseSrc *src, GstCaps *caps);
-
- /* Clear any pending unlock request, as we succeeded in unlocking */
- gboolean (*unlock_stop) (GstBaseSrc *src);
-
/* Prepare the segment on which to perform do_seek(), converting to the
* current basesrc format. */
gboolean (*prepare_seek_segment) (GstBaseSrc *src, GstEvent *seek,
GstSegment *segment);
+ /* notify subclasses of a seek */
+ gboolean (*do_seek) (GstBaseSrc *src, GstSegment *segment);
+
+ /* unlock any pending access to the resource. subclasses should unlock
+ * any function ASAP. */
+ gboolean (*unlock) (GstBaseSrc *src);
+ /* Clear any pending unlock request, as we succeeded in unlocking */
+ gboolean (*unlock_stop) (GstBaseSrc *src);
+
+ /* notify subclasses of a query */
+ gboolean (*query) (GstBaseSrc *src, GstQuery *query);
+
+ /* notify subclasses of an event */
+ gboolean (*event) (GstBaseSrc *src, GstEvent *event);
+
+ /* ask the subclass to create a buffer with offset and size */
+ GstFlowReturn (*create) (GstBaseSrc *src, guint64 offset, guint size,
+ GstBuffer **buf);
/*< private >*/
- gpointer _gst_reserved[GST_PADDING_LARGE - 6];
+ gpointer _gst_reserved[GST_PADDING_LARGE];
};
GType gst_base_src_get_type (void);
diff --git a/libs/gst/base/gstbasetransform.h b/libs/gst/base/gstbasetransform.h
index 33f971baa..85cf508e9 100644
--- a/libs/gst/base/gstbasetransform.h
+++ b/libs/gst/base/gstbasetransform.h
@@ -138,7 +138,7 @@ struct _GstBaseTransform {
/*< private >*/
GstBaseTransformPrivate *priv;
- gpointer _gst_reserved[GST_PADDING_LARGE - 1];
+ gpointer _gst_reserved[GST_PADDING_LARGE];
};
/**
@@ -199,8 +199,9 @@ struct _GstBaseTransformClass {
GstElementClass parent_class;
/*< public >*/
- /* virtual methods for subclasses */
+ gboolean passthrough_on_same_caps;
+ /* virtual methods for subclasses */
GstCaps* (*transform_caps) (GstBaseTransform *trans,
GstPadDirection direction,
GstCaps *caps);
@@ -208,6 +209,12 @@ struct _GstBaseTransformClass {
void (*fixate_caps) (GstBaseTransform *trans,
GstPadDirection direction, GstCaps *caps,
GstCaps *othercaps);
+ gboolean (*accept_caps) (GstBaseTransform *trans, GstPadDirection direction,
+ GstCaps *caps);
+
+ gboolean (*set_caps) (GstBaseTransform *trans, GstCaps *incaps,
+ GstCaps *outcaps);
+
gboolean (*transform_size) (GstBaseTransform *trans,
GstPadDirection direction,
@@ -217,34 +224,24 @@ struct _GstBaseTransformClass {
gboolean (*get_unit_size) (GstBaseTransform *trans, GstCaps *caps,
guint *size);
- gboolean (*set_caps) (GstBaseTransform *trans, GstCaps *incaps,
- GstCaps *outcaps);
-
gboolean (*start) (GstBaseTransform *trans);
gboolean (*stop) (GstBaseTransform *trans);
gboolean (*event) (GstBaseTransform *trans, GstEvent *event);
-
- GstFlowReturn (*transform) (GstBaseTransform *trans, GstBuffer *inbuf,
- GstBuffer *outbuf);
- GstFlowReturn (*transform_ip) (GstBaseTransform *trans, GstBuffer *buf);
-
- /* FIXME: When adjusting the padding, move these to nicer places in the class */
- gboolean passthrough_on_same_caps;
+ /* src event */
+ gboolean (*src_event) (GstBaseTransform *trans, GstEvent *event);
GstFlowReturn (*prepare_output_buffer) (GstBaseTransform * trans,
GstBuffer *input, gint size, GstCaps *caps, GstBuffer **buf);
- /* src event */
- gboolean (*src_event) (GstBaseTransform *trans, GstEvent *event);
-
void (*before_transform) (GstBaseTransform *trans, GstBuffer *buffer);
- gboolean (*accept_caps) (GstBaseTransform *trans, GstPadDirection direction,
- GstCaps *caps);
+ GstFlowReturn (*transform) (GstBaseTransform *trans, GstBuffer *inbuf,
+ GstBuffer *outbuf);
+ GstFlowReturn (*transform_ip) (GstBaseTransform *trans, GstBuffer *buf);
/*< private >*/
- gpointer _gst_reserved[GST_PADDING_LARGE - 3];
+ gpointer _gst_reserved[GST_PADDING_LARGE];
};
GType gst_base_transform_get_type (void);
diff --git a/libs/gst/base/gstdataqueue.c b/libs/gst/base/gstdataqueue.c
index f6b11177c..69dadb4c0 100644
--- a/libs/gst/base/gstdataqueue.c
+++ b/libs/gst/base/gstdataqueue.c
@@ -277,7 +277,7 @@ gst_data_queue_locked_flush (GstDataQueue * queue)
gst_data_queue_cleanup (queue);
STATUS (queue, "after flushing");
/* we deleted something... */
- if (queue->abidata.ABI.waiting_del)
+ if (queue->waiting_del)
g_cond_signal (queue->item_del);
}
@@ -384,9 +384,9 @@ gst_data_queue_set_flushing (GstDataQueue * queue, gboolean flushing)
queue->flushing = flushing;
if (flushing) {
/* release push/pop functions */
- if (queue->abidata.ABI.waiting_add)
+ if (queue->waiting_add)
g_cond_signal (queue->item_add);
- if (queue->abidata.ABI.waiting_del)
+ if (queue->waiting_del)
g_cond_signal (queue->item_del);
}
GST_DATA_QUEUE_MUTEX_UNLOCK (queue);
@@ -432,9 +432,9 @@ gst_data_queue_push (GstDataQueue * queue, GstDataQueueItem * item)
/* signal might have removed some items */
while (gst_data_queue_locked_is_full (queue)) {
- queue->abidata.ABI.waiting_del = TRUE;
+ queue->waiting_del = TRUE;
g_cond_wait (queue->item_del, queue->qlock);
- queue->abidata.ABI.waiting_del = FALSE;
+ queue->waiting_del = FALSE;
if (queue->flushing)
goto flushing;
}
@@ -448,7 +448,7 @@ gst_data_queue_push (GstDataQueue * queue, GstDataQueueItem * item)
queue->cur_level.time += item->duration;
STATUS (queue, "after pushing");
- if (queue->abidata.ABI.waiting_add)
+ if (queue->waiting_add)
g_cond_signal (queue->item_add);
GST_DATA_QUEUE_MUTEX_UNLOCK (queue);
@@ -497,9 +497,9 @@ gst_data_queue_pop (GstDataQueue * queue, GstDataQueueItem ** item)
GST_DATA_QUEUE_MUTEX_LOCK_CHECK (queue, flushing);
while (gst_data_queue_locked_is_empty (queue)) {
- queue->abidata.ABI.waiting_add = TRUE;
+ queue->waiting_add = TRUE;
g_cond_wait (queue->item_add, queue->qlock);
- queue->abidata.ABI.waiting_add = FALSE;
+ queue->waiting_add = FALSE;
if (queue->flushing)
goto flushing;
}
@@ -515,7 +515,7 @@ gst_data_queue_pop (GstDataQueue * queue, GstDataQueueItem ** item)
queue->cur_level.time -= (*item)->duration;
STATUS (queue, "after popping");
- if (queue->abidata.ABI.waiting_del)
+ if (queue->waiting_del)
g_cond_signal (queue->item_del);
GST_DATA_QUEUE_MUTEX_UNLOCK (queue);
@@ -600,7 +600,7 @@ gst_data_queue_limits_changed (GstDataQueue * queue)
g_return_if_fail (GST_IS_DATA_QUEUE (queue));
GST_DATA_QUEUE_MUTEX_LOCK (queue);
- if (queue->abidata.ABI.waiting_del) {
+ if (queue->waiting_del) {
GST_DEBUG ("signal del");
g_cond_signal (queue->item_del);
}
diff --git a/libs/gst/base/gstdataqueue.h b/libs/gst/base/gstdataqueue.h
index d38230b52..4ab42ff93 100644
--- a/libs/gst/base/gstdataqueue.h
+++ b/libs/gst/base/gstdataqueue.h
@@ -128,20 +128,16 @@ struct _GstDataQueue
gpointer *checkdata;
GMutex *qlock; /* lock for queue (vs object lock) */
+ gboolean waiting_add;
GCond *item_add; /* signals buffers now available for reading */
+ gboolean waiting_del;
GCond *item_del; /* signals space now available for writing */
gboolean flushing; /* indicates whether conditions where signalled because
* of external flushing */
GstDataQueueFullCallback fullcallback;
GstDataQueueEmptyCallback emptycallback;
- union {
- struct {
- gboolean waiting_add;
- gboolean waiting_del;
- } ABI;
- gpointer _gst_reserved[GST_PADDING - 2];
- } abidata;
+ gpointer _gst_reserved[GST_PADDING];
};
struct _GstDataQueueClass