vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Tue Jan 26 20:10:37 2016 +0200| [f19a7b9ebc7802ca025c26d90d6ff96f08af3b60] | committer: Rémi Denis-Courmont
decoder: merge two functions > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f19a7b9ebc7802ca025c26d90d6ff96f08af3b60 --- src/input/decoder.c | 68 ++++++++++++++++++++++----------------------------- 1 file changed, 29 insertions(+), 39 deletions(-) diff --git a/src/input/decoder.c b/src/input/decoder.c index f3928e8..e065c21 100644 --- a/src/input/decoder.c +++ b/src/input/decoder.c @@ -1037,10 +1037,33 @@ static void DecoderProcessVideo( decoder_t *p_dec, block_t *p_block ) } } -static void DecoderPlayAudio( decoder_t *p_dec, block_t *p_audio, - int *pi_played_sum, int *pi_lost_sum ) +static int DecoderPlayAudio( decoder_t *p_dec, block_t *p_audio, + int *pi_played_sum, int *pi_lost_sum ) { decoder_owner_sys_t *p_owner = p_dec->p_owner; + bool prerolled; + + assert( p_audio != NULL ); + + vlc_mutex_lock( &p_owner->lock ); + if( p_owner->i_preroll_end > p_audio->i_pts ) + { + vlc_mutex_unlock( &p_owner->lock ); + block_Release( p_audio ); + return -1; + } + + 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" ); + + if( p_owner->p_aout ) + aout_DecFlush( p_owner->p_aout, false ); + } /* */ if( p_audio->i_pts <= VLC_TS_INVALID ) // FIXME --VLC_TS_INVALID verify audio_output/* @@ -1048,7 +1071,7 @@ static void DecoderPlayAudio( decoder_t *p_dec, block_t *p_audio, msg_Warn( p_dec, "non-dated audio buffer received" ); *pi_lost_sum += 1; block_Release( p_audio ); - return; + return 0; } /* */ @@ -1077,40 +1100,13 @@ static void DecoderPlayAudio( decoder_t *p_dec, block_t *p_audio, msg_Dbg( p_dec, "discarded audio buffer" ); *pi_lost_sum += 1; block_Release( p_audio ); - return; + return 0; } if( aout_DecPlay( p_aout, p_audio, i_rate ) == 0 ) *pi_played_sum += 1; *pi_lost_sum += aout_DecGetResetLost( p_aout ); -} - -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 > p_aout_buf->i_pts ) - { - vlc_mutex_unlock( &p_owner->lock ); - block_Release( p_aout_buf ); - return -1; - } - - 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" ); - - if( p_owner->p_aout ) - aout_DecFlush( p_owner->p_aout, false ); - } - return 0; } @@ -1133,17 +1129,14 @@ static void DecoderUpdateStatAudio( decoder_t *p_dec, int i_decoded, static int DecoderQueueAudio( decoder_t *p_dec, block_t *p_aout_buf ) { - assert( p_aout_buf ); int i_lost = 0; int i_played = 0; - int i_ret; - if( ( i_ret = DecoderPreparePlayAudio( p_dec, p_aout_buf ) ) == 0 ) - DecoderPlayAudio( p_dec, p_aout_buf, &i_played, &i_lost ); + int ret = DecoderPlayAudio( p_dec, p_aout_buf, &i_played, &i_lost ); DecoderUpdateStatAudio( p_dec, 1, i_lost, i_played ); - return i_ret; + return ret; } static void DecoderDecodeAudio( decoder_t *p_dec, block_t *p_block ) @@ -1158,9 +1151,6 @@ static void DecoderDecodeAudio( decoder_t *p_dec, block_t *p_block ) { i_decoded++; - if( DecoderPreparePlayAudio( p_dec, p_aout_buf ) != 0 ) - continue; - DecoderPlayAudio( p_dec, p_aout_buf, &i_played, &i_lost ); } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
