[vlc-commits] opensles: more precise TimeGet

Rafaël Carré git at videolan.org
Sun Dec 16 11:12:55 CET 2012


vlc | branch: master | Rafaël Carré <funman at videolan.org> | Sun Dec 16 10:31:05 2012 +0100| [a1d30f6095adb1432bfc353f90ea0945b59c3752] | committer: Rafaël Carré

opensles: more precise TimeGet

Take in account the time elapsed since the last callback

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a1d30f6095adb1432bfc353f90ea0945b59c3752
---

 modules/audio_output/opensles_android.c |    6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/modules/audio_output/opensles_android.c b/modules/audio_output/opensles_android.c
index 5f77e65..762fd60 100644
--- a/modules/audio_output/opensles_android.c
+++ b/modules/audio_output/opensles_android.c
@@ -72,6 +72,7 @@ struct aout_sys_t
     mtime_t                         length;
 
     int                             buffers;
+    mtime_t                         last_callback;
 
     /* audio buffered through opensles */
     block_t                        *p_chain;
@@ -168,8 +169,12 @@ static int TimeGet(audio_output_t* p_aout, mtime_t* restrict drift)
 
     vlc_mutex_lock( &p_sys->lock );
     mtime_t delay = p_sys->length;
+    mtime_t last_callback = p_sys->last_callback;
     vlc_mutex_unlock( &p_sys->lock );
 
+    if (last_callback != 0)
+        delay += last_callback - mdate();
+
     SLAndroidSimpleBufferQueueState st;
     SLresult res = GetState(p_sys->playerBufferQueue, &st);
     if (unlikely(res != SL_RESULT_SUCCESS)) {
@@ -262,6 +267,7 @@ static void PlayedCallback (SLAndroidSimpleBufferQueueItf caller, void *pContext
 
     vlc_mutex_lock( &p_sys->lock );
     p_sys->buffers--;
+    p_sys->last_callback = mdate();
 
     p_block = p_sys->p_chain;
     assert( p_block );



More information about the vlc-commits mailing list