Commit 3efe5e8a authored by Laurent Aimar's avatar Laurent Aimar

Split (virtually) display and demux es_out.

parent fccbbf97
...@@ -2329,16 +2329,22 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args ) ...@@ -2329,16 +2329,22 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args )
case ES_OUT_SET_PAUSE_STATE: case ES_OUT_SET_PAUSE_STATE:
{ {
const bool b = (bool)va_arg( args, int ); const bool b_source_paused = (bool)va_arg( args, int );
const bool b_paused = (bool)va_arg( args, int );
const mtime_t i_date = (mtime_t) va_arg( args, mtime_t ); const mtime_t i_date = (mtime_t) va_arg( args, mtime_t );
EsOutChangePause( out, b, i_date );
assert( !b_source_paused == !b_paused );
EsOutChangePause( out, b_paused, i_date );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
case ES_OUT_SET_RATE: case ES_OUT_SET_RATE:
{ {
const int i_src_rate = (int)va_arg( args, int );
const int i_rate = (int)va_arg( args, int ); const int i_rate = (int)va_arg( args, int );
assert( i_src_rate == i_rate );
EsOutChangeRate( out, i_rate ); EsOutChangeRate( out, i_rate );
return VLC_SUCCESS; return VLC_SUCCESS;
...@@ -2347,6 +2353,7 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args ) ...@@ -2347,6 +2353,7 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args )
case ES_OUT_SET_TIME: case ES_OUT_SET_TIME:
{ {
const mtime_t i_date = (mtime_t)va_arg( args, mtime_t ); const mtime_t i_date = (mtime_t)va_arg( args, mtime_t );
assert( i_date == -1 ); assert( i_date == -1 );
EsOutChangePosition( out ); EsOutChangePosition( out );
......
...@@ -54,10 +54,10 @@ enum es_out_query_private_e ...@@ -54,10 +54,10 @@ enum es_out_query_private_e
ES_OUT_SET_RECORD_STATE, /* arg1=bool res=can fail */ ES_OUT_SET_RECORD_STATE, /* arg1=bool res=can fail */
/* Set pause state */ /* Set pause state */
ES_OUT_SET_PAUSE_STATE, /* arg1=bool arg2=mtime_t res=can fail */ ES_OUT_SET_PAUSE_STATE, /* arg1=bool b_source_paused, bool b_paused arg2=mtime_t res=can fail */
/* Set rate */ /* Set rate */
ES_OUT_SET_RATE, /* arg1=int i_rate res=can fail */ ES_OUT_SET_RATE, /* arg1=int i_source_rate arg2=int i_rate res=can fail */
/* Set a new time */ /* Set a new time */
ES_OUT_SET_TIME, /* arg1=mtime_t res=can fail */ ES_OUT_SET_TIME, /* arg1=mtime_t res=can fail */
...@@ -104,13 +104,13 @@ static inline int es_out_SetRecordState( es_out_t *p_out, bool b_record ) ...@@ -104,13 +104,13 @@ static inline int es_out_SetRecordState( es_out_t *p_out, bool b_record )
{ {
return es_out_Control( p_out, ES_OUT_SET_RECORD_STATE, b_record ); return es_out_Control( p_out, ES_OUT_SET_RECORD_STATE, b_record );
} }
static inline int es_out_SetPauseState( es_out_t *p_out, bool b_paused, mtime_t i_date ) static inline int es_out_SetPauseState( es_out_t *p_out, bool b_source_paused, bool b_paused, mtime_t i_date )
{ {
return es_out_Control( p_out, ES_OUT_SET_PAUSE_STATE, b_paused, i_date ); return es_out_Control( p_out, ES_OUT_SET_PAUSE_STATE, b_source_paused, b_paused, i_date );
} }
static inline int es_out_SetRate( es_out_t *p_out, int i_rate ) static inline int es_out_SetRate( es_out_t *p_out, int i_source_rate, int i_rate )
{ {
return es_out_Control( p_out, ES_OUT_SET_RATE, i_rate ); return es_out_Control( p_out, ES_OUT_SET_RATE, i_source_rate, i_rate );
} }
static inline int es_out_SetTime( es_out_t *p_out, mtime_t i_date ) static inline int es_out_SetTime( es_out_t *p_out, mtime_t i_date )
{ {
......
...@@ -200,7 +200,8 @@ static input_thread_t *Create( vlc_object_t *p_parent, input_item_t *p_item, ...@@ -200,7 +200,8 @@ static input_thread_t *Create( vlc_object_t *p_parent, input_item_t *p_item,
p_input->p->b_recording = false; p_input->p->b_recording = false;
TAB_INIT( p_input->p->i_bookmark, p_input->p->bookmark ); TAB_INIT( p_input->p->i_bookmark, p_input->p->bookmark );
TAB_INIT( p_input->p->i_attachment, p_input->p->attachment ); TAB_INIT( p_input->p->i_attachment, p_input->p->attachment );
p_input->p->p_es_out = NULL; p_input->p->p_es_out_display =
p_input->p->p_es_out = NULL;
p_input->p->p_sout = NULL; p_input->p->p_sout = NULL;
p_input->p->b_out_pace_control = false; p_input->p->b_out_pace_control = false;
p_input->i_pts_delay = 0; p_input->i_pts_delay = 0;
...@@ -1182,7 +1183,8 @@ static int Init( input_thread_t * p_input ) ...@@ -1182,7 +1183,8 @@ static int Init( input_thread_t * p_input )
#endif #endif
/* Create es out */ /* Create es out */
p_input->p->p_es_out = input_EsOutNew( p_input, p_input->p->i_rate ); p_input->p->p_es_out =
p_input->p->p_es_out_display = input_EsOutNew( p_input, p_input->p->i_rate );
es_out_Control( p_input->p->p_es_out, ES_OUT_SET_ACTIVE, false ); es_out_Control( p_input->p->p_es_out, ES_OUT_SET_ACTIVE, false );
es_out_Control( p_input->p->p_es_out, ES_OUT_SET_MODE, ES_OUT_MODE_NONE ); es_out_Control( p_input->p->p_es_out, ES_OUT_SET_MODE, ES_OUT_MODE_NONE );
...@@ -1262,6 +1264,10 @@ static int Init( input_thread_t * p_input ) ...@@ -1262,6 +1264,10 @@ static int Init( input_thread_t * p_input )
error: error:
input_ChangeState( p_input, ERROR_S ); input_ChangeState( p_input, ERROR_S );
if( p_input->p->p_es_out_display )
{
//TODO
}
if( p_input->p->p_es_out ) if( p_input->p->p_es_out )
es_out_Delete( p_input->p->p_es_out ); es_out_Delete( p_input->p->p_es_out );
#ifdef ENABLE_SOUT #ifdef ENABLE_SOUT
...@@ -1304,6 +1310,7 @@ error: ...@@ -1304,6 +1310,7 @@ error:
p_input->p->input.p_stream = NULL; p_input->p->input.p_stream = NULL;
p_input->p->input.p_access = NULL; p_input->p->input.p_access = NULL;
p_input->p->p_es_out = NULL; p_input->p->p_es_out = NULL;
p_input->p->p_es_out_display = NULL;
p_input->p->p_sout = NULL; p_input->p->p_sout = NULL;
return VLC_EGENERIC; return VLC_EGENERIC;
...@@ -1350,6 +1357,10 @@ static void End( input_thread_t * p_input ) ...@@ -1350,6 +1357,10 @@ static void End( input_thread_t * p_input )
free( p_input->p->slave ); free( p_input->p->slave );
/* Unload all modules */ /* Unload all modules */
if( p_input->p->p_es_out_display )
{
//TODO
}
if( p_input->p->p_es_out ) if( p_input->p->p_es_out )
es_out_Delete( p_input->p->p_es_out ); es_out_Delete( p_input->p->p_es_out );
...@@ -1511,7 +1522,7 @@ static void ControlPause( input_thread_t *p_input, mtime_t i_control_date ) ...@@ -1511,7 +1522,7 @@ static void ControlPause( input_thread_t *p_input, mtime_t i_control_date )
/* */ /* */
if( !i_ret ) if( !i_ret )
es_out_SetPauseState( p_input->p->p_es_out, true, i_control_date ); es_out_SetPauseState( p_input->p->p_es_out, true, 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 )
{ {
...@@ -1537,7 +1548,7 @@ static void ControlUnpause( input_thread_t *p_input, mtime_t i_control_date ) ...@@ -1537,7 +1548,7 @@ static void ControlUnpause( input_thread_t *p_input, mtime_t i_control_date )
/* */ /* */
if( !i_ret ) if( !i_ret )
es_out_SetPauseState( p_input->p->p_es_out, false, i_control_date ); es_out_SetPauseState( p_input->p->p_es_out, false, false, i_control_date );
} }
static bool Control( input_thread_t *p_input, int i_type, static bool Control( input_thread_t *p_input, int i_type,
...@@ -1787,7 +1798,7 @@ static bool Control( input_thread_t *p_input, int i_type, ...@@ -1787,7 +1798,7 @@ static bool Control( input_thread_t *p_input, int i_type,
/* FIXME do we need a RESET_PCR when !p_input->p->input.b_rescale_ts ? */ /* FIXME do we need a RESET_PCR when !p_input->p->input.b_rescale_ts ? */
if( p_input->p->input.b_rescale_ts ) if( p_input->p->input.b_rescale_ts )
es_out_SetRate( p_input->p->p_es_out, i_rate ); es_out_SetRate( p_input->p->p_es_out, i_rate, i_rate );
b_force_update = true; b_force_update = true;
} }
...@@ -1805,20 +1816,20 @@ static bool Control( input_thread_t *p_input, int i_type, ...@@ -1805,20 +1816,20 @@ static bool Control( input_thread_t *p_input, int i_type,
case INPUT_CONTROL_SET_ES: case INPUT_CONTROL_SET_ES:
/* No need to force update, es_out does it if needed */ /* No need to force update, es_out does it if needed */
es_out_Control( p_input->p->p_es_out, ES_OUT_SET_ES_BY_ID, val.i_int ); es_out_Control( p_input->p->p_es_out_display, ES_OUT_SET_ES_BY_ID, val.i_int );
break; break;
case INPUT_CONTROL_RESTART_ES: case INPUT_CONTROL_RESTART_ES:
es_out_Control( p_input->p->p_es_out, ES_OUT_RESTART_ES_BY_ID, val.i_int ); es_out_Control( p_input->p->p_es_out_display, ES_OUT_RESTART_ES_BY_ID, val.i_int );
break; break;
case INPUT_CONTROL_SET_AUDIO_DELAY: case INPUT_CONTROL_SET_AUDIO_DELAY:
if( !es_out_SetDelay( p_input->p->p_es_out, AUDIO_ES, val.i_time ) ) if( !es_out_SetDelay( p_input->p->p_es_out_display, AUDIO_ES, val.i_time ) )
var_Change( p_input, "audio-delay", VLC_VAR_SETVALUE, &val, NULL ); var_Change( p_input, "audio-delay", VLC_VAR_SETVALUE, &val, NULL );
break; break;
case INPUT_CONTROL_SET_SPU_DELAY: case INPUT_CONTROL_SET_SPU_DELAY:
if( !es_out_SetDelay( p_input->p->p_es_out, SPU_ES, val.i_time ) ) if( !es_out_SetDelay( p_input->p->p_es_out_display, SPU_ES, val.i_time ) )
var_Change( p_input, "spu-delay", VLC_VAR_SETVALUE, &val, NULL ); var_Change( p_input, "spu-delay", VLC_VAR_SETVALUE, &val, NULL );
break; break;
...@@ -2029,7 +2040,7 @@ static bool Control( input_thread_t *p_input, int i_type, ...@@ -2029,7 +2040,7 @@ static bool Control( input_thread_t *p_input, int i_type,
} }
else else
{ {
if( es_out_SetRecordState( p_input->p->p_es_out, val.b_bool ) ) if( es_out_SetRecordState( p_input->p->p_es_out_display, val.b_bool ) )
val.b_bool = false; val.b_bool = false;
} }
p_input->p->b_recording = val.b_bool; p_input->p->b_recording = val.b_bool;
...@@ -3099,8 +3110,8 @@ static void SubtitleAdd( input_thread_t *p_input, char *psz_subtitle, bool b_for ...@@ -3099,8 +3110,8 @@ static void SubtitleAdd( input_thread_t *p_input, char *psz_subtitle, bool b_for
{ {
const int i_id = list.p_list->p_values[count.i_int].i_int; const int i_id = list.p_list->p_values[count.i_int].i_int;
es_out_Control( p_input->p->p_es_out, ES_OUT_SET_ES_DEFAULT_BY_ID, i_id ); es_out_Control( p_input->p->p_es_out_display, ES_OUT_SET_ES_DEFAULT_BY_ID, i_id );
es_out_Control( p_input->p->p_es_out, ES_OUT_SET_ES_BY_ID, i_id ); es_out_Control( p_input->p->p_es_out_display, ES_OUT_SET_ES_BY_ID, i_id );
} }
var_Change( p_input, "spu-es", VLC_VAR_FREELIST, &list, NULL ); var_Change( p_input, "spu-es", VLC_VAR_FREELIST, &list, NULL );
} }
......
...@@ -109,6 +109,7 @@ struct input_thread_private_t ...@@ -109,6 +109,7 @@ struct input_thread_private_t
/* Output */ /* Output */
es_out_t *p_es_out; es_out_t *p_es_out;
es_out_t *p_es_out_display;
sout_instance_t *p_sout; /* XXX Move it to es_out ? */ sout_instance_t *p_sout; /* XXX Move it to es_out ? */
bool b_out_pace_control; /* idem ? */ bool b_out_pace_control; /* idem ? */
......
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