mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-19 06:46:38 +00:00
qtdemux: Don't send gaps bigger than 1 second (now in push mode too)
This applies the same workaround to gaps that is being used in pull mode. https://bugzilla.gnome.org/show_bug.cgi?id=778426
This commit is contained in:
parent
f61c2bc301
commit
d35f893715
1 changed files with 13 additions and 6 deletions
|
@ -2234,10 +2234,10 @@ gst_qtdemux_map_and_push_segments (GstQTDemux * qtdemux, GstSegment * segment)
|
||||||
* supported and are discarded when parsing the edts */
|
* supported and are discarded when parsing the edts */
|
||||||
for (i = 0; i < stream->n_segments; i++) {
|
for (i = 0; i < stream->n_segments; i++) {
|
||||||
if (stream->segments[i].stop_time > segment->start) {
|
if (stream->segments[i].stop_time > segment->start) {
|
||||||
|
/* push the empty segment and move to the next one */
|
||||||
gst_qtdemux_activate_segment (qtdemux, stream, i,
|
gst_qtdemux_activate_segment (qtdemux, stream, i,
|
||||||
stream->time_position);
|
stream->time_position);
|
||||||
if (QTSEGMENT_IS_EMPTY (&stream->segments[i])) {
|
if (QTSEGMENT_IS_EMPTY (&stream->segments[i])) {
|
||||||
/* push the empty segment and move to the next one */
|
|
||||||
gst_qtdemux_send_gap_for_segment (qtdemux, stream, i,
|
gst_qtdemux_send_gap_for_segment (qtdemux, stream, i,
|
||||||
stream->time_position);
|
stream->time_position);
|
||||||
|
|
||||||
|
@ -6546,23 +6546,30 @@ gst_qtdemux_check_send_pending_segment (GstQTDemux * demux)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Used for push mode only. */
|
||||||
static void
|
static void
|
||||||
gst_qtdemux_send_gap_for_segment (GstQTDemux * demux,
|
gst_qtdemux_send_gap_for_segment (GstQTDemux * demux,
|
||||||
QtDemuxStream * stream, gint segment_index, GstClockTime pos)
|
QtDemuxStream * stream, gint segment_index, GstClockTime pos)
|
||||||
{
|
{
|
||||||
GstClockTime ts, dur;
|
GstClockTime ts, dur;
|
||||||
GstEvent *gap;
|
|
||||||
|
|
||||||
ts = pos;
|
ts = pos;
|
||||||
dur =
|
dur =
|
||||||
stream->segments[segment_index].duration - (pos -
|
stream->segments[segment_index].duration - (pos -
|
||||||
stream->segments[segment_index].time);
|
stream->segments[segment_index].time);
|
||||||
gap = gst_event_new_gap (ts, dur);
|
|
||||||
stream->time_position += dur;
|
stream->time_position += dur;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (stream->pad, "Pushing gap for empty "
|
/* Only gaps with a duration of at least one second are propagated.
|
||||||
"segment: %" GST_PTR_FORMAT, gap);
|
* Same workaround as in pull mode.
|
||||||
gst_pad_push_event (stream->pad, gap);
|
* (See 2e45926a96ec5298c6ef29bf912e5e6a06dc3e0e) */
|
||||||
|
if (dur >= GST_SECOND) {
|
||||||
|
GstEvent *gap;
|
||||||
|
gap = gst_event_new_gap (ts, dur);
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (stream->pad, "Pushing gap for empty "
|
||||||
|
"segment: %" GST_PTR_FORMAT, gap);
|
||||||
|
gst_pad_push_event (stream->pad, gap);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
|
|
Loading…
Reference in a new issue