vlc | branch: master | Francois Cartegnie <[email protected]> | Mon Dec 23 00:26:40 2013 +0100| [1f9c34275de478339dc4d750b8c62f1019303897] | committer: Francois Cartegnie
demux: ogg: don't recreate decoders on same chained streams. SET_ES_FMT recreates decoders and then triggers preroll. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1f9c34275de478339dc4d750b8c62f1019303897 --- modules/demux/ogg.c | 18 +++++++++++++----- modules/demux/ogg.h | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/modules/demux/ogg.c b/modules/demux/ogg.c index 4fea06a..839672a 100644 --- a/modules/demux/ogg.c +++ b/modules/demux/ogg.c @@ -1296,9 +1296,9 @@ static void Ogg_DecodePacket( demux_t *p_demux, p_block->i_buffer = 0; } - if ( p_stream->b_reusing ) + if ( p_stream->b_reusing_with_other_fmt ) { - p_stream->b_reusing = false; + p_stream->b_reusing_with_other_fmt = false; p_block->i_flags |= BLOCK_FLAG_DISCONTINUITY; } @@ -1872,13 +1872,19 @@ static void Ogg_CreateES( demux_t *p_demux ) p_stream->b_finished = false; p_stream->b_reinit = false; p_stream->b_initializing = false; - p_stream->b_reusing = true; + es_format_Copy( &p_stream->fmt_old, &p_old_stream->fmt ); + if ( !es_format_IsSimilar( &p_stream->fmt_old, &p_old_stream->fmt ) ) + { + msg_Dbg( p_demux, "recreating decoders using SET_FMT" ); + es_out_Control( p_demux->out, ES_OUT_SET_ES_FMT, + p_stream->p_es, &p_stream->fmt ); + p_stream->b_reusing_with_other_fmt = true; + } + p_old_stream->p_es = NULL; p_old_stream = NULL; - es_out_Control( p_demux->out, ES_OUT_SET_ES_FMT, - p_stream->p_es, &p_stream->fmt ); } else { @@ -1903,6 +1909,8 @@ static void Ogg_CreateES( demux_t *p_demux ) } } + + /**************************************************************************** * Ogg_BeginningOfStream: Look for Beginning of Stream ogg pages and add * Elementary streams. diff --git a/modules/demux/ogg.h b/modules/demux/ogg.h index a2d547a..3f527f9 100644 --- a/modules/demux/ogg.h +++ b/modules/demux/ogg.h @@ -75,7 +75,7 @@ typedef struct logical_stream_s bool b_initializing; bool b_finished; bool b_reinit; - bool b_reusing; + bool b_reusing_with_other_fmt; bool b_oggds; int i_granule_shift; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
