gl/cocoa: Let ARC clean up our dispatch queue if ARC is used, and otherwise do it manually

Also don't use __bridge casts if ARC is not used, as is the case on 32
bit systems.
diff --git a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m
index ce101ac..1aecf09 100644
--- a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m
+++ b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m
@@ -137,14 +137,27 @@
 
   window->priv->preferred_width = 320;
   window->priv->preferred_height = 240;
+#if OS_OBJECT_USE_OBJC
   window->priv->gl_queue = (__bridge_retained gpointer)
       (dispatch_queue_create ("org.freedesktop.gstreamer.glwindow", NULL));
+#else
+  window->priv->gl_queue = (gpointer)
+      (dispatch_queue_create ("org.freedesktop.gstreamer.glwindow", NULL));
+#endif
 }
 
 static void
 gst_gl_window_cocoa_finalize (GObject * object)
 {
   GstGLWindowCocoa *window = GST_GL_WINDOW_COCOA (object);
+
+#if OS_OBJECT_USE_OBJC
+  /* Let ARC clean up our queue */
+  dispatch_queue_t queue = (__bridge_transfer dispatch_queue_t) window->priv->gl_queue;
+#else
+  dispatch_release (window->priv->gl_queue);
+#endif
+
   window->priv->gl_queue = NULL;
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
@@ -431,7 +444,11 @@
   GstGLContext *context = gst_gl_window_get_context (window);
   GThread *thread = gst_gl_context_get_thread (context);
   GstGLWindowCocoaPrivate *priv = window_cocoa->priv;
+#if OS_OBJECT_USE_OBJC
   dispatch_queue_t gl_queue = (__bridge dispatch_queue_t)priv->gl_queue;
+#else
+  dispatch_queue_t gl_queue = (dispatch_queue_t)priv->gl_queue;
+#endif
 
   if (thread == g_thread_self()) {
     /* this case happens for nested calls happening from inside the GCD queue */