Changeset 8d65a7555d7cda5a871f104dc97d4ea963161903

Show
Ignore:
Timestamp:
06/29/08 00:20:39 (2 months ago)
Author:
Laurent Aimar <fenrir@videolan.org>
git-committer:
Laurent Aimar <fenrir@videolan.org> 1214691639 +0000
git-parent:

[4a28278bdaf1d5b3bf978b9c1725a61e104de93c]

git-author:
Laurent Aimar <fenrir@videolan.org> 1214691612 +0000
Message:

Do not delete input variable, only remove callbacks (and all of them).
Otherwise, every one would have to check the return value of var_Get ...

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/input/input.c

    r57c3ecd r8d65a75  
    12721272 
    12731273    /* Clean control variables */ 
    1274     input_ControlVarClean( p_input ); 
     1274    input_ControlVarStop( p_input ); 
    12751275 
    12761276    /* Clean up master */ 
  • src/input/input_internal.h

    r6f972eb r8d65a75  
    315315/* var.c */ 
    316316void input_ControlVarInit ( input_thread_t * ); 
    317 void input_ControlVarClean( input_thread_t * ); 
     317void input_ControlVarStop( input_thread_t * ); 
    318318void input_ControlVarNavigation( input_thread_t * ); 
    319319void input_ControlVarTitle( input_thread_t *, int i_title ); 
  • src/input/var.c

    rea89b9c r8d65a75  
    3636 
    3737/***************************************************************************** 
    38  * Exported prototypes 
    39  *****************************************************************************/ 
    40 void input_ControlVarInit ( input_thread_t * ); 
    41 void input_ControlVarClean( input_thread_t * ); 
    42 void input_ControlVarNavigation( input_thread_t * ); 
    43 void input_ControlVarTitle( input_thread_t *p_input, int i_title ); 
    44  
    45 void input_ConfigVarInit ( input_thread_t *p_input ); 
    46  
    47 /***************************************************************************** 
    4838 * Callbacks 
    4939 *****************************************************************************/ 
     
    7161static int BookmarkCallback( vlc_object_t *p_this, char const *psz_cmd, 
    7262                             vlc_value_t oldval, vlc_value_t newval, void * ); 
     63 
     64typedef struct 
     65{ 
     66    const char *psz_name; 
     67    vlc_callback_t callback; 
     68} vlc_input_callback_t; 
     69static void InputAddCallbacks( input_thread_t *, const vlc_input_callback_t * ); 
     70static void InputDelCallbacks( input_thread_t *, const vlc_input_callback_t * ); 
     71 
     72/* List all callbacks added by input */ 
     73#define CALLBACK(name,cb) { name, cb } 
     74static const vlc_input_callback_t p_input_callbacks[] = 
     75{ 
     76    CALLBACK( "state", StateCallback ), 
     77    CALLBACK( "rate", RateCallback ), 
     78    CALLBACK( "rate-slower", RateCallback ), 
     79    CALLBACK( "rate-faster", RateCallback ), 
     80    CALLBACK( "position", PositionCallback ), 
     81    CALLBACK( "position-offset", PositionCallback ), 
     82    CALLBACK( "time", TimeCallback ), 
     83    CALLBACK( "time-offset", TimeCallback ), 
     84    CALLBACK( "bookmark", BookmarkCallback ), 
     85    CALLBACK( "program", ProgramCallback ), 
     86    CALLBACK( "title", TitleCallback ), 
     87    CALLBACK( "chapter", SeekpointCallback ), 
     88    CALLBACK( "audio-delay", EsDelayCallback ), 
     89    CALLBACK( "spu-delay", EsDelayCallback ), 
     90    CALLBACK( "video-es", ESCallback ), 
     91    CALLBACK( "audio-es", ESCallback ), 
     92    CALLBACK( "spu-es", ESCallback ), 
     93 
     94    CALLBACK( NULL, NULL ) 
     95}; 
     96static const vlc_input_callback_t p_input_navigation_callbacks[] = 
     97{ 
     98    CALLBACK( "next-title", TitleCallback ), 
     99    CALLBACK( "prev-title", TitleCallback ), 
     100 
     101    CALLBACK( NULL, NULL ) 
     102}; 
     103static const vlc_input_callback_t p_input_title_callbacks[] = 
     104{ 
     105    CALLBACK( "next-chapter", SeekpointCallback ), 
     106    CALLBACK( "prev-chapter", SeekpointCallback ), 
     107}; 
     108#undef CALLBACK 
    73109 
    74110/***************************************************************************** 
     
    80116    vlc_value_t val, text; 
    81117 
    82     /* XXX we put callback only in non preparsing mode. We need to create the variable 
    83      * unless someone want to check all var_Get/var_Change return value ... */ 
    84 #define ADD_CALLBACK( name, callback ) do { if( !p_input->b_preparsing ) { var_AddCallback( p_input, name, callback, NULL ); } } while(0) 
    85118    /* State */ 
    86119    var_Create( p_input, "state", VLC_VAR_INTEGER ); 
    87120    val.i_int = p_input->i_state; 
    88121    var_Change( p_input, "state", VLC_VAR_SETVALUE, &val, NULL ); 
    89     ADD_CALLBACK( "state", StateCallback ); 
    90122 
    91123    /* Rate */ 
     
    93125    val.i_int = p_input->p->i_rate; 
    94126    var_Change( p_input, "rate", VLC_VAR_SETVALUE, &val, NULL ); 
    95     ADD_CALLBACK( "rate", RateCallback ); 
    96127 
    97128    var_Create( p_input, "rate-slower", VLC_VAR_VOID ); 
    98     ADD_CALLBACK( "rate-slower", RateCallback ); 
    99129 
    100130    var_Create( p_input, "rate-faster", VLC_VAR_VOID ); 
    101     ADD_CALLBACK( "rate-faster", RateCallback ); 
    102131 
    103132    /* Position */ 
     
    106135    val.f_float = 0.0; 
    107136    var_Change( p_input, "position", VLC_VAR_SETVALUE, &val, NULL ); 
    108     ADD_CALLBACK( "position", PositionCallback ); 
    109     ADD_CALLBACK( "position-offset", PositionCallback ); 
    110137 
    111138    /* Time */ 
     
    114141    val.i_time = 0; 
    115142    var_Change( p_input, "time", VLC_VAR_SETVALUE, &val, NULL ); 
    116     ADD_CALLBACK( "time", TimeCallback ); 
    117     ADD_CALLBACK( "time-offset", TimeCallback ); 
    118143 
    119144    /* Bookmark */ 
     
    122147    val.psz_string = _("Bookmark"); 
    123148    var_Change( p_input, "bookmark", VLC_VAR_SETTEXT, &val, NULL ); 
    124     ADD_CALLBACK( "bookmark", BookmarkCallback ); 
    125149 
    126150    /* Program */ 
     
    132156    text.psz_string = _("Program"); 
    133157    var_Change( p_input, "program", VLC_VAR_SETTEXT, &text, NULL ); 
    134     ADD_CALLBACK( "program", ProgramCallback ); 
    135158 
    136159    /* Programs */ 
     
    143166    text.psz_string = _("Title"); 
    144167    var_Change( p_input, "title", VLC_VAR_SETTEXT, &text, NULL ); 
    145     ADD_CALLBACK( "title", TitleCallback ); 
    146168 
    147169    /* Chapter */ 
     
    149171    text.psz_string = _("Chapter"); 
    150172    var_Change( p_input, "chapter", VLC_VAR_SETTEXT, &text, NULL ); 
    151     ADD_CALLBACK( "chapter", SeekpointCallback ); 
    152173 
    153174    /* Navigation The callback is added after */ 
     
    160181    val.i_time = 0; 
    161182    var_Change( p_input, "audio-delay", VLC_VAR_SETVALUE, &val, NULL ); 
    162     ADD_CALLBACK( "audio-delay", EsDelayCallback ); 
    163183    var_Create( p_input, "spu-delay", VLC_VAR_TIME ); 
    164184    val.i_time = 0; 
    165185    var_Change( p_input, "spu-delay", VLC_VAR_SETVALUE, &val, NULL ); 
    166     ADD_CALLBACK( "spu-delay", EsDelayCallback ); 
    167186 
    168187    p_input->p->pts_adjust.auto_adjust = var_CreateGetBool( 
     
    173192    text.psz_string = _("Video Track"); 
    174193    var_Change( p_input, "video-es", VLC_VAR_SETTEXT, &text, NULL ); 
    175     ADD_CALLBACK( "video-es", ESCallback ); 
    176194 
    177195    /* Audio ES */ 
     
    179197    text.psz_string = _("Audio Track"); 
    180198    var_Change( p_input, "audio-es", VLC_VAR_SETTEXT, &text, NULL ); 
    181     ADD_CALLBACK( "audio-es", ESCallback ); 
    182199 
    183200    /* Spu ES */ 
     
    185202    text.psz_string = _("Subtitles Track"); 
    186203    var_Change( p_input, "spu-es", VLC_VAR_SETTEXT, &text, NULL ); 
    187     ADD_CALLBACK( "spu-es", ESCallback ); 
    188204 
    189205    /* Special read only objects variables for intf */ 
     
    207223        var_SetBool( p_input, "rate-change", true ); 
    208224    } 
    209 #undef ADD_CALLBACK 
    210 
    211  
    212 /***************************************************************************** 
    213  * input_ControlVarClean: 
    214  *****************************************************************************/ 
    215 void input_ControlVarClean( input_thread_t *p_input ) 
    216 
    217     var_Destroy( p_input, "state" ); 
    218     var_Destroy( p_input, "rate" ); 
    219     var_Destroy( p_input, "rate-slower" ); 
    220     var_Destroy( p_input, "rate-faster" ); 
    221     var_Destroy( p_input, "position" ); 
    222     var_Destroy( p_input, "position-offset" ); 
    223     var_Destroy( p_input, "time" ); 
    224     var_Destroy( p_input, "time-offset" ); 
    225  
    226     var_Destroy( p_input, "audio-delay" ); 
    227     var_Destroy( p_input, "spu-delay" ); 
    228  
    229     var_Destroy( p_input, "bookmark" ); 
    230  
    231     var_Destroy( p_input, "program" ); 
    232     if( p_input->p->i_title > 1 ) 
    233     { 
    234         /* TODO Destroy sub navigation var ? */ 
    235  
    236         var_Destroy( p_input, "next-title" ); 
    237         var_Destroy( p_input, "prev-title" ); 
    238     } 
     225 
     226    /* Add all callbacks 
     227     * XXX we put callback only in non preparsing mode. We need to create the variable 
     228     * unless someone want to check all var_Get/var_Change return value ... */ 
     229    if( !p_input->b_preparsing ) 
     230        InputAddCallbacks( p_input, p_input_callbacks ); 
     231
     232 
     233/***************************************************************************** 
     234 * input_ControlVarStop: 
     235 *****************************************************************************/ 
     236void input_ControlVarStop( input_thread_t *p_input ) 
     237
     238    InputDelCallbacks( p_input, p_input_callbacks ); 
     239 
    239240    if( p_input->p->i_title > 0 ) 
    240241    { 
    241         /* FIXME title > 0 doesn't mean current title has more than 1 seekpoint */ 
    242         var_Destroy( p_input, "next-chapter" ); 
    243         var_Destroy( p_input, "prev-chapter" ); 
    244     } 
    245     var_Destroy( p_input, "title" ); 
    246     var_Destroy( p_input, "chapter" ); 
    247     var_Destroy( p_input, "navigation" ); 
    248  
    249     var_Destroy( p_input, "video-es" ); 
    250     var_Destroy( p_input, "audio-es" ); 
    251     var_Destroy( p_input, "spu-es" ); 
    252  
    253     var_Destroy( p_input, "bookmarks" ); 
    254     var_Destroy( p_input, "length" ); 
    255  
    256     var_Destroy( p_input, "intf-change" ); 
    257  } 
     242        char name[sizeof("title ") + 5 ]; 
     243        int i; 
     244 
     245        InputDelCallbacks( p_input, p_input_navigation_callbacks ); 
     246        InputDelCallbacks( p_input, p_input_title_callbacks ); 
     247 
     248        for( i = 0; i < p_input->p->i_title; i++ ) 
     249        { 
     250            snprintf( name, sizeof(name), "title %2i", i ); 
     251            var_DelCallback( p_input, name, NavigationCallback, (void *)(intptr_t)i ); 
     252        } 
     253    } 
     254
    258255 
    259256/***************************************************************************** 
     
    482479 
    483480/***************************************************************************** 
     481 * Callbacks managements: 
     482 *****************************************************************************/ 
     483static void InputAddCallbacks( input_thread_t *p_input, 
     484                               const vlc_input_callback_t *p_callbacks ) 
     485{ 
     486    int i; 
     487    for( i = 0; p_callbacks[i].psz_name != NULL; i++ ) 
     488        var_AddCallback( p_input, 
     489                         p_callbacks[i].psz_name, 
     490                         p_callbacks[i].callback, NULL ); 
     491} 
     492static void InputDelCallbacks( input_thread_t *p_input, 
     493                               const vlc_input_callback_t *p_callbacks ) 
     494{ 
     495    int i; 
     496    for( i = 0; p_callbacks[i].psz_name != NULL; i++ ) 
     497        var_DelCallback( p_input, 
     498                         p_callbacks[i].psz_name, 
     499                         p_callbacks[i].callback, NULL ); 
     500} 
     501/***************************************************************************** 
    484502 * All Callbacks: 
    485503 *****************************************************************************/