]> git.sesse.net Git - vlc/blobdiff - plugins/fb/fb.c
. autod�tection des plugins
[vlc] / plugins / fb / fb.c
index 836d82a332273ac3171cc59aca309916ac4ceb0e..4f6a571fbc2a3fe8d626163383e6c61b72098f16 100644 (file)
  *****************************************************************************/
 #include "defs.h"
 
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
 #include <stdlib.h>                                      /* malloc(), free() */
+#include <unistd.h>                                               /* close() */
 
 #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_FBCreate       ( vout_thread_t *p_vout, char *psz_display,
+                              int i_root_window, void *p_data );
+int     vout_FBInit         ( p_vout_thread_t p_vout );
+void    vout_FBEnd          ( p_vout_thread_t p_vout );
+void    vout_FBDestroy      ( p_vout_thread_t p_vout );
+int     vout_FBManage       ( p_vout_thread_t p_vout );
+void    vout_FBDisplay      ( p_vout_thread_t p_vout );
+void    vout_FBSetPalette   ( p_vout_thread_t p_vout,
+                              u16 *red, u16 *green, u16 *blue, u16 *transp );
+
+/* Interface */
+int     intf_FBCreate       ( p_intf_thread_t p_intf );
+void    intf_FBDestroy      ( p_intf_thread_t p_intf );
+void    intf_FBManage       ( p_intf_thread_t p_intf );
 
 /*****************************************************************************
  * GetConfig: get the plugin structure and configuration
  *****************************************************************************/
 plugin_info_t * GetConfig( void )
 {
+    int i_fd;
     plugin_info_t * p_info = (plugin_info_t *) malloc( sizeof(plugin_info_t) );
 
     p_info->psz_name    = "Linux framebuffer";
@@ -62,39 +84,54 @@ plugin_info_t * GetConfig( void )
     p_info->intf_GetPlugin = intf_GetPlugin;
     p_info->yuv_GetPlugin  = NULL;
 
-    return( p_info );
-}
+    /* Test if the device can be opened */
+    if ( (i_fd = open( main_GetPszVariable( VOUT_FB_DEV_VAR,
+                                            VOUT_FB_DEV_DEFAULT ),
+                       O_RDWR )) < 0 )
+    {
+        p_info->i_score = 0;
+    }
+    else
+    {
+        close( i_fd );
+        p_info->i_score = 0x100;
+    }
 
-/*****************************************************************************
- * Test: tests if the plugin can be launched
- *****************************************************************************/
-int Test( void )
-{
-    /* TODO: detect the framebuffer ioctl()s in the kernel */
-    return( 1 );
+    if( TestProgram( "fbvlc" ) )
+    {
+        p_info->i_score += 0x180;
+    }
+
+    /* If this plugin was requested, score it higher */
+    if( TestMethod( VOUT_METHOD_VAR, "fb" ) )
+    {
+        p_info->i_score += 0x200;
+    }
+
+    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_FBCreate;
+    p_vout->p_sys_init    = vout_FBInit;
+    p_vout->p_sys_end     = vout_FBEnd;
+    p_vout->p_sys_destroy = vout_FBDestroy;
+    p_vout->p_sys_manage  = vout_FBManage;
+    p_vout->p_sys_display = vout_FBDisplay;
     
     /* optional functions */
-    p_vout->p_set_palette = vout_SetPalette;
+    p_vout->p_set_palette = vout_FBSetPalette;
 }
 
-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_FBCreate;
+    p_intf->p_sys_destroy = intf_FBDestroy;
+    p_intf->p_sys_manage  = intf_FBManage;
 }