diff options
author | Scott Jackson <daneren2005@gmail.com> | 2012-12-13 19:47:42 -0800 |
---|---|---|
committer | Scott Jackson <daneren2005@gmail.com> | 2012-12-13 19:47:42 -0800 |
commit | b88942fd78b2f62e4e040453b4479166dc90968a (patch) | |
tree | dc2fe23e51876de5d0b33faee2dfe52a03a25c93 | |
parent | bcae7366c015165e9afbea9d0d3ded0f6e47524d (diff) | |
download | dsub-b88942fd78b2f62e4e040453b4479166dc90968a.tar.gz dsub-b88942fd78b2f62e4e040453b4479166dc90968a.tar.bz2 dsub-b88942fd78b2f62e4e040453b4479166dc90968a.zip |
Async buffering -> eliminates block that can cause freezing for some
-rw-r--r-- | subsonic-android/src/github/daneren2005/dsub/service/DownloadServiceImpl.java | 46 |
1 files changed, 29 insertions, 17 deletions
diff --git a/subsonic-android/src/github/daneren2005/dsub/service/DownloadServiceImpl.java b/subsonic-android/src/github/daneren2005/dsub/service/DownloadServiceImpl.java index 11e81ec5..0c4d7930 100644 --- a/subsonic-android/src/github/daneren2005/dsub/service/DownloadServiceImpl.java +++ b/subsonic-android/src/github/daneren2005/dsub/service/DownloadServiceImpl.java @@ -819,7 +819,7 @@ public class DownloadServiceImpl extends Service implements DownloadService { bufferTask.start(); } - private synchronized void doPlay(final DownloadFile downloadFile, int position, boolean start) { + private synchronized void doPlay(final DownloadFile downloadFile, final int position, final boolean start) { // TODO: Start play at curr pos on rebuffer instead of restart try { final File file = downloadFile.isCompleteFileAvailable() ? downloadFile.getCompleteFile() : downloadFile.getPartialFile(); @@ -830,8 +830,32 @@ public class DownloadServiceImpl extends Service implements DownloadService { mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDataSource(file.getPath()); setPlayerState(PREPARING); - mediaPlayer.prepare(); - setPlayerState(PREPARED); + + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + public void onPrepared(MediaPlayer mp) { + try { + setPlayerState(PREPARED); + + synchronized (DownloadServiceImpl.this) { + if (position != 0) { + Log.i(TAG, "Restarting player from position " + position); + mediaPlayer.seekTo(position); + } + + if (start) { + mediaPlayer.start(); + setPlayerState(STARTED); + } else { + setPlayerState(PAUSED); + } + } + + lifecycleSupport.serializeDownloadQueue(); + } catch (Exception x) { + handleError(x); + } + } + }); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override @@ -875,20 +899,8 @@ public class DownloadServiceImpl extends Service implements DownloadService { } } }); - - if (position != 0) { - Log.i(TAG, "Restarting player from position " + position); - mediaPlayer.seekTo(position); - } - - if (start) { - mediaPlayer.start(); - setPlayerState(STARTED); - } else { - setPlayerState(PAUSED); - } - lifecycleSupport.serializeDownloadQueue(); - + + mediaPlayer.prepareAsync(); } catch (Exception x) { handleError(x); } |