X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Finput%2Fes_out.c;h=760e57bab3ebc100a5b9db4cdd873cf3a7f2385c;hb=1575796ce7f14190594b9d14e27c88ae130cf8b5;hp=eb1390c3ec02ce97a7067562caec879f086365df;hpb=5e35aa8c02c71b21b179aebb6eb3429fcded0709;p=vlc diff --git a/src/input/es_out.c b/src/input/es_out.c index eb1390c3ec..760e57bab3 100644 --- a/src/input/es_out.c +++ b/src/input/es_out.c @@ -406,7 +406,8 @@ static mtime_t EsOutGetWakeup( es_out_t *out ) /* We do not have a wake up date if the input cannot have its speed * controlled or sout is imposing its own or while buffering * - * FIXME for !p_input->p->b_can_pace_control a wkeup time is still needed to avoid too strong buffering */ + * FIXME for !p_input->p->b_can_pace_control a wake-up time is still needed + * to avoid too heavy buffering */ if( !p_input->p->b_can_pace_control || p_input->p->b_out_pace_control || p_sys->b_buffering ) @@ -768,14 +769,13 @@ static void EsOutDecoderChangeDelay( es_out_t *out, es_out_id_t *p_es ) i_delay = p_sys->i_audio_delay; else if( p_es->fmt.i_cat == SPU_ES ) i_delay = p_sys->i_spu_delay; + else + return; - if( i_delay != 0 ) - { - if( p_es->p_dec ) - input_DecoderChangeDelay( p_es->p_dec, i_delay ); - if( p_es->p_dec_record ) - input_DecoderChangeDelay( p_es->p_dec_record, i_delay ); - } + if( p_es->p_dec ) + input_DecoderChangeDelay( p_es->p_dec, i_delay ); + if( p_es->p_dec_record ) + input_DecoderChangeDelay( p_es->p_dec_record, i_delay ); } static void EsOutProgramsChangeRate( es_out_t *out ) { @@ -1194,6 +1194,8 @@ static void EsOutProgramMeta( es_out_t *out, int i_group, const vlc_meta_t *p_me return; } /* Find program */ + if( !EsOutIsProgramVisible( out, i_group ) ) + return; p_pgrm = EsOutProgramFind( out, i_group ); if( !p_pgrm ) return; @@ -1230,7 +1232,7 @@ static void EsOutProgramMeta( es_out_t *out, int i_group, const vlc_meta_t *p_me } /* ugly but it works */ - if( EsOutIsProgramVisible( out, i_group ) && psz_text ) + if( psz_text ) { input_SendEventProgramDel( p_input, i_group ); input_SendEventProgramAdd( p_input, i_group, psz_text ); @@ -1285,6 +1287,8 @@ static void EsOutProgramEpg( es_out_t *out, int i_group, const vlc_epg_t *p_epg char *psz_cat; /* Find program */ + if( !EsOutIsProgramVisible( out, i_group ) ) + return; p_pgrm = EsOutProgramFind( out, i_group ); if( !p_pgrm ) return; @@ -1955,8 +1959,6 @@ static int EsOutSend( es_out_t *out, es_out_id_t *es, block_t *p_block ) p_block->i_flags |= BLOCK_FLAG_PREROLL; } - p_block->i_rate = 0; - if( !es->p_dec ) { block_Release( p_block ); @@ -2518,7 +2520,7 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args ) vlc_object_t **pp_decoder = va_arg( args, vlc_object_t ** ); vout_thread_t **pp_vout = va_arg( args, vout_thread_t ** ); - aout_instance_t **pp_aout = va_arg( args, aout_instance_t ** ); + audio_output_t **pp_aout = va_arg( args, audio_output_t ** ); if( p_es->p_dec ) { if( pp_decoder ) @@ -2684,6 +2686,22 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args ) input_clock_ChangeSystemOrigin( p_pgrm->p_clock, b_absolute, i_system ); return VLC_SUCCESS; } + case ES_OUT_SET_EOS: + { + for (int i = 0; i < p_sys->i_es; i++) { + es_out_id_t *id = p_sys->es[i]; + decoder_t *p_dec = id->p_dec; + if (!p_dec) + continue; + block_t *p_block = block_Alloc(0); + if( !p_block ) + break; + + p_block->i_flags |= BLOCK_FLAG_CORE_EOS; + input_DecoderDecode(p_dec, p_block, false); + } + return VLC_SUCCESS; + } default: msg_Err( p_sys->p_input, "unknown query in es_out_Control" ); @@ -2985,6 +3003,15 @@ static void EsOutUpdateInfo( es_out_t *out, es_out_id_t *es, const es_format_t * info_category_AddInfo( p_cat, _("Frame rate"), "%"PRId64, div.quot ); } + if( fmt->i_codec != p_fmt_es->i_codec ) + { + const char *psz_chroma_description = + vlc_fourcc_GetDescription( VIDEO_ES, fmt->i_codec ); + if( psz_chroma_description ) + info_category_AddInfo( p_cat, _("Decoded format"), "%s", + psz_chroma_description ); + } + break; case SPU_ES: @@ -3014,4 +3041,3 @@ static void EsOutUpdateInfo( es_out_t *out, es_out_id_t *es, const es_format_t * /* */ input_Control( p_input, INPUT_REPLACE_INFOS, p_cat ); } -