Commit 41052ba5 authored by Edward Wang's avatar Edward Wang Committed by Jean-Baptiste Kempf

opensles_android: Implement TimeGet

Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent a44da88b
...@@ -138,11 +138,26 @@ static void Pause(audio_output_t *p_aout, bool pause, mtime_t date) ...@@ -138,11 +138,26 @@ static void Pause(audio_output_t *p_aout, bool pause, mtime_t date)
pause ? SL_PLAYSTATE_PAUSED : SL_PLAYSTATE_PLAYING ); pause ? SL_PLAYSTATE_PAUSED : SL_PLAYSTATE_PLAYING );
} }
static int TimeGet(audio_output_t* p_aout, mtime_t* restrict drift)
{
aout_sys_t *p_sys = p_aout->sys;
mtime_t delay = p_sys->length;
SLAndroidSimpleBufferQueueState st;
SLresult res = GetState(p_sys->playerBufferQueue, &st);
if (unlikely(res != SL_RESULT_SUCCESS)) {
msg_Err(p_aout, "Could not query buffer queue state in TimeGet (%lu)", res);
return -1;
}
if (delay && st.count)
*drift = mdate() + delay;
return 0;
}
/***************************************************************************** /*****************************************************************************
* Play: play a sound * Play: play a sound
*****************************************************************************/ *****************************************************************************/
static void Play( audio_output_t *p_aout, block_t *p_buffer, static void Play( audio_output_t *p_aout, block_t *p_buffer )
mtime_t *restrict drift )
{ {
aout_sys_t *p_sys = p_aout->sys; aout_sys_t *p_sys = p_aout->sys;
int tries = 5; int tries = 5;
...@@ -161,7 +176,6 @@ static void Play( audio_output_t *p_aout, block_t *p_buffer, ...@@ -161,7 +176,6 @@ static void Play( audio_output_t *p_aout, block_t *p_buffer,
vlc_mutex_lock( &p_sys->lock ); vlc_mutex_lock( &p_sys->lock );
mtime_t delay = p_sys->length;
p_sys->length += p_buffer->i_length; p_sys->length += p_buffer->i_length;
/* If something bad happens, we must remove this buffer from the FIFO */ /* If something bad happens, we must remove this buffer from the FIFO */
...@@ -171,9 +185,6 @@ static void Play( audio_output_t *p_aout, block_t *p_buffer, ...@@ -171,9 +185,6 @@ static void Play( audio_output_t *p_aout, block_t *p_buffer,
block_ChainLastAppend( &p_sys->pp_last, p_buffer ); block_ChainLastAppend( &p_sys->pp_last, p_buffer );
vlc_mutex_unlock( &p_sys->lock ); vlc_mutex_unlock( &p_sys->lock );
if (delay && st.count)
*drift = mdate() + delay - p_buffer->i_pts;
for (;;) for (;;)
{ {
SLresult result = Enqueue( p_sys->playerBufferQueue, p_buffer->p_buffer, SLresult result = Enqueue( p_sys->playerBufferQueue, p_buffer->p_buffer,
...@@ -405,5 +416,6 @@ static int Open (vlc_object_t *obj) ...@@ -405,5 +416,6 @@ static int Open (vlc_object_t *obj)
/* FIXME: set volume/mute here */ /* FIXME: set volume/mute here */
aout->start = Start; aout->start = Start;
aout->stop = Stop; aout->stop = Stop;
aout->time_get = TimeGet;
return VLC_SUCCESS; return VLC_SUCCESS;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment