From e4b35e884aec5313f4b2a0f2102fe359433f7cc6 Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Thu, 11 Sep 2014 16:26:43 +0100 Subject: [PATCH] Transition ExoPlayer to use longs for ms timestamps. --- .../demo/full/FullPlayerActivity.java | 2 +- .../demo/full/player/DemoPlayer.java | 6 +++--- .../demo/simple/SimplePlayerActivity.java | 2 +- .../google/android/exoplayer/ExoPlayer.java | 10 +++++----- .../android/exoplayer/ExoPlayerImpl.java | 14 ++++++------- .../exoplayer/ExoPlayerImplInternal.java | 20 +++++++++---------- .../parser/mp4/FragmentedMp4Extractor.java | 4 ++-- .../exoplayer/parser/mp4/TrackFragment.java | 8 ++++---- .../android/exoplayer/util/PlayerControl.java | 4 ++-- 9 files changed, 35 insertions(+), 35 deletions(-) diff --git a/demo/src/main/java/com/google/android/exoplayer/demo/full/FullPlayerActivity.java b/demo/src/main/java/com/google/android/exoplayer/demo/full/FullPlayerActivity.java index da8c1cd249..55ef6f56ee 100644 --- a/demo/src/main/java/com/google/android/exoplayer/demo/full/FullPlayerActivity.java +++ b/demo/src/main/java/com/google/android/exoplayer/demo/full/FullPlayerActivity.java @@ -70,7 +70,7 @@ public class FullPlayerActivity extends Activity implements SurfaceHolder.Callba private boolean playerNeedsPrepare; private boolean autoPlay = true; - private int playerPosition; + private long playerPosition; private boolean enableBackgroundAudio = false; private Uri contentUri; diff --git a/demo/src/main/java/com/google/android/exoplayer/demo/full/player/DemoPlayer.java b/demo/src/main/java/com/google/android/exoplayer/demo/full/player/DemoPlayer.java index bdaa2e5a73..211d08dcd7 100644 --- a/demo/src/main/java/com/google/android/exoplayer/demo/full/player/DemoPlayer.java +++ b/demo/src/main/java/com/google/android/exoplayer/demo/full/player/DemoPlayer.java @@ -310,7 +310,7 @@ public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource.EventLi player.setPlayWhenReady(playWhenReady); } - public void seekTo(int positionMs) { + public void seekTo(long positionMs) { player.seekTo(positionMs); } @@ -339,11 +339,11 @@ public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource.EventLi return playerState; } - public int getCurrentPosition() { + public long getCurrentPosition() { return player.getCurrentPosition(); } - public int getDuration() { + public long getDuration() { return player.getDuration(); } diff --git a/demo/src/main/java/com/google/android/exoplayer/demo/simple/SimplePlayerActivity.java b/demo/src/main/java/com/google/android/exoplayer/demo/simple/SimplePlayerActivity.java index fa66b5c552..26f8c739a4 100644 --- a/demo/src/main/java/com/google/android/exoplayer/demo/simple/SimplePlayerActivity.java +++ b/demo/src/main/java/com/google/android/exoplayer/demo/simple/SimplePlayerActivity.java @@ -76,7 +76,7 @@ public class SimplePlayerActivity extends Activity implements SurfaceHolder.Call private MediaCodecVideoTrackRenderer videoRenderer; private boolean autoPlay = true; - private int playerPosition; + private long playerPosition; private Uri contentUri; private int contentType; diff --git a/library/src/main/java/com/google/android/exoplayer/ExoPlayer.java b/library/src/main/java/com/google/android/exoplayer/ExoPlayer.java index 244a31eaf5..a5bc989a40 100644 --- a/library/src/main/java/com/google/android/exoplayer/ExoPlayer.java +++ b/library/src/main/java/com/google/android/exoplayer/ExoPlayer.java @@ -229,7 +229,7 @@ public interface ExoPlayer { /** * Represents an unknown time or duration. */ - public static final int UNKNOWN_TIME = -1; + public static final long UNKNOWN_TIME = -1; /** * Gets the {@link Looper} associated with the playback thread. @@ -313,7 +313,7 @@ public interface ExoPlayer { * * @param positionMs The seek position. */ - public void seekTo(int positionMs); + public void seekTo(long positionMs); /** * Stops playback. Use {@code setPlayWhenReady(false)} rather than this method if the intention @@ -363,14 +363,14 @@ public interface ExoPlayer { * @return The duration of the track in milliseconds, or {@link ExoPlayer#UNKNOWN_TIME} if the * duration is not known. */ - public int getDuration(); + public long getDuration(); /** * Gets the current playback position in milliseconds. * * @return The current playback position in milliseconds. */ - public int getCurrentPosition(); + public long getCurrentPosition(); /** * Gets an estimate of the absolute position in milliseconds up to which data is buffered. @@ -378,7 +378,7 @@ public interface ExoPlayer { * @return An estimate of the absolute position in milliseconds up to which data is buffered, * or {@link ExoPlayer#UNKNOWN_TIME} if no estimate is available. */ - public int getBufferedPosition(); + public long getBufferedPosition(); /** * Gets an estimate of the percentage into the media up to which data is buffered. diff --git a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImpl.java b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImpl.java index efbe5ce1e8..22f11c13b7 100644 --- a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImpl.java +++ b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImpl.java @@ -130,7 +130,7 @@ import java.util.concurrent.CopyOnWriteArraySet; } @Override - public void seekTo(int positionMs) { + public void seekTo(long positionMs) { internalPlayer.seekTo(positionMs); } @@ -156,26 +156,26 @@ import java.util.concurrent.CopyOnWriteArraySet; } @Override - public int getDuration() { + public long getDuration() { return internalPlayer.getDuration(); } @Override - public int getCurrentPosition() { + public long getCurrentPosition() { return internalPlayer.getCurrentPosition(); } @Override - public int getBufferedPosition() { + public long getBufferedPosition() { return internalPlayer.getBufferedPosition(); } @Override public int getBufferedPercentage() { - int bufferedPosition = getBufferedPosition(); - int duration = getDuration(); + long bufferedPosition = getBufferedPosition(); + long duration = getDuration(); return bufferedPosition == ExoPlayer.UNKNOWN_TIME || duration == ExoPlayer.UNKNOWN_TIME ? 0 - : (duration == 0 ? 100 : (bufferedPosition * 100) / duration); + : (int) (duration == 0 ? 100 : (bufferedPosition * 100) / duration); } // Not private so it can be called from an inner class without going through a thunk method. diff --git a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java index 9dc6228fa9..bb01a2bf58 100644 --- a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java +++ b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java @@ -117,18 +117,18 @@ import java.util.List; return internalPlaybackThread.getLooper(); } - public int getCurrentPosition() { - return (int) (positionUs / 1000); + public long getCurrentPosition() { + return positionUs / 1000; } - public int getBufferedPosition() { + public long getBufferedPosition() { return bufferedPositionUs == TrackRenderer.UNKNOWN_TIME_US ? ExoPlayer.UNKNOWN_TIME - : (int) (bufferedPositionUs / 1000); + : bufferedPositionUs / 1000; } - public int getDuration() { + public long getDuration() { return durationUs == TrackRenderer.UNKNOWN_TIME_US ? ExoPlayer.UNKNOWN_TIME - : (int) (durationUs / 1000); + : durationUs / 1000; } public void prepare(TrackRenderer... renderers) { @@ -139,8 +139,8 @@ import java.util.List; handler.obtainMessage(MSG_SET_PLAY_WHEN_READY, playWhenReady ? 1 : 0, 0).sendToTarget(); } - public void seekTo(int positionMs) { - handler.obtainMessage(MSG_SEEK_TO, positionMs, 0).sendToTarget(); + public void seekTo(long positionMs) { + handler.obtainMessage(MSG_SEEK_TO, positionMs).sendToTarget(); } public void stop() { @@ -204,7 +204,7 @@ import java.util.List; return true; } case MSG_SEEK_TO: { - seekToInternal(msg.arg1); + seekToInternal((Long) msg.obj); return true; } case MSG_STOP: { @@ -453,7 +453,7 @@ import java.util.List; } } - private void seekToInternal(int positionMs) throws ExoPlaybackException { + private void seekToInternal(long positionMs) throws ExoPlaybackException { rebuffering = false; positionUs = positionMs * 1000L; mediaClock.stop(); diff --git a/library/src/main/java/com/google/android/exoplayer/parser/mp4/FragmentedMp4Extractor.java b/library/src/main/java/com/google/android/exoplayer/parser/mp4/FragmentedMp4Extractor.java index 3267d5b409..93c5053b6d 100644 --- a/library/src/main/java/com/google/android/exoplayer/parser/mp4/FragmentedMp4Extractor.java +++ b/library/src/main/java/com/google/android/exoplayer/parser/mp4/FragmentedMp4Extractor.java @@ -855,8 +855,8 @@ public final class FragmentedMp4Extractor implements Extractor { out.initTables(sampleCount); int[] sampleSizeTable = out.sampleSizeTable; - int[] sampleDecodingTimeTable = out.sampleDecodingTimeTable; int[] sampleCompositionTimeOffsetTable = out.sampleCompositionTimeOffsetTable; + long[] sampleDecodingTimeTable = out.sampleDecodingTimeTable; boolean[] sampleIsSyncFrameTable = out.sampleIsSyncFrameTable; long timescale = track.timescale; @@ -882,7 +882,7 @@ public final class FragmentedMp4Extractor implements Extractor { } else { sampleCompositionTimeOffsetTable[i] = 0; } - sampleDecodingTimeTable[i] = (int) ((cumulativeTime * 1000) / timescale); + sampleDecodingTimeTable[i] = (cumulativeTime * 1000) / timescale; sampleSizeTable[i] = sampleSize; sampleIsSyncFrameTable[i] = ((sampleFlags >> 16) & 0x1) == 0 && (!workaroundEveryVideoFrameIsSyncFrame || i == 0); diff --git a/library/src/main/java/com/google/android/exoplayer/parser/mp4/TrackFragment.java b/library/src/main/java/com/google/android/exoplayer/parser/mp4/TrackFragment.java index e2e08225b2..a25dfa4505 100644 --- a/library/src/main/java/com/google/android/exoplayer/parser/mp4/TrackFragment.java +++ b/library/src/main/java/com/google/android/exoplayer/parser/mp4/TrackFragment.java @@ -32,14 +32,14 @@ import com.google.android.exoplayer.upstream.NonBlockingInputStream; * The size of each sample in the run. */ public int[] sampleSizeTable; - /** - * The decoding time of each sample in the run. - */ - public int[] sampleDecodingTimeTable; /** * The composition time offset of each sample in the run. */ public int[] sampleCompositionTimeOffsetTable; + /** + * The decoding time of each sample in the run. + */ + public long[] sampleDecodingTimeTable; /** * Indicates which samples are sync frames. */ diff --git a/library/src/main/java/com/google/android/exoplayer/util/PlayerControl.java b/library/src/main/java/com/google/android/exoplayer/util/PlayerControl.java index ba454584fe..17027a8d91 100644 --- a/library/src/main/java/com/google/android/exoplayer/util/PlayerControl.java +++ b/library/src/main/java/com/google/android/exoplayer/util/PlayerControl.java @@ -70,12 +70,12 @@ public class PlayerControl implements MediaPlayerControl { @Override public int getCurrentPosition() { - return exoPlayer.getCurrentPosition(); + return (int) exoPlayer.getCurrentPosition(); } @Override public int getDuration() { - return exoPlayer.getDuration(); + return (int) exoPlayer.getDuration(); } @Override