summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.com>2018-02-28 10:07:13 +0000
committerTim-Philipp Müller <tim@centricular.com>2018-02-28 10:46:57 +0000
commit94562286b48a73bd0dc8f6f0bc4e47cb547831a9 (patch)
treec0506ff83bce361d381abbe84b10d7a1a7d55683
parentd7f845f05bb2ed59f7434d11b70e2a694f246b59 (diff)
x264enc: fix build with newer x264 with support for multiple bit depths
libx264 used to be built for one specific bit depth, and if we wanted to support multiple bit depths we would have to dynamically load the right .so from different paths. That has changed now, and libx264 can include support for multiple depths in the same lib, so we don't need to do the dlopen() dance any more. We'll keep the vtable stuff around until we can drop support for older x264. gstx264enc.c:2927:36: error: ‘x264_bit_depth’ undeclared https://bugzilla.gnome.org/show_bug.cgi?id=792111
-rw-r--r--ext/x264/gstx264enc.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/ext/x264/gstx264enc.c b/ext/x264/gstx264enc.c
index 4287cf98..d1e4f2b9 100644
--- a/ext/x264/gstx264enc.c
+++ b/ext/x264/gstx264enc.c
@@ -117,7 +117,9 @@ struct _GstX264EncVTable
{
GModule *module;
+#if X264_BUILD < 153
const int *x264_bit_depth;
+#endif
const int *x264_chroma_format;
void (*x264_encoder_close) (x264_t *);
int (*x264_encoder_delayed_frames) (x264_t *);
@@ -170,8 +172,9 @@ load_x264 (const gchar * filename)
"' from '%s'. Incompatible version?", filename);
goto error;
}
-
+#if X264_BUILD < 153
LOAD_SYMBOL (x264_bit_depth);
+#endif
LOAD_SYMBOL (x264_chroma_format);
LOAD_SYMBOL (x264_encoder_close);
LOAD_SYMBOL (x264_encoder_delayed_frames);
@@ -288,6 +291,7 @@ gst_x264_enc_add_x264_chroma_format (GstStructure * s,
return ret;
}
+#if X264_BUILD < 153
static gboolean
load_x264_libraries (void)
{
@@ -326,6 +330,33 @@ load_x264_libraries (void)
return TRUE;
}
+#else /* X264_BUILD >= 153 */
+
+static gboolean
+load_x264_libraries (void)
+{
+#if X264_BIT_DEPTH == 0 /* all */
+ vtable_8bit = &default_vtable;
+ vtable_10bit = &default_vtable;
+#elif X264_BIT_DEPTH == 8
+ vtable_8bit = &default_vtable;
+#elif X264_BIT_DEPTH == 10
+ vtable_10bit = &default_vtable;
+#else
+#error "unexpected X264_BIT_DEPTH value"
+#endif
+
+#ifdef HAVE_X264_ADDITIONAL_LIBRARIES
+ GST_WARNING ("Ignoring configured additional libraries %s, using libx264 "
+ "version enabled for multiple bit depths",
+ HAVE_X264_ADDITIONAL_LIBRARIES);
+#endif
+
+ return TRUE;
+}
+
+#endif
+
enum
{
ARG_0,
@@ -2897,7 +2928,9 @@ plugin_init (GstPlugin * plugin)
* if needed. We can't initialize statically because these values are not
* constant on Windows. */
default_vtable.module = NULL;
+#if X264_BUILD < 153
default_vtable.x264_bit_depth = &x264_bit_depth;
+#endif
default_vtable.x264_chroma_format = &x264_chroma_format;
default_vtable.x264_encoder_close = x264_encoder_close;
default_vtable.x264_encoder_delayed_frames = x264_encoder_delayed_frames;