g_static_rec_mutex_init (pad->stream_rec_lock);
pad->block_cond = g_cond_new ();
-}
-
-static void
-clear_sticky_events (GstPad * pad)
-{
- guint i;
- for (i = 0; i < GST_EVENT_MAX_STICKY; i++) {
- GstEvent **eventp = &pad->sticky[i];
- gst_event_replace (eventp, NULL);
- }
+ pad->context = gst_context_new ();
}
static void
pad->block_data = NULL;
}
- clear_sticky_events (pad);
+ gst_context_clear (pad->context);
G_OBJECT_CLASS (parent_class)->dispose (object);
}
pad->block_cond = NULL;
}
+ gst_context_unref (pad->context);
+
G_OBJECT_CLASS (parent_class)->finalize (object);
}
/* ensures that streaming stops */
GST_PAD_STREAM_LOCK (pad);
GST_DEBUG_OBJECT (pad, "stopped streaming");
- clear_sticky_events (pad);
+ gst_context_clear (pad->context);
GST_PAD_STREAM_UNLOCK (pad);
break;
}
GST_PAD_PEER (srcpad) = NULL;
GST_PAD_PEER (sinkpad) = NULL;
- /* clear the events on the sinkpad */
- clear_sticky_events (sinkpad);
-
GST_OBJECT_UNLOCK (sinkpad);
GST_OBJECT_UNLOCK (srcpad);
{
GstPadLinkReturn result;
GstElement *parent;
- guint i;
g_return_val_if_fail (GST_IS_PAD (srcpad), GST_PAD_LINK_REFUSED);
g_return_val_if_fail (GST_PAD_IS_SRC (srcpad), GST_PAD_LINK_WRONG_DIRECTION);
GST_PAD_PEER (srcpad) = sinkpad;
GST_PAD_PEER (sinkpad) = srcpad;
- /* copy the events */
- for (i = 0; i < GST_EVENT_MAX_STICKY; i++) {
- GstEvent **eventp = &sinkpad->sticky[i], *event;
-
- if ((event = srcpad->sticky[i]))
- GST_OBJECT_FLAG_SET (sinkpad, GST_PAD_STICKY_PENDING);
- gst_event_replace (eventp, event);
- }
-
GST_OBJECT_UNLOCK (sinkpad);
GST_OBJECT_UNLOCK (srcpad);
GST_PAD_STREAM_LOCK (pad);
-again:
GST_OBJECT_LOCK (pad);
if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad)))
goto flushing;
emit_signal = GST_PAD_DO_BUFFER_SIGNALS (pad) > 0;
+#if 0
if (G_UNLIKELY (GST_PAD_IS_STICKY_PENDING (pad))) {
GstPadEventFunction eventfunc;
goto again;
}
}
+#endif
GST_OBJECT_UNLOCK (pad);
/* store the event on the pad, but only on srcpads */
if (GST_PAD_IS_SRC (pad) && GST_EVENT_IS_STICKY (event)) {
- guint idx = GST_EVENT_STICKY_IDX (event);
- GstEvent **eventp = &pad->sticky[idx];
- GST_LOG_OBJECT (pad, "storing sticky event %s at index %u",
- GST_EVENT_TYPE_NAME (event), idx);
- gst_event_replace (eventp, event);
+ pad->context = gst_context_make_writable (pad->context);
+ gst_context_update (pad->context, event);
}
peerpad = GST_PAD_PEER (pad);
#include <gst/gstobject.h>
#include <gst/gstbuffer.h>
#include <gst/gstbufferlist.h>
+#include <gst/gstcontext.h>
#include <gst/gstcaps.h>
#include <gst/gstevent.h>
#include <gst/gstquery.h>
* @GST_PAD_IN_GETCAPS: GstPadGetCapsFunction() is running now
* @GST_PAD_IN_SETCAPS: GstPadSetCapsFunction() is running now
* @GST_PAD_BLOCKING: is pad currently blocking on a buffer or event
- * @GST_PAD_STICKY_PENDING: sticky events should be pushed
* @GST_PAD_FLAG_LAST: offset to define more flags
*
* Pad state flags
GST_PAD_IN_GETCAPS = (GST_OBJECT_FLAG_LAST << 2),
GST_PAD_IN_SETCAPS = (GST_OBJECT_FLAG_LAST << 3),
GST_PAD_BLOCKING = (GST_OBJECT_FLAG_LAST << 4),
- GST_PAD_STICKY_PENDING = (GST_OBJECT_FLAG_LAST << 5),
/* padding */
GST_PAD_FLAG_LAST = (GST_OBJECT_FLAG_LAST << 16)
} GstPadFlags;
GstPadCheckGetRangeFunction checkgetrangefunc;
GstPadGetRangeFunction getrangefunc;
GstPadEventFunction eventfunc;
- GstEvent *sticky[GST_EVENT_MAX_STICKY];
+ GstContext *context;
GstActivateMode mode;
#define GST_PAD_IS_FLUSHING(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_FLUSHING))
#define GST_PAD_IS_IN_GETCAPS(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_IN_GETCAPS))
#define GST_PAD_IS_IN_SETCAPS(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_IN_SETCAPS))
-#define GST_PAD_IS_STICKY_PENDING(pad) (GST_OBJECT_FLAG_IS_SET (pad, GST_PAD_STICKY_PENDING))
#define GST_PAD_IS_SRC(pad) (GST_PAD_DIRECTION(pad) == GST_PAD_SRC)
#define GST_PAD_IS_SINK(pad) (GST_PAD_DIRECTION(pad) == GST_PAD_SINK)