mpegvideoparse: only apply repeat count when set
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 13 Aug 2012 08:57:57 +0000 (10:57 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 13 Aug 2012 08:58:50 +0000 (10:58 +0200)
When there is no extension header, the repeat_count variable is left to 0 and
then the duration on the output buffers is calculated wrongly. Because the
duration is used to interpolate output timestamps, the output timestamps are
also wrong, causing bad framerates.

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

gst/videoparsers/gstmpegvideoparse.c

index 7892229bf6c4cefd0349d4925f760cd8a20a9616..c8898af72d710dff82543b8534081a96f892384b 100644 (file)
@@ -756,7 +756,8 @@ gst_mpegv_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
     GST_BUFFER_DURATION (buffer) = 0;
   }
 
-  if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DURATION (buffer))) {
+  if (mpvparse->frame_repeat_count
+      && GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DURATION (buffer))) {
     GST_BUFFER_DURATION (buffer) =
         (1 + mpvparse->frame_repeat_count) * GST_BUFFER_DURATION (buffer) / 2;
   }