mpegtsmux: fix downstream key unit events handling with hlssink
authorTim-Philipp Müller <tim@centricular.com>
Tue, 29 Sep 2015 23:36:14 +0000 (00:36 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Tue, 29 Sep 2015 23:43:26 +0000 (00:43 +0100)
The buffer timestamps in the collect function will already be
running time, don't try to convert them again to running time,
this would yield CLOCK_TIME_NONE now that the segment is shifted
to account for negative dts.

This fixes x264enc ! mpegtsmux ! hlssink, which was broken
because mpegtsmux would send a downstream key unit event with
running time NONE and then hlssink would immediately send
another one upstream and it would just be a flood of force
keyframe events in both directions after the first one. This
would then break hlssink because it uses multifilesink in
next-file=key-unit-event mode, and starting a new file after
every few kB does not work well for HLS.

gst/mpegtsmux/mpegtsmux.c

index c3a0dbb..ce00333 100644 (file)
@@ -997,8 +997,7 @@ check_pending_key_unit_event (GstEvent * pending_event, GstSegment * segment,
       timestamp == GST_CLOCK_TIME_NONE)
     goto out;
 
-  running_time = gst_segment_to_running_time (segment,
-      GST_FORMAT_TIME, timestamp);
+  running_time = timestamp;
 
   GST_INFO ("now %" GST_TIME_FORMAT " wanted %" GST_TIME_FORMAT,
       GST_TIME_ARGS (running_time), GST_TIME_ARGS (pending_key_unit_ts));