]> git.sesse.net Git - vlc/blobdiff - include/modules.h
* removed a totally useless switch in my last commit
[vlc] / include / modules.h
index ad06b770a7841b3a16d48484a322b82ebd00dc7d..f5060352e9f92631a90b9709d324d79e0d120ebf 100644 (file)
@@ -2,7 +2,7 @@
  * modules.h : Module management functions.
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: modules.h,v 1.38 2001/12/30 07:09:54 sam Exp $
+ * $Id: modules.h,v 1.46 2002/03/20 03:43:51 sam Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
@@ -46,34 +46,36 @@ static __inline__ char *GetCapabilityName( unsigned int i_capa )
      * new capability. */
     static char *pp_capa[] =
     {
+        "main",
+#define MODULE_CAPABILITY_MAIN      0  /* Main */
         "interface",
-#define MODULE_CAPABILITY_INTF      0  /* Interface */
+#define MODULE_CAPABILITY_INTF      1  /* Interface */
         "access",
-#define MODULE_CAPABILITY_ACCESS    1  /* Input */
-        "input",
-#define MODULE_CAPABILITY_INPUT     2  /* Input */
-        "decaps",
-#define MODULE_CAPABILITY_DECAPS    3  /* Decaps */
+#define MODULE_CAPABILITY_ACCESS    2  /* Input */
+        "demux",
+#define MODULE_CAPABILITY_DEMUX     3  /* Input */
+        "network",
+#define MODULE_CAPABILITY_NETWORK   4  /* Network */
         "decoder",
-#define MODULE_CAPABILITY_DECODER   4  /* Audio or video decoder */
+#define MODULE_CAPABILITY_DECODER   5  /* Audio or video decoder */
         "motion",
-#define MODULE_CAPABILITY_MOTION    5  /* Motion compensation */
+#define MODULE_CAPABILITY_MOTION    6  /* Motion compensation */
         "iDCT",
-#define MODULE_CAPABILITY_IDCT      6  /* IDCT transformation */
+#define MODULE_CAPABILITY_IDCT      7  /* IDCT transformation */
         "audio output",
-#define MODULE_CAPABILITY_AOUT      7  /* Audio output */
+#define MODULE_CAPABILITY_AOUT      8  /* Audio output */
         "video output",
-#define MODULE_CAPABILITY_VOUT      8  /* Video output */
+#define MODULE_CAPABILITY_VOUT      9  /* Video output */
         "chroma transformation",
-#define MODULE_CAPABILITY_CHROMA    9  /* colorspace conversion */
+#define MODULE_CAPABILITY_CHROMA   10  /* colorspace conversion */
         "iMDCT",
-#define MODULE_CAPABILITY_IMDCT    10  /* IMDCT transformation */
+#define MODULE_CAPABILITY_IMDCT    11  /* IMDCT transformation */
         "downmix",
-#define MODULE_CAPABILITY_DOWNMIX  11  /* AC3 downmix */
+#define MODULE_CAPABILITY_DOWNMIX  12  /* AC3 downmix */
         "memcpy",
-#define MODULE_CAPABILITY_MEMCPY   12  /* memcpy */
+#define MODULE_CAPABILITY_MEMCPY   13  /* memcpy */
         "unknown"
-#define MODULE_CAPABILITY_MAX      13  /* Total number of capabilities */
+#define MODULE_CAPABILITY_MAX      14  /* Total number of capabilities */
     };
 
     return pp_capa[ (i_capa) > MODULE_CAPABILITY_MAX ? MODULE_CAPABILITY_MAX :
@@ -85,7 +87,7 @@ static __inline__ char *GetCapabilityName( unsigned int i_capa )
  *****************************************************************************
  * This global variable is accessed by any function using modules.
  *****************************************************************************/
-typedef struct
+typedef struct module_bank_s
 {
     struct module_s *   first;                   /* First module in the bank */
     int                 i_count;              /* Number of allocated modules */
@@ -94,7 +96,11 @@ typedef struct
                                     it is to design thread-safe linked lists */
 } module_bank_t;
 
+#ifndef PLUGIN
 extern module_bank_t *p_module_bank;
+#else
+#   define p_module_bank (p_symbols->p_module_bank)
+#endif
 
 /*****************************************************************************
  * Module description structure
@@ -119,7 +125,15 @@ typedef struct module_s
     u32   i_cpu_capabilities;                   /* Required CPU capabilities */
 
     struct module_functions_s *p_functions;          /* Capability functions */
-    struct module_config_s  *p_config;     /* Module configuration structure */
+
+    /*
+     * Variables set by the module to store its config options
+     */
+    struct module_config_s *p_config;      /* Module configuration structure */
+    struct module_config_s *p_config_orig;    /* original module config data */
+    vlc_mutex_t            config_lock;    /* lock used to modify the config */
+    unsigned int           i_config_lines;  /* number of configuration lines */
+    unsigned int           i_config_items;  /* number of configuration items */
 
     /*
      * Variables used internally by the module manager
@@ -156,41 +170,11 @@ typedef struct module_s
 
 } module_t;
 
-/*****************************************
- * FIXME
- * FIXME    Capabilities
- * FIXME
- *******************************************/
-typedef struct memcpy_module_s
-{
-    struct module_s *p_module;
-
-    void* ( *pf_memcpy ) ( void *, const void *, size_t );
-
-} memcpy_module_t;
-
-/* FIXME: not yet used */
-typedef struct probedata_s
-{
-    u8  i_type;
-    struct
-    {
-        char * psz_data;
-    } aout;
-
-    struct
-    {
-        struct picture_heap_s* p_output;
-        struct picture_heap_s* p_render;
-    } chroma;
-
-} probedata_t;
-
-/* FIXME: find a nicer way to do this. */
+/*****************************************************************************
+ * Module functions description structure
+ *****************************************************************************/
 typedef struct function_list_s
 {
-    int ( * pf_probe ) ( probedata_t * p_data );
-
     union
     {
         /* Interface plugin */
@@ -201,44 +185,40 @@ typedef struct function_list_s
             void ( * pf_run )  ( struct intf_thread_s * );
         } intf;
 
-        /* Input plugin */
+        /* Access plugin */
         struct
         {
-            void ( * pf_init ) ( struct input_thread_s * );
-            void ( * pf_open ) ( struct input_thread_s * );
+            int  ( * pf_open ) ( struct input_thread_s * );
             void ( * pf_close )( struct input_thread_s * );
-            void ( * pf_end )  ( struct input_thread_s * );
-            void ( * pf_init_bit_stream ) ( struct bit_stream_s *,
-                                            struct decoder_fifo_s *,
-                      void (* pf_bitstream_callback)( struct bit_stream_s *,
-                                                      boolean_t ),
-                                           void * );
-
-            int  ( * pf_read ) ( struct input_thread_s *,
-                                 struct data_packet_s ** );
-            void ( * pf_demux )( struct input_thread_s *,
-                                 struct data_packet_s * );
-
-            struct data_packet_s * ( * pf_new_packet ) ( void *, size_t );
-            struct pes_packet_s *  ( * pf_new_pes )    ( void * );
-            void ( * pf_delete_packet )  ( void *, struct data_packet_s * );
-            void ( * pf_delete_pes )     ( void *, struct pes_packet_s * );
-
+            ssize_t ( * pf_read ) ( struct input_thread_s *, byte_t *, size_t );
+            void ( * pf_seek ) ( struct input_thread_s *, off_t );
             int  ( * pf_set_program ) ( struct input_thread_s *,
-                                     struct pgrm_descriptor_s * );
-
+                                        struct pgrm_descriptor_s * );
             int  ( * pf_set_area ) ( struct input_thread_s *,
                                      struct input_area_s * );
+        } access;
+
+        /* Demux plugin */
+        struct
+        {
+            int  ( * pf_init ) ( struct input_thread_s * );
+            void ( * pf_end )  ( struct input_thread_s * );
+            int  ( * pf_demux )( struct input_thread_s * );
             int  ( * pf_rewind )   ( struct input_thread_s * );
-            void ( * pf_seek )     ( struct input_thread_s *, off_t );
-        } input;
+        } demux;
+
+        /* Network plugin */
+        struct
+        {
+            int  ( * pf_open )( struct network_socket_s * );
+        } network;
 
         /* Audio output plugin */
         struct
         {
             int  ( * pf_open )       ( struct aout_thread_s * );
             int  ( * pf_setformat )  ( struct aout_thread_s * );
-            long ( * pf_getbufinfo ) ( struct aout_thread_s *, long );
+            int  ( * pf_getbufinfo ) ( struct aout_thread_s *, int );
             void ( * pf_play )       ( struct aout_thread_s *, byte_t *, int );
             void ( * pf_close )      ( struct aout_thread_s * );
         } aout;
