X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=include%2Fmodules.h;h=4e60c05c426d807675ced0c5ebd54ee8cdb8d085;hb=440f9992ee947ea5fd0debbf35fdd1011c6404b3;hp=b3b3f44848e0c9be191506cd83847f4895429c81;hpb=0935df9e58f1671cf54a6774e3ff54bcf58940ab;p=vlc diff --git a/include/modules.h b/include/modules.h index b3b3f44848..4e60c05c42 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.25 2001/05/30 17:03:11 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 + +/***************************************************************************** + * module_bank_t, p_module_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. */ +} module_bank_t; + +extern module_bank_t *p_module_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 @@ -41,13 +65,19 @@ typedef void * module_handle_t; #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_MOTION 1 << 6 /* Motion compensation */ #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 */ +#define MODULE_CAPABILITY_IMDCT 1 << 11 /* IMDCT transformation */ +#define MODULE_CAPABILITY_DOWNMIX 1 << 12 /* AC3 downmix */ + +/* FIXME: kludge */ +struct input_area_s; +struct imdct_s; +struct complex_s; +struct dm_par_s; /* FIXME: not yet used */ typedef struct probedata_s @@ -65,15 +95,23 @@ 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 { - int ( * pf_init ) ( struct input_thread_s * ); - void ( * pf_open ) ( struct input_thread_s * ); - void ( * pf_close ) ( struct input_thread_s * ); + 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 * ); - void ( * pf_read ) ( struct input_thread_s *, + int ( * pf_read ) ( struct input_thread_s *, struct data_packet_s * pp_packets[] ); void ( * pf_demux )( struct input_thread_s *, @@ -81,11 +119,14 @@ typedef struct function_list_s struct data_packet_s * ( * pf_new_packet ) ( void *, size_t ); struct pes_packet_s * ( * pf_new_pes ) ( void * ); - void ( * pf_delete_packet ) ( struct data_packet_s * ); - void ( * pf_delete_pes ) ( struct pes_packet_s * ); + void ( * pf_delete_packet ) ( void *, struct data_packet_s * ); + void ( * pf_delete_pes ) ( void *, struct pes_packet_s * ); + - int ( * pf_rewind ) ( struct input_thread_s * ); - int ( * pf_seek ) ( struct input_thread_s *, off_t ); + 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 */ @@ -98,6 +139,19 @@ typedef struct function_list_s void ( * pf_close ) ( struct aout_thread_s * ); } aout; + /* Video output plugin */ + struct + { + 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 { @@ -108,21 +162,27 @@ typedef struct function_list_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 ) + 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_idct_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] ); + + void ( * pf_decode_init ) ( struct vdec_thread_s * ); + void ( * pf_decode_mb_c ) ( struct vdec_thread_s *, + struct macroblock_s * ); + void ( * pf_decode_mb_bw ) ( struct vdec_thread_s *, + struct macroblock_s * ); } idct; /* YUV transformation plugin */ @@ -133,6 +193,35 @@ typedef struct function_list_s void ( * pf_end ) ( struct vout_thread_s * ); } yuv; + /* IMDCT plugin */ + struct + { + void ( * pf_imdct_init ) ( struct imdct_s * ); + void ( * pf_imdct_256 ) ( struct imdct_s *, + float data[], float delay[] ); + void ( * pf_imdct_256_nol )( struct imdct_s *, + float data[], float delay[] ); + void ( * pf_imdct_512 ) ( struct imdct_s *, + float data[], float delay[] ); + void ( * pf_imdct_512_nol )( struct imdct_s *, + float data[], float delay[] ); +// void ( * pf_fft_64p ) ( struct complex_s * ); + + } imdct; + + /* AC3 downmix plugin */ + struct + { + void ( * pf_downmix_3f_2r_to_2ch ) ( float *, struct dm_par_s * ); + void ( * pf_downmix_3f_1r_to_2ch ) ( float *, struct dm_par_s * ); + void ( * pf_downmix_2f_2r_to_2ch ) ( float *, struct dm_par_s * ); + void ( * pf_downmix_2f_1r_to_2ch ) ( float *, struct dm_par_s * ); + void ( * pf_downmix_3f_0r_to_2ch ) ( float *, struct dm_par_s * ); + void ( * pf_stream_sample_2ch_to_s16 ) ( s16 *, float *, float * ); + void ( * pf_stream_sample_1ch_to_s16 ) ( s16 *, float * ); + + } downmix; + } functions; } function_list_t; @@ -151,8 +240,8 @@ typedef struct module_functions_s function_list_t aout; function_list_t vout; function_list_t yuv; - function_list_t afx; - function_list_t vfx; + function_list_t imdct; + function_list_t downmix; } module_functions_t; @@ -192,22 +281,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 */ @@ -219,24 +313,21 @@ typedef struct module_s struct module_s * next; /* Next module */ struct module_s * prev; /* Previous module */ - module_config_t * p_config; /* Module configuration structure table */ + module_config_t *p_config; /* Module configuration structure */ + struct module_symbols_s *p_symbols; - u32 i_capabilities; /* Capability list */ - p_module_functions_t p_functions; /* Capability functions */ + u32 i_capabilities; /* Capability list */ + p_module_functions_t p_functions; /* Capability functions */ } module_t; /***************************************************************************** * 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 );