baseparse: Fix splitting and reversing of GOPs in reverse playback mode
authorSebastian Dröge <sebastian@centricular.com>
Sat, 29 Mar 2014 09:16:12 +0000 (10:16 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Sat, 29 Mar 2014 09:32:25 +0000 (10:32 +0100)
We iterate the current discont group backwards and push each GOP forwards,
starting from the last one. However if the first buffer in the current
discont group is a keyframe, we will keep it around until next time,
which is far from ideal. Just push it.

libs/gst/base/gstbaseparse.c

index e99b7bc..bc5a513 100644 (file)
@@ -2669,8 +2669,10 @@ gst_base_parse_finish_fragment (GstBaseParse * parse, gboolean prev_head)
         parse->priv->buffers_queued);
   }
 
-  /* audio may have all marked as keyframe, so arrange to send here */
-  if (!seen_delta)
+  /* audio may have all marked as keyframe, so arrange to send here. Also
+   * we might have ended the loop above on a keyframe, in which case we
+   * should */
+  if (!seen_delta || seen_key)
     ret = gst_base_parse_send_buffers (parse);
 
   /* any trailing unused no longer usable (ideally none) */