[vlc-commits] audiotrack: more precise sleep when buffer is full
Thomas Guillem
git at videolan.org
Thu Jul 23 10:56:16 CEST 2015
vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Thu Jul 9 12:03:34 2015 +0200| [92f33654a9aa765042985dcc2a67c6cdb58920cb] | committer: Thomas Guillem
audiotrack: more precise sleep when buffer is full
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=92f33654a9aa765042985dcc2a67c6cdb58920cb
---
modules/audio_output/audiotrack.c | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/modules/audio_output/audiotrack.c b/modules/audio_output/audiotrack.c
index cf92da5..557de46 100644
--- a/modules/audio_output/audiotrack.c
+++ b/modules/audio_output/audiotrack.c
@@ -1313,8 +1313,7 @@ AudioTrack_PreparePlay( JNIEnv *env, audio_output_t *p_aout,
static int
AudioTrack_Play( JNIEnv *env, audio_output_t *p_aout,
- block_t *p_buffer, size_t *p_buffer_offset, mtime_t *p_wait,
- bool b_force )
+ block_t *p_buffer, size_t *p_buffer_offset, bool b_force )
{
aout_sys_t *p_sys = p_aout->sys;
int i_ret;
@@ -1358,11 +1357,6 @@ AudioTrack_Play( JNIEnv *env, audio_output_t *p_aout,
str = "ERROR";
msg_Err( p_aout, "Write failed: %s", str );
}
- } else if( i_ret == 0 )
- {
- /* audiotrack internal buffer is full, wait a little: between 10ms and
- * 20ms depending on devices or rate */
- *p_wait = FRAMES_TO_US( p_sys->i_max_audiotrack_samples / 20 );
} else
{
uint64_t i_samples = BYTES_TO_FRAMES( i_ret );
@@ -1396,10 +1390,7 @@ Play( audio_output_t *p_aout, block_t *p_buffer )
if( i_play_wait != 0 )
msleep( i_play_wait );
- i_play_wait = 0;
- i_ret = AudioTrack_Play( env, p_aout, p_buffer,
- &i_buffer_offset,
- &i_play_wait,
+ i_ret = AudioTrack_Play( env, p_aout, p_buffer, &i_buffer_offset,
i_nb_try > 100 );
if( i_ret < 0 )
p_sys->b_error = true;
@@ -1413,6 +1404,14 @@ Play( audio_output_t *p_aout, block_t *p_buffer )
* quickly. */
i_nb_try = i_ret == 0 ? i_nb_try + 1 : 0;
}
+
+ if( p_buffer->i_buffer - i_buffer_offset > 0 )
+ {
+ i_play_wait = FRAMES_TO_US( BYTES_TO_FRAMES( p_buffer->i_buffer
+ - i_buffer_offset ) );
+ i_play_wait = __MAX( 10000, i_play_wait );
+ }
+
}
bailout:
block_Release( p_buffer );
More information about the vlc-commits
mailing list