@@ -251,10 +231,10 @@ typedef struct function_list_s
             void ( * pf_end )        ( struct vout_thread_s * );
             void ( * pf_destroy )    ( struct vout_thread_s * );
             int  ( * pf_manage )     ( struct vout_thread_s * );
+            void ( * pf_render )     ( struct vout_thread_s *,
+                                       struct picture_s * );
             void ( * pf_display )    ( struct vout_thread_s *,
                                        struct picture_s * );
-            void ( * pf_setpalette ) ( struct vout_thread_s *,
-                                       u16 *, u16 *, u16 * );
         } vout;
 
         /* Motion compensation plugin */
@@ -318,13 +298,15 @@ typedef struct function_list_s
         /* Decoder plugins */
         struct
         {
+            int  ( * pf_probe)( u8 * p_es );
             int  ( * pf_run ) ( struct decoder_config_s * p_config );
         } dec;
 
         /* memcpy plugins */
         struct
         {
-            void* ( * fast_memcpy ) ( void *, const void *, size_t );
+            void* ( * pf_memcpy ) ( void *, const void *, size_t );
+            void* ( * pf_memset ) ( void *, int, size_t );
         } memcpy;
 
     } functions;
@@ -336,8 +318,8 @@ typedef struct module_functions_s
     /* XXX: The order here has to be the same as above for the #defines */
     function_list_t intf;
     function_list_t access;
