Commit f137ba51 authored by Laurent Aimar's avatar Laurent Aimar

Allow using es_out timeshift pause support.

parent 7e1b9f44
...@@ -490,7 +490,7 @@ void input_StopThread( input_thread_t *p_input ) ...@@ -490,7 +490,7 @@ void input_StopThread( input_thread_t *p_input )
input_ControlPush( p_input, INPUT_CONTROL_SET_DIE, NULL ); input_ControlPush( p_input, INPUT_CONTROL_SET_DIE, NULL );
} }
sout_instance_t * input_DetachSout( input_thread_t *p_input ) sout_instance_t *input_DetachSout( input_thread_t *p_input )
{ {
assert( p_input->b_dead ); assert( p_input->b_dead );
sout_instance_t *p_sout = p_input->p->p_sout; sout_instance_t *p_sout = p_input->p->p_sout;
...@@ -504,7 +504,7 @@ sout_instance_t * input_DetachSout( input_thread_t *p_input ) ...@@ -504,7 +504,7 @@ sout_instance_t * input_DetachSout( input_thread_t *p_input )
* This is the "normal" thread that spawns the input processing chain, * This is the "normal" thread that spawns the input processing chain,
* reads the stream, cleans up and waits * reads the stream, cleans up and waits
*****************************************************************************/ *****************************************************************************/
static void* Run( vlc_object_t *p_this ) static void *Run( vlc_object_t *p_this )
{ {
input_thread_t *p_input = (input_thread_t *)p_this; input_thread_t *p_input = (input_thread_t *)p_this;
const int canc = vlc_savecancel(); const int canc = vlc_savecancel();
...@@ -536,7 +536,7 @@ exit: ...@@ -536,7 +536,7 @@ exit:
* This is the "just forget me" thread that spawns the input processing chain, * This is the "just forget me" thread that spawns the input processing chain,
* reads the stream, cleans up and releases memory * reads the stream, cleans up and releases memory
*****************************************************************************/ *****************************************************************************/
static void* RunAndDestroy( vlc_object_t *p_this ) static void *RunAndDestroy( vlc_object_t *p_this )
{ {
input_thread_t *p_input = (input_thread_t *)p_this; input_thread_t *p_input = (input_thread_t *)p_this;
const int canc = vlc_savecancel(); const int canc = vlc_savecancel();
...@@ -1498,8 +1498,11 @@ static void ControlReduce( input_thread_t *p_input ) ...@@ -1498,8 +1498,11 @@ static void ControlReduce( input_thread_t *p_input )
/* Pause input */ /* Pause input */
static void ControlPause( input_thread_t *p_input, mtime_t i_control_date ) static void ControlPause( input_thread_t *p_input, mtime_t i_control_date )
{ {
int i_ret; int i_ret = VLC_SUCCESS;
int i_state; int i_state = PAUSE_S;
if( p_input->p->b_can_pause )
{
if( p_input->p->input.p_access ) if( p_input->p->input.p_access )
i_ret = access_Control( p_input->p->input.p_access, i_ret = access_Control( p_input->p->input.p_access,
ACCESS_SET_PAUSE_STATE, true ); ACCESS_SET_PAUSE_STATE, true );
...@@ -1507,30 +1510,32 @@ static void ControlPause( input_thread_t *p_input, mtime_t i_control_date ) ...@@ -1507,30 +1510,32 @@ static void ControlPause( input_thread_t *p_input, mtime_t i_control_date )
i_ret = demux_Control( p_input->p->input.p_demux, i_ret = demux_Control( p_input->p->input.p_demux,
DEMUX_SET_PAUSE_STATE, true ); DEMUX_SET_PAUSE_STATE, true );
i_state = PAUSE_S;
if( i_ret ) if( i_ret )
{ {
msg_Warn( p_input, "cannot set pause state" ); msg_Warn( p_input, "cannot set pause state" );
i_state = p_input->i_state; i_state = p_input->i_state;
} }
}
/* Switch to new state */ /* Switch to new state */
input_ChangeStateWithVarCallback( p_input, i_state, false ); input_ChangeStateWithVarCallback( p_input, i_state, false );
/* */ /* */
if( !i_ret ) if( !i_ret )
es_out_SetPauseState( p_input->p->p_es_out, true, true, i_control_date ); es_out_SetPauseState( p_input->p->p_es_out, p_input->p->b_can_pause, true, i_control_date );
} }
static void ControlUnpause( input_thread_t *p_input, mtime_t i_control_date ) static void ControlUnpause( input_thread_t *p_input, mtime_t i_control_date )
{ {
int i_ret; int i_ret = VLC_SUCCESS;
if( p_input->p->b_can_pause )
{
if( p_input->p->input.p_access ) if( p_input->p->input.p_access )
i_ret = access_Control( p_input->p->input.p_access, i_ret = access_Control( p_input->p->input.p_access,
ACCESS_SET_PAUSE_STATE, false ); ACCESS_SET_PAUSE_STATE, false );
else else
i_ret = demux_Control( p_input->p->input.p_demux, i_ret = demux_Control( p_input->p->input.p_demux,
DEMUX_SET_PAUSE_STATE, false ); DEMUX_SET_PAUSE_STATE, false );
if( i_ret ) if( i_ret )
{ {
/* FIXME What to do ? */ /* FIXME What to do ? */
...@@ -1539,6 +1544,7 @@ static void ControlUnpause( input_thread_t *p_input, mtime_t i_control_date ) ...@@ -1539,6 +1544,7 @@ static void ControlUnpause( input_thread_t *p_input, mtime_t i_control_date )
input_ControlPush( p_input, INPUT_CONTROL_SET_DIE, NULL ); input_ControlPush( p_input, INPUT_CONTROL_SET_DIE, NULL );
vlc_mutex_lock( &p_input->p->lock_control ); vlc_mutex_lock( &p_input->p->lock_control );
} }
}
/* Switch to play */ /* Switch to play */
input_ChangeStateWithVarCallback( p_input, PLAYING_S, false ); input_ChangeStateWithVarCallback( p_input, PLAYING_S, false );
...@@ -1676,14 +1682,14 @@ static bool Control( input_thread_t *p_input, int i_type, ...@@ -1676,14 +1682,14 @@ static bool Control( input_thread_t *p_input, int i_type,
b_force_update = true; b_force_update = true;
} }
else if( val.i_int == PAUSE_S && p_input->i_state == PLAYING_S && else if( val.i_int == PAUSE_S && p_input->i_state == PLAYING_S /* &&
p_input->p->b_can_pause ) p_input->p->b_can_pause */ )
{ {
ControlPause( p_input, i_control_date ); ControlPause( p_input, i_control_date );
b_force_update = true; b_force_update = true;
} }
else if( val.i_int == PAUSE_S && !p_input->p->b_can_pause ) else if( val.i_int == PAUSE_S && !p_input->p->b_can_pause && 0 )
{ {
b_force_update = true; b_force_update = true;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment