pluginregistry.h

00001 /*****************************************************************
00002  * gmerlin - a general purpose multimedia framework and applications
00003  *
00004  * Copyright (c) 2001 - 2010 Members of the Gmerlin project
00005  * gmerlin-general@lists.sourceforge.net
00006  * http://gmerlin.sourceforge.net
00007  *
00008  * This program is free software: you can redistribute it and/or modify
00009  * it under the terms of the GNU General Public License as published by
00010  * the Free Software Foundation, either version 2 of the License, or
00011  * (at your option) any later version.
00012  *
00013  * This program is distributed in the hope that it will be useful,
00014  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  * GNU General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU General Public License
00019  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
00020  * *****************************************************************/
00021 
00022 #ifndef __BG_PLUGINREGISTRY_H_
00023 #define __BG_PLUGINREGISTRY_H_
00024 
00025 /* Plugin registry */
00026 #include <pthread.h>
00027 
00028 #include <gmerlin/plugin.h>
00029 #include <gmerlin/cfg_registry.h>
00030 
00049 typedef enum
00050   {
00051     BG_PLUGIN_API_GMERLIN = 0, 
00052     BG_PLUGIN_API_LADSPA,      
00053     BG_PLUGIN_API_LV,          
00054     BG_PLUGIN_API_FREI0R,      
00055   } bg_plugin_api_t;
00056 
00061 typedef enum
00062   {
00063     BG_STREAM_AUDIO             = (1<<0),
00064     BG_STREAM_SUBTITLE_TEXT     = (1<<1),
00065     BG_STREAM_SUBTITLE_OVERLAY  = (1<<2),
00066     BG_STREAM_VIDEO             = (1<<3),
00067   } bg_stream_type_t;
00068 
00073 typedef struct bg_plugin_info_s  bg_plugin_info_t;
00074 
00079 struct bg_plugin_info_s
00080   {
00081   char * gettext_domain; 
00082   char * gettext_directory; 
00083   
00084   char * name;            
00085   char * long_name;       
00086   char * mimetypes;       
00087   char * extensions;      
00088   char * protocols;       
00089 
00090   char * description;     
00091 
00092   char * module_filename; 
00093   long   module_time;     
00094 
00095   bg_plugin_api_t api;    
00096   int index;              
00097   
00098   bg_plugin_type_t type; 
00099   int flags;             
00100   int priority;          
00101   
00102   bg_device_info_t * devices; 
00103   
00104   bg_plugin_info_t * next; 
00105 
00106   bg_parameter_info_t * parameters; 
00107   
00108   int max_audio_streams; 
00109   int max_video_streams; 
00110   int max_subtitle_text_streams;
00111   int max_subtitle_overlay_streams;
00112 
00113   bg_parameter_info_t * audio_parameters; 
00114   bg_parameter_info_t * video_parameters; 
00115 
00116   bg_parameter_info_t * subtitle_text_parameters; 
00117   bg_parameter_info_t * subtitle_overlay_parameters; 
00118   
00119   char * cmp_name; 
00120   
00121   };
00122 
00129 typedef struct
00130   {
00131   char ** blacklist; 
00132   int dont_save;            
00133   } bg_plugin_registry_options_t;
00134 
00141 typedef struct bg_plugin_registry_s bg_plugin_registry_t;
00142 
00147 typedef struct bg_plugin_handle_s bg_plugin_handle_t;
00148 
00157 struct bg_plugin_handle_s
00158   {
00159   /* Private members, should not be accessed! */
00160     
00161   void * dll_handle; 
00162   pthread_mutex_t mutex; 
00163   int refcount;          
00164   bg_plugin_registry_t * plugin_reg; 
00165   
00166   /* These are for use by applications */
00167   
00168   const bg_plugin_common_t * plugin; 
00169   bg_plugin_common_t * plugin_nc; 
00170   const bg_plugin_info_t * info; 
00171   void * priv; 
00172 
00173   char * location; 
00174   bg_edl_t * edl; 
00175   };
00176 
00177 /*
00178  *  pluginregistry.c
00179  */
00180 
00189 bg_plugin_registry_t *
00190 bg_plugin_registry_create(bg_cfg_section_t * section);
00191 
00201 bg_plugin_registry_t *
00202 bg_plugin_registry_create_with_options(bg_cfg_section_t * section,
00203                                        const bg_plugin_registry_options_t * opt);
00204 
00205 
00206 
00218 void bg_plugin_registry_scan_devices(bg_plugin_registry_t * plugin_reg,
00219                                      uint32_t type_mask, uint32_t flag_mask);
00220 
00221 
00227 void bg_plugin_registry_destroy(bg_plugin_registry_t * reg);
00228 
00237 int bg_plugin_registry_get_num_plugins(bg_plugin_registry_t * reg,
00238                                        uint32_t type_mask, uint32_t flag_mask);
00251 const bg_plugin_info_t *
00252 bg_plugin_find_by_index(bg_plugin_registry_t * reg, int index,
00253                         uint32_t type_mask, uint32_t flag_mask);
00254 
00262 const bg_plugin_info_t *
00263 bg_plugin_find_by_name(bg_plugin_registry_t * reg, const char * name);
00264 
00275 const bg_plugin_info_t *
00276 bg_plugin_find_by_filename(bg_plugin_registry_t * reg,
00277                            const char * filename, int type_mask);
00278 
00279 
00286 const bg_plugin_info_t *
00287 bg_plugin_find_by_protocol(bg_plugin_registry_t * reg,
00288                            const char * protocol);
00289 
00290 
00291 /* Another method: Return long names as strings (NULL terminated) */
00292 
00307 char ** bg_plugin_registry_get_plugins(bg_plugin_registry_t*reg,
00308                                        uint32_t type_mask,
00309                                        uint32_t flag_mask);
00310 
00315 void bg_plugin_registry_free_plugins(char ** plugins);
00316 
00317 
00318 /*  Finally a version for finding/loading plugins */
00319 
00320 /*
00321  *  info can be NULL
00322  *  If ret is non NULL before the call, the plugin will be unrefed
00323  *
00324  *  Return values are 0 for error, 1 on success
00325  */
00326 
00342 int bg_input_plugin_load(bg_plugin_registry_t * reg,
00343                          const char * location,
00344                          const bg_plugin_info_t * info,
00345                          bg_plugin_handle_t ** ret,
00346                          bg_input_callbacks_t * callbacks, int prefer_edl);
00347 
00362 int bg_input_plugin_load_edl(bg_plugin_registry_t * reg,
00363                              const bg_edl_t * edl,
00364                              const bg_plugin_info_t * info,
00365                              bg_plugin_handle_t ** ret,
00366                              bg_input_callbacks_t * callbacks);
00367 
00368 /* Set the supported extensions and mimetypes for a plugin */
00369 
00379 void bg_plugin_registry_set_extensions(bg_plugin_registry_t * reg,
00380                                        const char * plugin_name,
00381                                        const char * extensions);
00382 
00392 void bg_plugin_registry_set_protocols(bg_plugin_registry_t * reg,
00393                                       const char * plugin_name,
00394                                       const char * protocols);
00395 
00405 void bg_plugin_registry_set_priority(bg_plugin_registry_t * reg,
00406                                      const char * plugin_name,
00407                                      int priority);
00408 
00409 
00416 bg_cfg_section_t *
00417 bg_plugin_registry_get_section(bg_plugin_registry_t * reg,
00418                                const char * plugin_name);
00419 
00429 void bg_plugin_registry_set_parameter_info(bg_plugin_registry_t * reg,
00430                                            uint32_t type_mask,
00431                                            uint32_t flag_mask,
00432                                            bg_parameter_info_t * ret);
00433 
00443 void bg_plugin_registry_set_parameter_info_input(bg_plugin_registry_t * reg,
00444                                                  uint32_t type_mask,
00445                                                  uint32_t flag_mask,
00446                                                  bg_parameter_info_t * ret);
00447 
00448 
00457 void bg_plugin_registry_set_parameter_input(void * data, const char * name,
00458                                             const bg_parameter_value_t * val);
00459 
00460 int bg_plugin_registry_get_parameter_input(void * data, const char * name,
00461                                             bg_parameter_value_t * val);
00462 
00463 
00480 bg_parameter_info_t *
00481 bg_plugin_registry_create_encoder_parameters(bg_plugin_registry_t * reg,
00482                                              uint32_t stream_type_mask,
00483                                              uint32_t flag_mask);
00484 
00494 const char * 
00495 bg_encoder_section_get_plugin(bg_plugin_registry_t * plugin_reg,
00496                               bg_cfg_section_t * s,
00497                               bg_stream_type_t stream_type,
00498                               int stream_mask);
00499 
00511 void
00512 bg_encoder_section_get_plugin_config(bg_plugin_registry_t * plugin_reg,
00513                                      bg_cfg_section_t * s,
00514                                      bg_stream_type_t stream_type,
00515                                      int stream_mask,
00516                                      bg_cfg_section_t ** section_ret,
00517                                      const bg_parameter_info_t ** params_ret);
00518 
00529 void
00530 bg_encoder_section_get_stream_config(bg_plugin_registry_t * plugin_reg,
00531                                      bg_cfg_section_t * s,
00532                                      bg_stream_type_t stream_type,
00533                                      int stream_mask,
00534                                      bg_cfg_section_t ** section_ret,
00535                                      const bg_parameter_info_t ** params_ret);
00536 
00537 
00546 bg_cfg_section_t *
00547 bg_encoder_section_get_from_registry(bg_plugin_registry_t * plugin_reg,
00548                                      const bg_parameter_info_t * parameters,
00549                                      uint32_t type_mask,
00550                                      uint32_t flag_mask);
00551 
00561 void
00562 bg_encoder_section_store_in_registry(bg_plugin_registry_t * plugin_reg,
00563                                      bg_cfg_section_t * s,
00564                                      const bg_parameter_info_t * parameters,
00565                                      uint32_t type_mask,
00566                                      uint32_t flag_mask);
00567 
00568 
00579 void bg_plugin_registry_set_default(bg_plugin_registry_t * reg,
00580                                     bg_plugin_type_t type, uint32_t flag_mask,
00581                                     const char * plugin_name);
00582 
00591 const bg_plugin_info_t * bg_plugin_registry_get_default(bg_plugin_registry_t * reg,
00592                                                         bg_plugin_type_t type, uint32_t flag_mask);
00593 
00594 
00617 void bg_plugin_registry_set_encode_audio_to_video(bg_plugin_registry_t * reg,
00618                                                   int audio_to_video);
00619 
00626 int bg_plugin_registry_get_encode_audio_to_video(bg_plugin_registry_t * reg);
00627 
00634 void bg_plugin_registry_set_encode_subtitle_text_to_video(bg_plugin_registry_t * reg,
00635                                                           int subtitle_text_to_video);
00636 
00643 int bg_plugin_registry_get_encode_subtitle_text_to_video(bg_plugin_registry_t * reg);
00644 
00651 void bg_plugin_registry_set_encode_subtitle_overlay_to_video(bg_plugin_registry_t * reg,
00652                                                              int subtitle_overlay_to_video);
00653 
00659 int bg_plugin_registry_get_encode_subtitle_overlay_to_video(bg_plugin_registry_t * reg);
00660 
00667 void bg_plugin_registry_set_encode_pp(bg_plugin_registry_t * reg,
00668                                       int encode_pp);
00669 
00675 int bg_plugin_registry_get_encode_pp(bg_plugin_registry_t * reg);
00676 
00683 void bg_plugin_registry_set_visualize(bg_plugin_registry_t * reg,
00684                                        int enable);
00685 
00692 int bg_plugin_registry_get_visualize(bg_plugin_registry_t * reg);
00693 
00694 
00703 void bg_plugin_registry_add_device(bg_plugin_registry_t * reg,
00704                                    const char * plugin_name,
00705                                    const char * device,
00706                                    const char * name);
00707 
00720 void bg_plugin_registry_set_device_name(bg_plugin_registry_t * reg,
00721                                         const char * plugin_name,
00722                                         const char * device,
00723                                         const char * name);
00724 
00725 /* Rescan the available devices */
00726 
00736 void bg_plugin_registry_find_devices(bg_plugin_registry_t * reg,
00737                                      const char * plugin_name);
00738 
00750 void bg_plugin_registry_remove_device(bg_plugin_registry_t * reg,
00751                                       const char * plugin_name,
00752                                       const char * device,
00753                                       const char * name);
00754 
00766 gavl_video_frame_t * bg_plugin_registry_load_image(bg_plugin_registry_t * reg,
00767                                                    const char * filename,
00768                                                    gavl_video_format_t * format,
00769                                                    bg_metadata_t * m);
00770 
00771 /* Same as above for writing. Does implicit pixelformat conversion */
00772 
00781 void
00782 bg_plugin_registry_save_image(bg_plugin_registry_t * reg,
00783                               const char * filename,
00784                               gavl_video_frame_t * frame,
00785                               const gavl_video_format_t * format, const bg_metadata_t * m);
00786 
00787 
00799 int bg_get_thumbnail(const char * gml,
00800                      bg_plugin_registry_t * plugin_reg,
00801                      char ** thumbnail_filename_ret,
00802                      gavl_video_frame_t ** frame_ret,
00803                      gavl_video_format_t * format_ret);
00804 
00805 
00806 /*
00807  *  These are the actual loading/unloading functions
00808  *  (loader.c)
00809  */
00810 
00811 /* Load a plugin and return handle with reference count of 1 */
00812 
00821 bg_plugin_handle_t * bg_plugin_load(bg_plugin_registry_t * reg,
00822                                     const bg_plugin_info_t * info);
00823 
00834 bg_plugin_handle_t * bg_ov_plugin_load(bg_plugin_registry_t * reg,
00835                                        const bg_plugin_info_t * info,
00836                                        const char * window_id);
00837 
00842 void bg_plugin_lock(bg_plugin_handle_t * h);
00843 
00848 void bg_plugin_unlock(bg_plugin_handle_t * h);
00849 
00850 /* Reference counting for input plugins */
00851 
00856 void bg_plugin_ref(bg_plugin_handle_t * h);
00857 
00858 /* Plugin will be unloaded when refcount is zero */
00859 
00867 void bg_plugin_unref(bg_plugin_handle_t * h);
00868 
00880 void bg_plugin_unref_nolock(bg_plugin_handle_t * h);
00881 
00893 bg_plugin_info_t * bg_plugin_info_create(const bg_plugin_common_t * plugin,
00894                                          void * plugin_priv,
00895                                          const char * module_filename);
00896 
00905 bg_plugin_handle_t * bg_plugin_handle_create();
00906 
00907 
00908 #endif // __BG_PLUGINREGISTRY_H_
Generated on Sun Feb 28 07:34:31 2010 for gmerlin by  doxygen 1.6.3