[vlc-devel] [RFC PATCH] decoder: fix a "restart module" regression

Thomas Guillem thomas at gllm.fr
Wed Sep 16 17:44:02 CEST 2015

In a previous commit, when a module is restarted, I decided to drain the module
by calling DecoderDecodeAudio( p_dec, NULL ) or DecoderDecodeVideo( p_dec, NULL

There is an issue with mpeg_audio: pf_decode will return a block, and
aout_update_format will try to create an aout with a zeroed fmt_out, it will
fail and p_dec->b_error will be true.

There is a lot of way to fix this issue:

 1/ reset b_error to false when restarting a module.

 2/ Don't call DecoderDecodeAudio( p_dec, NULL ) or DecoderDecodeVideo( p_dec,
    NULL ) if there is no previous block decoded.

 3/ fix each modules to not return a invalid block when drained.

I would go for 1 and 3.
 src/input/decoder.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/input/decoder.c b/src/input/decoder.c
index c64a515..dc2cd84 100644
--- a/src/input/decoder.c
+++ b/src/input/decoder.c
@@ -187,6 +187,7 @@ static void UnloadDecoder( decoder_t *p_dec )
     es_format_Clean( &p_dec->fmt_in );
     es_format_Clean( &p_dec->fmt_out );
+    p_dec->b_error = false;
 static void DecoderUpdateFormatLocked( decoder_t *p_dec )

More information about the vlc-devel mailing list