mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-07 07:58:51 +00:00
interleave: convert the output segment to time
Convert the stored input segment to time before pushing it out. Conflicts: gst/interleave/interleave.c
This commit is contained in:
parent
4dfb796527
commit
ec7f7264dc
1 changed files with 40 additions and 1 deletions
|
@ -831,11 +831,13 @@ gst_interleave_sink_event (GstCollectPads * pads, GstCollectData * data,
|
||||||
gst_event_replace (&self->pending_segment, NULL);
|
gst_event_replace (&self->pending_segment, NULL);
|
||||||
GST_OBJECT_UNLOCK (self);
|
GST_OBJECT_UNLOCK (self);
|
||||||
break;
|
break;
|
||||||
case GST_EVENT_NEWSEGMENT:
|
case GST_EVENT_SEGMENT:
|
||||||
|
{
|
||||||
GST_OBJECT_LOCK (self);
|
GST_OBJECT_LOCK (self);
|
||||||
gst_event_replace (&self->pending_segment, event);
|
gst_event_replace (&self->pending_segment, event);
|
||||||
GST_OBJECT_UNLOCK (self);
|
GST_OBJECT_UNLOCK (self);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case GST_EVENT_CAPS:
|
case GST_EVENT_CAPS:
|
||||||
{
|
{
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
|
@ -1243,11 +1245,48 @@ gst_interleave_collected (GstCollectPads * pads, GstInterleave * self)
|
||||||
GST_OBJECT_LOCK (self);
|
GST_OBJECT_LOCK (self);
|
||||||
if (self->pending_segment) {
|
if (self->pending_segment) {
|
||||||
GstEvent *event;
|
GstEvent *event;
|
||||||
|
GstSegment segment;
|
||||||
|
|
||||||
event = self->pending_segment;
|
event = self->pending_segment;
|
||||||
self->pending_segment = NULL;
|
self->pending_segment = NULL;
|
||||||
GST_OBJECT_UNLOCK (self);
|
GST_OBJECT_UNLOCK (self);
|
||||||
|
|
||||||
|
/* convert the input segment to time now */
|
||||||
|
gst_event_copy_segment (event, &segment);
|
||||||
|
|
||||||
|
if (segment.format != GST_FORMAT_TIME) {
|
||||||
|
gst_event_unref (event);
|
||||||
|
|
||||||
|
/* not time, convert */
|
||||||
|
switch (segment.format) {
|
||||||
|
case GST_FORMAT_BYTES:
|
||||||
|
segment.start *= width;
|
||||||
|
if (segment.stop != -1)
|
||||||
|
segment.stop *= width;
|
||||||
|
if (segment.position != -1)
|
||||||
|
segment.position *= width;
|
||||||
|
/* fallthrough for the samples case */
|
||||||
|
case GST_FORMAT_DEFAULT:
|
||||||
|
segment.start =
|
||||||
|
gst_util_uint64_scale_int (segment.start, GST_SECOND, self->rate);
|
||||||
|
if (segment.stop != -1)
|
||||||
|
segment.stop =
|
||||||
|
gst_util_uint64_scale_int (segment.stop, GST_SECOND,
|
||||||
|
self->rate);
|
||||||
|
if (segment.position != -1)
|
||||||
|
segment.position =
|
||||||
|
gst_util_uint64_scale_int (segment.position, GST_SECOND,
|
||||||
|
self->rate);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
GST_WARNING ("can't convert segment values");
|
||||||
|
segment.start = 0;
|
||||||
|
segment.stop = -1;
|
||||||
|
segment.position = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
event = gst_event_new_segment (&segment);
|
||||||
|
}
|
||||||
gst_pad_push_event (self->src, event);
|
gst_pad_push_event (self->src, event);
|
||||||
|
|
||||||
GST_OBJECT_LOCK (self);
|
GST_OBJECT_LOCK (self);
|
||||||
|
|
Loading…
Reference in a new issue