Fix seek issue
[profile/ivi/gstreamer-vaapi.git] / configure.ac
old mode 100644 (file)
new mode 100755 (executable)
index 5ea1c20..80cf603
@@ -1,6 +1,6 @@
 # gstreamer-vaapi package version number
 m4_define([gst_vaapi_major_version], [0])
-m4_define([gst_vaapi_minor_version], [3])
+m4_define([gst_vaapi_minor_version], [4])
 m4_define([gst_vaapi_micro_version], [3])
 m4_define([gst_vaapi_pre_version],   [1])
 m4_define([gst_vaapi_version],
@@ -9,10 +9,19 @@ m4_if(gst_vaapi_pre_version, [0], [], [
 m4_append([gst_vaapi_version], gst_vaapi_pre_version, [.pre])
 ])
 
+# glib version number
+m4_define([glib_major_version], [2])
+m4_define([glib_minor_version], [28])
+m4_define([glib_micro_version], [0])
+m4_define([glib_major_minor_version],
+          [glib_major_version.glib_minor_version])
+m4_define([glib_version],
+          [glib_major_version.glib_minor_version.glib_micro_version])
+
 # gst version number
 m4_define([gst_major_version], [0])
 m4_define([gst_minor_version], [10])
-m4_define([gst_micro_version], [10])
+m4_define([gst_micro_version], [36])
 m4_define([gst_major_minor_version],
           [gst_major_version.gst_minor_version])
 m4_define([gst_version],
@@ -21,14 +30,10 @@ m4_define([gst_version],
 # gst plugins-base version number
 m4_define([gst_plugins_base_major_version], [0])
 m4_define([gst_plugins_base_minor_version], [10])
-m4_define([gst_plugins_base_micro_version], [16])
+m4_define([gst_plugins_base_micro_version], [31])
 m4_define([gst_plugins_base_version],
           [gst_plugins_base_major_version.gst_plugins_base_minor_version.gst_plugins_base_micro_version])
 
-# VA-API minimum version number
-m4_define([va_api_x11_version], [0.31.0])
-m4_define([va_api_glx_version], [0.32.0])
-
 # gst plugins-bad version number
 m4_define([gst_plugins_bad_major_version], [0])
 m4_define([gst_plugins_bad_minor_version], [10])
@@ -36,9 +41,21 @@ m4_define([gst_plugins_bad_micro_version], [22])
 m4_define([gst_plugins_bad_version],
           [gst_plugins_bad_major_version.gst_plugins_bad_minor_version.gst_plugins_bad_micro_version])
 
+# Wayland minimum version number
+m4_define([wayland_api_version], [1.0.0])
+
+# VA-API minimum version number
+m4_define([va_api_version],     [0.30.4])
+m4_define([va_api_drm_version], [0.33.0])
+m4_define([va_api_x11_version], [0.31.0])
+m4_define([va_api_glx_version], [0.32.0])
+m4_define([va_api_wld_version], [0.33.0])
+
 # libva package version number
+m4_define([libva_drm_package_version], [1.1.0])
 m4_define([libva_x11_package_version], [1.0.3])
 m4_define([libva_glx_package_version], [1.0.9])
+m4_define([libva_wld_package_version], [1.1.0])
 
 # gtk-doc version number
 # XXX: introspection annotations require gtk-doc >= 1.12
@@ -46,14 +63,19 @@ m4_define([gtkdoc_major_version], [1])
 m4_define([gtkdoc_minor_version], [9])
 m4_define([gtkdoc_version], [gtkdoc_major_version.gtkdoc_minor_version])
 
-AC_PREREQ([2.57])
+AC_PREREQ([2.58])
 AC_INIT([gst_vaapi], [gst_vaapi_version],
     [gwenole.beauchesne@intel.com],
     [gstreamer-vaapi])
+
+AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_SRCDIR([Makefile.am])
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_AUX_DIR([build-aux])
+
 AC_CANONICAL_TARGET
-AM_INIT_AUTOMAKE
-AM_CONFIG_HEADER([config.h])
+
+AM_INIT_AUTOMAKE([1.11 tar-ustar no-dist-gzip dist-bzip2])
 
 TODAY="`LC_ALL=C date +'%a, %d %b %Y %X %z'`"
 AC_SUBST(TODAY)
@@ -64,6 +86,9 @@ AC_SUBST(GST_VAAPI_MAJOR_VERSION)
 LIBVA_PACKAGE_VERSION=libva_x11_package_version
 AC_SUBST(LIBVA_PACKAGE_VERSION)
 
+WAYLAND_API_VERSION=wayland_api_version
+AC_SUBST(WAYLAND_API_VERSION)
+
 dnl Versions for GStreamer and plugins-base
 GST_MAJORMINOR=gst_major_minor_version
 GST_VERSION_REQUIRED=gst_version
@@ -72,6 +97,7 @@ GST_PLUGINS_BAD_VERSION_REQUIRED=gst_plugins_bad_version
 AC_SUBST(GST_MAJORMINOR)
 AC_SUBST(GST_VERSION_REQUIRED)
 AC_SUBST(GST_PLUGINS_BASE_VERSION_REQUIRED)
+AC_SUBST(GST_PLUGINS_BAD_VERSION_REQUIRED)
 
 dnl Use pretty build output with automake >= 1.11
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], [
@@ -82,79 +108,79 @@ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], [
 dnl Check for tools
 AC_PROG_CC
 AM_PROG_CC_C_O
-AC_PROG_LIBTOOL
+
+dnl Initialize libtool
+LT_PREREQ([2.2])
+LT_INIT
+
+AC_ARG_ENABLE(drm,
+    AS_HELP_STRING([--enable-drm],
+                   [enable DRM backend @<:@default=yes@:>@]),
+    [], [enable_drm="yes"])
+
+AC_ARG_ENABLE(x11,
+    AS_HELP_STRING([--enable-x11],
+                   [enable X11 output @<:@default=yes@:>@]),
+    [], [enable_x11="yes"])
 
 AC_ARG_ENABLE(glx,
-    AC_HELP_STRING([--enable-glx],
-                   [enable OpenGL/X11 @<:@default=yes@:>@]),
+    AS_HELP_STRING([--enable-glx],
+                   [enable OpenGL/X11 output @<:@default=yes@:>@]),
     [], [enable_glx="yes"])
 
-AC_ARG_ENABLE(vaapi-glx,
-    AC_HELP_STRING([--enable-vaapi-glx],
-                   [enable VA/GLX extensions @<:@default=yes@:>@]),
-    [], [enable_vaapi_glx="yes"])
-
-AC_ARG_ENABLE(vaapisink-glx,
-    AC_HELP_STRING([--enable-vaapisink-glx],
-                   [enable OpenGL/X11 to vaapisink @<:@default=yes@:>@]),
-    [], [enable_vaapisink_glx="no"])
-
-dnl Check for __attribute__((visibility()))
-AC_CACHE_CHECK([whether __attribute__((visibility())) is supported],
-  vaapi_cv_visibility_attribute,
-  [cat > conftest.c <<EOF
-int foo __attribute__ ((visibility ("hidden"))) = 1;
-int bar __attribute__ ((visibility ("protected"))) = 1;
-EOF
-  vaapi_cv_visibility_attribute=no
-  if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
-    if grep '\.hidden.*foo' conftest.s >/dev/null; then
-      if grep '\.protected.*bar' conftest.s >/dev/null; then
-       vaapi_cv_visibility_attribute=yes
-      fi
-    fi
-  fi
-  rm -f conftest.[cs]
-])
-if test $vaapi_cv_visibility_attribute = yes; then
-  vaapi_cv_visibility_attribute_hidden="__attribute__((visibility(\"hidden\")))"
-else
-  vaapi_cv_visibility_attribute_hidden=""
-fi
-AC_DEFINE_UNQUOTED([attribute_hidden],
-                   [$vaapi_cv_visibility_attribute_hidden],
-                   [Define the "hidden" visibility attribute])
+AC_ARG_ENABLE(wayland,
+    AC_HELP_STRING([--enable-wayland],
+                   [enable Wayland output @<:@default=yes@:>@]),
+    [], [enable_wayland="yes"])
+
+AC_ARG_ENABLE(encoders,
+    AC_HELP_STRING([--enable-encoders],
+                   [enable encoders @<:@default=no@:>@]),
+    [], [enable_encoders="no"])
+
+AC_ARG_ENABLE(jpeg,
+    AC_HELP_STRING([--disable-jpeg],
+                   [disable jpeg decoder @<:@default=yes@:>@]),
+    [], [enable_jpeg="yes"])
+
+AC_ARG_ENABLE(mpeg4,
+    AC_HELP_STRING([--disable-mpeg4],
+                   [disable mpeg4 decoders @<:@default=yes@:>@]),
+    [], [enable_mpeg4="yes"])
 
 dnl Check for basic libraries
 AC_CHECK_LIB(m, tan)
 
 dnl Check for Gtk doc
 GTKDOC_VERSION=gtkdoc_version
-GTK_DOC_CHECK([$GTKDOC_VERSION])
-AM_CONDITIONAL([BUILD_GTK_DOC], [test "x$enable_gtk_doc" = "xyes"])
+# gtkdocize greps for '^GTK_DOC_CHECK', so it needs to be on its own line
+m4_ifdef([GTK_DOC_CHECK], [
+GTK_DOC_CHECK([$GTKDOC_VERSION], [--flavour no-tmpl])], [
+AM_CONDITIONAL([ENABLE_GTK_DOC], [false])])
 AC_SUBST(GTKDOC_VERSION)
 
 dnl Check for GLib
-AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal])
-PKG_CHECK_MODULES([GLIB], [glib-2.0])
-AC_SUBST(GLIB_CFLAGS)
-AC_SUBST(GLIB_LIBS)
-
-dnl Check for GStreamer
-PKG_CHECK_MODULES([GST],
-    [gstreamer-$GST_MAJORMINOR >= $GST_VERSION_REQUIRED]
-)
-AC_SUBST(GST_CFLAGS)
-AC_SUBST(GST_LIBS)
+GLIB_VERSION_REQUIRED=glib_version
+PKG_CHECK_MODULES([GLIB], [glib-2.0 >= $GLIB_VERSION_REQUIRED])
+AC_SUBST(GLIB_VERSION_REQUIRED)
+
+dnl ---------------------------------------------------------------------------
+dnl -- GStreamer                                                             --
+dnl ---------------------------------------------------------------------------
+
+dnl GStreamer Core
+PKG_CHECK_MODULES([GST],      [gstreamer-$GST_MAJORMINOR >= gst_version])
+PKG_CHECK_MODULES([GST_BASE], [gstreamer-base-$GST_MAJORMINOR >= gst_version])
 
 AC_CACHE_CHECK([for GstBaseSink::query hook], ac_cv_have_gst_base_sink_query, [
     saved_CFLAGS="$CFLAGS"
-    CFLAGS="$CFLAGS $GST_CFLAGS"
+    CFLAGS="$CFLAGS $GST_BASE_CFLAGS"
     saved_LIBS="$LIBS"
-    LIBS="$LIBS $GST_LIBS"
-    AC_TRY_COMPILE(
-        [#include <gst/base/gstbasesink.h>],
-        [GstBaseSinkClass klass; klass.query = NULL;],
+    LIBS="$LIBS $GST_BASE_LIBS"
+    AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+            [[#include <gst/base/gstbasesink.h>]],
+            [[GstBaseSinkClass klass; klass.query = NULL;]])],
         [ac_cv_have_gst_base_sink_query="yes"],
         [ac_cv_have_gst_base_sink_query="no"]
     )
@@ -165,34 +191,15 @@ if test "$ac_cv_have_gst_base_sink_query" != "yes"; then
     AC_MSG_ERROR([GstBaseSink does not contain the 'query' vfunc])
 fi
 
-dnl Check for GStreamer plugins-base
+dnl GStreamer -base plugins
 PKG_CHECK_MODULES([GST_PLUGINS_BASE],
-    [gstreamer-plugins-base-$GST_MAJORMINOR >= $GST_PLUGINS_BASE_VERSION_REQUIRED]
-)
-AC_SUBST(GST_PLUGINS_BASE_CFLAGS)
-AC_SUBST(GST_PLUGINS_BASE_LIBS)
-
-V=`$PKG_CONFIG --modversion gstreamer-plugins-base-$GST_MAJORMINOR`
-GST_PLUGINS_BASE_MAJOR_VERSION=`echo "$V" | cut -d'.' -f1`
-GST_PLUGINS_BASE_MINOR_VERSION=`echo "$V" | cut -d'.' -f2`
-GST_PLUGINS_BASE_MICRO_VERSION=`echo "$V" | cut -d'.' -f3`
-AC_SUBST(GST_PLUGINS_BASE_MAJOR_VERSION)
-AC_SUBST(GST_PLUGINS_BASE_MINOR_VERSION)
-AC_SUBST(GST_PLUGINS_BASE_MICRO_VERSION)
-
-dnl Check for GStreamer base
-PKG_CHECK_MODULES([GST_BASE],
-    [gstreamer-base-$GST_MAJORMINOR >= $GST_VERSION_REQUIRED]
-)
-AC_SUBST(GST_BASE_CFLAGS)
-AC_SUBST(GST_BASE_LIBS)
-
-dnl Check for GStreamer video
+    [gstreamer-plugins-base-$GST_MAJORMINOR >= gst_plugins_base_version])
+PKG_CHECK_MODULES([GST_INTERFACES],
+    [gstreamer-interfaces-$GST_MAJORMINOR >= gst_plugins_base_version])
+
+dnl ... GstVideoOverlayComposition (gstreamer-video)
 PKG_CHECK_MODULES([GST_VIDEO],
-    [gstreamer-video-$GST_MAJORMINOR >= $GST_VERSION_REQUIRED]
-)
-AC_SUBST(GST_VIDEO_CFLAGS)
-AC_SUBST(GST_VIDEO_LIBS)
+    [gstreamer-video-$GST_MAJORMINOR >= gst_plugins_base_version])
 
 AC_CACHE_CHECK([for GstVideoOverlayComposition],
     ac_cv_have_gst_video_overlay_composition, [
@@ -200,9 +207,10 @@ AC_CACHE_CHECK([for GstVideoOverlayComposition],
     CFLAGS="$CFLAGS $GST_CFLAGS"
     saved_LIBS="$LIBS"
     LIBS="$LIBS $GST_LIBS"
-    AC_TRY_COMPILE(
-        [#include <gst/video/video-overlay-composition.h>],
-        [GstVideoOverlayComposition *c = gst_video_overlay_composition_new(0);],
+    AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+            [[#include <gst/video/video-overlay-composition.h>]],
+            [[GstVideoOverlayComposition *c = gst_video_overlay_composition_new(0);]])],
         [ac_cv_have_gst_video_overlay_composition="yes"],
         [ac_cv_have_gst_video_overlay_composition="no"]
     )
@@ -213,19 +221,81 @@ if test "$ac_cv_have_gst_video_overlay_composition" != "yes"; then
     AC_MSG_ERROR([GstVideoOverlayComposition is not available])
 fi
 
-dnl Check for GStreamer basevideo
+dnl GStreamer -bad plugins
 PKG_CHECK_MODULES([GST_BASEVIDEO],
-    [gstreamer-basevideo-$GST_MAJORMINOR >= $GST_PLUGINS_BAD_VERSION_REQUIRED]
-)
-AC_SUBST(GST_BASEVIDEO_CFLAGS)
-AC_SUBST(GST_BASEVIDEO_LIBS)
+    [gstreamer-basevideo-$GST_MAJORMINOR >= gst_plugins_bad_version])
 
-dnl Check for GStreamer interfaces
-PKG_CHECK_MODULES([GST_INTERFACES],
-    [gstreamer-interfaces-$GST_MAJORMINOR >= $GST_PLUGINS_BASE_VERSION_REQUIRED]
-)
-AC_SUBST(GST_INTERFACES_CFLAGS)
-AC_SUBST(GST_INTERFACES_LIBS)
+dnl ... bitstream parsers
+PKG_CHECK_MODULES([GST_CODEC_PARSERS],
+    [gstreamer-codecparsers-$GST_MAJORMINOR >= gst_plugins_bad_version])
+
+dnl ... MPEG-2 parser, with the required extensions
+AC_CACHE_CHECK([for MPEG-2 parser],
+    ac_cv_have_gst_mpeg2_parser, [
+    saved_CPPFLAGS="$CPPFLAGS"
+    CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_CODEC_PARSERS_CFLAGS"
+    saved_LIBS="$LIBS"
+    LIBS="$LIBS $GST_LIBS $GST_CODEC_PARSERS_LIBS"
+    AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+            [[#include <gst/codecparsers/gstmpegvideoparser.h>]],
+            [[GstMpegVideoSequenceHdr seq_hdr;
+              GstMpegVideoSequenceExt seq_ext;
+              GstMpegVideoSequenceDisplayExt seq_dpy;
+              gst_mpeg_video_finalise_mpeg2_sequence_header(&seq_hdr,
+                  &seq_ext, &seq_dpy);]])],
+        [ac_cv_have_gst_mpeg2_parser="yes"],
+        [ac_cv_have_gst_mpeg2_parser="no"]
+    )
+    CPPFLAGS="$saved_CPPFLAGS"
+    LIBS="$saved_LIBS"
+])
+AM_CONDITIONAL([USE_LOCAL_CODEC_PARSERS_MPEG2],
+    [test "$ac_cv_have_gst_mpeg2_parser" != "yes"])
+
+dnl ... H.264 parser, with the required extensions
+AC_CACHE_CHECK([for H.264 parser],
+    ac_cv_have_gst_h264_parser, [
+    saved_CPPFLAGS="$CPPFLAGS"
+    CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_CODEC_PARSERS_CFLAGS"
+    saved_LIBS="$LIBS"
+    LIBS="$LIBS $GST_LIBS $GST_CODEC_PARSERS_LIBS"
+    AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+            [[#include <gst/codecparsers/gsth264parser.h>]],
+            [[GstH264SliceHdr slice_hdr;
+              GstH264VUIParams vui_params;
+              slice_hdr.n_emulation_prevention_bytes = 0;
+              vui_params.par_n = 0;
+              vui_params.par_d = 0;]])],
+        [ac_cv_have_gst_h264_parser="yes"],
+        [ac_cv_have_gst_h264_parser="no"]
+    )
+    CPPFLAGS="$saved_CPPFLAGS"
+    LIBS="$saved_LIBS"
+])
+AM_CONDITIONAL([USE_LOCAL_CODEC_PARSERS_H264],
+    [test "$ac_cv_have_gst_h264_parser" != "yes"])
+
+dnl ... JPEG parser, not upstream yet
+AC_CACHE_CHECK([for JPEG parser],
+    ac_cv_have_gst_jpeg_parser, [
+    saved_CPPFLAGS="$CPPFLAGS"
+    CPPFLAGS="$CPPFLAGS $GST_CFLAGS $GST_CODEC_PARSERS_CFLAGS"
+    saved_LIBS="$LIBS"
+    LIBS="$LIBS $GST_LIBS $GST_CODEC_PARSERS_LIBS"
+    AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+            [[#include <gst/codecparsers/gstjpegparser.h>]],
+            [[GstJpegImage jpeg_image;]])],
+        [ac_cv_have_gst_jpeg_parser="yes"],
+        [ac_cv_have_gst_jpeg_parser="no"]
+    )
+    CPPFLAGS="$saved_CPPFLAGS"
+    LIBS="$saved_LIBS"
+])
+AM_CONDITIONAL([USE_LOCAL_CODEC_PARSERS_JPEG],
+    [test "$ac_cv_have_gst_jpeg_parser" != "yes"])
 
 dnl GST_ALL_LDFLAGS:
 dnl LDFLAGS really should only contain flags, not libs - they get added before
@@ -240,178 +310,358 @@ GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^([_]*gst_plug
 AC_SUBST(GST_PLUGIN_LDFLAGS)
 
 dnl Check for the GStreamer plugins directory
+AC_ARG_VAR([GST_PLUGIN_PATH], [installation path for gstreamer-vaapi plugin elements])
 AC_MSG_CHECKING([for GStreamer plugins directory])
-GST_PLUGINS_DIR=`$PKG_CONFIG gstreamer-$GST_MAJORMINOR --variable pluginsdir`
-if test -z "$GST_PLUGINS_DIR"; then
-    echo "FAIL FAIL FAIL"
-    GST_PLUGINS_DIR="\$(libdir)/gstreamer-$GST_MAJORMINOR"
+if test -d "$GST_PLUGIN_PATH"; then
+    GST_PLUGINS_DIR="$GST_PLUGIN_PATH"
+else
+    GST_PLUGINS_DIR=`$PKG_CONFIG gstreamer-$GST_MAJORMINOR --variable pluginsdir`
+    if test -z "$GST_PLUGINS_DIR"; then
+        GST_PLUGINS_DIR="\$(libdir)/gstreamer-$GST_MAJORMINOR"
+    fi
 fi
 AC_MSG_RESULT([$GST_PLUGINS_DIR])
 plugindir="$GST_PLUGINS_DIR"
 AC_SUBST(plugindir)
 
+dnl ---------------------------------------------------------------------------
+dnl -- Renderers                                                             --
+dnl ---------------------------------------------------------------------------
+
+dnl Check for DRM/libudev
+USE_DRM=0
+if test "$enable_drm" = "yes"; then
+    PKG_CHECK_MODULES(DRM, [libdrm], [USE_DRM=1], [USE_DRM=0])
+    PKG_CHECK_MODULES(UDEV, [libudev], [:], [USE_DRM=0])
+
+    if test $USE_DRM -eq 1; then
+        saved_CPPFLAGS="$CPPFLAGS"
+        CPPFLAGS="$CPPFLAGS $DRM_CFLAGS"
+        AC_CHECK_HEADERS([drm_fourcc.h], [:], [USE_DRM=0])
+        CPPFLAGS="$saved_CPPFLAGS"
+    fi
+fi
+
 dnl Check for X11
-PKG_CHECK_MODULES(X11, [x11])
+USE_X11=0
+if test "$enable_x11" = "yes"; then
+    PKG_CHECK_MODULES(X11, [x11], [USE_X11=1], [USE_X11=0])
+    if test $USE_X11 -eq 1; then
+        saved_CPPFLAGS="$CPPFLAGS"
+        CPPFLAGS="$CPPFLAGS $X11_CFLAGS"
+        AC_CHECK_HEADERS([X11/Xlib.h X11/Xutil.h X11/Xatom.h], [:], [USE_X11=0])
+        CPPFLAGS="$saved_CPPFLAGS"
+    fi
+fi
+
+dnl Check for XRandR
+HAVE_XRANDR=0
+if test $USE_X11 -eq 1; then
+    HAVE_XRANDR=1
+    PKG_CHECK_MODULES([XRANDR], [xrandr], [:], [HAVE_XRANDR=0])
+    if test $HAVE_XRANDR -eq 1; then
+        saved_CPPFLAGS="$CPPFLAGS"
+        CPPFLAGS="$CPPFLAGS $XRANDR_CFLAGS"
+        AC_CHECK_HEADERS([X11/extensions/Xrandr.h], [:], [HAVE_XRANDR=0])
+        CPPFLAGS="$saved_CPPFLAGS"
+    fi
+fi
+if test $HAVE_XRANDR -eq 1; then
+    AC_DEFINE_UNQUOTED(HAVE_XRANDR, 1,
+        [Defined to 1 if the XRandR extension exists.])
+fi
 
-dnl Check for OpenGL
-USE_GLX=1
-if test "$enable_glx" != "yes"; then
-    USE_GLX=0
+dnl OpenGL
+enable_opengl="no"
+if test "$enable_glx" = "yes"; then
+    enable_opengl="yes"
 fi
-GLX_CFLAGS=""
-GLX_LIBS=""
-AC_CHECK_HEADERS([GL/gl.h GL/glext.h GL/glx.h], [], [USE_GLX=0], [
+
+HAVE_GL=0
+if test "$enable_opengl" = "yes"; then
+    HAVE_GL=1
+    PKG_CHECK_MODULES([GL], [gl], [:], [HAVE_GL=0])
+    saved_CPPFLAGS="$CPPFLAGS"
+    CPPFLAGS="$CPPFLAGS $GL_CFLAGS"
+    AC_CHECK_HEADERS([GL/gl.h GL/glext.h], [:], [HAVE_GL=0], [
 #ifdef HAVE_GL_GL_H
 # include <GL/gl.h>
 #endif
-])
-AC_CHECK_LIB(GL, glXCreateContext, [GLX_LIBS="-lGL"], [USE_GLX=0])
-AC_SUBST(GLX_CFLAGS)
-AC_SUBST(GLX_LIBS)
+    ])
+    CPPFLAGS="$saved_CPPFLAGS"
+fi
 
-dnl Check for VA-API
-LIBVA_PKGNAME="libva"
-PKG_CHECK_MODULES(LIBVA, [$LIBVA_PKGNAME])
-AC_SUBST(LIBVA_PKGNAME)
+dnl Check for encoders
+USE_ENCODERS=0
+if test "$enable_encoders" = "yes"; then
+    USE_ENCODERS=1
+fi
 
-dnl ... original VA-API 0.29
-AC_CACHE_CHECK([for old VA-API 0.29],
-    ac_cv_have_vaapi_old, [
-    saved_CFLAGS="$CFLAGS"
-    CFLAGS="$CFLAGS $LIBVA_CFLAGS"
+AC_DEFINE_UNQUOTED(USE_ENCODERS, $USE_ENCODERS,
+    [Defined to 1 if GStreamer Vaapi Encoder are used])
+AM_CONDITIONAL(USE_ENCODERS, test $USE_ENCODERS -eq 1)
+
+dnl ... GLX
+USE_GLX=0
+if test "$enable_glx" = "yes" -a $HAVE_GL -eq 1 -a $USE_X11 -eq 1; then
+    USE_GLX=1
+    saved_CPPFLAGS="$CPPFLAGS"
     saved_LIBS="$LIBS"
-    LIBS="$LIBS $LIBVA_LIBS"
-    AC_TRY_LINK(
-    [#include <va_x11.h>],
-    [vaGetDisplay(NULL)],
-    [ac_cv_have_vaapi_old="yes"],
-    [ac_cv_have_vaapi_old="no"])
-    CFLAGS="$saved_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $GL_CFLAGS"
+    LIBS="$LIBS $GL_LIBS"
+    AC_CHECK_HEADERS([GL/glx.h], [:], [USE_GLX=0], [
+#ifdef HAVE_GL_GL_H
+# include <GL/gl.h>
+#endif
+    ])
+    AC_CHECK_LIB([GL], [glXCreateContext], [:], [USE_GLX=0])
+    CPPFLAGS="$saved_CPPFLAGS"
     LIBS="$saved_LIBS"
-])
-if test "$ac_cv_have_vaapi_old" = "yes"; then
-    LIBVA_EXTRA_CFLAGS="$LIBVA_CFLAGS -DGST_VAAPI_USE_OLD_VAAPI_0_29"
 fi
 
-dnl ... VA-API >= 0.31 or -sds
-LIBVA_X11_PKGNAME="libva-x11"
-PKG_CHECK_MODULES(LIBVA_X11, [$LIBVA_X11_PKGNAME],
-    [ac_cv_have_vaapi_x11="yes"],
-    [ac_cv_have_vaapi_x11="no"]
-)
-if test "$ac_cv_have_vaapi_x11" = "no"; then
-    if test "$ac_cv_have_vaapi_old" = "yes"; then
-        LIBVA_X11_PKGNAME="libva"
-        CFLAGS="$CFLAGS $LIBVA_EXTRA_CFLAGS"
-        LIBS="$LIBS $LIBVA_EXTRA_LIBS"
-    else
-        AC_MSG_ERROR([could not find VA-API])
+dnl Check for Wayland
+USE_WAYLAND=0
+if test "$enable_wayland" = "yes"; then
+    PKG_CHECK_MODULES(WAYLAND, [wayland-client >= wayland_api_version],
+        [USE_WAYLAND=1], [USE_WAYLAND=0])
+
+    if test $USE_WAYLAND -eq 1; then
+        saved_CPPFLAGS="$CPPFLAGS"
+        CPPFLAGS="$CPPFLAGS $WAYLAND_CFLAGS"
+        AC_CHECK_HEADERS([wayland-client.h], [:], [USE_WAYLAND=0])
+        CPPFLAGS="$saved_CPPFLAGS"
+    fi
+fi
+
+dnl ---------------------------------------------------------------------------
+dnl -- VA-API                                                                --
+dnl ---------------------------------------------------------------------------
+
+dnl Core API
+LIBVA_PKGNAME="libva"
+PKG_CHECK_MODULES(LIBVA, [$LIBVA_PKGNAME >= va_api_version])
+AC_SUBST(LIBVA_PKGNAME)
+
+VA_VERSION=`$PKG_CONFIG --modversion libva`
+VA_MAJOR_VERSION=`echo "$VA_VERSION" | cut -d'.' -f1`
+VA_MINOR_VERSION=`echo "$VA_VERSION" | cut -d'.' -f2`
+VA_MICRO_VERSION=`echo "$VA_VERSION" | cut -d'.' -f3`
+VA_VERSION_STR="$VA_VERSION"
+
+dnl VA/DRM API
+HAVE_VA_DRM=0
+if test $USE_DRM -eq 1; then
+    PKG_CHECK_MODULES([LIBVA_DRM], [libva-drm >= va_api_drm_version],
+        [HAVE_VA_DRM=1], [USE_DRM=0])
+
+    if test $HAVE_VA_DRM -eq 1; then
+        saved_CPPFLAGS="$CPPFLAGS"
+        CPPFLAGS="$LIBVA_DRM_CFLAGS"
+        AC_CHECK_HEADERS([va/va_drm.h], [:], [HAVE_VA_DRM=0 USE_DRM=0])
+        CPPFLAGS="$saved_CPPFLAGS"
     fi
 fi
+
+dnl VA/X11 API
+HAVE_VA_X11=0
+LIBVA_X11_PKGNAME="libva-x11"
+if test $USE_X11 -eq 1; then
+    PKG_CHECK_MODULES(LIBVA_X11, [$LIBVA_X11_PKGNAME >= va_api_x11_version],
+        [HAVE_VA_X11=1], [USE_X11=0])
+fi
 AC_SUBST(LIBVA_X11_PKGNAME)
 
-dnl ... VA-API >= 0.31 or -sds (VA/GLX extensions)
-USE_VAAPI_GLX=0
+dnl VA/GLX API
+HAVE_VA_GLX=0
+LIBVA_GLX_PKGNAME="libva-glx"
 if test $USE_GLX -eq 1; then
-    if test "$enable_vaapi_glx" = "yes"; then
-        LIBVA_GLX_PKGNAME="libva-glx"
-        PKG_CHECK_MODULES(LIBVA_GLX, [$LIBVA_GLX_PKGNAME],
-            [ac_cv_have_vaapi_glx="yes" USE_VAAPI_GLX=1],
-            [ac_cv_have_vaapi_glx="no"]
-        )
-    fi
-    if test $USE_VAAPI_GLX -eq 0; then
-        AC_MSG_WARN([VA/GLX not found or disabled. Fallbacking to TFP+FBO])
-        LIBVA_GLX_PKGNAME="$LIBVA_X11_PKGNAME"
+    PKG_CHECK_MODULES(LIBVA_GLX, [$LIBVA_GLX_PKGNAME >= va_api_glx_version],
+        [HAVE_VA_GLX=1], [LIBVA_GLX_PKGNAME="$LIBVA_X11_PKGNAME"])
+
+    if test $HAVE_VA_GLX -eq 1; then
+        saved_CPPFLAGS="$CPPFLAGS"
+        CPPFLAGS="$LIBVA_GLX_CFLAGS"
+        AC_CHECK_HEADERS([va/va_glx.h], [:], [HAVE_VA_GLX=0])
+        CPPFLAGS="$saved_CPPFLAGS"
     fi
 fi
 AC_SUBST(LIBVA_GLX_PKGNAME)
 
-AC_SUBST(LIBVA_EXTRA_CFLAGS)
-AC_SUBST(LIBVA_EXTRA_LIBS)
+dnl Check for JPEG decoding API (0.32.1+)
+USE_JPEG_DECODER=0
+if test "$enable_jpeg" = "yes"; then
+AC_CACHE_CHECK([for JPEG decoding API],
+    ac_cv_have_jpeg_decoding_api, [
+    saved_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS $LIBVA_CFLAGS"
+    saved_LIBS="$LIBS"
+    LIBS="$CFLAGS $LIBVA_LIBS"
+    AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+            [[#include <va/va.h>]],
+            [[VAPictureParameterBufferJPEGBaseline pic_param;
+              VASliceParameterBufferJPEGBaseline slice_param;
+              VAHuffmanTableBufferJPEGBaseline huffman_table;
+              VAIQMatrixBufferJPEGBaseline iq_matrix;]])],
+        [ac_cv_have_jpeg_decoding_api="yes" USE_JPEG_DECODER=1],
+        [ac_cv_have_jpeg_decoding_api="no"]
+    )
+    CFLAGS="$saved_CFLAGS"
+    LIBS="$saved_LIBS"
+])
+fi
 
-dnl Check for OpenGL support to vaapisink
-if test "$enable_vaapisink_glx:$USE_GLX" = "yes:1"; then
-    USE_VAAPISINK_GLX=1
-else
-    USE_VAAPISINK_GLX=0
+dnl Check for MPEG-4 decoding
+USE_MPEG4_DECODER=1
+if test "$enable_mpeg4" = "no"; then
+    USE_MPEG4_DECODER=0
+fi
+
+dnl Check libva old H.264 encoder API
+HAVE_OLD_H264_ENCODER=0
+AC_CACHE_CHECK([for H264 encoder old structures],
+    ac_cv_have_old_h264_encoder, [
+       saved_CFLAGS="$CFLAGS"
+       CFLAGS="$CFLAGS $LIBVA_CFLAGS"
+       saved_LIBS="$LIBS"
+       LIBS="$CFLAGS $LIBVA_LIBS"
+    AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM(
+            [[#include <va/va_enc_h264.h>]],
+            [[VAEncSequenceParameterBufferH264 seq;
+              seq.seq_fields.value = 0;
+                         seq.vui_fields.value = 0;]])],
+        [ac_cv_have_old_h264_encoder="no" HAVE_OLD_H264_ENCODER=0],
+        [ac_cv_have_old_h264_encoder="yes" HAVE_OLD_H264_ENCODER=1]
+    )
+    CFLAGS="$saved_CFLAGS"
+    LIBS="$saved_LIBS"
+])
+
+AC_DEFINE_UNQUOTED(HAVE_OLD_H264_ENCODER, $HAVE_OLD_H264_ENCODER,
+    [Defined to 1 if old h264 encoder API exists.])
+
+dnl Check for vpp (video post-processing) support
+HAVE_VA_VPP=1
+saved_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $LIBVA_CFLAGS"
+AC_CHECK_HEADERS([va/va_vpp.h], [:], [HAVE_VA_VPP=0],
+                 [[#include <va/va.h>
+                   #include <va/va_vpp.h>]]) 
+CFLAGS="$saved_CFLAGS"
+
+dnl VA/Wayland API
+if test "$enable_wayland" = "yes"; then
+    PKG_CHECK_MODULES([LIBVA_WAYLAND], [libva-wayland >= va_api_wld_version],
+        [:], [USE_WAYLAND=0])
 fi
 
-dnl Check for FFmpeg
-PKG_CHECK_MODULES(LIBAVCODEC, [libavcodec])
-AC_CHECK_HEADERS([libavcodec/avcodec.h ffmpeg/avcodec.h])
-AC_CHECK_HEADERS([libavcodec/vaapi.h ffmpeg/vaapi.h], [break],
-    AC_MSG_ERROR([The system FFmpeg headers do not support VA-API]))
+dnl ---------------------------------------------------------------------------
+dnl -- Generate files and summary                                            --
+dnl ---------------------------------------------------------------------------
+
+case ":$USE_X11:$USE_GLX:$USE_WAYLAND:$USE_DRM:" in
+*:1:*)
+    ;;
+*)
+    AC_MSG_ERROR([No renderer is enabled])
+    ;;
+esac
+
+AC_DEFINE_UNQUOTED(USE_VA_VPP, $HAVE_VA_VPP,
+    [Defined to 1 if video post-processing is used])
+AM_CONDITIONAL(USE_VA_VPP, test $HAVE_VA_VPP -eq 1)
+
+AC_DEFINE_UNQUOTED(USE_JPEG_DECODER, $USE_JPEG_DECODER,
+    [Defined to 1 if JPEG decoder is used])
+AM_CONDITIONAL(USE_JPEG_DECODER, test $USE_JPEG_DECODER -eq 1)
+
+AC_DEFINE_UNQUOTED(USE_MPEG4_DECODER, $USE_MPEG4_DECODER,
+    [Defined to 1 if MPEG4 decoder is used])
+AM_CONDITIONAL(USE_MPEG4_DECODER, test $USE_MPEG4_DECODER -eq 1)
+
+AC_DEFINE_UNQUOTED(USE_DRM, $USE_DRM,
+    [Defined to 1 if DRM is enabled])
+AM_CONDITIONAL(USE_DRM, test $USE_DRM -eq 1)
+
+AC_DEFINE_UNQUOTED(USE_X11, $USE_X11,
+    [Defined to 1 if X11 is enabled])
+AM_CONDITIONAL(USE_X11, test $USE_X11 -eq 1)
 
 AC_DEFINE_UNQUOTED(USE_GLX, $USE_GLX,
     [Defined to 1 if GLX is enabled])
 AM_CONDITIONAL(USE_GLX, test $USE_GLX -eq 1)
 
-AC_DEFINE_UNQUOTED(USE_VAAPI_GLX, $USE_VAAPI_GLX,
-    [Defined to 1 if VA/GLX is enabled])
-AM_CONDITIONAL(USE_VAAPI_GLX, test $USE_VAAPI_GLX -eq 1)
-
-AC_DEFINE_UNQUOTED(USE_VAAPISINK_GLX, $USE_VAAPISINK_GLX,
-    [Defined to 1 to enable GLX support to vaapisink])
-AM_CONDITIONAL(USE_VAAPISINK_GLX, test $USE_VAAPISINK_GLX -eq 1)
-
-VA_VERSION=`$PKG_CONFIG --modversion libva`
-VA_MAJOR_VERSION=`echo "$VA_VERSION" | cut -d'.' -f1`
-VA_MINOR_VERSION=`echo "$VA_VERSION" | cut -d'.' -f2`
-VA_MICRO_VERSION=`echo "$VA_VERSION" | cut -d'.' -f3`
-VA_VERSION_STR="$VA_VERSION"
+AC_DEFINE_UNQUOTED(USE_WAYLAND, $USE_WAYLAND,
+    [Defined to 1 if WAYLAND is enabled])
+AM_CONDITIONAL(USE_WAYLAND, test $USE_WAYLAND -eq 1)
 
 pkgconfigdir=${libdir}/pkgconfig
 AC_SUBST(pkgconfigdir)
 
-AC_OUTPUT([
+AC_CONFIG_FILES([
     Makefile
     debian.upstream/Makefile
     debian.upstream/changelog
     debian.upstream/control
-    debian.upstream/gstreamer$GST_MAJORMINOR-vaapi.install:\
-debian.upstream/gstreamer-vaapi.install.in
     debian.upstream/gstreamer$GST_MAJORMINOR-vaapi-doc.install:\
 debian.upstream/gstreamer-vaapi-doc.install.in
+    debian.upstream/gstreamer$GST_MAJORMINOR-vaapi.install:\
+debian.upstream/gstreamer-vaapi.install.in
     debian.upstream/libgstvaapi$GST_VAAPI_MAJOR_VERSION.install:\
 debian.upstream/libgstvaapi.install.in
     debian.upstream/libgstvaapi-dev.install
-    debian.upstream/libgstvaapi-x11-$GST_VAAPI_MAJOR_VERSION.install:\
-debian.upstream/libgstvaapi-x11.install.in
+    debian.upstream/libgstvaapi-drm-$GST_VAAPI_MAJOR_VERSION.install:\
+debian.upstream/libgstvaapi-drm.install.in
     debian.upstream/libgstvaapi-glx-$GST_VAAPI_MAJOR_VERSION.install:\
 debian.upstream/libgstvaapi-glx.install.in
+    debian.upstream/libgstvaapi-wayland-$GST_VAAPI_MAJOR_VERSION.install:\
+debian.upstream/libgstvaapi-wayland.install.in
+    debian.upstream/libgstvaapi-x11-$GST_VAAPI_MAJOR_VERSION.install:\
+debian.upstream/libgstvaapi-x11.install.in
     docs/Makefile
     docs/reference/Makefile
     docs/reference/libs/Makefile
     docs/reference/libs/libs-docs.xml
     docs/reference/plugins/Makefile
     docs/reference/plugins/plugins-docs.xml
+    ext/Makefile
     gst-libs/Makefile
     gst-libs/gst/Makefile
-    gst-libs/gst/gstutils_version.h
+    gst-libs/gst/codecparsers/Makefile
     gst-libs/gst/vaapi/Makefile
+    gst/Makefile
+    gst/vaapi/Makefile
     pkgconfig/Makefile
     pkgconfig/gstreamer-vaapi-$GST_MAJORMINOR.pc:\
 pkgconfig/gstreamer-vaapi.pc.in
+    pkgconfig/gstreamer-vaapi-drm-$GST_MAJORMINOR.pc:\
+pkgconfig/gstreamer-vaapi-drm.pc.in
     pkgconfig/gstreamer-vaapi-glx-$GST_MAJORMINOR.pc:\
 pkgconfig/gstreamer-vaapi-glx.pc.in
+    pkgconfig/gstreamer-vaapi-wayland-$GST_MAJORMINOR.pc:\
+pkgconfig/gstreamer-vaapi-wayland.pc.in
     pkgconfig/gstreamer-vaapi-x11-$GST_MAJORMINOR.pc:\
 pkgconfig/gstreamer-vaapi-x11.pc.in
-    gst/Makefile
-    gst/vaapi/Makefile
     tests/Makefile
 ])
+AC_OUTPUT
 
 dnl Print summary
 yesno() {
     test $1 -eq 1 && echo yes || echo no
 }
 
+VIDEO_OUTPUTS=""
+AS_IF([test $USE_DRM -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS drm"])
+AS_IF([test $USE_X11 -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS x11"])
+AS_IF([test $USE_GLX -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS glx"])
+AS_IF([test $USE_WAYLAND -eq 1], [VIDEO_OUTPUTS="$VIDEO_OUTPUTS wayland"])
+
 echo
 echo $PACKAGE configuration summary:
 echo
 echo VA-API version ................... : $VA_VERSION_STR
-echo GLX support ...................... : $(yesno $USE_GLX)
-echo VA/GLX support ................... : $(yesno $USE_VAAPI_GLX)
-echo VaapiSink/GL ..................... : $(yesno $USE_VAAPISINK_GLX)
+echo Video outputs .................... : $VIDEO_OUTPUTS
+echo VaapiEncoder support....... ...... : $(yesno $USE_ENCODERS)
 echo