summaryrefslogtreecommitdiffstats
path: root/gst/selector
diff options
context:
space:
mode:
Diffstat (limited to 'gst/selector')
-rw-r--r--gst/selector/gstinputselector.c53
1 files changed, 41 insertions, 12 deletions
diff --git a/gst/selector/gstinputselector.c b/gst/selector/gstinputselector.c
index 9cd05c5b..dccff780 100644
--- a/gst/selector/gstinputselector.c
+++ b/gst/selector/gstinputselector.c
@@ -331,7 +331,7 @@ gst_selector_pad_event (GstPad * pad, GstEvent * event)
gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format,
&start, &stop, &time);
- GST_DEBUG_OBJECT (sel,
+ GST_DEBUG_OBJECT (pad,
"configured NEWSEGMENT update %d, rate %lf, applied rate %lf, "
"format %d, "
"%" G_GINT64_FORMAT " -- %" G_GINT64_FORMAT ", time %"
@@ -356,12 +356,13 @@ gst_selector_pad_event (GstPad * pad, GstEvent * event)
if (tags)
tags = gst_tag_list_copy (tags);
selpad->tags = tags;
- GST_DEBUG_OBJECT (sel, "received tags %" GST_PTR_FORMAT, selpad->tags);
+ GST_DEBUG_OBJECT (pad, "received tags %" GST_PTR_FORMAT, selpad->tags);
GST_OBJECT_UNLOCK (selpad);
break;
}
case GST_EVENT_EOS:
selpad->eos = TRUE;
+ GST_DEBUG_OBJECT (pad, "received EOS");
/* don't forward eos in select_all mode until all sink pads have eos */
if (sel->select_all && !gst_input_selector_check_eos (GST_ELEMENT (sel))) {
forward = FALSE;
@@ -370,9 +371,10 @@ gst_selector_pad_event (GstPad * pad, GstEvent * event)
default:
break;
}
- if (forward)
+ if (forward) {
+ GST_DEBUG_OBJECT (pad, "forwarding event");
res = gst_pad_push_event (sel->srcpad, event);
- else
+ } else
gst_event_unref (event);
gst_object_unref (sel);
@@ -408,6 +410,8 @@ gst_selector_pad_bufferalloc (GstPad * pad, guint64 offset,
sel = GST_INPUT_SELECTOR (gst_pad_get_parent (pad));
+ GST_DEBUG_OBJECT (pad, "received alloc");
+
active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
/* Fallback allocation for buffers from pads except the selected one */
@@ -476,6 +480,8 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
if (gst_input_selector_wait (sel, pad))
goto ignore;
+ GST_DEBUG_OBJECT (pad, "chain, getting active pad");
+
active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
end_time = GST_BUFFER_TIMESTAMP (buf);
@@ -483,7 +489,7 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
duration = GST_BUFFER_DURATION (buf);
if (GST_CLOCK_TIME_IS_VALID (duration))
end_time += duration;
- GST_DEBUG_OBJECT (sel, "received end time %" GST_TIME_FORMAT,
+ GST_DEBUG_OBJECT (pad, "received end time %" GST_TIME_FORMAT,
GST_TIME_ARGS (end_time));
gst_segment_set_last_stop (seg, seg->format, end_time);
}
@@ -496,6 +502,14 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
/* if we have a pending segment, push it out now */
if (selpad->segment_pending) {
+
+ GST_DEBUG_OBJECT (pad,
+ "pushing NEWSEGMENT update %d, rate %lf, applied rate %lf, "
+ "format %d, "
+ "%" G_GINT64_FORMAT " -- %" G_GINT64_FORMAT ", time %"
+ G_GINT64_FORMAT, FALSE, seg->rate, seg->applied_rate, seg->format,
+ seg->start, seg->stop, seg->time);
+
gst_pad_push_event (sel->srcpad, gst_event_new_new_segment_full (FALSE,
seg->rate, seg->applied_rate, seg->format, seg->start, seg->stop,
seg->time));
@@ -504,7 +518,7 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
}
/* forward */
- GST_DEBUG_OBJECT (sel, "Forwarding buffer %p from pad %s:%s", buf,
+ GST_DEBUG_OBJECT (pad, "Forwarding buffer %p from pad %s:%s", buf,
GST_DEBUG_PAD_NAME (pad));
res = gst_pad_push (sel->srcpad, buf);
done:
@@ -513,8 +527,7 @@ done:
/* dropped buffers */
ignore:
{
- GST_DEBUG_OBJECT (sel, "Ignoring buffer %p from pad %s:%s",
- buf, GST_DEBUG_PAD_NAME (pad));
+ GST_DEBUG_OBJECT (pad, "Ignoring buffer %p", buf);
gst_buffer_unref (buf);
res = GST_FLOW_OK;
goto done;
@@ -672,6 +685,7 @@ gst_input_selector_class_init (GstInputSelectorClass * klass)
gstelement_class->change_state = gst_input_selector_change_state;
klass->block = GST_DEBUG_FUNCPTR (gst_input_selector_block);
+ /* note the underscore because switch is a keyword otherwise */
klass->switch_ = GST_DEBUG_FUNCPTR (gst_input_selector_switch);
}
@@ -756,11 +770,15 @@ gst_input_selector_set_active_pad (GstInputSelector * self,
segment has been pushed before. */
memcpy (&self->pending_stop_segment, &old->segment,
sizeof (self->pending_stop_segment));
+ GST_DEBUG_OBJECT (self, "setting stop_time to %" G_GINT64_FORMAT,
+ stop_time);
gst_segment_set_stop (&self->pending_stop_segment, stop_time);
self->pending_stop = TRUE;
}
if (new && new->active && start_time >= 0) {
+ GST_DEBUG_OBJECT (self, "setting start_time to %" G_GINT64_FORMAT,
+ start_time);
/* schedule a new segment push */
gst_segment_set_start (&new->segment, start_time);
new->segment_pending = TRUE;
@@ -783,9 +801,15 @@ gst_input_selector_set_property (GObject * object, guint prop_id,
switch (prop_id) {
case PROP_ACTIVE_PAD:
- gst_input_selector_set_active_pad (sel,
- g_value_get_object (value), GST_CLOCK_TIME_NONE, GST_CLOCK_TIME_NONE);
+ {
+ GstPad *pad;
+
+ pad = g_value_get_object (value);
+
+ gst_input_selector_set_active_pad (sel, pad,
+ GST_CLOCK_TIME_NONE, GST_CLOCK_TIME_NONE);
break;
+ }
case PROP_SELECT_ALL:
sel->select_all = g_value_get_boolean (value);
break;
@@ -1035,10 +1059,15 @@ gst_input_selector_push_pending_stop (GstInputSelector * self)
if (G_UNLIKELY (self->pending_stop)) {
GstSegment *seg = &self->pending_stop_segment;
- GST_DEBUG_OBJECT (self, "pushing pending stop");
+ GST_DEBUG_OBJECT (self,
+ "pushing NEWSEGMENT update %d, rate %lf, applied rate %lf, "
+ "format %d, "
+ "%" G_GINT64_FORMAT " -- %" G_GINT64_FORMAT ", time %"
+ G_GINT64_FORMAT, TRUE, seg->rate, seg->applied_rate, seg->format,
+ seg->start, seg->stop, seg->time);
event = gst_event_new_new_segment_full (TRUE, seg->rate,
- seg->applied_rate, seg->format, seg->start, seg->stop, seg->stop);
+ seg->applied_rate, seg->format, seg->start, seg->stop, seg->time);
self->pending_stop = FALSE;
}