Add compatibility with the original VA-API 0.29.
authorgb <gb@5584edef-b1fe-4b99-b61b-dd2bab72e969>
Wed, 24 Mar 2010 16:17:49 +0000 (16:17 +0000)
committergb <gb@5584edef-b1fe-4b99-b61b-dd2bab72e969>
Wed, 24 Mar 2010 16:17:49 +0000 (16:17 +0000)
16 files changed:
NEWS
configure.ac
gst-libs/gst/vaapi/Makefile.am
gst-libs/gst/vaapi/gstvaapicompat.h [new file with mode: 0644]
gst-libs/gst/vaapi/gstvaapidisplay.h
gst-libs/gst/vaapi/gstvaapidisplay_x11.h
gst-libs/gst/vaapi/gstvaapiimageformat.h
gst-libs/gst/vaapi/gstvaapiparamspecs.c
gst-libs/gst/vaapi/gstvaapisurface.c
gst-libs/gst/vaapi/gstvaapiutils.c
gst-libs/gst/vaapi/gstvaapiutils.h
pkgconfig/gstreamer-vaapi-x11.pc.in
pkgconfig/gstreamer-vaapi.pc.in
sys/vaapiconvert/Makefile.am
sys/vaapisink/Makefile.am
tests/Makefile.am

diff --git a/NEWS b/NEWS
index 4f8a184..e2504c4 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,7 @@ Copyright (C) 2010 Splitted-Desktop Systems
 
 Version 0.1.2 - DD.Mar.2010
 * Add AYUV image format
+* Add compatibility with the original VA-API 0.29
 
 Version 0.1.1 - 23.Mar.2010
 * Document public API for libgstvaapi-*.so.*
index 5d1cdfc..cc996a6 100644 (file)
@@ -147,43 +147,52 @@ AC_MSG_RESULT([$GST_PLUGINS_DIR])
 plugindir="$GST_PLUGINS_DIR"
 AC_SUBST(plugindir)
 
-dnl Check for VA-API
-PKG_CHECK_MODULES(LIBVA, [libva])
+dnl Check for X11
 PKG_CHECK_MODULES(X11, [x11])
