vlc | branch: master | Thomas Guillem <[email protected]> | Mon Nov 23 17:21:26 2020 +0100| [a726098adb1595efb331e808a20c0794346e8a03] | committer: Thomas Guillem
audiotrack: wrap arround AudioTimestamp.framePosition cf. https://developer.android.com/reference/android/media/AudioTimestamp#framePosition > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a726098adb1595efb331e808a20c0794346e8a03 --- modules/audio_output/audiotrack.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/modules/audio_output/audiotrack.c b/modules/audio_output/audiotrack.c index ed634beb06..7182f0b8fe 100644 --- a/modules/audio_output/audiotrack.c +++ b/modules/audio_output/audiotrack.c @@ -106,7 +106,11 @@ typedef struct struct { jobject p_obj; /* AudioTimestamp ref */ vlc_tick_t i_frame_us; - jlong i_frame_pos; + + jlong i_frame_post_last; + uint64_t i_frame_wrap_count; + uint64_t i_frame_pos; + vlc_tick_t i_play_time; /* time when play was called */ vlc_tick_t i_last_time; } timestamp; @@ -612,6 +616,9 @@ AudioTrack_ResetWrapCount( JNIEnv *env, audio_output_t *p_aout ) p_sys->headpos.i_last = 0; p_sys->headpos.i_wrap_count = 0; + + p_sys->timestamp.i_frame_post_last = 0; + p_sys->timestamp.i_frame_wrap_count = 0; } /** @@ -748,7 +755,15 @@ AudioTrack_GetTimestampPositionUs( JNIEnv *env, audio_output_t *p_aout ) if( JNI_AT_CALL_BOOL( getTimestamp, p_sys->timestamp.p_obj ) ) { p_sys->timestamp.i_frame_us = VLC_TICK_FROM_NS(JNI_AUDIOTIMESTAMP_GET_LONG( nanoTime )); - p_sys->timestamp.i_frame_pos = JNI_AUDIOTIMESTAMP_GET_LONG( framePosition ); + + /* the low-order 32 bits of position is in wrapping frame units + * similar to AudioTrack#getPlaybackHeadPosition. */ + jlong i_frame_post_last = JNI_AUDIOTIMESTAMP_GET_LONG( framePosition ); + if( p_sys->timestamp.i_frame_post_last > i_frame_post_last ) + p_sys->timestamp.i_frame_wrap_count++; + p_sys->timestamp.i_frame_post_last = i_frame_post_last; + p_sys->timestamp.i_frame_pos = i_frame_post_last + + (p_sys->timestamp.i_frame_wrap_count << 32); } else { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
