From 6664bebb6dcc2663e19211ff735e3be48c42c26f Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Mon, 21 Feb 2005 15:27:23 +0000 Subject: [PATCH] gst/elements/: (gst_fakesink_loop, gst_fakesrc_loop, gst_fakesink_chain) Original commit message from CVS: 2005-02-21 Andy Wingo * gst/elements/gstfakesink.c: * gst/elements/gstfakesrc.c: (gst_fakesink_loop, gst_fakesrc_loop, gst_fakesink_chain) (gst_fakesrc_get_range): Assert the pad has been activated in the proper mode. This will fail right now for fakesrc ! identity ! fakesink. (gst_fakesrc_activate, gst_fakesink_activate): Record the pad activation mode. * gst/elements/gstfakesrc.h: Add a pad_mode instance variable. --- ChangeLog | 11 +++++++++++ gst/elements/gstfakesink.c | 8 ++++++++ gst/elements/gstfakesrc.c | 9 +++++++++ gst/elements/gstfakesrc.h | 1 + plugins/elements/gstfakesink.c | 8 ++++++++ plugins/elements/gstfakesrc.c | 9 +++++++++ plugins/elements/gstfakesrc.h | 1 + 7 files changed, 47 insertions(+) diff --git a/ChangeLog b/ChangeLog index 9203de4d6d..c84699f571 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2005-02-21 Andy Wingo + * gst/elements/gstfakesink.c: + * gst/elements/gstfakesrc.c: + (gst_fakesink_loop, gst_fakesrc_loop, gst_fakesink_chain) + (gst_fakesrc_get_range): Assert the pad has been activated in the + proper mode. This will fail right now for fakesrc ! identity ! + fakesink. + (gst_fakesrc_activate, gst_fakesink_activate): Record the pad + activation mode. + + * gst/elements/gstfakesrc.h: Add a pad_mode instance variable. + * gst/gstpad.c (gst_real_pad_dispose): Free the stream lock (it wasn't being freed before). (gst_real_pad_init): Allocate and initialize the stream lock. diff --git a/gst/elements/gstfakesink.c b/gst/elements/gstfakesink.c index b5ca8feb46..8d070a8d9a 100644 --- a/gst/elements/gstfakesink.c +++ b/gst/elements/gstfakesink.c @@ -400,6 +400,9 @@ gst_fakesink_activate (GstPad * pad, GstActivateMode mode) result = TRUE; break; } + + fakesink->pad_mode = mode; + return result; } @@ -494,6 +497,9 @@ gst_fakesink_chain (GstPad * pad, GstBuffer * buf) { GstFlowReturn result; + g_assert (GST_FAKESINK (GST_OBJECT_PARENT (pad))->pad_mode == + GST_ACTIVATE_PUSH); + GST_STREAM_LOCK (pad); result = gst_fakesink_chain_unlocked (pad, buf); @@ -512,6 +518,8 @@ gst_fakesink_loop (GstPad * pad) fakesink = GST_FAKESINK (GST_OBJECT_PARENT (pad)); + g_assert (fakesink->pad_mode == GST_ACTIVATE_PULL); + GST_STREAM_LOCK (pad); result = gst_pad_pull_range (pad, fakesink->offset, DEFAULT_SIZE, &buf); diff --git a/gst/elements/gstfakesrc.c b/gst/elements/gstfakesrc.c index fb388ec78a..7ad57153cf 100644 --- a/gst/elements/gstfakesrc.c +++ b/gst/elements/gstfakesrc.c @@ -328,6 +328,7 @@ gst_fakesrc_init (GstFakeSrc * fakesrc) fakesrc->last_message = NULL; fakesrc->datarate = DEFAULT_DATARATE; fakesrc->sync = DEFAULT_SYNC; + fakesrc->pad_mode = GST_ACTIVATE_NONE; } static void @@ -869,6 +870,9 @@ gst_fakesrc_get_range (GstPad * pad, guint64 offset, guint length, { GstFlowReturn fret; + g_assert (GST_FAKESRC (GST_OBJECT_PARENT (pad))->pad_mode == + GST_ACTIVATE_PULL); + GST_STREAM_LOCK (pad); fret = gst_fakesrc_get_range_unlocked (pad, offset, length, ret); @@ -887,6 +891,8 @@ gst_fakesrc_loop (GstPad * pad) src = GST_FAKESRC (GST_OBJECT_PARENT (pad)); + g_assert (src->pad_mode == GST_ACTIVATE_PUSH); + GST_STREAM_LOCK (pad); if (src->need_flush) { src->need_flush = FALSE; @@ -956,6 +962,9 @@ gst_fakesrc_activate (GstPad * pad, GstActivateMode mode) result = TRUE; break; } + + fakesrc->pad_mode = mode; + return result; } diff --git a/gst/elements/gstfakesrc.h b/gst/elements/gstfakesrc.h index d381a4d0d0..4560370a05 100644 --- a/gst/elements/gstfakesrc.h +++ b/gst/elements/gstfakesrc.h @@ -86,6 +86,7 @@ struct _GstFakeSrc { GstFakeSrcDataType data; GstFakeSrcSizeType sizetype; GstFakeSrcFillType filltype; + GstActivateMode pad_mode; guint sizemin; guint sizemax; diff --git a/plugins/elements/gstfakesink.c b/plugins/elements/gstfakesink.c index b5ca8feb46..8d070a8d9a 100644 --- a/plugins/elements/gstfakesink.c +++ b/plugins/elements/gstfakesink.c @@ -400,6 +400,9 @@ gst_fakesink_activate (GstPad * pad, GstActivateMode mode) result = TRUE; break; } + + fakesink->pad_mode = mode; + return result; } @@ -494,6 +497,9 @@ gst_fakesink_chain (GstPad * pad, GstBuffer * buf) { GstFlowReturn result; + g_assert (GST_FAKESINK (GST_OBJECT_PARENT (pad))->pad_mode == + GST_ACTIVATE_PUSH); + GST_STREAM_LOCK (pad); result = gst_fakesink_chain_unlocked (pad, buf); @@ -512,6 +518,8 @@ gst_fakesink_loop (GstPad * pad) fakesink = GST_FAKESINK (GST_OBJECT_PARENT (pad)); + g_assert (fakesink->pad_mode == GST_ACTIVATE_PULL); + GST_STREAM_LOCK (pad); result = gst_pad_pull_range (pad, fakesink->offset, DEFAULT_SIZE, &buf); diff --git a/plugins/elements/gstfakesrc.c b/plugins/elements/gstfakesrc.c index fb388ec78a..7ad57153cf 100644 --- a/plugins/elements/gstfakesrc.c +++ b/plugins/elements/gstfakesrc.c @@ -328,6 +328,7 @@ gst_fakesrc_init (GstFakeSrc * fakesrc) fakesrc->last_message = NULL; fakesrc->datarate = DEFAULT_DATARATE; fakesrc->sync = DEFAULT_SYNC; + fakesrc->pad_mode = GST_ACTIVATE_NONE; } static void @@ -869,6 +870,9 @@ gst_fakesrc_get_range (GstPad * pad, guint64 offset, guint length, { GstFlowReturn fret; + g_assert (GST_FAKESRC (GST_OBJECT_PARENT (pad))->pad_mode == + GST_ACTIVATE_PULL); + GST_STREAM_LOCK (pad); fret = gst_fakesrc_get_range_unlocked (pad, offset, length, ret); @@ -887,6 +891,8 @@ gst_fakesrc_loop (GstPad * pad) src = GST_FAKESRC (GST_OBJECT_PARENT (pad)); + g_assert (src->pad_mode == GST_ACTIVATE_PUSH); + GST_STREAM_LOCK (pad); if (src->need_flush) { src->need_flush = FALSE; @@ -956,6 +962,9 @@ gst_fakesrc_activate (GstPad * pad, GstActivateMode mode) result = TRUE; break; } + + fakesrc->pad_mode = mode; + return result; } diff --git a/plugins/elements/gstfakesrc.h b/plugins/elements/gstfakesrc.h index d381a4d0d0..4560370a05 100644 --- a/plugins/elements/gstfakesrc.h +++ b/plugins/elements/gstfakesrc.h @@ -86,6 +86,7 @@ struct _GstFakeSrc { GstFakeSrcDataType data; GstFakeSrcSizeType sizetype; GstFakeSrcFillType filltype; + GstActivateMode pad_mode; guint sizemin; guint sizemax;