mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-04 13:32:29 +00:00
videoaggregator: remove the use of the queued buffer on sink pads
That data is now held by the aggregator class
This commit is contained in:
parent
2817472b9e
commit
c23cd9c3be
2 changed files with 29 additions and 56 deletions
|
@ -791,7 +791,6 @@ gst_videoaggregator_reset (GstVideoAggregator * vagg)
|
||||||
GstVideoAggregatorPad *p = l->data;
|
GstVideoAggregatorPad *p = l->data;
|
||||||
|
|
||||||
gst_buffer_replace (&p->buffer, NULL);
|
gst_buffer_replace (&p->buffer, NULL);
|
||||||
gst_buffer_replace (&p->queued, NULL);
|
|
||||||
p->start_time = -1;
|
p->start_time = -1;
|
||||||
p->end_time = -1;
|
p->end_time = -1;
|
||||||
|
|
||||||
|
@ -810,6 +809,9 @@ gst_videoaggregator_fill_queues (GstVideoAggregator * vagg,
|
||||||
gboolean eos = TRUE;
|
gboolean eos = TRUE;
|
||||||
gboolean need_more_data = FALSE;
|
gboolean need_more_data = FALSE;
|
||||||
|
|
||||||
|
/* get a set of buffers into pad->buffer that are within output_start_time
|
||||||
|
* and output_end_time taking into account finished and unresponsive pads */
|
||||||
|
|
||||||
GST_OBJECT_LOCK (vagg);
|
GST_OBJECT_LOCK (vagg);
|
||||||
for (l = GST_ELEMENT (vagg)->sinkpads; l; l = l->next) {
|
for (l = GST_ELEMENT (vagg)->sinkpads; l; l = l->next) {
|
||||||
GstVideoAggregatorPad *pad = l->data;
|
GstVideoAggregatorPad *pad = l->data;
|
||||||
|
@ -838,8 +840,8 @@ gst_videoaggregator_fill_queues (GstVideoAggregator * vagg,
|
||||||
|
|
||||||
/* FIXME: Make all this work with negative rates */
|
/* FIXME: Make all this work with negative rates */
|
||||||
|
|
||||||
if ((pad->buffer && start_time < GST_BUFFER_TIMESTAMP (pad->buffer))
|
if ((start_time < GST_BUFFER_TIMESTAMP (buf))
|
||||||
|| (pad->queued && start_time < GST_BUFFER_TIMESTAMP (pad->queued))) {
|
|| (pad->buffer && start_time < GST_BUFFER_TIMESTAMP (pad->buffer))) {
|
||||||
GST_DEBUG_OBJECT (pad, "Buffer from the past, dropping");
|
GST_DEBUG_OBJECT (pad, "Buffer from the past, dropping");
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
buf = gst_aggregator_pad_steal_buffer (bpad);
|
buf = gst_aggregator_pad_steal_buffer (bpad);
|
||||||
|
@ -848,24 +850,15 @@ gst_videoaggregator_fill_queues (GstVideoAggregator * vagg,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pad->queued) {
|
end_time = GST_BUFFER_DURATION (buf);
|
||||||
end_time = start_time - GST_BUFFER_TIMESTAMP (pad->queued);
|
|
||||||
start_time = GST_BUFFER_TIMESTAMP (pad->queued);
|
|
||||||
gst_buffer_unref (buf);
|
|
||||||
buf = gst_buffer_ref (pad->queued);
|
|
||||||
vinfo = &pad->queued_vinfo;
|
|
||||||
} else {
|
|
||||||
end_time = GST_BUFFER_DURATION (buf);
|
|
||||||
|
|
||||||
if (end_time == -1) {
|
if (end_time == -1) {
|
||||||
pad->queued = buf;
|
gst_buffer_unref (buf);
|
||||||
buf = gst_aggregator_pad_steal_buffer (bpad);
|
buf = gst_aggregator_pad_steal_buffer (bpad);
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_replace (&pad->buffer, buf);
|
||||||
pad->queued_vinfo = pad->info;
|
gst_buffer_unref (buf);
|
||||||
GST_DEBUG ("end time is -1 and nothing queued");
|
GST_DEBUG_OBJECT (pad, "buffer duration is -1");
|
||||||
need_more_data = TRUE;
|
continue;
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_assert (start_time != -1 && end_time != -1);
|
g_assert (start_time != -1 && end_time != -1);
|
||||||
|
@ -880,14 +873,9 @@ gst_videoaggregator_fill_queues (GstVideoAggregator * vagg,
|
||||||
GST_TIME_ARGS (segment->start), GST_TIME_ARGS (start_time),
|
GST_TIME_ARGS (segment->start), GST_TIME_ARGS (start_time),
|
||||||
GST_TIME_ARGS (end_time));
|
GST_TIME_ARGS (end_time));
|
||||||
|
|
||||||
if (buf == pad->queued) {
|
gst_buffer_unref (buf);
|
||||||
gst_buffer_unref (buf);
|
buf = gst_aggregator_pad_steal_buffer (bpad);
|
||||||
gst_buffer_replace (&pad->queued, NULL);
|
gst_buffer_unref (buf);
|
||||||
} else {
|
|
||||||
gst_buffer_unref (buf);
|
|
||||||
buf = gst_aggregator_pad_steal_buffer (bpad);
|
|
||||||
gst_buffer_unref (buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
need_more_data = TRUE;
|
need_more_data = TRUE;
|
||||||
continue;
|
continue;
|
||||||
|
@ -911,15 +899,9 @@ gst_videoaggregator_fill_queues (GstVideoAggregator * vagg,
|
||||||
|
|
||||||
if (pad->end_time != -1 && pad->end_time > end_time) {
|
if (pad->end_time != -1 && pad->end_time > end_time) {
|
||||||
GST_DEBUG_OBJECT (pad, "Buffer from the past, dropping");
|
GST_DEBUG_OBJECT (pad, "Buffer from the past, dropping");
|
||||||
if (buf == pad->queued) {
|
gst_buffer_unref (buf);
|
||||||
gst_buffer_unref (buf);
|
buf = gst_aggregator_pad_steal_buffer (bpad);
|
||||||
gst_buffer_replace (&pad->queued, NULL);
|
gst_buffer_unref (buf);
|
||||||
} else {
|
|
||||||
gst_buffer_unref (buf);
|
|
||||||
buf = gst_aggregator_pad_steal_buffer (bpad);
|
|
||||||
gst_buffer_unref (buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
need_more_data = TRUE;
|
need_more_data = TRUE;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -933,15 +915,10 @@ gst_videoaggregator_fill_queues (GstVideoAggregator * vagg,
|
||||||
pad->start_time = start_time;
|
pad->start_time = start_time;
|
||||||
pad->end_time = end_time;
|
pad->end_time = end_time;
|
||||||
|
|
||||||
if (buf == pad->queued) {
|
gst_buffer_unref (buf);
|
||||||
|
buf = gst_aggregator_pad_steal_buffer (bpad);
|
||||||
|
if (buf)
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
gst_buffer_replace (&pad->queued, NULL);
|
|
||||||
} else {
|
|
||||||
gst_buffer_unref (buf);
|
|
||||||
buf = gst_aggregator_pad_steal_buffer (bpad);
|
|
||||||
if (buf)
|
|
||||||
gst_buffer_unref (buf);
|
|
||||||
}
|
|
||||||
eos = FALSE;
|
eos = FALSE;
|
||||||
} else if (start_time >= output_end_time) {
|
} else if (start_time >= output_end_time) {
|
||||||
GST_DEBUG_OBJECT (pad, "Keeping buffer until %" GST_TIME_FORMAT,
|
GST_DEBUG_OBJECT (pad, "Keeping buffer until %" GST_TIME_FORMAT,
|
||||||
|
@ -949,16 +926,14 @@ gst_videoaggregator_fill_queues (GstVideoAggregator * vagg,
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
eos = FALSE;
|
eos = FALSE;
|
||||||
} else {
|
} else {
|
||||||
GST_DEBUG_OBJECT (pad, "Too old buffer -- dropping");
|
GST_DEBUG_OBJECT (pad,
|
||||||
if (buf == pad->queued) {
|
"Too old buffer -- dropping start %" GST_TIME_FORMAT " out end %"
|
||||||
|
GST_TIME_FORMAT, GST_TIME_ARGS (start_time),
|
||||||
|
GST_TIME_ARGS (output_end_time));
|
||||||
|
gst_buffer_unref (buf);
|
||||||
|
buf = gst_aggregator_pad_steal_buffer (bpad);
|
||||||
|
if (buf)
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
gst_buffer_replace (&pad->queued, NULL);
|
|
||||||
} else {
|
|
||||||
gst_buffer_unref (buf);
|
|
||||||
buf = gst_aggregator_pad_steal_buffer (bpad);
|
|
||||||
if (buf)
|
|
||||||
gst_buffer_unref (buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
need_more_data = TRUE;
|
need_more_data = TRUE;
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -66,8 +66,6 @@ struct _GstVideoAggregatorPad
|
||||||
GstBuffer *converted_buffer;
|
GstBuffer *converted_buffer;
|
||||||
|
|
||||||
GstBuffer *buffer;
|
GstBuffer *buffer;
|
||||||
GstVideoInfo queued_vinfo;
|
|
||||||
GstBuffer *queued;
|
|
||||||
GstVideoInfo buffer_vinfo;
|
GstVideoInfo buffer_vinfo;
|
||||||
|
|
||||||
GstClockTime start_time;
|
GstClockTime start_time;
|
||||||
|
|
Loading…
Reference in a new issue