[vlc-devel] [RFC PATCH] input/decoder: copy-initialize decoder_t.fmt_out in LoadDecoder
filip at videolabs.io
Tue Jul 12 00:56:33 CEST 2016
Given that there are certain entities within the "es_format_t" that a
decoder normally cannot know about (such as "es_format_t.psz_description"),
this patch copy-initializes "p_dec->fmt_out" with data coming from the
demuxer* prior to creating the packetizer/decoder.
This patch fixes a bug where metadata associated with a track would go
missing when it is being played (because EsOutUpdateInfo is indirectly
called with an es_format_t lacking such data).
* or previous packetizer
This patch is marked as RFC because I do not know if a decoder can make
certain assumptions regarding the state of p_dec->fmt_out (such as
assuming that all data-members that requires a free are NULL).
- Can someone please enlighten me on this matter?
- Is there a better way to solve this problem?
src/input/decoder.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/input/decoder.c b/src/input/decoder.c
index 06e569d..2b900bd 100644
@@ -151,7 +151,7 @@ static int LoadDecoder( decoder_t *p_dec, bool b_packetizer,
p_dec->pf_flush = NULL;
es_format_Copy( &p_dec->fmt_in, p_fmt );
- es_format_Init( &p_dec->fmt_out, UNKNOWN_ES, 0 );
+ es_format_Copy( &p_dec->fmt_out, p_fmt );
/* Find a suitable decoder/packetizer module */
if( !b_packetizer )
@@ -162,6 +162,7 @@ static int LoadDecoder( decoder_t *p_dec, bool b_packetizer,
if( !p_dec->p_module )
es_format_Clean( &p_dec->fmt_in );
+ es_format_Clean( &p_dec->fmt_out );
More information about the vlc-devel