gst_element_post_message (GST_ELEMENT_CAST (self), msg);
}
-static void
-distribute_running_time (GstElement * element, const GstSegment * segment)
-{
- GstEvent *event;
- GstPad *pad;
-
- pad = gst_element_get_static_pad (element, "sink");
-
- if (segment->accum) {
- event = gst_event_new_new_segment_full (FALSE, segment->rate,
- segment->applied_rate, segment->format, 0, segment->accum, 0);
- gst_pad_push_event (pad, event);
- }
-
- event = gst_event_new_new_segment_full (FALSE, segment->rate,
- segment->applied_rate, segment->format,
- segment->start, segment->stop, segment->time);
- gst_pad_push_event (pad, event);
-
- gst_object_unref (pad);
-}
-
static void
pad_blocked_cb (GstPad * pad, gboolean blocked, GstPlaySinkAudioConvert * self)
{
peer = gst_pad_get_peer (self->sinkpad);
caps = gst_pad_get_negotiated_caps (peer);
if (!caps)
- caps = gst_pad_get_caps_reffed (peer);
+ caps = gst_pad_get_caps (peer, NULL);
gst_object_unref (peer);
raw = is_raw_caps (caps);
} else {
gst_bin_add (bin, self->conv);
gst_element_sync_state_with_parent (self->conv);
- distribute_running_time (self->conv, &self->segment);
prev = head = self->conv;
}
} else {
gst_bin_add (bin, self->resample);
gst_element_sync_state_with_parent (self->resample);
- distribute_running_time (self->resample, &self->segment);
if (prev) {
if (!gst_element_link_pads_full (prev, "src", self->resample, "sink",
GST_PAD_LINK_CHECK_TEMPLATE_CAPS))
if (self->use_volume && self->volume) {
gst_bin_add (bin, gst_object_ref (self->volume));
gst_element_sync_state_with_parent (self->volume);
- distribute_running_time (self->volume, &self->segment);
if (prev) {
if (!gst_element_link_pads_full (prev, "src", self->volume, "sink",
GST_PAD_LINK_CHECK_TEMPLATE_CAPS))
ret = gst_proxy_pad_event_default (pad, gst_event_ref (event));
- if (GST_EVENT_TYPE (event) == GST_EVENT_NEWSEGMENT) {
- gboolean update;
- gdouble rate, applied_rate;
- GstFormat format;
- gint64 start, stop, position;
-
+ if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
GST_PLAY_SINK_AUDIO_CONVERT_LOCK (self);
- gst_event_parse_new_segment_full (event, &update, &rate, &applied_rate,
- &format, &start, &stop, &position);
-
GST_DEBUG_OBJECT (self, "Segment before %" GST_SEGMENT_FORMAT,
&self->segment);
- gst_segment_set_newsegment_full (&self->segment, update, rate, applied_rate,
- format, start, stop, position);
+ gst_event_parse_segment (event, &self->segment);
GST_DEBUG_OBJECT (self, "Segment after %" GST_SEGMENT_FORMAT,
&self->segment);
GST_PLAY_SINK_AUDIO_CONVERT_UNLOCK (self);
}
static GstCaps *
-gst_play_sink_audio_convert_getcaps (GstPad * pad)
+gst_play_sink_audio_convert_getcaps (GstPad * pad, GstCaps * filter)
{
GstPlaySinkAudioConvert *self =
GST_PLAY_SINK_AUDIO_CONVERT (gst_pad_get_parent (pad));
peer = gst_pad_get_peer (otherpad);
if (peer) {
- ret = gst_pad_get_caps_reffed (peer);
+ ret = gst_pad_get_caps (peer, filter);
gst_object_unref (peer);
} else {
- ret = gst_caps_new_any ();
+ ret = (filter ? gst_caps_ref (filter) : gst_caps_new_any ());
}
gst_object_unref (otherpad);
gst_element_post_message (GST_ELEMENT_CAST (self), msg);
}
-static void
-distribute_running_time (GstElement * element, const GstSegment * segment)
-{
- GstEvent *event;
- GstPad *pad;
-
- pad = gst_element_get_static_pad (element, "sink");
-
- if (segment->accum) {
- event = gst_event_new_new_segment_full (FALSE, segment->rate,
- segment->applied_rate, segment->format, 0, segment->accum, 0);
- gst_pad_push_event (pad, event);
- }
-
- event = gst_event_new_new_segment_full (FALSE, segment->rate,
- segment->applied_rate, segment->format,
- segment->start, segment->stop, segment->time);
- gst_pad_push_event (pad, event);
-
- gst_object_unref (pad);
-}
-
static void
pad_blocked_cb (GstPad * pad, gboolean blocked, GstPlaySinkVideoConvert * self)
{
peer = gst_pad_get_peer (self->sinkpad);
caps = gst_pad_get_negotiated_caps (peer);
if (!caps)
- caps = gst_pad_get_caps_reffed (peer);
+ caps = gst_pad_get_caps (peer, NULL);
gst_object_unref (peer);
raw = is_raw_caps (caps);
} else {
gst_bin_add (bin, self->conv);
gst_element_sync_state_with_parent (self->conv);
- distribute_running_time (self->conv, &self->segment);
prev = head = self->conv;
}
g_object_set (self->scale, "add-borders", TRUE, NULL);
gst_bin_add (bin, self->scale);
gst_element_sync_state_with_parent (self->scale);
- distribute_running_time (self->scale, &self->segment);
if (prev) {
if (!gst_element_link_pads_full (prev, "src", self->scale, "sink",
GST_PAD_LINK_CHECK_TEMPLATE_CAPS))
ret = gst_proxy_pad_event_default (pad, gst_event_ref (event));
- if (GST_EVENT_TYPE (event) == GST_EVENT_NEWSEGMENT) {
- gboolean update;
- gdouble rate, applied_rate;
- GstFormat format;
- gint64 start, stop, position;
+ if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
GST_PLAY_SINK_VIDEO_CONVERT_LOCK (self);
- gst_event_parse_new_segment_full (event, &update, &rate, &applied_rate,
- &format, &start, &stop, &position);
-
GST_DEBUG_OBJECT (self, "Segment before %" GST_SEGMENT_FORMAT,
&self->segment);
- gst_segment_set_newsegment_full (&self->segment, update, rate, applied_rate,
- format, start, stop, position);
+ gst_event_parse_segment (event, &self->segment);
GST_DEBUG_OBJECT (self, "Segment after %" GST_SEGMENT_FORMAT,
&self->segment);
GST_PLAY_SINK_VIDEO_CONVERT_UNLOCK (self);
}
static GstCaps *
-gst_play_sink_video_convert_getcaps (GstPad * pad)
+gst_play_sink_video_convert_getcaps (GstPad * pad, GstCaps * filter)
{
GstPlaySinkVideoConvert *self =
GST_PLAY_SINK_VIDEO_CONVERT (gst_pad_get_parent (pad));
peer = gst_pad_get_peer (otherpad);
if (peer) {
- ret = gst_pad_get_caps_reffed (peer);
+ ret = gst_pad_get_caps (peer, filter);
gst_object_unref (peer);
} else {
- ret = gst_caps_new_any ();
+ ret = (filter ? gst_caps_ref (filter) : gst_caps_new_any ());
}
gst_object_unref (otherpad);