/*****************************************************************************
* Control
*****************************************************************************/
+void input_ControlPush( input_thread_t *p_input,
+ int i_type, vlc_value_t *p_val )
+{
+ vlc_mutex_lock( &p_input->p->lock_control );
+ if( i_type == INPUT_CONTROL_SET_DIE )
+ {
+ /* Special case, empty the control */
+ p_input->p->i_control = 1;
+ p_input->p->control[0].i_type = i_type;
+ memset( &p_input->p->control[0].val, 0, sizeof( vlc_value_t ) );
+ }
+ else if( p_input->p->i_control >= INPUT_CONTROL_FIFO_SIZE )
+ {
+ msg_Err( p_input, "input control fifo overflow, trashing type=%d",
+ i_type );
+ }
+ else
+ {
+ p_input->p->control[p_input->p->i_control].i_type = i_type;
+ if( p_val )
+ p_input->p->control[p_input->p->i_control].val = *p_val;
+ else
+ memset( &p_input->p->control[p_input->p->i_control].val, 0,
+ sizeof( vlc_value_t ) );
+
+ p_input->p->i_control++;
+ }
+ vlc_cond_signal( &p_input->p->wait_control );
+ vlc_mutex_unlock( &p_input->p->lock_control );
+}
+
static inline int ControlPopNoLock( input_thread_t *p_input,
int *pi_type, vlc_value_t *p_val,
mtime_t i_deadline )