x264enc: Fix b-pyramid libx264 API boolean arg for non-boolean issue
authorRobert Swain <robert.swain@collabora.co.uk>
Wed, 11 Aug 2010 07:21:43 +0000 (09:21 +0200)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Wed, 11 Aug 2010 15:47:12 +0000 (16:47 +0100)
In X264_BUILD >= 78, b-pyramid became a non-boolean so passing a boolean
argument to the option string value causes an error. For < 78 we pass the
boolean value, for >= 78 we use the x264_b_pyramid_names[] array which will
result in passing 'none' for false and 'strict' for true. Other modes can be
set through the option-string property for now.

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

ext/x264/gstx264enc.c

index 70e3981..c5748e6 100644 (file)
 #define X264_MB_RC
 #endif
 
+#if X264_BUILD >= 78
+/* b-pyramid was available before but was changed from boolean here */
+#define X264_B_PYRAMID
+#endif
+
 #if X264_BUILD >= 80
 #define X264_ENH_THREADING
 #endif
@@ -669,8 +674,13 @@ gst_x264_enc_class_init (GstX264EncClass * klass)
       g_param_spec_boolean ("b-pyramid", "B-Pyramid",
           "Keep some B-frames as references", ARG_B_PYRAMID_DEFAULT,
           G_PARAM_READWRITE));
+#ifdef X264_B_PYRAMID
+  g_string_append_printf (x264enc_defaults, ":b-pyramid=%s",
+      x264_b_pyramid_names[ARG_B_PYRAMID_DEFAULT]);
+#else
   g_string_append_printf (x264enc_defaults, ":b-pyramid=%d",
       ARG_B_PYRAMID_DEFAULT);
+#endif /* X264_B_PYRAMID */
   g_object_class_install_property (gobject_class, ARG_WEIGHTB,
       g_param_spec_boolean ("weightb", "Weighted B-Frames",
           "Weighted prediction for B-frames", ARG_WEIGHTB_DEFAULT,
@@ -1788,8 +1798,13 @@ gst_x264_enc_set_property (GObject * object, guint prop_id,
       break;
     case ARG_B_PYRAMID:
       encoder->b_pyramid = g_value_get_boolean (value);
+#ifdef X264_B_PYRAMID
+      g_string_append_printf (encoder->option_string, ":b-pyramid=%s",
+          x264_b_pyramid_names[encoder->b_pyramid]);
+#else
       g_string_append_printf (encoder->option_string, ":b-pyramid=%d",
           encoder->b_pyramid);
+#endif /* X264_B_PYRAMID */
       break;
     case ARG_WEIGHTB:
       encoder->weightb = g_value_get_boolean (value);