Commit 2190e615 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

input: factor INPUT_CONTROL_SET_SEEKPOINT code

parent a87b4b35
......@@ -1927,60 +1927,35 @@ static bool Control( input_thread_t *p_input,
case INPUT_CONTROL_SET_SEEKPOINT:
case INPUT_CONTROL_SET_SEEKPOINT_NEXT:
case INPUT_CONTROL_SET_SEEKPOINT_PREV:
{
if( p_input->p->b_recording )
{
msg_Err( p_input, "INPUT_CONTROL_SET_SEEKPOINT(*) ignored while recording" );
break;
}
if( p_input->p->input.i_title <= 0 )
break;
if( p_input->p->input.b_title_demux &&
p_input->p->input.i_title > 0 )
int i_title, i_seekpoint;
if( p_input->p->input.b_title_demux )
{
demux_t *p_demux = p_input->p->input.p_demux;
int i_seekpoint;
int64_t i_input_time;
int64_t i_seekpoint_time;
if( i_type == INPUT_CONTROL_SET_SEEKPOINT_PREV )
{
i_title = p_demux->info.i_title;
i_seekpoint = p_demux->info.i_seekpoint;
i_seekpoint_time = p_input->p->input.title[p_demux->info.i_title]->seekpoint[i_seekpoint]->i_time_offset;
i_input_time = var_GetTime( p_input, "time" );
if( i_seekpoint_time >= 0 && i_input_time >= 0 )
{
if( i_input_time < i_seekpoint_time + 3000000 )
i_seekpoint--;
}
else
i_seekpoint--;
}
else if( i_type == INPUT_CONTROL_SET_SEEKPOINT_NEXT )
i_seekpoint = p_demux->info.i_seekpoint + 1;
else
i_seekpoint = val.i_int;
if( i_seekpoint >= 0 && i_seekpoint <
p_input->p->input.title[p_demux->info.i_title]->i_seekpoint )
{
access_t *p_access = p_input->p->input.p_access;
es_out_SetTime( p_input->p->p_es_out, -1 );
demux_Control( p_demux, DEMUX_SET_SEEKPOINT, i_seekpoint );
input_SendEventSeekpoint( p_input, p_demux->info.i_title, i_seekpoint );
}
i_title = p_access->info.i_title;
i_seekpoint = p_access->info.i_seekpoint;
}
else if( p_input->p->input.i_title > 0 )
{
access_t *p_access = p_input->p->input.p_access;
int i_seekpoint;
int64_t i_input_time;
int64_t i_seekpoint_time;
if( i_type == INPUT_CONTROL_SET_SEEKPOINT_PREV )
{
i_seekpoint = p_access->info.i_seekpoint;
i_seekpoint_time = p_input->p->input.title[p_access->info.i_title]->seekpoint[i_seekpoint]->i_time_offset;
i_input_time = var_GetTime( p_input, "time" );
int64_t i_seekpoint_time = p_input->p->input.title[i_title]->seekpoint[i_seekpoint]->i_time_offset;
int64_t i_input_time = var_GetTime( p_input, "time" );
if( i_seekpoint_time >= 0 && i_input_time >= 0 )
{
if( i_input_time < i_seekpoint_time + 3000000 )
......@@ -1990,21 +1965,24 @@ static bool Control( input_thread_t *p_input,
i_seekpoint--;
}
else if( i_type == INPUT_CONTROL_SET_SEEKPOINT_NEXT )
i_seekpoint = p_access->info.i_seekpoint + 1;
i_seekpoint++;
else
i_seekpoint = val.i_int;
if( i_seekpoint < 0
|| i_seekpoint >= p_input->p->input.title[i_title]->i_seekpoint )
break;
if( i_seekpoint >= 0 && i_seekpoint <
p_input->p->input.title[p_access->info.i_title]->i_seekpoint )
{
es_out_SetTime( p_input->p->p_es_out, -1 );
stream_Control( p_input->p->input.p_stream, STREAM_CONTROL_ACCESS,
if( p_input->p->input.b_title_demux )
demux_Control( p_input->p->input.p_demux,
DEMUX_SET_SEEKPOINT, i_seekpoint );
else
stream_Control( p_input->p->input.p_stream,
STREAM_CONTROL_ACCESS,
ACCESS_SET_SEEKPOINT, i_seekpoint );
input_SendEventSeekpoint( p_input, p_access->info.i_title, i_seekpoint );
}
}
input_SendEventSeekpoint( p_input, i_title, i_seekpoint );
break;
}
case INPUT_CONTROL_ADD_SUBTITLE:
if( val.psz_string )
......
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