Changeset 2e0409a12910ea5ee7a314501b6c11fe9689fe79
- Timestamp:
- 20/05/07 12:03:51
(2 years ago)
- Author:
- Rémi Denis-Courmont <rem@videolan.org>
- git-committer:
- Rémi Denis-Courmont <rem@videolan.org> 1179655431 +0000
- git-parent:
[c262bd272894498e7a14160437c58aa0d753a587]
- git-author:
- Rémi Denis-Courmont <rem@videolan.org> 1179655431 +0000
- Message:
Hide libvlc_global_data_t from plugins
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r79f9e3f |
r2e0409a |
|
| 26 | 26 | #error You are not libvlc or one of its plugins. You cannot include this file |
|---|
| 27 | 27 | #endif |
|---|
| 28 | | |
|---|
| 29 | | /***************************************************************************** |
|---|
| 30 | | * libvlc_global_data_t (global variable) |
|---|
| 31 | | ***************************************************************************** |
|---|
| 32 | | * This structure has an unique instance, statically allocated in main and |
|---|
| 33 | | * never accessed from the outside. It stores once-initialized data such as |
|---|
| 34 | | * the CPU capabilities or the global lock. |
|---|
| 35 | | *****************************************************************************/ |
|---|
| 36 | | struct libvlc_global_data_t |
|---|
| 37 | | { |
|---|
| 38 | | VLC_COMMON_MEMBERS |
|---|
| 39 | | |
|---|
| 40 | | vlc_bool_t b_ready; ///< Initialization boolean |
|---|
| 41 | | uint32_t i_cpu; ///< CPU extensions |
|---|
| 42 | | |
|---|
| 43 | | /* Object structure data */ |
|---|
| 44 | | int i_counter; ///< object counter |
|---|
| 45 | | int i_objects; ///< Attached objects count |
|---|
| 46 | | vlc_object_t ** pp_objects; ///< Array of all objects |
|---|
| 47 | | |
|---|
| 48 | | module_bank_t * p_module_bank; ///< The module bank |
|---|
| 49 | | intf_thread_t *p_probe; ///< Devices prober |
|---|
| 50 | | |
|---|
| 51 | | /* Arch-specific variables */ |
|---|
| 52 | | #if !defined( WIN32 ) |
|---|
| 53 | | vlc_bool_t b_daemon; |
|---|
| 54 | | #endif |
|---|
| 55 | | #if defined( SYS_BEOS ) |
|---|
| 56 | | vlc_object_t * p_appthread; |
|---|
| 57 | | char * psz_vlcpath; |
|---|
| 58 | | #elif defined( __APPLE__ ) |
|---|
| 59 | | char * psz_vlcpath; |
|---|
| 60 | | vlc_iconv_t iconv_macosx; /* for HFS+ file names */ |
|---|
| 61 | | vlc_mutex_t iconv_lock; |
|---|
| 62 | | #elif defined( WIN32 ) && !defined( UNDER_CE ) |
|---|
| 63 | | SIGNALOBJECTANDWAIT SignalObjectAndWait; |
|---|
| 64 | | vlc_bool_t b_fast_mutex; |
|---|
| 65 | | int i_win9x_cv; |
|---|
| 66 | | char * psz_vlcpath; |
|---|
| 67 | | #elif defined( UNDER_CE ) |
|---|
| 68 | | char * psz_vlcpath; |
|---|
| 69 | | #endif |
|---|
| 70 | | }; |
|---|
| 71 | 28 | |
|---|
| 72 | 29 | /***************************************************************************** |
|---|
| rc262bd2 |
r2e0409a |
|
| 567 | 567 | \ |
|---|
| 568 | 568 | /* Stuff related to the libvlc structure */ \ |
|---|
| 569 | | libvlc_global_data_t *p_libvlc_global; /**< root of all evil */ \ |
|---|
| | 569 | vlc_object_t *p_libvlc_global; /**< root of all evil */ \ |
|---|
| 570 | 570 | libvlc_int_t *p_libvlc; /**< (root of all evil) - 1 */ \ |
|---|
| 571 | 571 | \ |
|---|
| r7b0773e |
r2e0409a |
|
| 235 | 235 | #endif |
|---|
| 236 | 236 | |
|---|
| 237 | | var_Create( (vlc_object_t *)p_module->p_libvlc_global, "avcodec", |
|---|
| 238 | | VLC_VAR_MUTEX ); |
|---|
| | 237 | var_Create( p_module->p_libvlc_global, "avcodec", VLC_VAR_MUTEX ); |
|---|
| 239 | 238 | |
|---|
| 240 | 239 | vlc_module_end(); |
|---|
| … | … | |
| 340 | 339 | vlc_value_t lockval; |
|---|
| 341 | 340 | |
|---|
| 342 | | var_Get( (vlc_object_t *)p_dec->p_libvlc_global, "avcodec", &lockval ); |
|---|
| | 341 | var_Get( p_dec->p_libvlc_global, "avcodec", &lockval ); |
|---|
| 343 | 342 | |
|---|
| 344 | 343 | switch( p_sys->i_cat ) |
|---|
| … | … | |
| 429 | 428 | vlc_value_t lockval; |
|---|
| 430 | 429 | |
|---|
| 431 | | var_Get( (vlc_object_t *)p_object->p_libvlc_global, "avcodec", &lockval ); |
|---|
| | 430 | var_Get( p_object->p_libvlc_global, "avcodec", &lockval ); |
|---|
| 432 | 431 | vlc_mutex_lock( lockval.p_address ); |
|---|
| 433 | 432 | |
|---|
| rd3fe7f2 |
r2e0409a |
|
| 126 | 126 | char *psz_src; |
|---|
| 127 | 127 | |
|---|
| 128 | | var_Create(p_intf->p_libvlc_global, "http-host", VLC_VAR_STRING ); |
|---|
| 129 | | psz_address=var_GetString(p_intf->p_libvlc_global, "http-host"); |
|---|
| | 128 | var_Create(p_intf->p_libvlc, "http-host", VLC_VAR_STRING ); |
|---|
| | 129 | psz_address = var_GetString(p_intf->p_libvlc, "http-host"); |
|---|
| 130 | 130 | if( !psz_address || !*psz_address ) |
|---|
| 131 | 131 | { |
|---|
| … | … | |
| 282 | 282 | /* Ugly hack to run several HTTP servers on different ports */ |
|---|
| 283 | 283 | snprintf( psz_tmp, sizeof (psz_tmp), "%s:%d", psz_address, i_port + 1 ); |
|---|
| 284 | | var_SetString( p_intf->p_libvlc_global, "http-host", psz_tmp ); |
|---|
| | 284 | var_SetString( p_intf->p_libvlc, "http-host", psz_tmp ); |
|---|
| 285 | 285 | } |
|---|
| 286 | 286 | |
|---|
| rd3fe7f2 |
r2e0409a |
|
| 128 | 128 | static bridge_t *__GetBridge( vlc_object_t *p_object ) |
|---|
| 129 | 129 | { |
|---|
| 130 | | libvlc_global_data_t *p_libvlc_global = p_object->p_libvlc_global; |
|---|
| 131 | 130 | bridge_t *p_bridge; |
|---|
| 132 | 131 | vlc_value_t val; |
|---|
| 133 | 132 | |
|---|
| 134 | | if( var_Get( p_libvlc_global, "bridge-struct", &val ) != VLC_SUCCESS ) |
|---|
| | 133 | if( var_Get( p_object->p_libvlc_global, "bridge-struct", &val ) ) |
|---|
| 135 | 134 | { |
|---|
| 136 | 135 | p_bridge = NULL; |
|---|
| … | … | |
| 220 | 219 | if ( p_bridge == NULL ) |
|---|
| 221 | 220 | { |
|---|
| 222 | | libvlc_global_data_t *p_libvlc_global = p_stream->p_libvlc_global; |
|---|
| | 221 | vlc_object_t *p_libvlc_global = p_stream->p_libvlc_global; |
|---|
| 223 | 222 | vlc_value_t val; |
|---|
| 224 | 223 | |
|---|
| … | … | |
| 520 | 519 | if( b_no_es ) |
|---|
| 521 | 520 | { |
|---|
| 522 | | libvlc_global_data_t *p_libvlc_global = p_stream->p_libvlc_global; |
|---|
| | 521 | vlc_object_t *p_libvlc_global = p_stream->p_libvlc_global; |
|---|
| 523 | 522 | for ( i = 0; i < p_bridge->i_es_num; i++ ) |
|---|
| 524 | 523 | free( p_bridge->pp_es[i] ); |
|---|
| rce0e4fb |
r2e0409a |
|
| 178 | 178 | sout_stream_t *p_stream = (sout_stream_t *)p_this; |
|---|
| 179 | 179 | sout_stream_sys_t *p_sys; |
|---|
| 180 | | libvlc_global_data_t *p_libvlc_global = p_this->p_libvlc_global; |
|---|
| | 180 | vlc_object_t *p_libvlc_global = p_this->p_libvlc_global; |
|---|
| 181 | 181 | vlc_value_t val; |
|---|
| 182 | 182 | |
|---|
| … | … | |
| 318 | 318 | if ( p_bridge == NULL ) |
|---|
| 319 | 319 | { |
|---|
| 320 | | libvlc_global_data_t *p_libvlc_global = p_stream->p_libvlc_global; |
|---|
| | 320 | vlc_object_t *p_libvlc_global = p_stream->p_libvlc_global; |
|---|
| 321 | 321 | vlc_value_t val; |
|---|
| 322 | 322 | |
|---|
| … | … | |
| 499 | 499 | if ( b_last_es ) |
|---|
| 500 | 500 | { |
|---|
| 501 | | libvlc_global_data_t *p_libvlc_global = p_stream->p_libvlc_global; |
|---|
| | 501 | vlc_object_t *p_libvlc_global = p_stream->p_libvlc_global; |
|---|
| 502 | 502 | for ( i = 0; i < p_bridge->i_es_num; i++ ) |
|---|
| 503 | 503 | free( p_bridge->pp_es[i] ); |
|---|
| r124454c |
r2e0409a |
|
| 287 | 287 | filter_t *p_filter = (filter_t *)p_this; |
|---|
| 288 | 288 | filter_sys_t *p_sys; |
|---|
| 289 | | libvlc_global_data_t *p_libvlc_global = p_filter->p_libvlc_global; |
|---|
| | 289 | vlc_object_t *p_libvlc_global = p_filter->p_libvlc_global; |
|---|
| 290 | 290 | char *psz_order; |
|---|
| 291 | 291 | char *psz_offsets; |
|---|
| rf485214 |
r2e0409a |
|
| 41 | 41 | static bridge_t *__GetBridge( vlc_object_t *p_object ) |
|---|
| 42 | 42 | { |
|---|
| 43 | | libvlc_global_data_t *p_libvlc_global = p_object->p_libvlc_global; |
|---|
| | 43 | vlc_object_t *p_libvlc_global = p_object->p_libvlc_global; |
|---|
| 44 | 44 | bridge_t *p_bridge; |
|---|
| 45 | 45 | vlc_value_t val; |
|---|
| rb539091 |
r2e0409a |
|
| 370 | 370 | b_exit = VLC_TRUE; |
|---|
| 371 | 371 | } |
|---|
| 372 | | p_libvlc->p_libvlc_global->b_daemon = VLC_TRUE; |
|---|
| | 372 | libvlc_global.b_daemon = VLC_TRUE; |
|---|
| 373 | 373 | |
|---|
| 374 | 374 | /* lets check if we need to write the pidfile */ |
|---|
| … | … | |
| 417 | 417 | close( STDERR_FILENO ); |
|---|
| 418 | 418 | |
|---|
| 419 | | p_libvlc->p_libvlc_global->b_daemon = VLC_TRUE; |
|---|
| | 419 | libvlc_global.b_daemon = VLC_TRUE; |
|---|
| 420 | 420 | } |
|---|
| 421 | 421 | #endif |
|---|
| … | … | |
| 1040 | 1040 | char* psz_pidfile = NULL; |
|---|
| 1041 | 1041 | |
|---|
| 1042 | | if( p_libvlc->p_libvlc_global->p_module_bank ) |
|---|
| | 1042 | if( libvlc_global.p_module_bank ) |
|---|
| 1043 | 1043 | if( config_GetInt( p_libvlc, "daemon" ) ) |
|---|
| 1044 | 1044 | { |
|---|
| … | … | |
| 1118 | 1118 | |
|---|
| 1119 | 1119 | #ifndef WIN32 |
|---|
| 1120 | | if( p_libvlc->p_libvlc_global->b_daemon && b_block && !psz_module ) |
|---|
| | 1120 | if( libvlc_global.b_daemon && b_block && !psz_module ) |
|---|
| 1121 | 1121 | { |
|---|
| 1122 | 1122 | /* Daemon mode hack. |
|---|
| reae01d1 |
r2e0409a |
|
| 35 | 35 | const char *psz_type); |
|---|
| 36 | 36 | |
|---|
| 37 | | #if 0 |
|---|
| 38 | 37 | /***************************************************************************** |
|---|
| 39 | 38 | * libvlc_global_data_t (global variable) |
|---|
| … | … | |
| 72 | 71 | #endif |
|---|
| 73 | 72 | }; |
|---|
| 74 | | #endif |
|---|
| 75 | 73 | |
|---|
| | 74 | static inline libvlc_global_data_t *vlc_global( vlc_object_t *p_this ) |
|---|
| | 75 | { |
|---|
| | 76 | return (libvlc_global_data_t *)p_this->p_libvlc_global; |
|---|
| | 77 | } |
|---|
| 76 | 78 | |
|---|
| 77 | 79 | extern uint32_t cpu_flags; |
|---|
| r8fd6167 |
r2e0409a |
|
| 140 | 140 | { |
|---|
| 141 | 141 | /* If i_type is global, then p_new is actually p_libvlc_global */ |
|---|
| 142 | | p_new->p_libvlc_global = (libvlc_global_data_t*)p_new; |
|---|
| | 142 | libvlc_global_data_t *p_libvlc_global = (libvlc_global_data_t *)p_new; |
|---|
| | 143 | p_new->p_libvlc_global = p_new; |
|---|
| 143 | 144 | p_new->p_libvlc = NULL; |
|---|
| 144 | 145 | |
|---|
| 145 | | p_new->p_libvlc_global->i_counter = 0; |
|---|
| | 146 | p_libvlc_global->i_counter = 0; |
|---|
| 146 | 147 | p_new->i_object_id = 0; |
|---|
| 147 | 148 | |
|---|
| 148 | | p_new->p_libvlc_global->i_objects = 1; |
|---|
| 149 | | p_new->p_libvlc_global->pp_objects = malloc( sizeof(vlc_object_t *) ); |
|---|
| 150 | | p_new->p_libvlc_global->pp_objects[0] = p_new; |
|---|
| | 149 | p_libvlc_global->i_objects = 1; |
|---|
| | 150 | p_libvlc_global->pp_objects = malloc( sizeof(vlc_object_t *) ); |
|---|
| | 151 | p_libvlc_global->pp_objects[0] = p_new; |
|---|
| 151 | 152 | p_new->b_attached = VLC_TRUE; |
|---|
| 152 | 153 | } |
|---|
| 153 | 154 | else |
|---|
| 154 | 155 | { |
|---|
| 155 | | p_new->p_libvlc_global = p_this->p_libvlc_global; |
|---|
| | 156 | libvlc_global_data_t *p_libvlc_global = vlc_global( p_this ); |
|---|
| | 157 | p_new->p_libvlc_global = VLC_OBJECT (p_libvlc_global); |
|---|
| 156 | 158 | p_new->p_libvlc = ( i_type == VLC_OBJECT_LIBVLC ) ? (libvlc_int_t*)p_new |
|---|
| 157 | 159 | : p_this->p_libvlc; |
|---|
| … | … | |
| 159 | 161 | vlc_mutex_lock( &structure_lock ); |
|---|
| 160 | 162 | |
|---|
| 161 | | p_new->p_libvlc_global->i_counter++; |
|---|
| 162 | | p_new->i_object_id = p_new->p_libvlc_global->i_counter; |
|---|
| | 163 | p_libvlc_global->i_counter++; |
|---|
| | 164 | p_new->i_object_id = p_libvlc_global->i_counter; |
|---|
| 163 | 165 | |
|---|
| 164 | 166 | /* Wooohaa! If *this* fails, we're in serious trouble! Anyway it's |
|---|
| 165 | 167 | * useless to try and recover anything if pp_objects gets smashed. */ |
|---|
| 166 | | TAB_APPEND( p_new->p_libvlc_global->i_objects, |
|---|
| 167 | | p_new->p_libvlc_global->pp_objects, |
|---|
| | 168 | TAB_APPEND( p_libvlc_global->i_objects, p_libvlc_global->pp_objects, |
|---|
| 168 | 169 | p_new ); |
|---|
| 169 | 170 | |
|---|
| … | … | |
| 396 | 397 | if( p_this->i_object_type == VLC_OBJECT_GLOBAL ) |
|---|
| 397 | 398 | { |
|---|
| | 399 | libvlc_global_data_t *p_global = (libvlc_global_data_t *)p_this; |
|---|
| 398 | 400 | /* We are the global object ... no need to lock. */ |
|---|
| 399 | | free( p_this->p_libvlc_global->pp_objects ); |
|---|
| 400 | | p_this->p_libvlc_global->pp_objects = NULL; |
|---|
| 401 | | p_this->p_libvlc_global->i_objects--; |
|---|
| | 401 | free( p_global->pp_objects ); |
|---|
| | 402 | p_global->pp_objects = NULL; |
|---|
| | 403 | p_global->i_objects--; |
|---|
| 402 | 404 | |
|---|
| 403 | 405 | vlc_mutex_destroy( &structure_lock ); |
|---|
| … | … | |
| 405 | 407 | else |
|---|
| 406 | 408 | { |
|---|
| | 409 | libvlc_global_data_t *p_libvlc_global = vlc_global( p_this ); |
|---|
| 407 | 410 | int i_index; |
|---|
| 408 | 411 | |
|---|
| … | … | |
| 411 | 414 | /* Wooohaa! If *this* fails, we're in serious trouble! Anyway it's |
|---|
| 412 | 415 | * useless to try and recover anything if pp_objects gets smashed. */ |
|---|
| 413 | | i_index = FindIndex( p_this, p_this->p_libvlc_global->pp_objects, |
|---|
| 414 | | p_this->p_libvlc_global->i_objects ); |
|---|
| 415 | | REMOVE_ELEM( p_this->p_libvlc_global->pp_objects, |
|---|
| 416 | | p_this->p_libvlc_global->i_objects, i_index ); |
|---|
| | 416 | i_index = FindIndex( p_this, p_libvlc_global->pp_objects, |
|---|
| | 417 | p_libvlc_global->i_objects ); |
|---|
| | 418 | REMOVE_ELEM( p_libvlc_global->pp_objects, |
|---|
| | 419 | p_libvlc_global->i_objects, i_index ); |
|---|
| 417 | 420 | |
|---|
| 418 | 421 | vlc_mutex_unlock( &structure_lock ); |
|---|
| … | … | |
| 466 | 469 | int i_max, i_middle; |
|---|
| 467 | 470 | vlc_object_t **pp_objects; |
|---|
| | 471 | libvlc_global_data_t *p_libvlc_global = vlc_global( p_this ); |
|---|
| 468 | 472 | |
|---|
| 469 | 473 | vlc_mutex_lock( &structure_lock ); |
|---|
| 470 | 474 | |
|---|
| 471 | | pp_objects = p_this->p_libvlc_global->pp_objects; |
|---|
| | 475 | pp_objects = p_libvlc_global->pp_objects; |
|---|
| 472 | 476 | |
|---|
| 473 | 477 | /* Perform our dichotomy */ |
|---|
| 474 | | for( i_max = p_this->p_libvlc_global->i_objects - 1 ; ; ) |
|---|
| | 478 | for( i_max = p_libvlc_global->i_objects - 1 ; ; ) |
|---|
| 475 | 479 | { |
|---|
| 476 | 480 | i_middle = i_max / 2; |
|---|
| … | … | |
| 714 | 718 | vlc_object_t **pp_current, **pp_end; |
|---|
| 715 | 719 | int i_count = 0, i_index = 0; |
|---|
| | 720 | libvlc_global_data_t *p_libvlc_global = vlc_global( p_this ); |
|---|
| 716 | 721 | |
|---|
| 717 | 722 | vlc_mutex_lock( &structure_lock ); |
|---|
| … | … | |
| 721 | 726 | { |
|---|
| 722 | 727 | case FIND_ANYWHERE: |
|---|
| 723 | | pp_current = p_this->p_libvlc_global->pp_objects; |
|---|
| 724 | | pp_end = pp_current + p_this->p_libvlc_global->i_objects; |
|---|
| | 728 | pp_current = p_libvlc_global->pp_objects; |
|---|
| | 729 | pp_end = pp_current + p_libvlc_global->i_objects; |
|---|
| 725 | 730 | |
|---|
| 726 | 731 | for( ; pp_current < pp_end ; pp_current++ ) |
|---|
| … | … | |
| 734 | 739 | |
|---|
| 735 | 740 | p_list = NewList( i_count ); |
|---|
| 736 | | pp_current = p_this->p_libvlc_global->pp_objects; |
|---|
| | 741 | pp_current = p_libvlc_global->pp_objects; |
|---|
| 737 | 742 | |
|---|
| 738 | 743 | for( ; pp_current < pp_end ; pp_current++ ) |
|---|
| … | … | |
| 784 | 789 | vlc_value_t oldval, vlc_value_t newval, void *p_data ) |
|---|
| 785 | 790 | { |
|---|
| | 791 | libvlc_global_data_t *p_libvlc_global = vlc_global( p_this ); |
|---|
| | 792 | |
|---|
| 786 | 793 | (void)oldval; (void)p_data; |
|---|
| 787 | 794 | if( *psz_cmd == 'l' ) |
|---|
| … | … | |
| 791 | 798 | vlc_object_t **pp_current, **pp_end; |
|---|
| 792 | 799 | |
|---|
| 793 | | pp_current = p_this->p_libvlc_global->pp_objects; |
|---|
| 794 | | pp_end = pp_current + p_this->p_libvlc_global->i_objects; |
|---|
| | 800 | pp_current = p_libvlc_global->pp_objects; |
|---|
| | 801 | pp_end = pp_current + p_libvlc_global->i_objects; |
|---|
| 795 | 802 | |
|---|
| 796 | 803 | for( ; pp_current < pp_end ; pp_current++ ) |
|---|
| r85faf5c |
r2e0409a |
|
| 156 | 156 | static void module_LoadMain( vlc_object_t *p_this ); |
|---|
| 157 | 157 | |
|---|
| 158 | | |
|---|
| 159 | 158 | /* Sub-version number |
|---|
| 160 | 159 | * (only used to avoid breakage in dev version when cache structure changes) */ |
|---|
| … | … | |
| 171 | 170 | module_bank_t *p_bank = NULL; |
|---|
| 172 | 171 | vlc_value_t lockval; |
|---|
| 173 | | |
|---|
| 174 | | var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX ); |
|---|
| 175 | | var_Get( p_this->p_libvlc_global, "libvlc", &lockval ); |
|---|
| | 172 | libvlc_global_data_t *p_libvlc_global = vlc_global( p_this ); |
|---|
| | 173 | |
|---|
| | 174 | var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX ); |
|---|
| | 175 | var_Get( p_libvlc_global, "libvlc", &lockval ); |
|---|
| 176 | 176 | vlc_mutex_lock( lockval.p_address ); |
|---|
| 177 | | if( p_this->p_libvlc_global->p_module_bank ) |
|---|
| 178 | | { |
|---|
| 179 | | p_this->p_libvlc_global->p_module_bank->i_usage++; |
|---|
| | 177 | if( p_libvlc_global->p_module_bank ) |
|---|
| | 178 | { |
|---|
| | 179 | p_libvlc_global->p_module_bank->i_usage++; |
|---|
| 180 | 180 | vlc_mutex_unlock( lockval.p_address ); |
|---|
| 181 | | var_Destroy( p_this->p_libvlc_global, "libvlc" ); |
|---|
| | 181 | var_Destroy( p_libvlc_global, "libvlc" ); |
|---|
| 182 | 182 | return; |
|---|
| 183 | 183 | } |
|---|
| 184 | 184 | vlc_mutex_unlock( lockval.p_address ); |
|---|
| 185 | | var_Destroy( p_this->p_libvlc_global, "libvlc" ); |
|---|
| | 185 | var_Destroy( p_libvlc_global, "libvlc" ); |
|---|
| 186 | 186 | |
|---|
| 187 | 187 | p_bank = vlc_object_create( p_this, sizeof(module_bank_t) ); |
|---|
| … | … | |
| 203 | 203 | |
|---|
| 204 | 204 | /* Everything worked, attach the object */ |
|---|
| 205 | | p_this->p_libvlc_global->p_module_bank = p_bank; |
|---|
| 206 | | vlc_object_attach( p_bank, p_this->p_libvlc_global ); |
|---|
| | 205 | p_libvlc_global->p_module_bank = p_bank; |
|---|
| | 206 | vlc_object_attach( p_bank, p_libvlc_global ); |
|---|
| 207 | 207 | |
|---|
| 208 | 208 | module_LoadMain( p_this ); |
|---|
| 209 | 209 | } |
|---|
| 210 | 210 | |
|---|
| 211 | | /***************************************************************************** |
|---|
| 212 | | * module_ResetBank: reset the module bank. |
|---|
| 213 | | ***************************************************************************** |
|---|
| 214 | | * This function resets the module bank by unloading all unused plugin |
|---|
| 215 | | * modules. |
|---|
| 216 | | *****************************************************************************/ |
|---|
| 217 | | void __module_ResetBank( vlc_object_t *p_this ) |
|---|
| 218 | | { |
|---|
| 219 | | msg_Err( p_this, "FIXME: module_ResetBank unimplemented" ); |
|---|
| 220 | | return; |
|---|
| 221 | | } |
|---|
| 222 | 211 | |
|---|
| 223 | 212 | /***************************************************************************** |
|---|
| … | … | |
| 231 | 220 | module_t * p_next = NULL; |
|---|
| 232 | 221 | vlc_value_t lockval; |
|---|
| 233 | | |
|---|
| 234 | | var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX ); |
|---|
| 235 | | var_Get( p_this->p_libvlc_global, "libvlc", &lockval ); |
|---|
| | 222 | libvlc_global_data_t *p_libvlc_global = vlc_global( p_this ); |
|---|
| | 223 | |
|---|
| | 224 | var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX ); |
|---|
| | 225 | var_Get( p_libvlc_global, "libvlc", &lockval ); |
|---|
| 236 | 226 | vlc_mutex_lock( lockval.p_address ); |
|---|
| 237 | | if( !p_this->p_libvlc_global->p_module_bank ) |
|---|
| | 227 | if( !p_libvlc_global->p_module_bank ) |
|---|
| 238 | 228 | { |
|---|
| 239 | 229 | vlc_mutex_unlock( lockval.p_address ); |
|---|
| 240 | | var_Destroy( p_this->p_libvlc_global, "libvlc" ); |
|---|
| 241 | | return; |
|---|
| 242 | | } |
|---|
| 243 | | if( --p_this->p_libvlc_global->p_module_bank->i_usage ) |
|---|
| | 230 | var_Destroy( p_libvlc_global, "libvlc" ); |
|---|
| | 231 | return; |
|---|
| | 232 | } |
|---|
| | 233 | if( --p_libvlc_global->p_module_bank->i_usage ) |
|---|
| 244 | 234 | { |
|---|
| 245 | 235 | vlc_mutex_unlock( lockval.p_address ); |
|---|
| 246 | | var_Destroy( p_this->p_libvlc_global, "libvlc" ); |
|---|
| | 236 | var_Destroy( p_libvlc_global, "libvlc" ); |
|---|
| 247 | 237 | return; |
|---|
| 248 | 238 | } |
|---|
| 249 | 239 | vlc_mutex_unlock( lockval.p_address ); |
|---|
| 250 | | var_Destroy( p_this->p_libvlc_global, "libvlc" ); |
|---|
| | 240 | var_Destroy( p_libvlc_global, "libvlc" ); |
|---|
| 251 | 241 | |
|---|
| 252 | 242 | config_AutoSaveConfigFile( p_this ); |
|---|
| 253 | 243 | |
|---|
| 254 | 244 | #ifdef HAVE_DYNAMIC_PLUGINS |
|---|
| 255 | | #define p_bank p_this->p_libvlc_global->p_module_bank |
|---|
| | 245 | # define p_bank p_libvlc_global->p_module_bank |
|---|
| 256 | 246 | if( p_bank->b_cache ) CacheSave( p_this ); |
|---|
| 257 | 247 | while( p_bank->i_loaded_cache-- ) |
|---|
| … | … | |
| 259 | 249 | if( p_bank->pp_loaded_cache[p_bank->i_loaded_cache] ) |
|---|
| 260 | 250 | { |
|---|
| 261 | | DeleteModule( p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->p_module, p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->b_used ); |
|---|
| | 251 | DeleteModule( p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->p_module, |
|---|
| | 252 | p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->b_used ); |
|---|
| 262 | 253 | free( p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->psz_file ); |
|---|
| 263 | 254 | free( p_bank->pp_loaded_cache[p_bank->i_loaded_cache] ); |
|---|
| … | … | |
| 281 | 272 | p_bank->pp_cache = NULL; |
|---|
| 282 | 273 | } |
|---|
| 283 | | #undef p_bank |
|---|
| 284 | | #endif |
|---|
| 285 | | |
|---|
| 286 | | vlc_object_detach( p_this->p_libvlc_global->p_module_bank ); |
|---|
| 287 | | |
|---|
| 288 | | while( p_this->p_libvlc_global->p_module_bank->i_children ) |
|---|
| 289 | | { |
|---|
| 290 | | p_next = (module_t *)p_this->p_libvlc_global->p_module_bank->pp_children[0]; |
|---|
| | 274 | # undef p_bank |
|---|
| | 275 | #endif |
|---|
| | 276 | |
|---|
| | 277 | vlc_object_detach( p_libvlc_global->p_module_bank ); |
|---|
| | 278 | |
|---|
| | 279 | while( p_libvlc_global->p_module_bank->i_children ) |
|---|
| | 280 | { |
|---|
| | 281 | p_next = (module_t *)p_libvlc_global->p_module_bank->pp_children[0]; |
|---|
| 291 | 282 | |
|---|
| 292 | 283 | if( DeleteModule( p_next, VLC_TRUE ) ) |
|---|
| … | … | |
| 302 | 293 | } |
|---|
| 303 | 294 | |
|---|
| 304 | | vlc_object_destroy( p_this->p_libvlc_global->p_module_bank ); |
|---|
| 305 | | p_this->p_libvlc_global->p_module_bank = NULL; |
|---|
| 306 | | |
|---|
| 307 | | return; |
|---|
| | 295 | vlc_object_destroy( p_libvlc_global->p_module_bank ); |
|---|
| | 296 | p_libvlc_global->p_module_bank = NULL; |
|---|
| 308 | 297 | } |
|---|
| 309 | 298 | |
|---|
| … | … | |
| 319 | 308 | { |
|---|
| 320 | 309 | vlc_value_t lockval; |
|---|
| 321 | | |
|---|
| 322 | | var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX ); |
|---|
| 323 | | var_Get( p_this->p_libvlc_global, "libvlc", &lockval ); |
|---|
| | 310 | libvlc_global_data_t *p_libvlc_global = vlc_global( p_this ); |
|---|
| | 311 | |
|---|
| | 312 | var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX ); |
|---|
| | 313 | var_Get( p_libvlc_global, "libvlc", &lockval ); |
|---|
| 324 | 314 | vlc_mutex_lock( lockval.p_address ); |
|---|
| 325 | | if( p_this->p_libvlc_global->p_module_bank->b_main ) |
|---|
| | 315 | if( p_libvlc_global->p_module_bank->b_main ) |
|---|
| 326 | 316 | { |
|---|
| 327 | 317 | vlc_mutex_unlock( lockval.p_address ); |
|---|
| 328 | | var_Destroy( p_this->p_libvlc_global, "libvlc" ); |
|---|
| 329 | | return; |
|---|
| 330 | | } |
|---|
| 331 | | p_this->p_libvlc_global->p_module_bank->b_main = VLC_TRUE; |
|---|
| | 318 | var_Destroy( p_libvlc_global, "libvlc" ); |
|---|
| | 319 | return; |
|---|
| | 320 | } |
|---|
| | 321 | p_libvlc_global->p_module_bank->b_main = VLC_TRUE; |
|---|
| 332 | 322 | vlc_mutex_unlock( lockval.p_address ); |
|---|
| 333 | | var_Destroy( p_this->p_libvlc_global, "libvlc" ); |
|---|
| | 323 | var_Destroy( p_libvlc_global, "libvlc" ); |
|---|
| 334 | 324 | |
|---|
| 335 | 325 | AllocateBuiltinModule( p_this, vlc_entry__main ); |
|---|
| … | … | |
| 344 | 334 | { |
|---|
| 345 | 335 | vlc_value_t lockval; |
|---|
| 346 | | |
|---|
| 347 | | var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX ); |
|---|
| 348 | | var_Get( p_this->p_libvlc_global, "libvlc", &lockval ); |
|---|
| | 336 | libvlc_global_data_t *p_libvlc_global = vlc_global( p_this ); |
|---|
| | 337 | |
|---|
| | 338 | var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX ); |
|---|
| | 339 | var_Get( p_libvlc_global, "libvlc", &lockval ); |
|---|
| 349 | 340 | vlc_mutex_lock( lockval.p_address ); |
|---|
| 350 | | if( p_this->p_libvlc_global->p_module_bank->b_builtins ) |
|---|
| | 341 | if( p_libvlc_global->p_module_bank->b_builtins ) |
|---|
| 351 | 342 | { |
|---|
| 352 | 343 | vlc_mutex_unlock( lockval.p_address ); |
|---|
| 353 | | var_Destroy( p_this->p_libvlc_global, "libvlc" ); |
|---|
| 354 | | return; |
|---|
| 355 | | } |
|---|
| 356 | | p_this->p_libvlc_global->p_module_bank->b_builtins = VLC_TRUE; |
|---|
| | 344 | var_Destroy( p_libvlc_global, "libvlc" ); |
|---|
| | 345 | return; |
|---|
| | 346 | } |
|---|
| | 347 | p_libvlc_global->p_module_bank->b_builtins = VLC_TRUE; |
|---|
| 357 | 348 | vlc_mutex_unlock( lockval.p_address ); |
|---|
| 358 | | var_Destroy( p_this->p_libvlc_global, "libvlc" ); |
|---|
| | 349 | var_Destroy( p_libvlc_global, "libvlc" ); |
|---|
| 359 | 350 | |
|---|
| 360 | 351 | msg_Dbg( p_this, "checking builtin modules" ); |
|---|
| … | … | |
| 371 | 362 | #ifdef HAVE_DYNAMIC_PLUGINS |
|---|
| 372 | 363 | vlc_value_t lockval; |
|---|
| 373 | | |
|---|
| 374 | | var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX ); |
|---|
| 375 | | var_Get( p_this->p_libvlc_global, "libvlc", &lockval ); |
|---|
| | 364 | libvlc_global_data_t *p_libvlc_global = vlc_global( p_this ); |
|---|
| | 365 | |
|---|
| | 366 | var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX ); |
|---|
| | 367 | var_Get( p_libvlc_global, "libvlc", &lockval ); |
|---|
| 376 | 368 | vlc_mutex_lock( lockval.p_address ); |
|---|
| 377 | | if( p_this->p_libvlc_global->p_module_bank->b_plugins ) |
|---|
| | 369 | if( p_libvlc_global->p_module_bank->b_plugins ) |
|---|
| 378 | 370 | { |
|---|
| 379 | 371 | vlc_mutex_unlock( lockval.p_address ); |
|---|
| 380 | | var_Destroy( p_this->p_libvlc_global, "libvlc" ); |
|---|
| 381 | | return; |
|---|
| 382 | | } |
|---|
| 383 | | p_this->p_libvlc_global->p_module_bank->b_plugins = VLC_TRUE; |
|---|
| | 372 | var_Destroy( p_libvlc_global, "libvlc" ); |
|---|
| | 373 | return; |
|---|
| | 374 | } |
|---|
| | 375 | p_libvlc_global->p_module_bank->b_plugins = VLC_TRUE; |
|---|
| 384 | 376 | vlc_mutex_unlock( lockval.p_address ); |
|---|
| 385 | | var_Destroy( p_this->p_libvlc_global, "libvlc" ); |
|---|
| | 377 | var_Destroy( p_libvlc_global, "libvlc" ); |
|---|
| 386 | 378 | |
|---|
| 387 | 379 | msg_Dbg( p_this, "checking plugin modules" ); |
|---|
| 388 | 380 | |
|---|
| 389 | 381 | if( config_GetInt( p_this, "plugins-cache" ) ) |
|---|
| 390 | | p_this->p_libvlc_global->p_module_bank->b_cache = VLC_TRUE; |
|---|
| 391 | | |
|---|
| 392 | | if( p_this->p_libvlc_global->p_module_bank->b_cache || |
|---|
| 393 | | p_this->p_libvlc_global->p_module_bank->b_cache_delete ) CacheLoad( p_this ); |
|---|
| | 382 | p_libvlc_global->p_module_bank->b_cache = VLC_TRUE; |
|---|
| | 383 | |
|---|
| | 384 | if( p_libvlc_global->p_module_bank->b_cache || |
|---|
| | 385 | p_libvlc_global->p_module_bank->b_cache_delete ) CacheLoad( p_this ); |
|---|
| 394 | 386 | |
|---|
| 395 | 387 | AllocateAllPlugins( p_this ); |
|---|
| … | … | |
| 1074 | 1066 | if( p_module ) |
|---|
| 1075 | 1067 | { |
|---|
| | 1068 | libvlc_global_data_t *p_libvlc_global = vlc_global( p_this ); |
|---|
| | 1069 | |
|---|
| 1076 | 1070 | /* Everything worked fine ! |
|---|
| 1077 | 1071 | * The module is ready to be added to the list. */ |
|---|
| … | … | |
| 1081 | 1075 | p_module->psz_object_name, p_module->psz_longname ); */ |
|---|
| 1082 | 1076 | |
|---|
| 1083 | | vlc_object_attach( p_module, p_this->p_libvlc_global->p_module_bank ); |
|---|
| 1084 | | |
|---|
| 1085 | | if( !p_this->p_libvlc_global->p_module_bank->b_cache ) |
|---|
| | 1077 | vlc_object_attach( p_module, p_libvlc_global->p_module_bank ); |
|---|
| | 1078 | |
|---|
| | 1079 | if( !p_libvlc_global->p_module_bank->b_cache ) |
|---|
| 1086 | 1080 | return 0; |
|---|
| 1087 | 1081 | |
|---|
| | 1082 | #define p_bank p_libvlc_global->p_module_bank |
|---|
| 1088 | 1083 | /* Add entry to cache */ |
|---|
| 1089 | | #define p_bank p_this->p_libvlc_global->p_module_bank |
|---|
| 1090 | 1084 | p_bank->pp_cache = |
|---|
| 1091 | 1085 | realloc( p_bank->pp_cache, (p_bank->i_cache + 1) * sizeof(void *) ); |
|---|
| … | … | |
| 1257 | 1251 | p_module->psz_object_name, p_module->psz_longname ); */ |
|---|
| 1258 | 1252 | |
|---|
| 1259 | | vlc_object_attach( p_module, p_this->p_libvlc_global->p_module_bank ); |
|---|
| | 1253 | vlc_object_attach( p_module, vlc_global( p_this )->p_module_bank ); |
|---|
| 1260 | 1254 | |
|---|
| 1261 | 1255 | return 0; |
|---|
| … | … | |
| 1633 | 1627 | module_cache_t **pp_cache = 0; |
|---|
| 1634 | 1628 | int32_t i_file_size, i_marker; |
|---|
| | 1629 | libvlc_global_data_t *p_libvlc_global = vlc_global( p_this ); |
|---|
| 1635 | 1630 | |
|---|
| 1636 | 1631 | psz_homedir = p_this->p_libvlc->psz_homedir; |
|---|
| … | … | |
| 1649 | 1644 | } |
|---|
| 1650 | 1645 | |
|---|
| 1651 | | if( p_this->p_libvlc_global->p_module_bank->b_cache_delete ) |
|---|
| | 1646 | if( p_libvlc_global->p_module_bank->b_cache_delete ) |
|---|
| 1652 | 1647 | { |
|---|
| 1653 | 1648 | #if !defined( UNDER_CE ) |
|---|
| … | … | |
| 1738 | 1733 | } |
|---|
| 1739 | 1734 | |
|---|
| 1740 | | p_this->p_libvlc_global->p_module_bank->i_loaded_cache = 0; |
|---|
| | 1735 | p_libvlc_global->p_module_bank->i_loaded_cache = 0; |
|---|
| 1741 | 1736 | if (fread( &i_cache, 1, sizeof(i_cache), file ) != sizeof(i_cache) ) |
|---|
| 1742 | 1737 | { |
|---|
| … | … | |
| 1748 | 1743 | |
|---|
| 1749 | 1744 | if( i_cache ) |
|---|
| 1750 | | pp_cache = p_this->p_libvlc_global->p_module_bank->pp_loaded_cache = |
|---|
| | 1745 | pp_cache = p_libvlc_global->p_module_bank->pp_loaded_cache = |
|---|
| 1751 | 1746 | malloc( i_cache * sizeof(void *) ); |
|---|
| 1752 | 1747 | |
|---|
| … | … | |
| 1779 | 1774 | |
|---|
| 1780 | 1775 | pp_cache[i] = malloc( sizeof(module_cache_t) ); |
|---|
| 1781 | | p_this->p_libvlc_global->p_module_bank->i_loaded_cache++; |
|---|
| | 1776 | p_libvlc_global->p_module_bank->i_loaded_cache++; |
|---|
| 1782 | 1777 | |
|---|
| 1783 | 1778 | /* Load common info */ |
|---|
| … | … | |
| 1845 | 1840 | |
|---|
| 1846 | 1841 | /* TODO: cleanup */ |
|---|
| 1847 | | p_this->p_libvlc_global->p_module_bank->i_loaded_cache = 0; |
|---|
| | 1842 | p_libvlc_global->p_module_bank->i_loaded_cache = 0; |
|---|
| 1848 | 1843 | |
|---|
| 1849 | 1844 | fclose( file ); |
|---|
| … | … | |
| 1986 | 1981 | module_cache_t **pp_cache; |
|---|
| 1987 | 1982 | int32_t i_file_size = 0; |
|---|
| | 1983 | libvlc_global_data_t *p_libvlc_global = vlc_global( p_this ); |
|---|
| 1988 | 1984 | |
|---|
| 1989 | 1985 | psz_homedir = p_this->p_libvlc->psz_homedir; |
|---|
| … | … | |
| 2053 | 2049 | fwrite( &i_file_size, sizeof(char), sizeof(i_file_size), file ); |
|---|
| 2054 | 2050 | |
|---|
| 2055 | | i_cache = p_this->p_libvlc_global->p_module_bank->i_cache; |
|---|
| 2056 | | pp_cache = p_this->p_libvlc_global->p_module_bank->pp_cache; |
|---|
| | 2051 | i_cache = p_libvlc_global->p_module_bank->i_cache; |
|---|
| | 2052 | pp_cache = p_libvlc_global->p_module_bank->pp_cache; |
|---|
| 2057 | 2053 | |
|---|
| 2058 | 2054 | fwrite( &i_cache, sizeof(char), sizeof(i_cache), file ); |
|---|
| … | … | |
| 2238 | 2234 | module_cache_t **pp_cache; |
|---|
| 2239 | 2235 | int i_cache, i; |
|---|
| 2240 | | |
|---|
| 2241 | | pp_cache = p_this->p_libvlc_global->p_module_bank->pp_loaded_cache; |
|---|
| 2242 | | i_cache = p_this->p_libvlc_global->p_module_bank->i_loaded_cache; |
|---|
| | 2236 | libvlc_global_data_t *p_libvlc_global = vlc_global( p_this ); |
|---|
| | 2237 | |
|---|
| | 2238 | pp_cache = p_libvlc_global->p_module_bank->pp_loaded_cache; |
|---|
| | 2239 | i_cache = p_libvlc_global->p_module_bank->i_loaded_cache; |
|---|
| 2243 | 2240 | |
|---|
| 2244 | 2241 | for( i = 0; i < i_cache; i++ ) |
|---|