X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fmodules.h;h=3752aad30deadb4afeaf2aed8d487f9e0a15a0cc;hb=a70f8bb371466209770c4c3bcdb7137b94acef66;hp=96932ecfada9763c4d5f240387cae830a1451641;hpb=c0211e9a50e55b2783ae2fe1fd2e8b22541cd2d1;p=vlc diff --git a/include/modules.h b/include/modules.h index 96932ecfad..3752aad30d 100644 --- a/include/modules.h +++ b/include/modules.h @@ -2,6 +2,7 @@ * modules.h : Module management functions. ***************************************************************************** * Copyright (C) 2001 VideoLAN + * $Id: modules.h,v 1.22 2001/05/01 04:18:17 sam Exp $ * * Authors: Samuel Hocevar * @@ -20,8 +21,31 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *****************************************************************************/ +#ifdef WIN32 +#include /* off_t */ +#endif + +/***************************************************************************** + * bank_t, p_bank (global variable) + ***************************************************************************** + * This global variable is accessed by any function using modules. + *****************************************************************************/ +typedef struct +{ + struct module_s * first; /* First module of the bank */ + + vlc_mutex_t lock; /* Global lock -- you can't imagine how awful it + is to design thread-safe linked lists. */ +} bank_t; + +extern bank_t *p_bank; + +/***************************************************************************** + * Module #defines. + *****************************************************************************/ + /* Number of tries before we unload an unused module */ -#define MODULE_HIDE_DELAY 20 +#define MODULE_HIDE_DELAY 100 /* The module handle type. */ #ifdef SYS_BEOS @@ -36,16 +60,21 @@ typedef void * module_handle_t; #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_IDCT 1 << 5 /* IDCT transformation */ -#define MODULE_CAPABILITY_AOUT 1 << 6 /* Audio output */ -#define MODULE_CAPABILITY_VOUT 1 << 7 /* Video output */ -#define MODULE_CAPABILITY_YUV 1 << 8 /* YUV colorspace conversion */ -#define MODULE_CAPABILITY_AFX 1 << 9 /* Audio effects */ -#define MODULE_CAPABILITY_VFX 1 << 10 /* Video effects */ +#define MODULE_CAPABILITY_ACCESS 1 << 1 /* Input */ +#define MODULE_CAPABILITY_INPUT 1 << 2 /* Input */ +#define MODULE_CAPABILITY_DECAPS 1 << 3 /* Decaps */ +#define MODULE_CAPABILITY_ADEC 1 << 4 /* Audio decoder */ +#define MODULE_CAPABILITY_VDEC 1 << 5 /* Video decoder */ +#define MODULE_CAPABILITY_MOTION 1 << 6 /* Video decoder */ +#define MODULE_CAPABILITY_IDCT 1 << 7 /* IDCT transformation */ +#define MODULE_CAPABILITY_AOUT 1 << 8 /* Audio output */ +#define MODULE_CAPABILITY_VOUT 1 << 9 /* Video output */ +#define MODULE_CAPABILITY_YUV 1 << 10 /* YUV colorspace conversion */ +#define MODULE_CAPABILITY_AFX 1 << 11 /* Audio effects */ +#define MODULE_CAPABILITY_VFX 1 << 12 /* Video effects */ + +/* FIXME: kludge */ +struct input_area_s; /* FIXME: not yet used */ typedef struct probedata_s @@ -63,28 +92,98 @@ typedef struct function_list_s union { + /* Interface plugin */ + struct + { + int ( * pf_open ) ( struct intf_thread_s * ); + void ( * pf_close )( struct intf_thread_s * ); + void ( * pf_run ) ( struct intf_thread_s * ); + } intf; + + /* Input plugin */ + struct + { + void ( * pf_init ) ( struct input_thread_s * ); + void ( * pf_open ) ( struct input_thread_s * ); + void ( * pf_close )( struct input_thread_s * ); + void ( * pf_end ) ( struct input_thread_s * ); + + int ( * pf_read ) ( struct input_thread_s *, + struct data_packet_s * + pp_packets[] ); + 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 * ); + + + int ( * pf_set_area ) ( struct input_thread_s *, + struct input_area_s * ); + int ( * pf_rewind ) ( struct input_thread_s * ); + void ( * pf_seek ) ( struct input_thread_s *, off_t ); + } input; + + /* Audio output plugin */ struct { - 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 ); + int ( * pf_open ) ( struct aout_thread_s * ); + int ( * pf_setformat ) ( struct aout_thread_s * ); + long ( * pf_getbufinfo ) ( struct aout_thread_s *, long ); + void ( * pf_play ) ( struct aout_thread_s *, byte_t *, int ); + void ( * pf_close ) ( struct aout_thread_s * ); } aout; + /* Video output plugin */ 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 ); + int ( * pf_create ) ( struct vout_thread_s * ); + int ( * pf_init ) ( struct vout_thread_s * ); + void ( * pf_end ) ( struct vout_thread_s * ); + void ( * pf_destroy ) ( struct vout_thread_s * ); + int ( * pf_manage ) ( struct vout_thread_s * ); + void ( * pf_display ) ( struct vout_thread_s * ); + void ( * pf_setpalette ) ( struct vout_thread_s *, u16 *red, + u16 *green, u16 *blue, u16 *transp ); + } vout; + + /* Motion compensation plugin */ + 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; + + /* IDCT plugin */ + struct + { + void ( * pf_init ) ( struct vdec_thread_s * ); + void ( * pf_sparse_idct ) ( struct vdec_thread_s *, + dctelem_t *, int ); + void ( * pf_idct ) ( struct vdec_thread_s *, + dctelem_t *, int ); + void ( * pf_norm_scan ) ( u8 ppi_scan[2][64] ); } idct; + /* YUV transformation plugin */ + struct + { + int ( * pf_init ) ( struct vout_thread_s * ); + int ( * pf_reset ) ( struct vout_thread_s * ); + void ( * pf_end ) ( struct vout_thread_s * ); + } yuv; + } functions; } function_list_t; @@ -93,10 +192,12 @@ 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 adec; function_list_t vdec; + function_list_t motion; function_list_t idct; function_list_t aout; function_list_t vout; @@ -142,22 +243,27 @@ typedef struct module_config_s * Bank and module description structures *****************************************************************************/ -/* The module bank structure */ -typedef struct module_bank_s -{ - struct module_s * first; /* First module of the bank */ - - vlc_mutex_t lock; /* Global lock -- you can't imagine how awful it - is to design thread-safe linked lists. */ -} module_bank_t; - /* The module description structure */ typedef struct module_s { boolean_t b_builtin; /* Set to true if the module is built in */ - module_handle_t handle; /* Unique handle to refer to the module */ - char * psz_filename; /* Module filename */ + union + { + struct + { + module_handle_t handle; /* Unique handle */ + char * psz_filename; /* Module filename */ + + } plugin; + + struct + { + int ( *pf_deactivate ) ( struct module_s * ); + + } builtin; + + } is; char * psz_name; /* Module _unique_ name */ char * psz_longname; /* Module descriptive name */ @@ -179,14 +285,10 @@ typedef struct module_s /***************************************************************************** * Exported functions. *****************************************************************************/ -module_bank_t * module_CreateBank ( void ); -void module_InitBank ( module_bank_t * p_bank ); -void module_DestroyBank ( module_bank_t * p_bank ); -void module_ResetBank ( module_bank_t * p_bank ); -void module_ManageBank ( module_bank_t * p_bank ); - -module_t * module_Need ( module_bank_t *p_bank, - int i_capabilities, void *p_data ); -void module_Unneed ( module_bank_t * p_bank, - module_t * p_module ); +void module_InitBank ( void ); +void module_EndBank ( void ); +void module_ResetBank ( void ); +void module_ManageBank ( void ); +module_t * module_Need ( int i_capabilities, void *p_data ); +void module_Unneed ( module_t * p_module );