1 /*****************************************************************************
3 *****************************************************************************
4 * Copyright (C) 2008 Laurent Aimar
7 * Authors: Laurent Aimar < fenrir _AT_ videolan _DOT_ org>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22 *****************************************************************************/
24 /*****************************************************************************
26 *****************************************************************************/
31 #include <vlc_common.h>
32 #include <vlc_input.h>
33 #include "input_internal.h"
36 /*****************************************************************************
38 *****************************************************************************/
39 void input_SendEventTimes( input_thread_t *p_input, const input_event_times_t *p_times )
44 val.f_float = p_times->f_position;
45 var_Change( p_input, "position", VLC_VAR_SETVALUE, &val, NULL );
48 val.i_time = p_times->i_time;
49 var_Change( p_input, "time", VLC_VAR_SETVALUE, &val, NULL );
51 /* FIXME ugly + what about meta change event ? */
52 if( var_GetTime( p_input, "length" ) != p_times->i_length )
53 input_item_SetDuration( p_input->p->input.p_item, p_times->i_length );
54 val.i_time = p_times->i_length;
55 var_Change( p_input, "length", VLC_VAR_SETVALUE, &val, NULL );
57 //var_SetBool( p_input, "intf-change-times", true ); /* TODO */
58 var_TriggerCallback( p_input, "intf-change" );
60 void input_SendEventStatistics( input_thread_t *p_input )
62 var_TriggerCallback( p_input, "stats-change" ); /* FIXME rename */
64 void input_SendEventRate( input_thread_t *p_input, int i_rate )
69 var_Change( p_input, "rate", VLC_VAR_SETVALUE, &val, NULL );
71 var_TriggerCallback( p_input, "rate-change" ); /* TODO rename */
73 void input_SendEventAudioDelay( input_thread_t *p_input, mtime_t i_delay )
78 var_Change( p_input, "audio-delay", VLC_VAR_SETVALUE, &val, NULL );
80 //var_SetBool( p_input, "intf-change-delay" ); /* TODO */
83 void input_SendEventSubtitleDelay( input_thread_t *p_input, mtime_t i_delay )
88 var_Change( p_input, "spu-delay", VLC_VAR_SETVALUE, &val, NULL );
90 //var_SetBool( p_input, "intf-change-delay" ); /* TODO */
93 /* TODO and file name ? */
94 void input_SendEventRecord( input_thread_t *p_input, bool b_recording )
98 val.b_bool = b_recording;
99 var_Change( p_input, "record", VLC_VAR_SETVALUE, &val, NULL );
101 var_TriggerCallback( p_input, "intf-change" ); /* FIXME */
104 void input_SendEventTitle( input_thread_t *p_input, int i_title )
109 var_Change( p_input, "title", VLC_VAR_SETVALUE, &val, NULL );
111 input_ControlVarTitle( p_input, i_title ); /* FIXME ??? */
113 //var_SetBool( p_input, "intf-change-title" ); /* TODO */
116 void input_SendEventSeekpoint( input_thread_t *p_input, int i_title, int i_seekpoint )
120 VLC_UNUSED( i_title );
121 val.i_int = i_seekpoint;
122 var_Change( p_input, "chapter", VLC_VAR_SETVALUE, &val, NULL);
124 //var_SetBool( p_input, "intf-change-seekpoint" ); /* TODO. Merge with intf-change-title ? */
127 void input_SendEventSignal( input_thread_t *p_input, double f_quality, double f_strength )
129 var_SetFloat( p_input, "signal-quality", f_quality );
130 var_SetFloat( p_input, "signal-strength", f_strength );
132 /* TODO use Change and then a intf-change-signal instead ? */
135 void input_SendEventState( input_thread_t *p_input, int i_state )
140 var_Change( p_input, "state", VLC_VAR_SETVALUE, &val, NULL );
142 var_TriggerCallback( p_input, "intf-change" );
144 /* FIXME remove this ugliness */
147 event.type = vlc_InputStateChanged;
148 event.u.input_state_changed.new_state = i_state;
149 vlc_event_send( &p_input->p->event_manager, &event );
153 /* FIXME: review them because vlc_event_send might be
154 * moved inside input_item* functions.
156 void input_SendEventMeta( input_thread_t *p_input )
158 var_TriggerCallback( p_input, "intf-change" ); /* TODO intf-change-item-meta */
160 /* FIXME remove this ugliness ? */
163 event.type = vlc_InputItemMetaChanged;
164 event.u.input_item_meta_changed.meta_type = vlc_meta_ArtworkURL;
165 vlc_event_send( &p_input->p->input.p_item->event_manager, &event );
168 void input_SendEventMetaInfo( input_thread_t *p_input )
170 var_TriggerCallback( p_input, "intf-change" ); /* TODO intf-change-item-info */
172 /* FIXME remove this ugliness */
175 event.type = vlc_InputItemInfoChanged;
176 vlc_event_send( &p_input->p->input.p_item->event_manager, &event );
179 void input_SendEventMetaName( input_thread_t *p_input, const char *psz_name )
181 var_TriggerCallback( p_input, "intf-change" ); /* TODO intf-change-item-name */
183 /* FIXME remove this ugliness */
186 event.type = vlc_InputItemNameChanged;
187 event.u.input_item_name_changed.new_name = psz_name;
188 vlc_event_send( &p_input->p->input.p_item->event_manager, &event );
191 /*****************************************************************************
193 *****************************************************************************/
194 void input_SendEventProgramAdd( input_thread_t *p_input,
195 int i_program, const char *psz_text )
200 val.i_int = i_program;
201 text.psz_string = (char*)psz_text;
203 var_Change( p_input, "program", VLC_VAR_ADDCHOICE,
204 &val, psz_text ? &text : NULL );
206 //var_SetBool( p_input, "intf-change-program", true ); /* TODO */
207 var_TriggerCallback( p_input, "intf-change" );
209 void input_SendEventProgramDel( input_thread_t *p_input, int i_program )
213 val.i_int = i_program;
214 var_Change( p_input, "program", VLC_VAR_DELCHOICE, &val, NULL );
216 //var_SetBool( p_input, "intf-change-program", true ); /* TODO */
217 var_TriggerCallback( p_input, "intf-change" );
219 void input_SendEventProgramSelect( input_thread_t *p_input, int i_program )
223 val.i_int = i_program;
224 var_Change( p_input, "program", VLC_VAR_SETVALUE, &val, NULL );
226 //var_SetBool( p_input, "intf-change-program", true ); /* TODO */
227 var_TriggerCallback( p_input, "intf-change" );
230 static const char *GetEsVarName( int i_cat )
239 assert( i_cat == SPU_ES );
243 void input_SendEventEsDel( input_thread_t *p_input, int i_cat, int i_id )
250 var_Change( p_input, GetEsVarName( i_cat ), VLC_VAR_DELCHOICE, &val, NULL );
254 var_Change( p_input, GetEsVarName( i_cat ), VLC_VAR_CLEARCHOICES, NULL, NULL );
257 //var_SetBool( p_input, "intf-change-es", true ); /* TODO */
258 var_TriggerCallback( p_input, "intf-change" );
260 void input_SendEventEsAdd( input_thread_t *p_input, int i_cat, int i_id, const char *psz_text )
266 text.psz_string = (char*)psz_text;
268 var_Change( p_input, GetEsVarName( i_cat ), VLC_VAR_ADDCHOICE,
269 &val, psz_text ? &text : NULL );
271 //var_SetBool( p_input, "intf-change-es", true ); /* TODO */
272 var_TriggerCallback( p_input, "intf-change" );
275 /* i_id == -1 will unselect */
276 void input_SendEventEsSelect( input_thread_t *p_input, int i_cat, int i_id )
281 var_Change( p_input, GetEsVarName( i_cat ), VLC_VAR_SETVALUE, &val, NULL );
283 //var_SetBool( p_input, "intf-change-es", true ); /* TODO */
284 var_TriggerCallback( p_input, "intf-change" );
286 /* FIXME to remove this ugliness */
288 event.type = vlc_InputSelectedStreamChanged;
289 vlc_event_send( &p_input->p->event_manager, &event );