-    function_list_t input;
-    function_list_t decaps;
+    function_list_t demux;
+    function_list_t network;
     function_list_t dec;
     function_list_t motion;
     function_list_t idct;
@@ -352,52 +334,21 @@ typedef struct module_functions_s
 
 typedef struct module_functions_s * p_module_functions_t;
 
-/*****************************************************************************
- * Macros used to build the configuration structure.
- *****************************************************************************/
-
-/* Mandatory first and last parts of the structure */
-#define MODULE_CONFIG_ITEM_START       0xdead  /* The main window */
-#define MODULE_CONFIG_ITEM_END         0xbeef  /* End of the window */
-
-/* Configuration widgets */
-#define MODULE_CONFIG_ITEM_WINDOW      0x0001  /* The main window */
-#define MODULE_CONFIG_ITEM_PANE        0x0002  /* A notebook pane */
-#define MODULE_CONFIG_ITEM_FRAME       0x0003  /* A frame */
-#define MODULE_CONFIG_ITEM_COMMENT     0x0004  /* A comment text */
-#define MODULE_CONFIG_ITEM_STRING      0x0005  /* A string */
-#define MODULE_CONFIG_ITEM_FILE        0x0006  /* A file selector */
-#define MODULE_CONFIG_ITEM_CHECK       0x0007  /* A checkbox */
-#define MODULE_CONFIG_ITEM_CHOOSE      0x0008  /* A choose box */
-#define MODULE_CONFIG_ITEM_RADIO       0x0009  /* A radio box */
-#define MODULE_CONFIG_ITEM_SCALE       0x000a  /* A horizontal ruler */
-#define MODULE_CONFIG_ITEM_SPIN        0x000b  /* A numerical selector */
-
-typedef struct module_config_s
-{
-    int         i_type;                         /* Configuration widget type */
-    char *      psz_text;        /* Text commenting or describing the widget */
-    char *      psz_name;                                   /* Variable name */
-    void *      p_getlist;          /* Function to call to get a choice list */
-    void *      p_change;        /* Function to call when commiting a change */
-} module_config_t;
-
 /*****************************************************************************
  * Exported functions.
  *****************************************************************************/
 #ifndef PLUGIN
 void            module_InitBank     ( void );
+void            module_LoadMain     ( void );
+void            module_LoadBuiltins ( void );
+void            module_LoadPlugins  ( void );
 void            module_EndBank      ( void );
 void            module_ResetBank    ( void );
 void            module_ManageBank   ( void );
-module_t *      module_Need         ( int, char *, probedata_t * );
+module_t *      module_Need         ( int, char *, void * );
 void            module_Unneed       ( module_t * p_module );
 
-int module_NeedMemcpy( memcpy_module_t * );
-void module_UnneedMemcpy( memcpy_module_t * );
-
 #else
 #   define module_Need p_symbols->module_Need
 #   define module_Unneed p_symbols->module_Unneed
 #endif
-