oggdemux: fix audio glitches with low bitrate vorbis
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Thu, 14 Apr 2016 13:02:27 +0000 (14:02 +0100)
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Thu, 16 Jun 2016 10:10:08 +0000 (11:10 +0100)
A low bitrate stream which can pack more than 2 seconds of audio
in a page would cause the stream's position to be updated not
often enough, and would trigger a spurious "jump" via a GAP
event. Instead, we update the stream position after calculating
the new overall segment position.

https://bugzilla.gnome.org/show_bug.cgi?id=764966

ext/ogg/gstoggdemux.c

index 9fe3a28..cf65573 100644 (file)
@@ -808,8 +808,6 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet,
           pad->discont = FALSE;
   }
 
-  pad->position = ogg->segment.position;
-
   /* don't push the header packets when we are asked to skip them */
   if (!packet->b_o_s || push_headers) {
     if (pad->last_ret == GST_FLOW_OK) {
@@ -854,6 +852,8 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet,
   GST_DEBUG_OBJECT (ogg, "ogg current time %" GST_TIME_FORMAT
       " (%" G_GINT64_FORMAT ")", GST_TIME_ARGS (current_time), current_time);
 
+  pad->position = ogg->segment.position;
+
   /* check stream eos */
   if (!pad->is_eos && !delta_unit &&
       ((ogg->segment.rate > 0.0 &&