+/* Pause input */
+static void ControlPause( input_thread_t *p_input, mtime_t i_control_date )
+{
+ int i_ret;
+ int i_state;
+ if( p_input->p->input.p_access )
+ i_ret = access_Control( p_input->p->input.p_access,
+ ACCESS_SET_PAUSE_STATE, true );
+ else
+ i_ret = demux_Control( p_input->p->input.p_demux,
+ DEMUX_SET_PAUSE_STATE, true );
+
+ i_state = PAUSE_S;
+ if( i_ret )
+ {
+ msg_Warn( p_input, "cannot set pause state" );
+ i_state = p_input->i_state;
+ }
+
+ /* Switch to new state */
+ input_ChangeStateWithVarCallback( p_input, i_state, false );
+
+ /* */
+ if( !i_ret )
+ input_EsOutChangePause( p_input->p->p_es_out, true, i_control_date );
+}
+static void ControlUnpause( input_thread_t *p_input, mtime_t i_control_date )
+{
+ int i_ret;
+ if( p_input->p->input.p_access )
+ i_ret = access_Control( p_input->p->input.p_access,
+ ACCESS_SET_PAUSE_STATE, false );
+ else
+ i_ret = demux_Control( p_input->p->input.p_demux,
+ DEMUX_SET_PAUSE_STATE, false );
+
+ if( i_ret )
+ {
+ /* FIXME What to do ? */
+ msg_Warn( p_input, "cannot unset pause -> EOF" );
+ vlc_mutex_unlock( &p_input->p->lock_control );
+ input_ControlPush( p_input, INPUT_CONTROL_SET_DIE, NULL );
+ vlc_mutex_lock( &p_input->p->lock_control );
+ }
+
+ /* Switch to play */
+ input_ChangeStateWithVarCallback( p_input, PLAYING_S, false );
+
+ /* */
+ if( !i_ret )
+ input_EsOutChangePause( p_input->p->p_es_out, false, i_control_date );
+}