vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Thu Dec 10 20:30:47 2015 +0200| [367536dbeac34b087987a785226c202de74b4bbc] | committer: Rémi Denis-Courmont
decoder: simplify preroll > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=367536dbeac34b087987a785226c202de74b4bbc --- src/input/decoder.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/input/decoder.c b/src/input/decoder.c index 4e190da..dd15e69 100644 --- a/src/input/decoder.c +++ b/src/input/decoder.c @@ -898,26 +898,27 @@ static int DecoderPreparePlayVideo( decoder_t *p_dec, picture_t *p_pic ) { decoder_owner_sys_t *p_owner = p_dec->p_owner; vout_thread_t *p_vout = p_owner->p_vout; + bool prerolled; vlc_mutex_lock( &p_owner->lock ); - if( p_owner->i_preroll_end > VLC_TS_INVALID && p_pic->date < p_owner->i_preroll_end ) + if( p_owner->i_preroll_end > p_pic->date ) { vlc_mutex_unlock( &p_owner->lock ); picture_Release( p_pic ); return -1; } - if( p_owner->i_preroll_end > VLC_TS_INVALID ) + prerolled = p_owner->i_preroll_end > INT64_MIN; + p_owner->i_preroll_end = INT64_MIN; + vlc_mutex_unlock( &p_owner->lock ); + + if( unlikely(prerolled) ) { - msg_Dbg( p_dec, "End of video preroll" ); - p_owner->i_preroll_end = VLC_TS_INVALID; - vlc_mutex_unlock( &p_owner->lock ); - /* */ + msg_Dbg( p_dec, "end of video preroll" ); + if( p_vout ) vout_Flush( p_vout, VLC_TS_INVALID+1 ); } - else - vlc_mutex_unlock( &p_owner->lock ); if( p_dec->pf_get_cc && ( !p_owner->p_packetizer || !p_owner->p_packetizer->pf_get_cc ) ) @@ -1083,27 +1084,27 @@ static void DecoderPlayAudio( decoder_t *p_dec, block_t *p_audio, static int DecoderPreparePlayAudio( decoder_t *p_dec, block_t *p_aout_buf ) { decoder_owner_sys_t *p_owner = p_dec->p_owner; + bool prerolled; vlc_mutex_lock( &p_owner->lock ); - if( p_owner->i_preroll_end > VLC_TS_INVALID && - p_aout_buf->i_pts < p_owner->i_preroll_end ) + if( p_owner->i_preroll_end > p_aout_buf->i_pts ) { vlc_mutex_unlock( &p_owner->lock ); block_Release( p_aout_buf ); return -1; } - if( p_owner->i_preroll_end > VLC_TS_INVALID ) + prerolled = p_owner->i_preroll_end > INT64_MIN; + p_owner->i_preroll_end = INT64_MIN; + vlc_mutex_unlock( &p_owner->lock ); + + if( unlikely(prerolled) ) { - msg_Dbg( p_dec, "End of audio preroll" ); - p_owner->i_preroll_end = VLC_TS_INVALID; - vlc_mutex_unlock( &p_owner->lock ); - /* */ + msg_Dbg( p_dec, "end of audio preroll" ); + if( p_owner->p_aout ) aout_DecFlush( p_owner->p_aout, false ); } - else - vlc_mutex_unlock( &p_owner->lock ); return 0; } @@ -1535,7 +1536,7 @@ static decoder_t * CreateDecoder( vlc_object_t *p_parent, vlc_object_release( p_dec ); return NULL; } - p_owner->i_preroll_end = VLC_TS_INVALID; + p_owner->i_preroll_end = INT64_MIN; p_owner->i_last_rate = INPUT_RATE_DEFAULT; p_owner->p_input = p_input; p_owner->p_resource = p_resource; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
