libs: fix compatibility with glib 2.28.
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>
Mon, 17 Dec 2012 08:41:24 +0000 (09:41 +0100)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Mon, 17 Dec 2012 13:33:52 +0000 (14:33 +0100)
Always prefer non deprecated APIs by default and provide compatibility
glue for older glib versions when necessary.

gst-libs/gst/vaapi/glibcompat.h
gst/vaapi/gstvaapi.c

index 0a6115c..6c1f8f4 100644 (file)
 #include <glib.h>
 #include <glib-object.h>
 
+#define G_COMPAT_DEFINE(new_api, new_args, old_api, old_args)   \
+static inline void                                              \
+new_api new_args                                                \
+{                                                               \
+    old_api old_args;                                           \
+}
+
 #if !GLIB_CHECK_VERSION(2,27,2)
 static inline void
 g_list_free_full(GList *list, GDestroyNotify free_func)
@@ -52,31 +59,39 @@ g_clear_object_inline(volatile GObject **object_ptr)
 #define g_clear_object(obj) g_clear_object_inline((volatile GObject **)(obj))
 #endif
 
-#if GLIB_CHECK_VERSION(2,31,2)
-#define GStaticMutex                    GMutex
-#undef  g_static_mutex_init
-#define g_static_mutex_init(mutex)      g_mutex_init(mutex)
-#undef  g_static_mutex_free
-#define g_static_mutex_free(mutex)      g_mutex_clear(mutex)
-#undef  g_static_mutex_lock
-#define g_static_mutex_lock(mutex)      g_mutex_lock(mutex)
-#undef  g_static_mutex_unlock
-#define g_static_mutex_unlock(mutex)    g_mutex_unlock(mutex)
-
-#define GStaticRecMutex                 GRecMutex
-#undef  g_static_rec_mutex_init
-#define g_static_rec_mutex_init(mutex)  g_rec_mutex_init(mutex)
-#undef  g_static_rec_mutex_free
-#define g_static_rec_mutex_free(mutex)  g_rec_mutex_clear(mutex)
-#undef  g_static_rec_mutex_lock
-#define g_static_rec_mutex_lock(mutex)  g_rec_mutex_lock(mutex)
-#undef  g_static_rec_mutex_unlock
-#define g_static_rec_mutex_unlock(m)    g_rec_mutex_unlock(m)
-#endif
-
 #if !GLIB_CHECK_VERSION(2,31,2)
+typedef GStaticMutex GCompatMutex;
+G_COMPAT_DEFINE(g_compat_mutex_init, (GCompatMutex *mutex),
+                g_static_mutex_init, (mutex))
+G_COMPAT_DEFINE(g_compat_mutex_clear, (GCompatMutex *mutex),
+                g_static_mutex_free, (mutex))
+G_COMPAT_DEFINE(g_compat_mutex_lock, (GCompatMutex *mutex),
+                g_static_mutex_lock, (mutex))
+G_COMPAT_DEFINE(g_compat_mutex_unlock, (GCompatMutex *mutex),
+                g_static_mutex_unlock, (mutex))
+
+typedef GStaticRecMutex GCompatRecMutex;
+G_COMPAT_DEFINE(g_compat_rec_mutex_init, (GCompatRecMutex *mutex),
+                g_static_rec_mutex_init, (mutex))
+G_COMPAT_DEFINE(g_compat_rec_mutex_clear, (GCompatRecMutex *mutex),
+                g_static_rec_mutex_free, (mutex))
+G_COMPAT_DEFINE(g_compat_rec_mutex_lock, (GCompatRecMutex *mutex),
+                g_static_rec_mutex_lock, (mutex))
+G_COMPAT_DEFINE(g_compat_rec_mutex_unlock, (GCompatRecMutex *mutex),
+                g_static_rec_mutex_unlock, (mutex))
+
+typedef GCond *GCompatCond;
+G_COMPAT_DEFINE(g_compat_cond_init, (GCompatCond *cond),
+                *cond = g_cond_new, ())
+G_COMPAT_DEFINE(g_compat_cond_clear, (GCompatCond *cond),
+                if (*cond) g_cond_free, (*cond))
+G_COMPAT_DEFINE(g_compat_cond_signal, (GCompatCond *cond),
+                g_cond_signal, (*cond))
+G_COMPAT_DEFINE(g_compat_cond_broadcast, (GCompatCond *cond),
+                g_cond_broadcast, (*cond))
+
 static inline gboolean
-g_cond_wait_until(GCond *cond, GMutex *mutex, gint64 end_time)
+g_cond_wait_until(GCompatCond *cond, GStaticMutex *mutex, gint64 end_time)
 {
     gint64 diff_time;
     GTimeVal timeout;
@@ -84,8 +99,38 @@ g_cond_wait_until(GCond *cond, GMutex *mutex, gint64 end_time)
     diff_time = end_time - g_get_monotonic_time();
     g_get_current_time(&timeout);
     g_time_val_add(&timeout, diff_time > 0 ? diff_time : 0);
-    return g_cond_timed_wait(cond, mutex, &timeout);
+    return g_cond_timed_wait(*cond, g_static_mutex_get_mutex(mutex), &timeout);
 }
+
+#define GMutex                          GCompatMutex
+#undef  g_mutex_init
+#define g_mutex_init(mutex)             g_compat_mutex_init(mutex)
+#undef  g_mutex_clear
+#define g_mutex_clear(mutex)            g_compat_mutex_clear(mutex)
+#undef  g_mutex_lock
+#define g_mutex_lock(mutex)             g_compat_mutex_lock(mutex)
+#undef  g_mutex_unlock
+#define g_mutex_unlock(mutex)           g_compat_mutex_unlock(mutex)
+
+#define GRecMutex                       GCompatRecMutex
+#undef  g_rec_mutex_init
+#define g_rec_mutex_init(mutex)         g_compat_rec_mutex_init(mutex)
+#undef  g_rec_mutex_clear
+#define g_rec_mutex_clear(mutex)        g_compat_rec_mutex_clear(mutex)
+#undef  g_rec_mutex_lock
+#define g_rec_mutex_lock(mutex)         g_compat_rec_mutex_lock(mutex)
+#undef  g_rec_mutex_unlock
+#define g_rec_mutex_unlock(mutex)       g_compat_rec_mutex_unlock(mutex)
+
+#define GCond                           GCompatCond
+#undef  g_cond_init
+#define g_cond_init(cond)               g_compat_cond_init(cond)
+#undef  g_cond_clear
+#define g_cond_clear(cond)              g_compat_cond_clear(cond)
+#undef  g_cond_signal
+#define g_cond_signal(cond)             g_compat_cond_signal(cond)
 #endif
 
+#undef G_COMPAT_DEFINE
+
 #endif /* GLIB_COMPAT_H */
index 5e115c4..5a6462f 100644 (file)
  *  Boston, MA 02110-1301 USA
  */
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
+#include "gst/vaapi/sysdeps.h"
 #include <gst/gst.h>
-
 #include "gstvaapidownload.h"
 #include "gstvaapiupload.h"
 #include "gstvaapidecode.h"