int i_video;
int i_sub;
- /* es to select */
+ /* es/group to select */
+ int i_group_id;
int i_audio_last, i_audio_id;
int i_sub_last, i_sub_id;
int i_default_sub_id; /* As specified in container; if applicable */
p_sys->i_sub = 0;
/* */
+ p_sys->i_group_id = var_GetInteger( p_input, "program" );
+
p_sys->i_audio_last = var_GetInteger( p_input, "audio-track" );
p_sys->i_sub_last = var_GetInteger( p_input, "sub-track" );
EsOutESVarUpdateGeneric( out, es->i_id, &es->fmt, es->psz_language, b_delete );
}
+static bool EsOutIsProgramVisible( es_out_t *out, int i_group )
+{
+ return out->p_sys->i_group_id == 0 || out->p_sys->i_group_id == i_group;
+}
+
/* EsOutProgramSelect:
* Select a program and update the object variable
*/
TAB_APPEND( p_sys->i_pgrm, p_sys->pgrm, p_pgrm );
/* Update "program" variable */
- input_SendEventProgramAdd( p_input, i_group, NULL );
+ if( EsOutIsProgramVisible( out, i_group ) )
+ input_SendEventProgramAdd( p_input, i_group, NULL );
- if( i_group == var_GetInteger( p_input, "program" ) )
+ if( i_group == p_sys->i_group_id || ( !p_sys->p_pgrm && p_sys->i_group_id == 0 ) )
EsOutProgramSelect( out, p_pgrm );
return p_pgrm;
return;
}
/* Find program */
+ if( !EsOutIsProgramVisible( out, i_group ) )
+ return;
p_pgrm = EsOutProgramFind( out, i_group );
if( !p_pgrm )
return;
char *psz_cat;
/* Find program */
+ if( !EsOutIsProgramVisible( out, i_group ) )
+ return;
p_pgrm = EsOutProgramFind( out, i_group );
if( !p_pgrm )
return;
return VLC_SUCCESS;
}
+ case ES_OUT_GET_GROUP_FORCED:
+ {
+ int *pi_group = va_arg( args, int * );
+ *pi_group = p_sys->i_group_id;
+ return VLC_SUCCESS;
+ }
+
case ES_OUT_SET_MODE:
{
const int i_mode = va_arg( args, int );
/* Set jitter */
ES_OUT_SET_JITTER, /* arg1=mtime_t i_pts_delay arg2= mtime_t i_pts_jitter, arg2=int i_cr_average res=cannot fail */
+
+ /* Get forced group */
+ ES_OUT_GET_GROUP_FORCED, /* arg1=int * res=cannot fail */
};
static inline void es_out_SetMode( es_out_t *p_out, int i_mode )
{
return es_out_Control( p_out, ES_OUT_GET_ES_OBJECTS_BY_ID, i_id, pp_decoder, pp_vout, pp_aout );
}
+static inline int es_out_GetGroupForced( es_out_t *p_out )
+{
+ int i_group;
+ int i_ret = es_out_Control( p_out, ES_OUT_GET_GROUP_FORCED, &i_group );
+ assert( !i_ret );
+ return i_group;
+}
es_out_t *input_EsOutNew( input_thread_t *, int i_rate );
}
return es_out_Control( p_sys->p_out, ES_OUT_GET_ES_STATE, p_es->p_es, pb_enabled );
}
-
/* Special internal input control */
case ES_OUT_GET_EMPTY:
{
return es_out_ControlModifyPcrSystem( p_sys->p_out, b_absolute, i_system );
}
+ case ES_OUT_GET_GROUP_FORCED:
+ {
+ int *pi_group = va_arg( args, int * );
+ return es_out_Control( p_sys->p_out, ES_OUT_GET_GROUP_FORCED, pi_group );
+ }
+
+
default:
msg_Err( p_sys->p_input, "Unknown es_out_Control query !" );
assert(0);