mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
gst/switch/gstswitch.c (gst_selector_pad_get_property) (gst_selector_pad_class_init, gst_stream_selector_class_init)
Original commit message from CVS: 2007-12-17 Andy Wingo <wingo@pobox.com> * gst/switch/gstswitch.c (gst_selector_pad_get_property) (gst_selector_pad_class_init, gst_stream_selector_class_init) (gst_stream_selector_get_property): Expose 'last-stop-time' as a pad property, not an element property. (gst_selector_pad_chain): Mark the last_stop time as timestamp + duration, not timestamp. Patch 9/12.
This commit is contained in:
parent
044bde1d12
commit
a4b2009e24
2 changed files with 53 additions and 24 deletions
|
@ -1,5 +1,12 @@
|
||||||
2007-12-17 Andy Wingo <wingo@pobox.com>
|
2007-12-17 Andy Wingo <wingo@pobox.com>
|
||||||
|
|
||||||
|
* gst/switch/gstswitch.c (gst_selector_pad_get_property)
|
||||||
|
(gst_selector_pad_class_init, gst_stream_selector_class_init)
|
||||||
|
(gst_stream_selector_get_property): Expose 'last-stop-time' as a
|
||||||
|
pad property, not an element property.
|
||||||
|
(gst_selector_pad_chain): Mark the last_stop time as timestamp +
|
||||||
|
duration, not timestamp. Patch 9/12.
|
||||||
|
|
||||||
* gst/switch/gstswitch.c (gst_stream_selector_change_state)
|
* gst/switch/gstswitch.c (gst_stream_selector_change_state)
|
||||||
(gst_stream_selector_block, gst_stream_selector_switch): Use the
|
(gst_stream_selector_block, gst_stream_selector_switch): Use the
|
||||||
cond mechanism instead of blocked pads. Patch 8/12.
|
cond mechanism instead of blocked pads. Patch 8/12.
|
||||||
|
|
|
@ -55,8 +55,12 @@ GST_STATIC_PAD_TEMPLATE ("src",
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_ACTIVE_PAD = 1,
|
PROP_ACTIVE_PAD = 1
|
||||||
PROP_LAST_STOP_TIME
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PAD_PROP_LAST_STOP_TIME = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -110,6 +114,8 @@ struct _GstSelectorPadClass
|
||||||
static void gst_selector_pad_class_init (GstSelectorPadClass * klass);
|
static void gst_selector_pad_class_init (GstSelectorPadClass * klass);
|
||||||
static void gst_selector_pad_init (GstSelectorPad * pad);
|
static void gst_selector_pad_init (GstSelectorPad * pad);
|
||||||
static void gst_selector_pad_finalize (GObject * object);
|
static void gst_selector_pad_finalize (GObject * object);
|
||||||
|
static void gst_selector_pad_get_property (GObject * object,
|
||||||
|
guint prop_id, GValue * value, GParamSpec * pspec);
|
||||||
|
|
||||||
static GstPadClass *selector_pad_parent_class = NULL;
|
static GstPadClass *selector_pad_parent_class = NULL;
|
||||||
|
|
||||||
|
@ -155,6 +161,13 @@ gst_selector_pad_class_init (GstSelectorPadClass * klass)
|
||||||
|
|
||||||
selector_pad_parent_class = g_type_class_peek_parent (klass);
|
selector_pad_parent_class = g_type_class_peek_parent (klass);
|
||||||
|
|
||||||
|
gobject_class->get_property =
|
||||||
|
GST_DEBUG_FUNCPTR (gst_selector_pad_get_property);
|
||||||
|
g_object_class_install_property (gobject_class, PAD_PROP_LAST_STOP_TIME,
|
||||||
|
g_param_spec_uint64 ("last-stop-time", "Last stop time",
|
||||||
|
"Last stop time seen on pad", 0, G_MAXUINT64, GST_CLOCK_TIME_NONE,
|
||||||
|
G_PARAM_READABLE));
|
||||||
|
|
||||||
gobject_class->finalize = gst_selector_pad_finalize;
|
gobject_class->finalize = gst_selector_pad_finalize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,6 +186,28 @@ gst_selector_pad_finalize (GObject * object)
|
||||||
G_OBJECT_CLASS (selector_pad_parent_class)->finalize (object);
|
G_OBJECT_CLASS (selector_pad_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_selector_pad_get_property (GObject * object, guint prop_id,
|
||||||
|
GValue * value, GParamSpec * pspec)
|
||||||
|
{
|
||||||
|
GstSelectorPad *spad = GST_SELECTOR_PAD_CAST (object);
|
||||||
|
|
||||||
|
switch (prop_id) {
|
||||||
|
case PAD_PROP_LAST_STOP_TIME:{
|
||||||
|
GST_OBJECT_LOCK (object);
|
||||||
|
if (spad->active)
|
||||||
|
g_value_set_uint64 (value, spad->segment.last_stop);
|
||||||
|
else
|
||||||
|
g_value_set_uint64 (value, GST_CLOCK_TIME_NONE);
|
||||||
|
GST_OBJECT_UNLOCK (object);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_selector_pad_reset (GstSelectorPad * pad)
|
gst_selector_pad_reset (GstSelectorPad * pad)
|
||||||
{
|
{
|
||||||
|
@ -340,7 +375,7 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
|
||||||
GstFlowReturn res;
|
GstFlowReturn res;
|
||||||
GstPad *active_sinkpad;
|
GstPad *active_sinkpad;
|
||||||
GstSelectorPad *selpad;
|
GstSelectorPad *selpad;
|
||||||
GstClockTime timestamp;
|
GstClockTime end_time, duration;
|
||||||
GstSegment *seg;
|
GstSegment *seg;
|
||||||
|
|
||||||
sel = GST_STREAM_SELECTOR (gst_pad_get_parent (pad));
|
sel = GST_STREAM_SELECTOR (gst_pad_get_parent (pad));
|
||||||
|
@ -352,11 +387,14 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
|
||||||
|
|
||||||
active_sinkpad = gst_stream_selector_activate_sinkpad (sel, pad);
|
active_sinkpad = gst_stream_selector_activate_sinkpad (sel, pad);
|
||||||
|
|
||||||
timestamp = GST_BUFFER_TIMESTAMP (buf);
|
end_time = GST_BUFFER_TIMESTAMP (buf);
|
||||||
if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
|
if (GST_CLOCK_TIME_IS_VALID (end_time)) {
|
||||||
GST_DEBUG_OBJECT (sel, "received timestamp %" GST_TIME_FORMAT,
|
duration = GST_BUFFER_DURATION (buf);
|
||||||
GST_TIME_ARGS (timestamp));
|
if (GST_CLOCK_TIME_IS_VALID (duration))
|
||||||
gst_segment_set_last_stop (seg, seg->format, timestamp);
|
end_time += duration;
|
||||||
|
GST_DEBUG_OBJECT (sel, "received end time %" GST_TIME_FORMAT,
|
||||||
|
GST_TIME_ARGS (end_time));
|
||||||
|
gst_segment_set_last_stop (seg, seg->format, end_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ignore buffers from pads except the selected one */
|
/* Ignore buffers from pads except the selected one */
|
||||||
|
@ -467,10 +505,6 @@ gst_stream_selector_class_init (GstStreamSelectorClass * klass)
|
||||||
g_object_class_install_property (gobject_class, PROP_ACTIVE_PAD,
|
g_object_class_install_property (gobject_class, PROP_ACTIVE_PAD,
|
||||||
g_param_spec_string ("active-pad", "Active pad",
|
g_param_spec_string ("active-pad", "Active pad",
|
||||||
"Name of the currently" " active sink pad", NULL, G_PARAM_READWRITE));
|
"Name of the currently" " active sink pad", NULL, G_PARAM_READWRITE));
|
||||||
g_object_class_install_property (gobject_class, PROP_LAST_STOP_TIME,
|
|
||||||
g_param_spec_uint64 ("last-stop-time", "Last stop time",
|
|
||||||
"Last stop time on active pad", 0, G_MAXUINT64, GST_CLOCK_TIME_NONE,
|
|
||||||
G_PARAM_READABLE));
|
|
||||||
gobject_class->dispose = gst_stream_selector_dispose;
|
gobject_class->dispose = gst_stream_selector_dispose;
|
||||||
gstelement_class->request_new_pad = gst_stream_selector_request_new_pad;
|
gstelement_class->request_new_pad = gst_stream_selector_request_new_pad;
|
||||||
gstelement_class->release_pad = gst_stream_selector_release_pad;
|
gstelement_class->release_pad = gst_stream_selector_release_pad;
|
||||||
|
@ -629,18 +663,6 @@ gst_stream_selector_get_property (GObject * object, guint prop_id,
|
||||||
GST_OBJECT_UNLOCK (object);
|
GST_OBJECT_UNLOCK (object);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PROP_LAST_STOP_TIME:{
|
|
||||||
GstSelectorPad *spad;
|
|
||||||
|
|
||||||
GST_OBJECT_LOCK (object);
|
|
||||||
spad = GST_SELECTOR_PAD_CAST (sel->active_sinkpad);
|
|
||||||
if (spad && spad->active)
|
|
||||||
g_value_set_uint64 (value, spad->segment.last_stop);
|
|
||||||
else
|
|
||||||
g_value_set_uint64 (value, GST_CLOCK_TIME_NONE);
|
|
||||||
GST_OBJECT_UNLOCK (object);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue