From 66faaa4bdd907638c7549d498442e6f0f6c41dfd Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Wed, 10 Feb 2016 20:42:12 +0100 Subject: Wait for playback to end --- .../main/java/org/antennapod/audio/SonicAudioPlayer.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/library/src/main/java/org/antennapod/audio/SonicAudioPlayer.java b/library/src/main/java/org/antennapod/audio/SonicAudioPlayer.java index 976ce9c..e055513 100644 --- a/library/src/main/java/org/antennapod/audio/SonicAudioPlayer.java +++ b/library/src/main/java/org/antennapod/audio/SonicAudioPlayer.java @@ -612,6 +612,9 @@ public class SonicAudioPlayer extends AbstractAudioPlayer { @SuppressWarnings("deprecation") public void decode() { mDecoderThread = new Thread(new Runnable() { + + private int currHeadPos; + @Override public void run() { @@ -625,6 +628,7 @@ public class SonicAudioPlayer extends AbstractAudioPlayer { boolean sawOutputEOS = false; while (!sawInputEOS && !sawOutputEOS && mContinue) { + currHeadPos = mTrack.getPlaybackHeadPosition(); if (mCurrentState == STATE_PAUSED) { System.out.println("Decoder changed to PAUSED"); try { @@ -736,7 +740,18 @@ public class SonicAudioPlayer extends AbstractAudioPlayer { Log.d(TAG_TRACK, "Duration: " + (int) (mDuration / 1000)); Log.d(TAG_TRACK, "Current position: " + (int) (mExtractor.getSampleTime() / 1000)); mCodec.stop(); + + // wait for track to finish playing + int lastHeadPos; + do { + lastHeadPos = currHeadPos; + try { + Thread.sleep(100); + currHeadPos = mTrack.getPlaybackHeadPosition(); + } catch (InterruptedException e) { /* ignore */ } + } while(currHeadPos != lastHeadPos); mTrack.stop(); + Log.d(TAG_TRACK, "Stopped codec and track"); Log.d(TAG_TRACK, "Current position: " + (int) (mExtractor.getSampleTime() / 1000)); mIsDecoding = false; -- cgit v1.2.3