From f45ff93586daef0a39105f8046b8c107623cebd9 Mon Sep 17 00:00:00 2001 From: Robert Swain Date: Wed, 11 Aug 2010 09:21:43 +0200 Subject: [PATCH] x264enc: Fix b-pyramid libx264 API boolean arg for non-boolean issue 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 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/ext/x264/gstx264enc.c b/ext/x264/gstx264enc.c index 70e398194c..c5748e6194 100644 --- a/ext/x264/gstx264enc.c +++ b/ext/x264/gstx264enc.c @@ -87,6 +87,11 @@ #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);