[vlc-devel] [PATCH 5/5] decoder: restart module if fmt_in is changed by the packetizer
Thomas Guillem
thomas at gllm.fr
Tue Sep 8 17:04:53 CEST 2015
On Mon, Sep 7, 2015, at 18:59, Thomas Guillem wrote:
> ---
> src/input/decoder.c | 40 ++++++++++++++++++++--------------------
> 1 file changed, 20 insertions(+), 20 deletions(-)
>
> diff --git a/src/input/decoder.c b/src/input/decoder.c
> index 8e6307e..93dc3b3 100644
> --- a/src/input/decoder.c
> +++ b/src/input/decoder.c
> @@ -1052,24 +1052,17 @@ static void DecoderProcessVideo( decoder_t
> *p_dec, block_t *p_block, bool b_flus
> while( (p_packetized_block =
> p_packetizer->pf_packetize( p_packetizer, p_block ?
> &p_block : NULL )) )
> {
> - if( p_packetizer->fmt_out.i_extra && !p_dec->fmt_in.i_extra
> )
> + if( !es_format_IsSimilar( &p_dec->fmt_in,
> &p_packetizer->fmt_out ) )
> {
> - es_format_Clean( &p_dec->fmt_in );
> - es_format_Copy( &p_dec->fmt_in, &p_packetizer->fmt_out
> );
> - }
> -
> - /* If the packetizer provides aspect ratio information, pass
> it
> - * to the decoder as a hint if the decoder itself can't
> provide
> - * it. Copy it regardless of the current value of the
> decoder input
> - * format aspect ratio, to properly propagate changes in
> aspect
> - * ratio. */
> - if( p_packetizer->fmt_out.video.i_sar_num > 0 &&
> - p_packetizer->fmt_out.video.i_sar_den > 0)
> - {
> - p_dec->fmt_in.video.i_sar_num =
> - p_packetizer->fmt_out.video.i_sar_num;
> - p_dec->fmt_in.video.i_sar_den=
> - p_packetizer->fmt_out.video.i_sar_den;
> + msg_Dbg( p_dec, "restarting module due to input format
> change");
> +
I think I should add a "DecoderDecodeVideo( p_dec, NULL );" here to
drain the module before closing it.
> + UnloadDecoder( p_dec );
> + if( LoadDecoder( p_dec, false, &p_packetizer->fmt_out )
> )
> + {
> + p_dec->b_error = true;
> + block_ChainRelease( p_packetized_block );
> + return;
> + }
> }
>
> if( p_packetizer->pf_get_cc )
> @@ -1232,10 +1225,17 @@ static void DecoderProcessAudio( decoder_t
> *p_dec, block_t *p_block, bool b_flus
> while( (p_packetized_block =
> p_packetizer->pf_packetize( p_packetizer, p_block ?
> &p_block : NULL )) )
> {
> - if( p_packetizer->fmt_out.i_extra && !p_dec->fmt_in.i_extra
> )
> + if( !es_format_IsSimilar( &p_dec->fmt_in,
> &p_packetizer->fmt_out ) )
> {
> - es_format_Clean( &p_dec->fmt_in );
> - es_format_Copy( &p_dec->fmt_in, &p_packetizer->fmt_out
> );
> + msg_Dbg( p_dec, "restarting module due to input format
> change");
> +
same here for audio.
> + UnloadDecoder( p_dec );
> + if( LoadDecoder( p_dec, false, &p_packetizer->fmt_out )
> )
> + {
> + p_dec->b_error = true;
> + block_ChainRelease( p_packetized_block );
> + return;
> + }
> }
>
> while( p_packetized_block )
> --
> 2.1.4
>
More information about the vlc-devel
mailing list