Fixed int overflow issue with callbacks on very long-running streams.

This commit is contained in:
Oliver Woodman 2015-09-28 12:22:12 +01:00
parent e4e02f9189
commit c3e0d34aa1
6 changed files with 25 additions and 29 deletions

View file

@ -97,7 +97,7 @@ public class EventLogger implements DemoPlayer.Listener, DemoPlayer.InfoListener
@Override @Override
public void onLoadStarted(int sourceId, long length, int type, int trigger, Format format, public void onLoadStarted(int sourceId, long length, int type, int trigger, Format format,
int mediaStartTimeMs, int mediaEndTimeMs) { long mediaStartTimeMs, long mediaEndTimeMs) {
loadStartTimeMs[sourceId] = SystemClock.elapsedRealtime(); loadStartTimeMs[sourceId] = SystemClock.elapsedRealtime();
if (VerboseLogUtil.isTagEnabled(TAG)) { if (VerboseLogUtil.isTagEnabled(TAG)) {
Log.v(TAG, "loadStart [" + getSessionTimeString() + ", " + sourceId + ", " + type Log.v(TAG, "loadStart [" + getSessionTimeString() + ", " + sourceId + ", " + type
@ -107,7 +107,7 @@ public class EventLogger implements DemoPlayer.Listener, DemoPlayer.InfoListener
@Override @Override
public void onLoadCompleted(int sourceId, long bytesLoaded, int type, int trigger, Format format, public void onLoadCompleted(int sourceId, long bytesLoaded, int type, int trigger, Format format,
int mediaStartTimeMs, int mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs) { long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs) {
if (VerboseLogUtil.isTagEnabled(TAG)) { if (VerboseLogUtil.isTagEnabled(TAG)) {
long downloadTime = SystemClock.elapsedRealtime() - loadStartTimeMs[sourceId]; long downloadTime = SystemClock.elapsedRealtime() - loadStartTimeMs[sourceId];
Log.v(TAG, "loadEnd [" + getSessionTimeString() + ", " + sourceId + ", " + downloadTime Log.v(TAG, "loadEnd [" + getSessionTimeString() + ", " + sourceId + ", " + downloadTime
@ -116,13 +116,13 @@ public class EventLogger implements DemoPlayer.Listener, DemoPlayer.InfoListener
} }
@Override @Override
public void onVideoFormatEnabled(Format format, int trigger, int mediaTimeMs) { public void onVideoFormatEnabled(Format format, int trigger, long mediaTimeMs) {
Log.d(TAG, "videoFormat [" + getSessionTimeString() + ", " + format.id + ", " Log.d(TAG, "videoFormat [" + getSessionTimeString() + ", " + format.id + ", "
+ Integer.toString(trigger) + "]"); + Integer.toString(trigger) + "]");
} }
@Override @Override
public void onAudioFormatEnabled(Format format, int trigger, int mediaTimeMs) { public void onAudioFormatEnabled(Format format, int trigger, long mediaTimeMs) {
Log.d(TAG, "audioFormat [" + getSessionTimeString() + ", " + format.id + ", " Log.d(TAG, "audioFormat [" + getSessionTimeString() + ", " + format.id + ", "
+ Integer.toString(trigger) + "]"); + Integer.toString(trigger) + "]");
} }

View file

@ -115,14 +115,14 @@ public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource.EventLi
* A listener for debugging information. * A listener for debugging information.
*/ */
public interface InfoListener { public interface InfoListener {
void onVideoFormatEnabled(Format format, int trigger, int mediaTimeMs); void onVideoFormatEnabled(Format format, int trigger, long mediaTimeMs);
void onAudioFormatEnabled(Format format, int trigger, int mediaTimeMs); void onAudioFormatEnabled(Format format, int trigger, long mediaTimeMs);
void onDroppedFrames(int count, long elapsed); void onDroppedFrames(int count, long elapsed);
void onBandwidthSample(int elapsedMs, long bytes, long bitrateEstimate); void onBandwidthSample(int elapsedMs, long bytes, long bitrateEstimate);
void onLoadStarted(int sourceId, long length, int type, int trigger, Format format, void onLoadStarted(int sourceId, long length, int type, int trigger, Format format,
int mediaStartTimeMs, int mediaEndTimeMs); long mediaStartTimeMs, long mediaEndTimeMs);
void onLoadCompleted(int sourceId, long bytesLoaded, int type, int trigger, Format format, void onLoadCompleted(int sourceId, long bytesLoaded, int type, int trigger, Format format,
int mediaStartTimeMs, int mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs); long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs);
void onDecoderInitialized(String decoderName, long elapsedRealtimeMs, void onDecoderInitialized(String decoderName, long elapsedRealtimeMs,
long initializationDurationMs); long initializationDurationMs);
void onAvailableRangeChanged(TimeRange availableRange); void onAvailableRangeChanged(TimeRange availableRange);
@ -435,7 +435,8 @@ public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource.EventLi
} }
@Override @Override
public void onDownstreamFormatChanged(int sourceId, Format format, int trigger, int mediaTimeMs) { public void onDownstreamFormatChanged(int sourceId, Format format, int trigger,
long mediaTimeMs) {
if (infoListener == null) { if (infoListener == null) {
return; return;
} }
@ -447,11 +448,6 @@ public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource.EventLi
} }
} }
@Override
public void onDrmKeysLoaded() {
// Do nothing.
}
@Override @Override
public void onDrmSessionManagerError(Exception e) { public void onDrmSessionManagerError(Exception e) {
if (internalErrorListener != null) { if (internalErrorListener != null) {
@ -535,7 +531,7 @@ public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource.EventLi
@Override @Override
public void onLoadStarted(int sourceId, long length, int type, int trigger, Format format, public void onLoadStarted(int sourceId, long length, int type, int trigger, Format format,
int mediaStartTimeMs, int mediaEndTimeMs) { long mediaStartTimeMs, long mediaEndTimeMs) {
if (infoListener != null) { if (infoListener != null) {
infoListener.onLoadStarted(sourceId, length, type, trigger, format, mediaStartTimeMs, infoListener.onLoadStarted(sourceId, length, type, trigger, format, mediaStartTimeMs,
mediaEndTimeMs); mediaEndTimeMs);
@ -544,7 +540,7 @@ public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource.EventLi
@Override @Override
public void onLoadCompleted(int sourceId, long bytesLoaded, int type, int trigger, Format format, public void onLoadCompleted(int sourceId, long bytesLoaded, int type, int trigger, Format format,
int mediaStartTimeMs, int mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs) { long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs) {
if (infoListener != null) { if (infoListener != null) {
infoListener.onLoadCompleted(sourceId, bytesLoaded, type, trigger, format, mediaStartTimeMs, infoListener.onLoadCompleted(sourceId, bytesLoaded, type, trigger, format, mediaStartTimeMs,
mediaEndTimeMs, elapsedRealtimeMs, loadDurationMs); mediaEndTimeMs, elapsedRealtimeMs, loadDurationMs);
@ -557,7 +553,7 @@ public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource.EventLi
} }
@Override @Override
public void onUpstreamDiscarded(int sourceId, int mediaStartTimeMs, int mediaEndTimeMs) { public void onUpstreamDiscarded(int sourceId, long mediaStartTimeMs, long mediaEndTimeMs) {
// Do nothing. // Do nothing.
} }

View file

@ -42,7 +42,7 @@ public interface BaseChunkSampleSourceEventListener {
* load is for initialization data. * load is for initialization data.
*/ */
void onLoadStarted(int sourceId, long length, int type, int trigger, Format format, void onLoadStarted(int sourceId, long length, int type, int trigger, Format format,
int mediaStartTimeMs, int mediaEndTimeMs); long mediaStartTimeMs, long mediaEndTimeMs);
/** /**
* Invoked when the current load operation completes. * Invoked when the current load operation completes.
@ -61,7 +61,7 @@ public interface BaseChunkSampleSourceEventListener {
* @param loadDurationMs Amount of time taken to load the data. * @param loadDurationMs Amount of time taken to load the data.
*/ */
void onLoadCompleted(int sourceId, long bytesLoaded, int type, int trigger, Format format, void onLoadCompleted(int sourceId, long bytesLoaded, int type, int trigger, Format format,
int mediaStartTimeMs, int mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs); long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs);
/** /**
* Invoked when the current upstream load operation is canceled. * Invoked when the current upstream load operation is canceled.
@ -87,7 +87,7 @@ public interface BaseChunkSampleSourceEventListener {
* @param mediaStartTimeMs The media time of the start of the discarded data. * @param mediaStartTimeMs The media time of the start of the discarded data.
* @param mediaEndTimeMs The media time of the end of the discarded data. * @param mediaEndTimeMs The media time of the end of the discarded data.
*/ */
void onUpstreamDiscarded(int sourceId, int mediaStartTimeMs, int mediaEndTimeMs); void onUpstreamDiscarded(int sourceId, long mediaStartTimeMs, long mediaEndTimeMs);
/** /**
* Invoked when the downstream format changes (i.e. when the format being supplied to the * Invoked when the downstream format changes (i.e. when the format being supplied to the
@ -99,6 +99,6 @@ public interface BaseChunkSampleSourceEventListener {
* {@link ChunkSource}. * {@link ChunkSource}.
* @param mediaTimeMs The media time at which the change occurred. * @param mediaTimeMs The media time at which the change occurred.
*/ */
void onDownstreamFormatChanged(int sourceId, Format format, int trigger, int mediaTimeMs); void onDownstreamFormatChanged(int sourceId, Format format, int trigger, long mediaTimeMs);
} }

View file

@ -574,8 +574,8 @@ public class ChunkSampleSource implements SampleSource, SampleSourceReader, Load
return Math.min((errorCount - 1) * 1000, 5000); return Math.min((errorCount - 1) * 1000, 5000);
} }
protected final int usToMs(long timeUs) { protected final long usToMs(long timeUs) {
return (int) (timeUs / 1000); return timeUs / 1000;
} }
private void notifyLoadStarted(final long length, final int type, final int trigger, private void notifyLoadStarted(final long length, final int type, final int trigger,

View file

@ -599,8 +599,8 @@ public final class HlsSampleSource implements SampleSource, SampleSourceReader,
return Math.min((errorCount - 1) * 1000, 5000); return Math.min((errorCount - 1) * 1000, 5000);
} }
/* package */ int usToMs(long timeUs) { /* package */ long usToMs(long timeUs) {
return (int) (timeUs / 1000); return timeUs / 1000;
} }
private void notifyLoadStarted(final long length, final int type, final int trigger, private void notifyLoadStarted(final long length, final int type, final int trigger,

View file

@ -117,7 +117,7 @@ public final class LogcatLogger implements ExoPlayer.Listener,
@Override @Override
public void onDownstreamFormatChanged(int sourceId, Format format, int trigger, public void onDownstreamFormatChanged(int sourceId, Format format, int trigger,
int mediaTimeMs) { long mediaTimeMs) {
Log.i(tag, "Downstream format changed (" + sourceId + "): " + format.id); Log.i(tag, "Downstream format changed (" + sourceId + "): " + format.id);
} }
@ -129,18 +129,18 @@ public final class LogcatLogger implements ExoPlayer.Listener,
@Override @Override
public void onLoadStarted(int sourceId, long length, int type, int trigger, Format format, public void onLoadStarted(int sourceId, long length, int type, int trigger, Format format,
int mediaStartTimeMs, int mediaEndTimeMs) {} long mediaStartTimeMs, long mediaEndTimeMs) {}
@Override @Override
public void onLoadCompleted(int sourceId, long bytesLoaded, int type, int trigger, public void onLoadCompleted(int sourceId, long bytesLoaded, int type, int trigger,
Format format, int mediaStartTimeMs, int mediaEndTimeMs, long elapsedRealtimeMs, Format format, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs,
long loadDurationMs) {} long loadDurationMs) {}
@Override @Override
public void onLoadCanceled(int sourceId, long bytesLoaded) {} public void onLoadCanceled(int sourceId, long bytesLoaded) {}
@Override @Override
public void onUpstreamDiscarded(int sourceId, int mediaStartTimeMs, int mediaEndTimeMs) {} public void onUpstreamDiscarded(int sourceId, long mediaStartTimeMs, long mediaEndTimeMs) {}
@Override @Override
public void onDrawnToSurface(Surface surface) {} public void onDrawnToSurface(Surface surface) {}