]> git.sesse.net Git - vlc/blobdiff - plugins/gnome/gnome.c
. autod�tection des plugins
[vlc] / plugins / gnome / gnome.c
index fe626e5657eda1ba2ef862438996e824233418ac..02d9384179a78e6b16a32046c6a55b28d55b2bff 100644 (file)
 
 #include <stdlib.h>                                      /* malloc(), free() */
 
+#include <X11/Xlib.h>
+
 #include "config.h"
 #include "common.h"                                     /* boolean_t, byte_t */
 #include "threads.h"
 #include "mtime.h"
+#include "tests.h"
 #include "plugins.h"
 
 #include "interface.h"
 #include "video.h"
 #include "video_output.h"
 
-#include "plugins_export.h"
+#include "main.h"
 
 /*****************************************************************************
  * Exported prototypes
  *****************************************************************************/
-void vout_GetPlugin( p_vout_thread_t p_vout );
-void intf_GetPlugin( p_intf_thread_t p_intf );
+static void vout_GetPlugin( p_vout_thread_t p_vout );
+static void intf_GetPlugin( p_intf_thread_t p_intf );
+
+/* Video output */
+int     vout_GnomeCreate       ( vout_thread_t *p_vout, char *psz_display,
+                                 int i_root_window, void *p_data );
+int     vout_GnomeInit         ( p_vout_thread_t p_vout );
+void    vout_GnomeEnd          ( p_vout_thread_t p_vout );
+void    vout_GnomeDestroy      ( p_vout_thread_t p_vout );
+int     vout_GnomeManage       ( p_vout_thread_t p_vout );
+void    vout_GnomeDisplay      ( p_vout_thread_t p_vout );
+void    vout_GnomeSetPalette   ( p_vout_thread_t p_vout, u16 *red,
+                                 u16 *green, u16 *blue, u16 *transp );
+
+/* Interface */
+int     intf_GnomeCreate       ( p_intf_thread_t p_intf );
+void    intf_GnomeDestroy      ( p_intf_thread_t p_intf );
+void    intf_GnomeManage       ( p_intf_thread_t p_intf );
 
 /*****************************************************************************
  * GetConfig: get the plugin structure and configuration
  *****************************************************************************/
 plugin_info_t * GetConfig( void )
 {
+    Display *p_display;
     plugin_info_t * p_info = (plugin_info_t *) malloc( sizeof(plugin_info_t) );
 
     p_info->psz_name    = "Gnome";
@@ -62,39 +82,54 @@ plugin_info_t * GetConfig( void )
     p_info->intf_GetPlugin = intf_GetPlugin;
     p_info->yuv_GetPlugin  = NULL;
 
-    return( p_info );
-}
+    /* Check that we can open the X display */
+    if( (p_display = XOpenDisplay( XDisplayName(
+                         main_GetPszVariable( VOUT_DISPLAY_VAR, NULL ) ) ))
+        == NULL )
+    {
+        p_info->i_score = 0;
+    }
+    else
+    {
+        XCloseDisplay( p_display );
+        p_info->i_score = 0x200;
+    }
+
+    if( TestProgram( "gvlc" ) )
+    {
+        p_info->i_score += 0x180;
+    }
+
+    /* If this plugin was requested, score it higher */
+    if( TestMethod( VOUT_METHOD_VAR, "gnome" ) )
+    {
+        p_info->i_score += 0x200;
+    }
 
-/*****************************************************************************
- * Test: tests if the plugin can be launched
- *****************************************************************************/
-int Test( void )
-{
-    /* TODO: detect an X display or Gnome libs */
-    return( 1 );
+    return( p_info );
 }
 
 /*****************************************************************************
  * Following functions are only called through the p_info structure
  *****************************************************************************/
 
-void vout_GetPlugin( p_vout_thread_t p_vout )
+static void vout_GetPlugin( p_vout_thread_t p_vout )
 {
-    p_vout->p_sys_create  = vout_SysCreate;
-    p_vout->p_sys_init    = vout_SysInit;
-    p_vout->p_sys_end     = vout_SysEnd;
-    p_vout->p_sys_destroy = vout_SysDestroy;
-    p_vout->p_sys_manage  = vout_SysManage;
-    p_vout->p_sys_display = vout_SysDisplay;
+    p_vout->p_sys_create  = vout_GnomeCreate;
+    p_vout->p_sys_init    = vout_GnomeInit;
+    p_vout->p_sys_end     = vout_GnomeEnd;
+    p_vout->p_sys_destroy = vout_GnomeDestroy;
+    p_vout->p_sys_manage  = vout_GnomeManage;
+    p_vout->p_sys_display = vout_GnomeDisplay;
 
     /* optional functions */
-    p_vout->p_set_palette = vout_SetPalette;
+    p_vout->p_set_palette = vout_GnomeSetPalette;
 }
 
-void intf_GetPlugin( p_intf_thread_t p_intf )
+static void intf_GetPlugin( p_intf_thread_t p_intf )
 {
-    p_intf->p_sys_create  = intf_SysCreate;
-    p_intf->p_sys_destroy = intf_SysDestroy;
-    p_intf->p_sys_manage  = intf_SysManage;
+    p_intf->p_sys_create  = intf_GnomeCreate;
+    p_intf->p_sys_destroy = intf_GnomeDestroy;
+    p_intf->p_sys_manage  = intf_GnomeManage;
 }