[vlc-devel] [PATCH] es_out: prevent fmt update with != i_id
Thomas Guillem
thomas at gllm.fr
Fri Aug 17 13:43:40 CEST 2018
---
include/vlc_es_out.h | 5 +++--
src/input/es_out.c | 3 ++-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/include/vlc_es_out.h b/include/vlc_es_out.h
index 627b1c5494..83add54f3f 100644
--- a/include/vlc_es_out.h
+++ b/include/vlc_es_out.h
@@ -64,8 +64,9 @@ enum es_out_query_e
ES_OUT_SET_GROUP_PCR, /* arg1= int i_group, arg2=vlc_tick_t i_pcr(microsecond!)*/
ES_OUT_RESET_PCR, /* no arg */
- /* Try not to use this one as it is a bit hacky */
- ES_OUT_SET_ES_FMT, /* arg1= es_out_id_t* arg2=es_format_t* */
+ /* This will update the fmt, drain and restart the decoder (if any).
+ * The new fmt must have the same i_cat and i_id. */
+ ES_OUT_SET_ES_FMT, /* arg1= es_out_id_t* arg2=es_format_t* res=can fail */
/* Allow preroll of data (data with dts/pts < i_pts for all ES will be decoded but not displayed */
ES_OUT_SET_NEXT_DISPLAY_TIME, /* arg1=int64_t i_pts(microsecond) */
diff --git a/src/input/es_out.c b/src/input/es_out.c
index 000cad3f97..056c60d1ec 100644
--- a/src/input/es_out.c
+++ b/src/input/es_out.c
@@ -2633,7 +2633,8 @@ static int EsOutVaControlLocked( es_out_t *out, int i_query, va_list args )
{
es_out_id_t *es = va_arg( args, es_out_id_t * );
es_format_t *p_fmt = va_arg( args, es_format_t * );
- if( es == NULL || es->fmt.i_cat != p_fmt->i_cat )
+ if( es == NULL || es->fmt.i_cat != p_fmt->i_cat
+ || es->fmt.i_id != p_fmt->i_id )
return VLC_EGENERIC;
es_format_Clean( &es->fmt );
--
2.18.0
More information about the vlc-devel
mailing list