]> git.sesse.net Git - vlc/blobdiff - include/modules.h
The motion compensation routines are now modules as well ; choose your
[vlc] / include / modules.h
index 3f69de74a0a8d006bb167b439a25ae96d2048c6c..09b4b783200819a7857b47b7d11dce2cdf43db4d 100644 (file)
@@ -21,7 +21,7 @@
  *****************************************************************************/
 
 /* Number of tries before we unload an unused module */
-#define MODULE_HIDE_DELAY 100
+#define MODULE_HIDE_DELAY 20
 
 /* The module handle type. */
 #ifdef SYS_BEOS
@@ -34,17 +34,19 @@ typedef void *  module_handle_t;
  * Module capabilities.
  *****************************************************************************/
 
-#define MODULE_CAPABILITY_NULL     0       /* The Module can't do anything */
-#define MODULE_CAPABILITY_INTF     1<<0    /* Interface */
-#define MODULE_CAPABILITY_INPUT    1<<1    /* Input */
-#define MODULE_CAPABILITY_DECAPS   1<<2    /* Decaps */
-#define MODULE_CAPABILITY_ADEC     1<<3    /* Audio decoder */
-#define MODULE_CAPABILITY_VDEC     1<<4    /* Video decoder */
-#define MODULE_CAPABILITY_AOUT     1<<5    /* Audio output */
-#define MODULE_CAPABILITY_VOUT     1<<6    /* Video output */
-#define MODULE_CAPABILITY_YUV      1<<7    /* YUV colorspace conversion */
-#define MODULE_CAPABILITY_AFX      1<<8    /* Audio effects */
-#define MODULE_CAPABILITY_VFX      1<<9    /* Video effects */
+#define MODULE_CAPABILITY_NULL     0        /* The Module can't do anything */
+#define MODULE_CAPABILITY_INTF     1 <<  0  /* Interface */
+#define MODULE_CAPABILITY_INPUT    1 <<  1  /* Input */
+#define MODULE_CAPABILITY_DECAPS   1 <<  2  /* Decaps */
+#define MODULE_CAPABILITY_ADEC     1 <<  3  /* Audio decoder */
+#define MODULE_CAPABILITY_VDEC     1 <<  4  /* Video decoder */
+#define MODULE_CAPABILITY_MOTION   1 <<  5  /* Video decoder */
+#define MODULE_CAPABILITY_IDCT     1 <<  6  /* IDCT transformation */
+#define MODULE_CAPABILITY_AOUT     1 <<  7  /* Audio output */
+#define MODULE_CAPABILITY_VOUT     1 <<  8  /* Video output */
+#define MODULE_CAPABILITY_YUV      1 <<  9  /* YUV colorspace conversion */
+#define MODULE_CAPABILITY_AFX      1 << 10  /* Audio effects */
+#define MODULE_CAPABILITY_VFX      1 << 11  /* Video effects */
 
 /* FIXME: not yet used */
 typedef struct probedata_s
@@ -58,20 +60,54 @@ typedef struct probedata_s
 /* FIXME: find a nicer way to do this. */
 typedef struct function_list_s
 {
-    int ( * p_probe ) ( probedata_t * p_data );
+    int ( * pf_probe ) ( probedata_t * p_data );
 
     union
     {
         struct
         {
-            int  ( * p_open )       ( struct aout_thread_s * p_aout );
-            int  ( * p_setformat )  ( struct aout_thread_s * p_aout );
-            long ( * p_getbufinfo ) ( struct aout_thread_s * p_aout,
-                                      long l_buffer_info );
-            void ( * p_play )       ( struct aout_thread_s * p_aout,
-                                      byte_t *buffer, int i_size );
-            void ( * p_close )      ( struct aout_thread_s * p_aout );
-       } aout;
+            int  ( * pf_open )       ( struct aout_thread_s * p_aout );
+            int  ( * pf_setformat )  ( struct aout_thread_s * p_aout );
+            long ( * pf_getbufinfo ) ( struct aout_thread_s * p_aout,
+                                       long l_buffer_info );
+            void ( * pf_play )       ( struct aout_thread_s * p_aout,
+                                       byte_t *buffer, int i_size );
+            void ( * pf_close )      ( struct aout_thread_s * p_aout );
+        } aout;
+
+        struct
+        {
+#define motion_functions( yuv ) \
+            void ( * pf_field_field_##yuv ) ( struct macroblock_s * ); \
+            void ( * pf_field_16x8_##yuv )  ( struct macroblock_s * ); \
+            void ( * pf_field_dmv_##yuv )   ( struct macroblock_s * ); \
+            void ( * pf_frame_field_##yuv ) ( struct macroblock_s * ); \
+            void ( * pf_frame_frame_##yuv ) ( struct macroblock_s * ); \
+            void ( * pf_frame_dmv_##yuv )   ( struct macroblock_s * );
+           motion_functions( 420 )
+           motion_functions( 422 )
+           motion_functions( 444 )
+#undef motion_functions
+        } motion;
+
+        struct
+        {
+            void ( * pf_init )         ( struct vdec_thread_s * p_vdec );
+            void ( * pf_sparse_idct )  ( struct vdec_thread_s * p_vdec,
+                                         dctelem_t * p_block,
+                                         int i_sparse_pos );
+            void ( * pf_idct )         ( struct vdec_thread_s * p_vdec,
+                                         dctelem_t * p_block,
+                                         int i_idontcare );
+            void ( * pf_norm_scan )    ( u8 ppi_scan[2][64] );
+        } idct;
+
+        struct
+        {
+            int  ( * pf_init )         ( struct vout_thread_s * p_vout );
+            int  ( * pf_reset )        ( struct vout_thread_s * p_vout );
+            void ( * pf_end )          ( struct vout_thread_s * p_vout );
+        } yuv;
 
     } functions;
 
@@ -79,12 +115,14 @@ typedef struct function_list_s
 
 typedef struct module_functions_s
 {
-    /* The order here has to be the same as above for the #defines */
+    /* XXX: The order here has to be the same as above for the #defines */
     function_list_t intf;
     function_list_t input;
     function_list_t decaps;
     function_list_t adec;
     function_list_t vdec;
+    function_list_t motion;
+    function_list_t idct;
     function_list_t aout;
     function_list_t vout;
     function_list_t yuv;