-PKG_CHECK_MODULES(LIBVA_X11, [libva-x11])
-
-dnl Check for SDS extensions to VA-API
-AC_CACHE_CHECK([for VA-API],
-  ac_cv_libva_sds_extensions, [
-  saved_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS $LIBVA_DEPS_CFLAGS"
-  AC_TRY_COMPILE([
-    #include <va/va_version.h>
-    #if VA_MAJOR_VERSION == 0 && VA_MINOR_VERSION == 29
-    # if !defined(VA_SDS_VERSION) || (VA_SDS_VERSION < $LIBVA_SDS_VERSION_0_29)
-    #  error "VA-API version >= 0.29.0-sds$LIBVA_SDS_VERSION_0_29 is required"
-    # endif
-    #elif VA_MAJOR_VERSION == 0 && VA_MINOR_VERSION == 30
-    # if !defined(VA_SDS_VERSION) || (VA_SDS_VERSION < $LIBVA_SDS_VERSION_0_30)
-    #  error "VA-API version >= 0.30.0-sds$LIBVA_SDS_VERSION_0_30 is required"
-    # endif
-    #elif !VA_CHECK_VERSION(0,31,0)
-    # error "VA-API version >= 0.31 is required"
-    #endif
-  ], [],
-  [ac_cv_libva_sds_extensions="yes"],
-  [ac_cv_libva_sds_extensions="no"])
-  CFLAGS="$saved_CFLAGS"
+
+dnl Check for VA-API
+LIBVA_PKGNAME="libva"
+PKG_CHECK_MODULES(LIBVA, [$LIBVA_PKGNAME])
+AC_SUBST(LIBVA_PKGNAME)
+
+AC_CACHE_CHECK([for old VA-API 0.29],
+    ac_cv_have_vaapi_old, [
+    saved_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS $LIBVA_CFLAGS"
+    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"
+    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
+
+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"
+    else
+        AC_MSG_ERROR([could not find VA-API])
+    fi
+fi
+AC_SUBST(LIBVA_X11_PKGNAME)
+
+AC_SUBST(LIBVA_EXTRA_CFLAGS)
+AC_SUBST(LIBVA_EXTRA_LIBS)
+
 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_DRIVER_INIT_FUNC="__vaDriverInit_${VA_MAJOR_VERSION}_${VA_MINOR_VERSION}_sds"
-if test "$ac_cv_libva_sds_extensions" = "yes"; then
-    AC_DEFINE_UNQUOTED([VA_DRIVER_INIT_FUNC], [$VA_DRIVER_INIT_FUNC], [Define driver entry-point])
-else
-    AC_MSG_ERROR([Your VA-API SDK does not include SDS extensions])
-fi
 
 pkgconfigdir=${libdir}/pkgconfig
 AC_SUBST(pkgconfigdir)
@@ -220,3 +229,10 @@ debian.upstream/libgstvaapi-x11.install.in
     sys/vaapisink/Makefile
     tests/Makefile
 ])
+
+dnl Print summary
+echo
+echo gstreamer-vaapi configuration summary:
+echo
+echo VA-API version ................... : $VA_VERSION
+echo
index f1ecfce..d3299f5 100644 (file)
@@ -26,6 +26,7 @@ libgstvaapi_source_c =                                \
        $(NULL)
 
 libgstvaapi_source_h =                         \
+       gstvaapicompat.h                        \
        gstvaapidisplay.h                       \
        gstvaapiimage.h                         \
        gstvaapiimageformat.h                   \
@@ -83,12 +84,14 @@ libgstvaapi_@GST_MAJORMINOR@_la_CFLAGS =    \
        $(GST_BASE_CFLAGS)                      \
        $(GST_CFLAGS)                           \
        $(LIBVA_CFLAGS)                         \
+       $(LIBVA_EXTRA_CFLAGS)                   \
        $(NULL)
 
 libgstvaapi_@GST_MAJORMINOR@_la_LIBADD =       \
        $(GST_BASE_LIBS)                        \
        $(GST_LIBS)                             \
        $(LIBVA_LIBS)                           \
+       $(LIBVA_EXTRA_LIBS)                     \
        $(NULL)
 
 libgstvaapi_x11_@GST_MAJORMINOR@_la_SOURCES =  \
@@ -108,11 +111,13 @@ libgstvaapi_x11_@GST_MAJORMINOR@_la_CFLAGS =      \
        $(GLIB_CFLAGS)                          \
        $(GST_BASE_CFLAGS)                      \
        $(LIBVA_X11_CFLAGS)                     \
+       $(LIBVA_EXTRA_CFLAGS)                   \
        $(NULL)
 
 libgstvaapi_x11_@GST_MAJORMINOR@_la_LIBADD =   \
        $(GLIB_LIBS)                            \
        $(LIBVA_X11_LIBS)                       \
+       $(LIBVA_EXTRA_LIBS)                     \
        libgstvaapi-@GST_MAJORMINOR@.la         \
        $(NULL)
 
diff --git a/gst-libs/gst/vaapi/gstvaapicompat.h b/gst-libs/gst/vaapi/gstvaapicompat.h
new file mode 100644 (file)
index 0000000..fb7d212
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ *  gstvapicompat.h - VA-API compatibility glue
+ *
+ *  gstreamer-vaapi (C) 2010 Splitted-Desktop Systems
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#ifndef GST_VAAPI_COMPAT_H
+#define GST_VAAPI_COMPAT_H
+
+#ifdef GST_VAAPI_USE_OLD_VAAPI_0_29
+# include <va.h>
+# include <va_x11.h>
+#else
+# include <va/va.h>
+#endif
+
+/* Check for VA version */
+#ifndef VA_CHECK_VERSION
+#define VA_MAJOR_VERSION 0
+#define VA_MINOR_VERSION 29
+#define VA_MICRO_VERSION 0
+#define VA_SDS_VERSION   0
+#define VA_CHECK_VERSION(major,minor,micro) \
+        (VA_MAJOR_VERSION > (major) || \
+         (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION > (minor)) || \
+         (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION == (minor) && VA_MICRO_VERSION >= (micro)))
+#endif
+
+/* Check for VA/SDS version */
+#ifndef VA_CHECK_VERSION_SDS
+#define VA_CHECK_VERSION_SDS(major, minor, micro, sds)                  \
+    (VA_CHECK_VERSION(major, minor, (micro)+1) ||                       \
+     (VA_CHECK_VERSION(major, minor, micro) && VA_SDS_VERSION >= (sds)))
+#endif
+
+/* Compatibility glue with original VA-API 0.29 */
+#ifdef GST_VAAPI_USE_OLD_VAAPI_0_29
+typedef struct _VASliceParameterBufferBase {
+    unsigned int slice_data_size;
+    unsigned int slice_data_offset;
+    unsigned int slice_data_flag;
+} VASliceParameterBufferBase;
+#endif
+
+#ifndef VA_FOURCC
+#define VA_FOURCC(ch0, ch1, ch2, ch3)           \
+    ((guint32)(guint8)(ch0) |                   \
+     ((guint32)(guint8)(ch1) << 8) |            \
+     ((guint32)(guint8)(ch2) << 16) |           \
+     ((guint32)(guint8)(ch3) << 24 ))
+#endif
+
+#ifndef VA_INVALID_ID
+#define VA_INVALID_ID           0xffffffff
+#endif
+#ifndef VA_INVALID_SURFACE
+#define VA_INVALID_SURFACE      VA_INVALID_ID
+#endif
+
+/* Compatibility glue with VA-API < 0.31 */
+#if !VA_CHECK_VERSION(0,31,0)
+#undef  vaSyncSurface
+#define vaSyncSurface(dpy, s)   (vaSyncSurface)((dpy), VA_INVALID_ID, (s))
+#undef  vaPutImage
+#define vaPutImage              vaPutImage2
+#undef  vaAssociateSubpicture
+#define vaAssociateSubpicture   vaAssociateSubpicture2
+#endif
+
+#endif /* GST_VAAPI_COMPAT_H */
index 8b41d3c..1dddf59 100644 (file)
 #ifndef GST_VAAPI_DISPLAY_H
 #define GST_VAAPI_DISPLAY_H
 
-#include <va/va.h>
+#ifdef GST_VAAPI_USE_OLD_VAAPI_0_29
+# include <va.h>
+#else
+# include <va/va.h>
+#endif
+
 #include <gst/gst.h>
 #include <gst/vaapi/gstvaapiimageformat.h>
 
index 9cf79b5..d6c2d15 100644 (file)
 #ifndef GST_VAAPI_DISPLAY_X11_H
 #define GST_VAAPI_DISPLAY_X11_H
 
+#ifdef GST_VAAPI_USE_OLD_VAAPI_0_29
+# include <va_x11.h>
+#else
+# include <va/va_x11.h>
+#endif
+
 #include <gst/vaapi/gstvaapidisplay.h>
-#include <va/va_x11.h>
 
 G_BEGIN_DECLS
 
index c26f006..46b6aa6 100644 (file)
 #ifndef GST_VAAPI_IMAGE_FORMAT_H
 #define GST_VAAPI_IMAGE_FORMAT_H
 
-#include <va/va.h>
+#ifdef GST_VAAPI_USE_OLD_VAAPI_0_29
+# include <va.h>
+# include <gst/vaapi/gstvaapicompat.h>
+#else
+# include <va/va.h>
+#endif
+
 #include <glib/gtypes.h>
 
 G_BEGIN_DECLS
index e4e088a..e50fa1e 100644 (file)
  */
 
 #include "config.h"
-#include <va/va.h>
 #include "gstvaapiparamspecs.h"
 #include "gstvaapivalue.h"
+#include "gstvaapicompat.h"
+
+#ifdef GST_VAAPI_USE_OLD_VAAPI_0_29
+# include <va.h>
+#else
+# include <va/va.h>
+#endif
 
 /* --- GstVaapiParamSpecID --- */
 
index 0897e14..80ad4f8 100644 (file)
@@ -24,6 +24,7 @@
  */
 
 #include "config.h"
+#include "gstvaapicompat.h"
 #include "gstvaapiutils.h"
 #include "gstvaapisurface.h"
 #include "gstvaapiimage.h"
index b3c15e8..63e0229 100644 (file)
@@ -19,6 +19,7 @@
  */
 
 #include "config.h"
+#include "gstvaapicompat.h"
 #include "gstvaapiutils.h"
 #include "gstvaapisurface.h"
 #include <stdio.h>
@@ -107,22 +108,23 @@ const char *string_of_VAEntrypoint(VAEntrypoint entrypoint)
  */
 guint get_PutSurface_flags_from_GstVaapiSurfaceRenderFlags(guint flags)
 {
-    const guint va_top_bottom_fields = (VA_TOP_FIELD|VA_BOTTOM_FIELD);
-    guint va_flags = 0;
+    guint va_fields = 0, va_csc = 0;
 
     if (flags & GST_VAAPI_PICTURE_STRUCTURE_TOP_FIELD)
-        va_flags |= VA_TOP_FIELD;
+        va_fields |= VA_TOP_FIELD;
     if (flags & GST_VAAPI_PICTURE_STRUCTURE_BOTTOM_FIELD)
-        va_flags |= VA_BOTTOM_FIELD;
-    if ((va_flags & va_top_bottom_fields) == va_top_bottom_fields) {
-        va_flags &= ~va_top_bottom_fields;
-        va_flags |= VA_FRAME_PICTURE;
-    }
+        va_fields |= VA_BOTTOM_FIELD;
+    if ((va_fields ^ (VA_TOP_FIELD|VA_BOTTOM_FIELD)) == 0)
+        va_fields  = VA_FRAME_PICTURE;
 
+#ifdef VA_SRC_BT601
+    if (flags & GST_VAAPI_COLOR_STANDARD_ITUR_BT_601)
+        va_csc = VA_SRC_BT601;
+#endif
+#ifdef VA_SRC_BT709
     if (flags & GST_VAAPI_COLOR_STANDARD_ITUR_BT_709)
-        va_flags |= VA_SRC_BT709;
-    else if (flags & GST_VAAPI_COLOR_STANDARD_ITUR_BT_601)
-        va_flags |= VA_SRC_BT601;
+        va_csc = VA_SRC_BT709;
+#endif
 
-    return va_flags;
+    return va_fields|va_csc;
 }
index 8c18044..804cec0 100644 (file)
 #define GST_VAAPI_UTILS_H
 
 #include "config.h"
-#include <va/va.h>
 #include <glib/gtypes.h>
 
+#ifdef GST_VAAPI_USE_OLD_VAAPI_0_29
+# include <va.h>
+#else
+# include <va/va.h>
+#endif
+
 /** Debug output */
 void vaapi_dprintf(const char *format, ...)
     attribute_hidden;
index d3b358d..1f258de 100644 (file)
@@ -6,7 +6,7 @@ pluginsdir=@libdir@/gstreamer-@GST_MAJORMINOR@
 
 Name: GStreamer VA-API (x11) Plugins Libraries
 Description: Streaming media framework, VA-API (x11) plugins libraries
-Requires: gstreamer-vaapi-@GST_MAJORMINOR@ libva-x11
+Requires: gstreamer-vaapi-@GST_MAJORMINOR@ @LIBVA_X11_PKGNAME@
 Version: @VERSION@
-Libs: -L${libdir} -lgstvaapi-x11-@GST_MAJORMINOR@
-Cflags: -I${includedir}
+Libs: -L${libdir} -lgstvaapi-x11-@GST_MAJORMINOR@ @LIBVA_EXTRA_LIBS@
+Cflags: -I${includedir} @LIBVA_EXTRA_CFLAGS@
index e7d2ec6..281dee0 100644 (file)
@@ -6,7 +6,7 @@ pluginsdir=@libdir@/gstreamer-@GST_MAJORMINOR@
 
 Name: GStreamer VA-API Plugins Libraries
 Description: Streaming media framework, VA-API plugins libraries
-Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@ libva
+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@ @LIBVA_PKGNAME@
 Version: @VERSION@
-Libs: -L${libdir} -lgstvaapi-@GST_MAJORMINOR@
-Cflags: -I${includedir}
+Libs: -L${libdir} -lgstvaapi-@GST_MAJORMINOR@ @LIBVA_EXTRA_LIBS@
+Cflags: -I${includedir} @LIBVA_EXTRA_CFLAGS@
index 74e3d37..b295d0b 100644 (file)
@@ -1,9 +1,11 @@
 plugin_LTLIBRARIES = libgstvaapiconvert.la
 
 libgstvaapi_CFLAGS = \
+       $(LIBVA_EXTRA_CFLAGS) \
        -I$(top_srcdir)/gst-libs
 
 libgstvaapi_LIBS = \
+       $(LIBVA_EXTRA_LIBS) \
        $(top_builddir)/gst-libs/gst/vaapi/libgstvaapi-$(GST_MAJORMINOR).la
 
 libgstvaapiconvert_la_SOURCES =        \
index 9fdb921..54cacdb 100644 (file)
@@ -1,9 +1,11 @@
 plugin_LTLIBRARIES = libgstvaapisink.la
 
 libgstvaapi_CFLAGS = \
+       $(LIBVA_EXTRA_CFLAGS) \
        -I$(top_srcdir)/gst-libs
 
 libgstvaapi_LIBS = \
+       $(LIBVA_EXTRA_LIBS) \
        $(top_builddir)/gst-libs/gst/vaapi/libgstvaapi-x11-$(GST_MAJORMINOR).la
 
 libgstvaapisink_la_SOURCES =   \
index de69c18..f42bbef 100644 (file)
@@ -5,11 +5,13 @@ noinst_PROGRAMS =     \
        $(NULL)
 
 TEST_CFLAGS = \
+       $(LIBVA_EXTRA_CFLAGS) \
        $(GST_CFLAGS) \
        -I$(top_srcdir)/gst-libs \
        $(X11_CFLAGS)
 
 TEST_LIBS = \
+       $(LIBVA_EXTRA_LIBS) \
        $(top_builddir)/gst-libs/gst/vaapi/libgstvaapi-x11-@GST_MAJORMINOR@.la \
        $(X11_LIBS)