Changeset 8d65a7555d7cda5a871f104dc97d4ea963161903
- Timestamp:
- 06/29/08 00:20:39 (2 months ago)
- git-parent:
- Files:
-
- src/input/input.c (modified) (1 diff)
- src/input/input_internal.h (modified) (1 diff)
- src/input/var.c (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
src/input/input.c
r57c3ecd r8d65a75 1272 1272 1273 1273 /* Clean control variables */ 1274 input_ControlVar Clean( p_input );1274 input_ControlVarStop( p_input ); 1275 1275 1276 1276 /* Clean up master */ src/input/input_internal.h
r6f972eb r8d65a75 315 315 /* var.c */ 316 316 void input_ControlVarInit ( input_thread_t * ); 317 void input_ControlVar Clean( input_thread_t * );317 void input_ControlVarStop( input_thread_t * ); 318 318 void input_ControlVarNavigation( input_thread_t * ); 319 319 void input_ControlVarTitle( input_thread_t *, int i_title ); src/input/var.c
rea89b9c r8d65a75 36 36 37 37 /***************************************************************************** 38 * Exported prototypes39 *****************************************************************************/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 /*****************************************************************************48 38 * Callbacks 49 39 *****************************************************************************/ … … 71 61 static int BookmarkCallback( vlc_object_t *p_this, char const *psz_cmd, 72 62 vlc_value_t oldval, vlc_value_t newval, void * ); 63 64 typedef struct 65 { 66 const char *psz_name; 67 vlc_callback_t callback; 68 } vlc_input_callback_t; 69 static void InputAddCallbacks( input_thread_t *, const vlc_input_callback_t * ); 70 static 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 } 74 static 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 }; 96 static 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 }; 103 static const vlc_input_callback_t p_input_title_callbacks[] = 104 { 105 CALLBACK( "next-chapter", SeekpointCallback ), 106 CALLBACK( "prev-chapter", SeekpointCallback ), 107 }; 108 #undef CALLBACK 73 109 74 110 /***************************************************************************** … … 80 116 vlc_value_t val, text; 81 117 82 /* XXX we put callback only in non preparsing mode. We need to create the variable83 * 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)85 118 /* State */ 86 119 var_Create( p_input, "state", VLC_VAR_INTEGER ); 87 120 val.i_int = p_input->i_state; 88 121 var_Change( p_input, "state", VLC_VAR_SETVALUE, &val, NULL ); 89 ADD_CALLBACK( "state", StateCallback );90 122 91 123 /* Rate */ … … 93 125 val.i_int = p_input->p->i_rate; 94 126 var_Change( p_input, "rate", VLC_VAR_SETVALUE, &val, NULL ); 95 ADD_CALLBACK( "rate", RateCallback );96 127 97 128 var_Create( p_input, "rate-slower", VLC_VAR_VOID ); 98 ADD_CALLBACK( "rate-slower", RateCallback );99 129 100 130 var_Create( p_input, "rate-faster", VLC_VAR_VOID ); 101 ADD_CALLBACK( "rate-faster", RateCallback );102 131 103 132 /* Position */ … … 106 135 val.f_float = 0.0; 107 136 var_Change( p_input, "position", VLC_VAR_SETVALUE, &val, NULL ); 108 ADD_CALLBACK( "position", PositionCallback );109 ADD_CALLBACK( "position-offset", PositionCallback );110 137 111 138 /* Time */ … … 114 141 val.i_time = 0; 115 142 var_Change( p_input, "time", VLC_VAR_SETVALUE, &val, NULL ); 116 ADD_CALLBACK( "time", TimeCallback );117 ADD_CALLBACK( "time-offset", TimeCallback );118 143 119 144 /* Bookmark */ … … 122 147 val.psz_string = _("Bookmark"); 123 148 var_Change( p_input, "bookmark", VLC_VAR_SETTEXT, &val, NULL ); 124 ADD_CALLBACK( "bookmark", BookmarkCallback );125 149 126 150 /* Program */ … … 132 156 text.psz_string = _("Program"); 133 157 var_Change( p_input, "program", VLC_VAR_SETTEXT, &text, NULL ); 134 ADD_CALLBACK( "program", ProgramCallback );135 158 136 159 /* Programs */ … … 143 166 text.psz_string = _("Title"); 144 167 var_Change( p_input, "title", VLC_VAR_SETTEXT, &text, NULL ); 145 ADD_CALLBACK( "title", TitleCallback );146 168 147 169 /* Chapter */ … … 149 171 text.psz_string = _("Chapter"); 150 172 var_Change( p_input, "chapter", VLC_VAR_SETTEXT, &text, NULL ); 151 ADD_CALLBACK( "chapter", SeekpointCallback );152 173 153 174 /* Navigation The callback is added after */ … … 160 181 val.i_time = 0; 161 182 var_Change( p_input, "audio-delay", VLC_VAR_SETVALUE, &val, NULL ); 162 ADD_CALLBACK( "audio-delay", EsDelayCallback );163 183 var_Create( p_input, "spu-delay", VLC_VAR_TIME ); 164 184 val.i_time = 0; 165 185 var_Change( p_input, "spu-delay", VLC_VAR_SETVALUE, &val, NULL ); 166 ADD_CALLBACK( "spu-delay", EsDelayCallback );167 186 168 187 p_input->p->pts_adjust.auto_adjust = var_CreateGetBool( … … 173 192 text.psz_string = _("Video Track"); 174 193 var_Change( p_input, "video-es", VLC_VAR_SETTEXT, &text, NULL ); 175 ADD_CALLBACK( "video-es", ESCallback );176 194 177 195 /* Audio ES */ … … 179 197 text.psz_string = _("Audio Track"); 180 198 var_Change( p_input, "audio-es", VLC_VAR_SETTEXT, &text, NULL ); 181 ADD_CALLBACK( "audio-es", ESCallback );182 199 183 200 /* Spu ES */ … … 185 202 text.psz_string = _("Subtitles Track"); 186 203 var_Change( p_input, "spu-es", VLC_VAR_SETTEXT, &text, NULL ); 187 ADD_CALLBACK( "spu-es", ESCallback );188 204 189 205 /* Special read only objects variables for intf */ … … 207 223 var_SetBool( p_input, "rate-change", true ); 208 224 } 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 *****************************************************************************/ 236 void input_ControlVarStop( input_thread_t *p_input ) 237 { 238 InputDelCallbacks( p_input, p_input_callbacks ); 239 239 240 if( p_input->p->i_title > 0 ) 240 241 { 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 } 258 255 259 256 /***************************************************************************** … … 482 479 483 480 /***************************************************************************** 481 * Callbacks managements: 482 *****************************************************************************/ 483 static 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 } 492 static 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 /***************************************************************************** 484 502 * All Callbacks: 485 503 *****************************************************************************/
