[vlc-devel] [RFC PATCH 4/6] decoder: UnloadDecoder: clean fmt_in when requested
Thomas Guillem
thomas at gllm.fr
Fri Jul 1 18:14:53 CEST 2016
---
src/input/decoder.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/src/input/decoder.c b/src/input/decoder.c
index ea49175..5cf2b63 100644
--- a/src/input/decoder.c
+++ b/src/input/decoder.c
@@ -150,7 +150,8 @@ static int LoadDecoder( decoder_t *p_dec, bool b_packetizer,
p_dec->pf_packetize = NULL;
p_dec->pf_flush = NULL;
- es_format_Copy( &p_dec->fmt_in, p_fmt );
+ if( p_fmt != NULL )
+ es_format_Copy( &p_dec->fmt_in, p_fmt );
es_format_Init( &p_dec->fmt_out, UNKNOWN_ES, 0 );
/* Find a suitable decoder/packetizer module */
@@ -171,7 +172,7 @@ static int LoadDecoder( decoder_t *p_dec, bool b_packetizer,
/**
* Unload a decoder module
*/
-static void UnloadDecoder( decoder_t *p_dec )
+static void UnloadDecoder( decoder_t *p_dec, bool b_clean_fmt_in )
{
if( p_dec->p_module )
{
@@ -185,7 +186,8 @@ static void UnloadDecoder( decoder_t *p_dec )
p_dec->p_description = NULL;
}
- es_format_Clean( &p_dec->fmt_in );
+ if( b_clean_fmt_in )
+ es_format_Clean( &p_dec->fmt_in );
es_format_Clean( &p_dec->fmt_out );
}
@@ -1009,7 +1011,7 @@ static void DecoderProcessVideo( decoder_t *p_dec, block_t *p_block )
/* Drain the decoder module */
DecoderDecodeVideo( p_dec, NULL );
/* Restart the decoder module */
- UnloadDecoder( p_dec );
+ UnloadDecoder( p_dec, true );
if( LoadDecoder( p_dec, false, &p_packetizer->fmt_out ) )
{
decoder_SetErrorGeneric( p_dec );
@@ -1192,7 +1194,7 @@ static void DecoderProcessAudio( decoder_t *p_dec, block_t *p_block )
/* Drain the decoder module */
DecoderDecodeAudio( p_dec, NULL );
/* Restart the decoder module */
- UnloadDecoder( p_dec );
+ UnloadDecoder( p_dec, true );
if( LoadDecoder( p_dec, false, &p_packetizer->fmt_out ) )
{
decoder_SetErrorGeneric( p_dec );
@@ -1687,7 +1689,7 @@ static void DeleteDecoder( decoder_t * p_dec )
(unsigned)block_FifoCount( p_owner->p_fifo ) );
const bool b_flush_spu = p_dec->fmt_out.i_cat == SPU_ES;
- UnloadDecoder( p_dec );
+ UnloadDecoder( p_dec, true );
/* Free all packets still in the decoder fifo. */
block_FifoRelease( p_owner->p_fifo );
@@ -1739,7 +1741,7 @@ static void DeleteDecoder( decoder_t * p_dec )
if( p_owner->p_packetizer )
{
- UnloadDecoder( p_owner->p_packetizer );
+ UnloadDecoder( p_owner->p_packetizer, true );
vlc_object_release( p_owner->p_packetizer );
}
--
2.8.1
More information about the vlc-devel
mailing list