vlc | branch: master | Francois Cartegnie <[email protected]> | Sat Apr 2 16:34:48 2016 +0200| [1126f194421db5ea5f022a08df07c285964f25b4] | committer: Francois Cartegnie
sout: record: truncate to highest buffer head if no iframe Avoids having audio or video less parts on start > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1126f194421db5ea5f022a08df07c285964f25b4 --- modules/stream_out/record.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/modules/stream_out/record.c b/modules/stream_out/record.c index 46b5f80..3b7604a 100644 --- a/modules/stream_out/record.c +++ b/modules/stream_out/record.c @@ -503,16 +503,24 @@ static void OutputStart( sout_stream_t *p_stream ) /* Compute highest timestamp of first I over all streams */ p_sys->i_dts_start = 0; + mtime_t i_highest_head_dts = 0; for( int i = 0; i < p_sys->i_id; i++ ) { sout_stream_id_sys_t *id = p_sys->id[i]; - block_t *p_block; if( !id->id || !id->p_first ) continue; - mtime_t i_dts = id->p_first->i_dts; - for( p_block = id->p_first; p_block != NULL; p_block = p_block->p_next ) + const block_t *p_block = id->p_first; + mtime_t i_dts = p_block->i_dts; + + if( i_dts > i_highest_head_dts && + ( id->fmt.i_cat == AUDIO_ES || id->fmt.i_cat == VIDEO_ES ) ) + { + i_highest_head_dts = i_dts; + } + + for( ; p_block != NULL; p_block = p_block->p_next ) { if( p_block->i_flags & BLOCK_FLAG_TYPE_I ) { @@ -525,6 +533,9 @@ static void OutputStart( sout_stream_t *p_stream ) p_sys->i_dts_start = i_dts; } + if( p_sys->i_dts_start == 0 ) + p_sys->i_dts_start = i_highest_head_dts; + sout_stream_id_sys_t *p_cand; do { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
