x264enc: Fix flushing of delayed frames
authorRobert Swain <robert.swain@collabora.co.uk>
Thu, 29 Jul 2010 07:41:49 +0000 (09:41 +0200)
committerRobert Swain <robert.swain@collabora.co.uk>
Fri, 30 Jul 2010 07:59:08 +0000 (09:59 +0200)
x264_encoder_encode() should be called with a NULL picture until at least
x264_encoder_delayed_frames() returns 0. This fixes what appeared to be a
regression in make check due to the recent change in defaults which enabled
b-frames and b-pyramid, both of which I believe increase the number of delayed
frames when encoding.

ext/x264/gstx264enc.c

index dba17a0..131fb71 100644 (file)
 
 #include "gstx264enc.h"
 
+#if X264_BUILD >= 71
+#define X264_DELAYED_FRAMES_API
+#endif
+
 #if X264_BUILD >= 76
 #define X264_ENC_NALS 1
 #endif
@@ -1628,7 +1632,13 @@ gst_x264_enc_flush_frames (GstX264Enc * encoder, gboolean send)
   if (encoder->x264enc)
     do {
       flow_ret = gst_x264_enc_encode_frame (encoder, NULL, &i_nal, send);
+#ifdef X264_DELAYED_FRAMES_API
+    } while (flow_ret == GST_FLOW_OK
+        && x264_encoder_delayed_frames (encoder->x264enc) > 0);
+#else
+      /* note that this doesn't flush all frames for > 1 delayed frame */
     } while (flow_ret == GST_FLOW_OK && i_nal > 0);
+#endif
 
   /* in any case, make sure the delay queue is emptied */
   while (!g_queue_is_empty (encoder->delay))