From 6b775efd4d74f179ac34003b679ef2f68304388b Mon Sep 17 00:00:00 2001
From: Oliver Woodman
Date: Mon, 3 Aug 2015 14:52:52 +0100
Subject: [PATCH 1/8] Fix playback of HLS media playlists
---
.../exoplayer/demo/player/HlsRendererBuilder.java | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/demo/src/main/java/com/google/android/exoplayer/demo/player/HlsRendererBuilder.java b/demo/src/main/java/com/google/android/exoplayer/demo/player/HlsRendererBuilder.java
index 3f4647cade6..a4703e9f010 100644
--- a/demo/src/main/java/com/google/android/exoplayer/demo/player/HlsRendererBuilder.java
+++ b/demo/src/main/java/com/google/android/exoplayer/demo/player/HlsRendererBuilder.java
@@ -144,11 +144,10 @@ public void onSingleManifest(HlsPlaylist manifest) {
player.onRenderersError(e);
return;
}
- }
-
- if (variantIndices.length == 0) {
- player.onRenderersError(new IllegalStateException("No variants selected."));
- return;
+ if (variantIndices.length == 0) {
+ player.onRenderersError(new IllegalStateException("No variants selected."));
+ return;
+ }
}
DataSource dataSource = new DefaultUriDataSource(context, bandwidthMeter, userAgent);
From 574e554e015eceba4fa2c8488df52b250c2cb5ef Mon Sep 17 00:00:00 2001
From: Oliver Woodman
Date: Mon, 3 Aug 2015 15:17:41 +0100
Subject: [PATCH 2/8] Make classes/methods final to prevent uncontrolled
extension.
---
.../android/exoplayer/TimeRangeTest.java | 4 +--
.../exoplayer/dash/DashChunkSourceTest.java | 1 -
.../exoplayer/BehindLiveWindowException.java | 2 +-
.../google/android/exoplayer/CryptoInfo.java | 2 +-
.../android/exoplayer/DefaultLoadControl.java | 2 +-
.../android/exoplayer/DummyTrackRenderer.java | 2 +-
.../exoplayer/ExoPlayerLibraryInfo.java | 7 +++---
.../android/exoplayer/MediaCodecUtil.java | 4 ++-
.../google/android/exoplayer/MediaFormat.java | 2 +-
.../SmoothFrameReleaseTimeHelper.java | 2 +-
.../exoplayer/StandaloneMediaClock.java | 2 +-
.../exoplayer/chunk/ContainerMediaChunk.java | 25 ++++++++++---------
.../chunk/MultiTrackChunkSource.java | 2 +-
.../chunk/SingleSampleChunkSource.java | 2 +-
.../dash/DashWrappingSegmentIndex.java | 2 +-
.../{ => mpd}/DashSingleSegmentIndex.java | 6 ++---
.../exoplayer/dash/mpd/Representation.java | 1 -
.../exoplayer/dash/mpd/UtcTimingElement.java | 2 +-
.../dash/mpd/UtcTimingElementResolver.java | 2 +-
.../extractor/ExtractorSampleSource.java | 4 +--
.../exoplayer/extractor/ts/AdtsExtractor.java | 2 +-
.../exoplayer/extractor/ts/AdtsReader.java | 2 +-
.../exoplayer/extractor/ts/H264Reader.java | 2 +-
.../exoplayer/extractor/ts/H265Reader.java | 2 +-
.../exoplayer/extractor/ts/Id3Reader.java | 2 +-
.../extractor/ts/MpegAudioReader.java | 2 +-
.../exoplayer/extractor/ts/SeiReader.java | 2 +-
.../extractor/webm/VarintReader.java | 2 +-
.../exoplayer/hls/HlsSampleSource.java | 4 +--
.../exoplayer/metadata/GeobMetadata.java | 2 +-
.../android/exoplayer/metadata/Id3Parser.java | 2 +-
.../metadata/MetadataTrackRenderer.java | 2 +-
.../exoplayer/metadata/PrivMetadata.java | 2 +-
.../exoplayer/metadata/TxxxMetadata.java | 2 +-
.../exoplayer/text/SubtitleParserHelper.java | 2 +-
.../exoplayer/text/TextTrackRenderer.java | 2 +-
.../exoplayer/text/eia608/Eia608Parser.java | 2 +-
.../text/eia608/Eia608TrackRenderer.java | 2 +-
.../exoplayer/text/ttml/TtmlParser.java | 2 +-
.../exoplayer/text/webvtt/WebvttParser.java | 4 +--
.../exoplayer/text/webvtt/WebvttSubtitle.java | 2 +-
.../exoplayer/upstream/ByteArrayDataSink.java | 2 +-
.../upstream/ByteArrayDataSource.java | 2 +-
.../upstream/DataSourceInputStream.java | 2 +-
.../upstream/DefaultBandwidthMeter.java | 2 +-
.../upstream/PriorityDataSource.java | 2 +-
.../exoplayer/upstream/UdpDataSource.java | 2 +-
.../upstream/cache/CacheDataSink.java | 2 +-
.../cache/LeastRecentlyUsedCacheEvictor.java | 2 +-
.../upstream/cache/NoOpCacheEvictor.java | 2 +-
.../exoplayer/upstream/cache/SimpleCache.java | 2 +-
.../android/exoplayer/util/MimeTypes.java | 2 +-
.../exoplayer/util/PriorityHandlerThread.java | 2 +-
.../exoplayer/util/SlidingPercentile.java | 2 +-
.../android/exoplayer/util/TraceUtil.java | 4 ++-
.../exoplayer/util/VerboseLogUtil.java | 6 ++---
56 files changed, 79 insertions(+), 79 deletions(-)
rename library/src/main/java/com/google/android/exoplayer/dash/{ => mpd}/DashSingleSegmentIndex.java (90%)
diff --git a/library/src/androidTest/java/com/google/android/exoplayer/TimeRangeTest.java b/library/src/androidTest/java/com/google/android/exoplayer/TimeRangeTest.java
index 5c93130de66..58df649d65f 100644
--- a/library/src/androidTest/java/com/google/android/exoplayer/TimeRangeTest.java
+++ b/library/src/androidTest/java/com/google/android/exoplayer/TimeRangeTest.java
@@ -25,10 +25,10 @@ public class TimeRangeTest extends TestCase {
public void testEquals() {
TimeRange timeRange1 = new TimeRange(TimeRange.TYPE_SNAPSHOT, 0, 30000000);
assertTrue(timeRange1.equals(timeRange1));
-
+
TimeRange timeRange2 = new TimeRange(TimeRange.TYPE_SNAPSHOT, 0, 30000000);
assertTrue(timeRange1.equals(timeRange2));
-
+
TimeRange timeRange3 = new TimeRange(TimeRange.TYPE_SNAPSHOT, 0, 60000000);
assertFalse(timeRange1.equals(timeRange3));
}
diff --git a/library/src/androidTest/java/com/google/android/exoplayer/dash/DashChunkSourceTest.java b/library/src/androidTest/java/com/google/android/exoplayer/dash/DashChunkSourceTest.java
index 70d3b195db2..db387c179ad 100644
--- a/library/src/androidTest/java/com/google/android/exoplayer/dash/DashChunkSourceTest.java
+++ b/library/src/androidTest/java/com/google/android/exoplayer/dash/DashChunkSourceTest.java
@@ -82,7 +82,6 @@ public class DashChunkSourceTest extends InstrumentationTestCase {
new Format("3", "video/mp4", WIDE_WIDTH, 50, -1, -1, -1, 1000);
@Mock private DataSource mockDataSource;
- @Mock private ManifestFetcher mockManifestFetcher;
@Override
public void setUp() throws Exception {
diff --git a/library/src/main/java/com/google/android/exoplayer/BehindLiveWindowException.java b/library/src/main/java/com/google/android/exoplayer/BehindLiveWindowException.java
index 074a1de01ac..3fd2bfedd9a 100644
--- a/library/src/main/java/com/google/android/exoplayer/BehindLiveWindowException.java
+++ b/library/src/main/java/com/google/android/exoplayer/BehindLiveWindowException.java
@@ -20,7 +20,7 @@
/**
* Thrown when a live playback falls behind the available media window.
*/
-public class BehindLiveWindowException extends IOException {
+public final class BehindLiveWindowException extends IOException {
public BehindLiveWindowException() {
super();
diff --git a/library/src/main/java/com/google/android/exoplayer/CryptoInfo.java b/library/src/main/java/com/google/android/exoplayer/CryptoInfo.java
index 81e55446eb6..4be481259ca 100644
--- a/library/src/main/java/com/google/android/exoplayer/CryptoInfo.java
+++ b/library/src/main/java/com/google/android/exoplayer/CryptoInfo.java
@@ -23,7 +23,7 @@
/**
* Compatibility wrapper around {@link android.media.MediaCodec.CryptoInfo}.
*/
-public class CryptoInfo {
+public final class CryptoInfo {
/**
* @see android.media.MediaCodec.CryptoInfo#iv
diff --git a/library/src/main/java/com/google/android/exoplayer/DefaultLoadControl.java b/library/src/main/java/com/google/android/exoplayer/DefaultLoadControl.java
index c85453c05f2..17d8512bf95 100644
--- a/library/src/main/java/com/google/android/exoplayer/DefaultLoadControl.java
+++ b/library/src/main/java/com/google/android/exoplayer/DefaultLoadControl.java
@@ -39,7 +39,7 @@
* itself as a task with priority {@link NetworkLock#STREAMING_PRIORITY} during loading periods,
* and unregistering itself during draining periods.
*/
-public class DefaultLoadControl implements LoadControl {
+public final class DefaultLoadControl implements LoadControl {
/**
* Interface definition for a callback to be notified of {@link DefaultLoadControl} events.
diff --git a/library/src/main/java/com/google/android/exoplayer/DummyTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/DummyTrackRenderer.java
index dfcf7660a83..1a1305898eb 100644
--- a/library/src/main/java/com/google/android/exoplayer/DummyTrackRenderer.java
+++ b/library/src/main/java/com/google/android/exoplayer/DummyTrackRenderer.java
@@ -22,7 +22,7 @@
* to request that it should be ignored. {@link IllegalStateException} is thrown from all methods
* that are documented to indicate that they should not be invoked unless the renderer is prepared.
*/
-public class DummyTrackRenderer extends TrackRenderer {
+public final class DummyTrackRenderer extends TrackRenderer {
@Override
protected int doPrepare(long positionUs) {
diff --git a/library/src/main/java/com/google/android/exoplayer/ExoPlayerLibraryInfo.java b/library/src/main/java/com/google/android/exoplayer/ExoPlayerLibraryInfo.java
index 1fc0cdcae4b..be06690ca12 100644
--- a/library/src/main/java/com/google/android/exoplayer/ExoPlayerLibraryInfo.java
+++ b/library/src/main/java/com/google/android/exoplayer/ExoPlayerLibraryInfo.java
@@ -18,10 +18,7 @@
/**
* Information about the ExoPlayer library.
*/
-// TODO: This file should be automatically generated by the build system.
-public class ExoPlayerLibraryInfo {
-
- private ExoPlayerLibraryInfo() {}
+public final class ExoPlayerLibraryInfo {
/**
* The version of the library, expressed as a string.
@@ -48,4 +45,6 @@ private ExoPlayerLibraryInfo() {}
*/
public static final boolean TRACE_ENABLED = true;
+ private ExoPlayerLibraryInfo() {}
+
}
diff --git a/library/src/main/java/com/google/android/exoplayer/MediaCodecUtil.java b/library/src/main/java/com/google/android/exoplayer/MediaCodecUtil.java
index ff3a453b16e..8cffd8a852d 100644
--- a/library/src/main/java/com/google/android/exoplayer/MediaCodecUtil.java
+++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecUtil.java
@@ -34,7 +34,7 @@
* A utility class for querying the available codecs.
*/
@TargetApi(16)
-public class MediaCodecUtil {
+public final class MediaCodecUtil {
/**
* Thrown when an error occurs querying the device for its underlying media capabilities.
@@ -54,6 +54,8 @@ private DecoderQueryException(Throwable cause) {
private static final HashMap> codecs = new HashMap<>();
+ private MediaCodecUtil() {}
+
/**
* Get information about the decoder that will be used for a given mime type.
*
diff --git a/library/src/main/java/com/google/android/exoplayer/MediaFormat.java b/library/src/main/java/com/google/android/exoplayer/MediaFormat.java
index 34407f4042e..c1de1160c90 100644
--- a/library/src/main/java/com/google/android/exoplayer/MediaFormat.java
+++ b/library/src/main/java/com/google/android/exoplayer/MediaFormat.java
@@ -29,7 +29,7 @@
/**
* Defines the format of an elementary media stream.
*/
-public class MediaFormat {
+public final class MediaFormat {
private static final String KEY_PIXEL_WIDTH_HEIGHT_RATIO =
"com.google.android.videos.pixelWidthHeightRatio";
diff --git a/library/src/main/java/com/google/android/exoplayer/SmoothFrameReleaseTimeHelper.java b/library/src/main/java/com/google/android/exoplayer/SmoothFrameReleaseTimeHelper.java
index 1245ea6454f..ce931367347 100644
--- a/library/src/main/java/com/google/android/exoplayer/SmoothFrameReleaseTimeHelper.java
+++ b/library/src/main/java/com/google/android/exoplayer/SmoothFrameReleaseTimeHelper.java
@@ -25,7 +25,7 @@
* Makes a best effort to adjust frame release timestamps for a smoother visual result.
*/
@TargetApi(16)
-public class SmoothFrameReleaseTimeHelper implements FrameReleaseTimeHelper, FrameCallback {
+public final class SmoothFrameReleaseTimeHelper implements FrameReleaseTimeHelper, FrameCallback {
private static final long CHOREOGRAPHER_SAMPLE_DELAY_MILLIS = 500;
private static final long MAX_ALLOWED_DRIFT_NS = 20000000;
diff --git a/library/src/main/java/com/google/android/exoplayer/StandaloneMediaClock.java b/library/src/main/java/com/google/android/exoplayer/StandaloneMediaClock.java
index f4b85b0d354..3b6871c8116 100644
--- a/library/src/main/java/com/google/android/exoplayer/StandaloneMediaClock.java
+++ b/library/src/main/java/com/google/android/exoplayer/StandaloneMediaClock.java
@@ -21,7 +21,7 @@
* A standalone {@link MediaClock}. The clock can be started, stopped and its time can be set and
* retrieved. When started, this clock is based on {@link SystemClock#elapsedRealtime()}.
*/
-/* package */ class StandaloneMediaClock implements MediaClock {
+/* package */ final class StandaloneMediaClock implements MediaClock {
private boolean started;
diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/ContainerMediaChunk.java b/library/src/main/java/com/google/android/exoplayer/chunk/ContainerMediaChunk.java
index 72c317f5352..d147ce2e64f 100644
--- a/library/src/main/java/com/google/android/exoplayer/chunk/ContainerMediaChunk.java
+++ b/library/src/main/java/com/google/android/exoplayer/chunk/ContainerMediaChunk.java
@@ -74,68 +74,69 @@ public ContainerMediaChunk(DataSource dataSource, DataSpec dataSpec, int trigger
}
@Override
- public long bytesLoaded() {
+ public final long bytesLoaded() {
return bytesLoaded;
}
@Override
- public MediaFormat getMediaFormat() {
+ public final MediaFormat getMediaFormat() {
return mediaFormat;
}
@Override
- public DrmInitData getDrmInitData() {
+ public final DrmInitData getDrmInitData() {
return drmInitData;
}
// SingleTrackOutput implementation.
@Override
- public void seekMap(SeekMap seekMap) {
+ public final void seekMap(SeekMap seekMap) {
// Do nothing.
}
@Override
- public void drmInitData(DrmInitData drmInitData) {
+ public final void drmInitData(DrmInitData drmInitData) {
this.drmInitData = drmInitData;
}
@Override
- public void format(MediaFormat mediaFormat) {
+ public final void format(MediaFormat mediaFormat) {
this.mediaFormat = mediaFormat;
}
@Override
- public int sampleData(ExtractorInput input, int length, boolean allowEndOfInput)
+ public final int sampleData(ExtractorInput input, int length, boolean allowEndOfInput)
throws IOException, InterruptedException {
return getOutput().sampleData(input, length, allowEndOfInput);
}
@Override
- public void sampleData(ParsableByteArray data, int length) {
+ public final void sampleData(ParsableByteArray data, int length) {
getOutput().sampleData(data, length);
}
@Override
- public void sampleMetadata(long timeUs, int flags, int size, int offset, byte[] encryptionKey) {
+ public final void sampleMetadata(long timeUs, int flags, int size, int offset,
+ byte[] encryptionKey) {
getOutput().sampleMetadata(timeUs + sampleOffsetUs, flags, size, offset, encryptionKey);
}
// Loadable implementation.
@Override
- public void cancelLoad() {
+ public final void cancelLoad() {
loadCanceled = true;
}
@Override
- public boolean isLoadCanceled() {
+ public final boolean isLoadCanceled() {
return loadCanceled;
}
@SuppressWarnings("NonAtomicVolatileUpdate")
@Override
- public void load() throws IOException, InterruptedException {
+ public final void load() throws IOException, InterruptedException {
DataSpec loadDataSpec = Util.getRemainderDataSpec(dataSpec, bytesLoaded);
try {
// Create and open the input.
diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/MultiTrackChunkSource.java b/library/src/main/java/com/google/android/exoplayer/chunk/MultiTrackChunkSource.java
index 549ab66f962..c612dca454a 100644
--- a/library/src/main/java/com/google/android/exoplayer/chunk/MultiTrackChunkSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/chunk/MultiTrackChunkSource.java
@@ -28,7 +28,7 @@
* A {@link ChunkSource} providing the ability to switch between multiple other {@link ChunkSource}
* instances.
*/
-public class MultiTrackChunkSource implements ChunkSource, ExoPlayerComponent {
+public final class MultiTrackChunkSource implements ChunkSource, ExoPlayerComponent {
/**
* A message to indicate a source selection. Source selection can only be performed when the
diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/SingleSampleChunkSource.java b/library/src/main/java/com/google/android/exoplayer/chunk/SingleSampleChunkSource.java
index a0d6678ef18..12f76890995 100644
--- a/library/src/main/java/com/google/android/exoplayer/chunk/SingleSampleChunkSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/chunk/SingleSampleChunkSource.java
@@ -29,7 +29,7 @@
* An example use case for this implementation is to act as the source for loading out-of-band
* subtitles, where subtitles for the entire video are delivered as a single file.
*/
-public class SingleSampleChunkSource implements ChunkSource {
+public final class SingleSampleChunkSource implements ChunkSource {
private final DataSource dataSource;
private final DataSpec dataSpec;
diff --git a/library/src/main/java/com/google/android/exoplayer/dash/DashWrappingSegmentIndex.java b/library/src/main/java/com/google/android/exoplayer/dash/DashWrappingSegmentIndex.java
index 441cad61944..bcff0614587 100644
--- a/library/src/main/java/com/google/android/exoplayer/dash/DashWrappingSegmentIndex.java
+++ b/library/src/main/java/com/google/android/exoplayer/dash/DashWrappingSegmentIndex.java
@@ -22,7 +22,7 @@
* An implementation of {@link DashSegmentIndex} that wraps a {@link ChunkIndex} parsed from a
* media stream.
*/
-public class DashWrappingSegmentIndex implements DashSegmentIndex {
+/* package */ final class DashWrappingSegmentIndex implements DashSegmentIndex {
private final ChunkIndex chunkIndex;
private final String uri;
diff --git a/library/src/main/java/com/google/android/exoplayer/dash/DashSingleSegmentIndex.java b/library/src/main/java/com/google/android/exoplayer/dash/mpd/DashSingleSegmentIndex.java
similarity index 90%
rename from library/src/main/java/com/google/android/exoplayer/dash/DashSingleSegmentIndex.java
rename to library/src/main/java/com/google/android/exoplayer/dash/mpd/DashSingleSegmentIndex.java
index 46a02a3ea20..9b8f6b276cb 100644
--- a/library/src/main/java/com/google/android/exoplayer/dash/DashSingleSegmentIndex.java
+++ b/library/src/main/java/com/google/android/exoplayer/dash/mpd/DashSingleSegmentIndex.java
@@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.google.android.exoplayer.dash;
+package com.google.android.exoplayer.dash.mpd;
-import com.google.android.exoplayer.dash.mpd.RangedUri;
+import com.google.android.exoplayer.dash.DashSegmentIndex;
/**
* A {@link DashSegmentIndex} that defines a single segment.
*/
-public class DashSingleSegmentIndex implements DashSegmentIndex {
+/* package */ final class DashSingleSegmentIndex implements DashSegmentIndex {
private final long startTimeUs;
private final long durationUs;
diff --git a/library/src/main/java/com/google/android/exoplayer/dash/mpd/Representation.java b/library/src/main/java/com/google/android/exoplayer/dash/mpd/Representation.java
index f5eb289fd52..54c0d6913a8 100644
--- a/library/src/main/java/com/google/android/exoplayer/dash/mpd/Representation.java
+++ b/library/src/main/java/com/google/android/exoplayer/dash/mpd/Representation.java
@@ -18,7 +18,6 @@
import com.google.android.exoplayer.chunk.Format;
import com.google.android.exoplayer.chunk.FormatWrapper;
import com.google.android.exoplayer.dash.DashSegmentIndex;
-import com.google.android.exoplayer.dash.DashSingleSegmentIndex;
import com.google.android.exoplayer.dash.mpd.SegmentBase.MultiSegmentBase;
import com.google.android.exoplayer.dash.mpd.SegmentBase.SingleSegmentBase;
diff --git a/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElement.java b/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElement.java
index e2f452b543c..025cec34133 100644
--- a/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElement.java
+++ b/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElement.java
@@ -18,7 +18,7 @@
/**
* Represents a UTCTiming element.
*/
-public class UtcTimingElement {
+public final class UtcTimingElement {
public final String schemeIdUri;
public final String value;
diff --git a/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElementResolver.java b/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElementResolver.java
index c275faebd73..19098fa8f58 100644
--- a/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElementResolver.java
+++ b/library/src/main/java/com/google/android/exoplayer/dash/mpd/UtcTimingElementResolver.java
@@ -38,7 +38,7 @@
/**
* Resolves a {@link UtcTimingElement}.
*/
-public class UtcTimingElementResolver implements Loader.Callback {
+public final class UtcTimingElementResolver implements Loader.Callback {
/**
* Callback for timing element resolution.
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java b/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java
index a81c8668926..639c992b65c 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java
@@ -67,8 +67,8 @@
* constructor. When reading a new stream, the first {@link Extractor} that returns {@code true}
* from {@link Extractor#sniff(ExtractorInput)} will be used.
*/
-public class ExtractorSampleSource implements SampleSource, SampleSourceReader, ExtractorOutput,
- Loader.Callback {
+public final class ExtractorSampleSource implements SampleSource, SampleSourceReader,
+ ExtractorOutput, Loader.Callback {
/**
* Thrown if the input format could not recognized.
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsExtractor.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsExtractor.java
index 315cc2f4974..fd722422164 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsExtractor.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsExtractor.java
@@ -29,7 +29,7 @@
* Facilitates the extraction of AAC samples from elementary audio files formatted as AAC with ADTS
* headers.
*/
-public class AdtsExtractor implements Extractor {
+public final class AdtsExtractor implements Extractor {
private static final int MAX_PACKET_SIZE = 200;
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsReader.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsReader.java
index 8121c54901e..5f360d4664e 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsReader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/AdtsReader.java
@@ -30,7 +30,7 @@
/**
* Parses a continuous ADTS byte stream and extracts individual frames.
*/
-/* package */ class AdtsReader extends ElementaryStreamReader {
+/* package */ final class AdtsReader extends ElementaryStreamReader {
private static final int STATE_FINDING_SYNC = 0;
private static final int STATE_READING_HEADER = 1;
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/H264Reader.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/H264Reader.java
index 776adb5bc96..731254dbde1 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/H264Reader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/H264Reader.java
@@ -32,7 +32,7 @@
/**
* Parses a continuous H264 byte stream and extracts individual frames.
*/
-/* package */ class H264Reader extends ElementaryStreamReader {
+/* package */ final class H264Reader extends ElementaryStreamReader {
private static final String TAG = "H264Reader";
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/H265Reader.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/H265Reader.java
index 1631700911a..7a2dd8c454e 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/H265Reader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/H265Reader.java
@@ -30,7 +30,7 @@
/**
* Parses a continuous H.265 byte stream and extracts individual frames.
*/
-/* package */ class H265Reader extends ElementaryStreamReader {
+/* package */ final class H265Reader extends ElementaryStreamReader {
private static final String TAG = "H265Reader";
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/Id3Reader.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/Id3Reader.java
index 28c4fe71d10..4e778820a55 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/Id3Reader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/Id3Reader.java
@@ -24,7 +24,7 @@
/**
* Parses ID3 data and extracts individual text information frames.
*/
-/* package */ class Id3Reader extends ElementaryStreamReader {
+/* package */ final class Id3Reader extends ElementaryStreamReader {
// State that should be reset on seek.
private boolean writingSample;
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/MpegAudioReader.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/MpegAudioReader.java
index b2ee4ec7a99..5ce86b7d634 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/MpegAudioReader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/MpegAudioReader.java
@@ -24,7 +24,7 @@
/**
* Parses a continuous MPEG Audio byte stream and extracts individual frames.
*/
-/* package */ class MpegAudioReader extends ElementaryStreamReader {
+/* package */ final class MpegAudioReader extends ElementaryStreamReader {
private static final int STATE_FINDING_HEADER = 0;
private static final int STATE_READING_HEADER = 1;
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/SeiReader.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/SeiReader.java
index 3aa57557cc5..ac1aaef4a2a 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/SeiReader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/SeiReader.java
@@ -28,7 +28,7 @@
* TODO: Technically, we shouldn't allow a sample to be read from the queue until we're sure that
* a sample with an earlier timestamp won't be added to it.
*/
-/* package */ class SeiReader extends ElementaryStreamReader {
+/* package */ final class SeiReader extends ElementaryStreamReader {
public SeiReader(TrackOutput output) {
super(output);
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/webm/VarintReader.java b/library/src/main/java/com/google/android/exoplayer/extractor/webm/VarintReader.java
index 07973732e8b..03cdb2debb3 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/webm/VarintReader.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/webm/VarintReader.java
@@ -8,7 +8,7 @@
/**
* Reads EBML variable-length integers (varints) from an {@link ExtractorInput}.
*/
-/* package */ class VarintReader {
+/* package */ final class VarintReader {
private static final int STATE_BEGIN_READING = 0;
private static final int STATE_READ_CONTENTS = 1;
diff --git a/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java b/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java
index 39e47a7aec2..30eb9bb0a11 100644
--- a/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java
@@ -40,7 +40,7 @@
/**
* A {@link SampleSource} for HLS streams.
*/
-public class HlsSampleSource implements SampleSource, SampleSourceReader, Loader.Callback {
+public final class HlsSampleSource implements SampleSource, SampleSourceReader, Loader.Callback {
/**
* Interface definition for a callback to be notified of {@link HlsSampleSource} events.
@@ -561,7 +561,7 @@ private long getRetryDelayMillis(long errorCount) {
return Math.min((errorCount - 1) * 1000, 5000);
}
- protected final int usToMs(long timeUs) {
+ /* package */ int usToMs(long timeUs) {
return (int) (timeUs / 1000);
}
diff --git a/library/src/main/java/com/google/android/exoplayer/metadata/GeobMetadata.java b/library/src/main/java/com/google/android/exoplayer/metadata/GeobMetadata.java
index 1d4fcb4deec..6cc61dd4686 100644
--- a/library/src/main/java/com/google/android/exoplayer/metadata/GeobMetadata.java
+++ b/library/src/main/java/com/google/android/exoplayer/metadata/GeobMetadata.java
@@ -19,7 +19,7 @@
* A metadata that contains parsed ID3 GEOB (General Encapsulated Object) frame data associated
* with time indices.
*/
-public class GeobMetadata {
+public final class GeobMetadata {
public static final String TYPE = "GEOB";
diff --git a/library/src/main/java/com/google/android/exoplayer/metadata/Id3Parser.java b/library/src/main/java/com/google/android/exoplayer/metadata/Id3Parser.java
index f306c5d6e8c..6b52cb5371f 100644
--- a/library/src/main/java/com/google/android/exoplayer/metadata/Id3Parser.java
+++ b/library/src/main/java/com/google/android/exoplayer/metadata/Id3Parser.java
@@ -28,7 +28,7 @@
/**
* Extracts individual TXXX text frames from raw ID3 data.
*/
-public class Id3Parser implements MetadataParser
* @see TTML specification
*/
-public class TtmlParser implements SubtitleParser {
+public final class TtmlParser implements SubtitleParser {
private static final String TAG = "TtmlParser";
diff --git a/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttParser.java b/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttParser.java
index 0503eb22996..bebf643e826 100644
--- a/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttParser.java
+++ b/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttParser.java
@@ -91,7 +91,7 @@ public WebvttParser(boolean strictParsing) {
}
@Override
- public WebvttSubtitle parse(InputStream inputStream, String inputEncoding, long startTimeUs)
+ public final WebvttSubtitle parse(InputStream inputStream, String inputEncoding, long startTimeUs)
throws IOException {
ArrayList subtitles = new ArrayList<>();
long mediaTimestampUs = startTimeUs;
@@ -253,7 +253,7 @@ public WebvttSubtitle parse(InputStream inputStream, String inputEncoding, long
}
@Override
- public boolean canParse(String mimeType) {
+ public final boolean canParse(String mimeType) {
return MimeTypes.TEXT_VTT.equals(mimeType);
}
diff --git a/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttSubtitle.java b/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttSubtitle.java
index 3ca64cdc21b..3cc7ba63628 100644
--- a/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttSubtitle.java
+++ b/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttSubtitle.java
@@ -30,7 +30,7 @@
/**
* A representation of a WebVTT subtitle.
*/
-public class WebvttSubtitle implements Subtitle {
+public final class WebvttSubtitle implements Subtitle {
private final List cues;
private final int numCues;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSink.java b/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSink.java
index d672dd95d7d..aaa8a1c1866 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSink.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSink.java
@@ -24,7 +24,7 @@
/**
* A {@link DataSink} for writing to a byte array.
*/
-public class ByteArrayDataSink implements DataSink {
+public final class ByteArrayDataSink implements DataSink {
private ByteArrayOutputStream stream;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSource.java b/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSource.java
index 0438f87371c..e16b3a7cccf 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/ByteArrayDataSource.java
@@ -23,7 +23,7 @@
/**
* A {@link DataSource} for reading from a byte array.
*/
-public class ByteArrayDataSource implements DataSource {
+public final class ByteArrayDataSource implements DataSource {
private final byte[] data;
private int readPosition;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/DataSourceInputStream.java b/library/src/main/java/com/google/android/exoplayer/upstream/DataSourceInputStream.java
index 75bcf72b88d..ff3d0b7b8e8 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/DataSourceInputStream.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/DataSourceInputStream.java
@@ -24,7 +24,7 @@
* Allows data corresponding to a given {@link DataSpec} to be read from a {@link DataSource} and
* consumed as an {@link InputStream}.
*/
-public class DataSourceInputStream extends InputStream {
+public final class DataSourceInputStream extends InputStream {
private final DataSource dataSource;
private final DataSpec dataSpec;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/DefaultBandwidthMeter.java b/library/src/main/java/com/google/android/exoplayer/upstream/DefaultBandwidthMeter.java
index 8af7bf92508..ba2297341b3 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/DefaultBandwidthMeter.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/DefaultBandwidthMeter.java
@@ -26,7 +26,7 @@
* Counts transferred bytes while transfers are open and creates a bandwidth sample and updated
* bandwidth estimate each time a transfer ends.
*/
-public class DefaultBandwidthMeter implements BandwidthMeter {
+public final class DefaultBandwidthMeter implements BandwidthMeter {
public static final int DEFAULT_MAX_WEIGHT = 2000;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/PriorityDataSource.java b/library/src/main/java/com/google/android/exoplayer/upstream/PriorityDataSource.java
index 34ed14794c1..19a2b224de5 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/PriorityDataSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/PriorityDataSource.java
@@ -24,7 +24,7 @@
* priority is the highest priority of any task. {@link NetworkLock.PriorityTooLowException} is
* thrown when this condition does not hold.
*/
-public class PriorityDataSource implements DataSource {
+public final class PriorityDataSource implements DataSource {
private final DataSource upstream;
private final int priority;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/UdpDataSource.java b/library/src/main/java/com/google/android/exoplayer/upstream/UdpDataSource.java
index 4bb12294bd3..c9a41e3aa37 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/UdpDataSource.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/UdpDataSource.java
@@ -27,7 +27,7 @@
/**
* A UDP {@link DataSource}.
*/
-public class UdpDataSource implements UriDataSource {
+public final class UdpDataSource implements UriDataSource {
/**
* Thrown when an error is encountered when trying to read from a {@link UdpDataSource}.
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/cache/CacheDataSink.java b/library/src/main/java/com/google/android/exoplayer/upstream/cache/CacheDataSink.java
index 01e06b51586..5ed4efcf2e3 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/cache/CacheDataSink.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/cache/CacheDataSink.java
@@ -29,7 +29,7 @@
/**
* Writes data into a cache.
*/
-public class CacheDataSink implements DataSink {
+public final class CacheDataSink implements DataSink {
private final Cache cache;
private final long maxCacheFileSize;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/cache/LeastRecentlyUsedCacheEvictor.java b/library/src/main/java/com/google/android/exoplayer/upstream/cache/LeastRecentlyUsedCacheEvictor.java
index 577d7b3bbf1..4998f09fc23 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/cache/LeastRecentlyUsedCacheEvictor.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/cache/LeastRecentlyUsedCacheEvictor.java
@@ -21,7 +21,7 @@
/**
* Evicts least recently used cache files first.
*/
-public class LeastRecentlyUsedCacheEvictor implements CacheEvictor, Comparator {
+public final class LeastRecentlyUsedCacheEvictor implements CacheEvictor, Comparator {
private final long maxBytes;
private final TreeSet leastRecentlyUsed;
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/cache/NoOpCacheEvictor.java b/library/src/main/java/com/google/android/exoplayer/upstream/cache/NoOpCacheEvictor.java
index ea050c28dd2..56e4e334002 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/cache/NoOpCacheEvictor.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/cache/NoOpCacheEvictor.java
@@ -22,7 +22,7 @@
* Warning: Using this evictor might have unforeseeable consequences if cache
* size is not managed elsewhere.
*/
-public class NoOpCacheEvictor implements CacheEvictor {
+public final class NoOpCacheEvictor implements CacheEvictor {
@Override
public void onStartFile(Cache cache, String key, long position, long length) {
diff --git a/library/src/main/java/com/google/android/exoplayer/upstream/cache/SimpleCache.java b/library/src/main/java/com/google/android/exoplayer/upstream/cache/SimpleCache.java
index ed2001b3712..649e555dc36 100644
--- a/library/src/main/java/com/google/android/exoplayer/upstream/cache/SimpleCache.java
+++ b/library/src/main/java/com/google/android/exoplayer/upstream/cache/SimpleCache.java
@@ -32,7 +32,7 @@
/**
* A {@link Cache} implementation that maintains an in-memory representation.
*/
-public class SimpleCache implements Cache {
+public final class SimpleCache implements Cache {
private final File cacheDir;
private final CacheEvictor evictor;
diff --git a/library/src/main/java/com/google/android/exoplayer/util/MimeTypes.java b/library/src/main/java/com/google/android/exoplayer/util/MimeTypes.java
index 61f268be219..7b0d9d0d4c6 100644
--- a/library/src/main/java/com/google/android/exoplayer/util/MimeTypes.java
+++ b/library/src/main/java/com/google/android/exoplayer/util/MimeTypes.java
@@ -23,7 +23,7 @@
/**
* Defines common MIME types and helper methods.
*/
-public class MimeTypes {
+public final class MimeTypes {
public static final String BASE_TYPE_VIDEO = "video";
public static final String BASE_TYPE_AUDIO = "audio";
diff --git a/library/src/main/java/com/google/android/exoplayer/util/PriorityHandlerThread.java b/library/src/main/java/com/google/android/exoplayer/util/PriorityHandlerThread.java
index 86f77ffa3b0..d10b3055c3e 100644
--- a/library/src/main/java/com/google/android/exoplayer/util/PriorityHandlerThread.java
+++ b/library/src/main/java/com/google/android/exoplayer/util/PriorityHandlerThread.java
@@ -21,7 +21,7 @@
/**
* A {@link HandlerThread} with a specified process priority.
*/
-public class PriorityHandlerThread extends HandlerThread {
+public final class PriorityHandlerThread extends HandlerThread {
private final int priority;
diff --git a/library/src/main/java/com/google/android/exoplayer/util/SlidingPercentile.java b/library/src/main/java/com/google/android/exoplayer/util/SlidingPercentile.java
index 77294f45628..36a15101aea 100644
--- a/library/src/main/java/com/google/android/exoplayer/util/SlidingPercentile.java
+++ b/library/src/main/java/com/google/android/exoplayer/util/SlidingPercentile.java
@@ -31,7 +31,7 @@
* @see Wiki: Moving average
* @see Wiki: Selection algorithm
*/
-public class SlidingPercentile {
+public final class SlidingPercentile {
// Orderings.
private static final Comparator INDEX_COMPARATOR = new Comparator() {
diff --git a/library/src/main/java/com/google/android/exoplayer/util/TraceUtil.java b/library/src/main/java/com/google/android/exoplayer/util/TraceUtil.java
index d581305c8c8..3cd305bfe77 100644
--- a/library/src/main/java/com/google/android/exoplayer/util/TraceUtil.java
+++ b/library/src/main/java/com/google/android/exoplayer/util/TraceUtil.java
@@ -22,7 +22,9 @@
/**
* Calls through to {@link android.os.Trace} methods on supported API levels.
*/
-public class TraceUtil {
+public final class TraceUtil {
+
+ private TraceUtil() {}
/**
* Writes a trace message to indicate that a given section of code has begun.
diff --git a/library/src/main/java/com/google/android/exoplayer/util/VerboseLogUtil.java b/library/src/main/java/com/google/android/exoplayer/util/VerboseLogUtil.java
index 590c1b51c06..4fe40cde5f8 100644
--- a/library/src/main/java/com/google/android/exoplayer/util/VerboseLogUtil.java
+++ b/library/src/main/java/com/google/android/exoplayer/util/VerboseLogUtil.java
@@ -18,14 +18,12 @@
/**
* Utility class for managing a set of tags for which verbose logging should be enabled.
*/
-public class VerboseLogUtil {
+public final class VerboseLogUtil {
private static volatile String[] enabledTags;
private static volatile boolean enableAllTags;
- private VerboseLogUtil() {
- // Private constructor to prevent instantiation.
- }
+ private VerboseLogUtil() {}
/**
* Sets the tags for which verbose logging should be enabled.
From d3ce56f9bc97e58f7bee487f92dc0d8c097c9d88 Mon Sep 17 00:00:00 2001
From: Oliver Woodman
Date: Mon, 3 Aug 2015 15:18:23 +0100
Subject: [PATCH 3/8] Fix commented code
---
.../google/android/exoplayer/extractor/mp3/XingSeeker.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/mp3/XingSeeker.java b/library/src/main/java/com/google/android/exoplayer/extractor/mp3/XingSeeker.java
index fd02971a96b..b6d2e9c9661 100644
--- a/library/src/main/java/com/google/android/exoplayer/extractor/mp3/XingSeeker.java
+++ b/library/src/main/java/com/google/android/exoplayer/extractor/mp3/XingSeeker.java
@@ -69,8 +69,8 @@ public static XingSeeker create(MpegAudioHeader mpegAudioHeader, ParsableByteArr
}
// TODO: Handle encoder delay and padding in 3 bytes offset by xingBase + 213 bytes:
- // delay = ((frame.readUnsignedByte() & 0xFF) << 4) + ((frame.readUnsignedByte() & 0xFF) >>> 4);
- // padding = ((frame.readUnsignedByte() & 0x0F) << 8) + (frame.readUnsignedByte() & 0xFF);
+ // delay = (frame.readUnsignedByte() << 4) + (frame.readUnsignedByte() >> 4);
+ // padding = ((frame.readUnsignedByte() & 0x0F) << 8) + frame.readUnsignedByte();
return new XingSeeker(tableOfContents, firstFramePosition, sizeBytes, durationUs, inputLength);
}
From 039cddd6c0480e48bba51930aad761fd4096aa79 Mon Sep 17 00:00:00 2001
From: Oliver Woodman
Date: Tue, 4 Aug 2015 13:50:15 +0100
Subject: [PATCH 4/8] Don't require comma in EXTINF tags
---
.../com/google/android/exoplayer/hls/HlsPlaylistParser.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/library/src/main/java/com/google/android/exoplayer/hls/HlsPlaylistParser.java b/library/src/main/java/com/google/android/exoplayer/hls/HlsPlaylistParser.java
index 78b9d066480..789217bbcc7 100644
--- a/library/src/main/java/com/google/android/exoplayer/hls/HlsPlaylistParser.java
+++ b/library/src/main/java/com/google/android/exoplayer/hls/HlsPlaylistParser.java
@@ -74,7 +74,7 @@ public final class HlsPlaylistParser implements UriLoadable.Parser
private static final Pattern RESOLUTION_ATTR_REGEX =
Pattern.compile(RESOLUTION_ATTR + "=(\\d+x\\d+)");
private static final Pattern MEDIA_DURATION_REGEX =
- Pattern.compile(MEDIA_DURATION_TAG + ":([\\d.]+),");
+ Pattern.compile(MEDIA_DURATION_TAG + ":([\\d.]+)\\b");
private static final Pattern MEDIA_SEQUENCE_REGEX =
Pattern.compile(MEDIA_SEQUENCE_TAG + ":(\\d+)\\b");
private static final Pattern TARGET_DURATION_REGEX =
From 3bd52c74bb18471888f2aa0b84f02d98695e3de4 Mon Sep 17 00:00:00 2001
From: Oliver Woodman
Date: Tue, 4 Aug 2015 13:53:57 +0100
Subject: [PATCH 5/8] Update release notes
---
RELEASENOTES.md | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 5ce6fff6761..f2036600cc2 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -2,7 +2,10 @@
### Current dev branch (from r1.4.1) ###
-* Added MulticastDataSource for connecting to multicast streams.
+* Implemented automatic format detection for regular container formats.
+* Added UdpDataSource for connecting to multicast streams.
+* Improved robustness for MP4 playbacks.
+* Misc bug fixes.
### r1.4.1 ###
From a7d843f90d0929855af638167dcd28417c1499bf Mon Sep 17 00:00:00 2001
From: Oliver Woodman
Date: Tue, 4 Aug 2015 16:07:54 +0100
Subject: [PATCH 6/8] Increment version to 1.4.2
---
RELEASENOTES.md | 6 +++++-
demo/src/main/AndroidManifest.xml | 4 ++--
demo_misc/webm_sw_decoder/src/main/AndroidManifest.xml | 4 ++--
library/build.gradle | 2 +-
.../com/google/android/exoplayer/ExoPlayerLibraryInfo.java | 4 ++--
5 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index f2036600cc2..1cd94cfa13c 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -1,6 +1,10 @@
# Release notes #
-### Current dev branch (from r1.4.1) ###
+### Current dev branch (from r1.4.2) ###
+
+* Nothing yet.
+
+### r1.4.2 ###
* Implemented automatic format detection for regular container formats.
* Added UdpDataSource for connecting to multicast streams.
diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml
index 18d69151b51..5212346babb 100644
--- a/demo/src/main/AndroidManifest.xml
+++ b/demo/src/main/AndroidManifest.xml
@@ -16,8 +16,8 @@
diff --git a/demo_misc/webm_sw_decoder/src/main/AndroidManifest.xml b/demo_misc/webm_sw_decoder/src/main/AndroidManifest.xml
index 08430b8ee3f..e07f7f34bc5 100644
--- a/demo_misc/webm_sw_decoder/src/main/AndroidManifest.xml
+++ b/demo_misc/webm_sw_decoder/src/main/AndroidManifest.xml
@@ -17,8 +17,8 @@
diff --git a/library/build.gradle b/library/build.gradle
index 152efbcf15c..4ed58a5b5f8 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -77,7 +77,7 @@ publish {
userOrg = 'google'
groupId = 'com.google.android.exoplayer'
artifactId = 'exoplayer'
- version = 'r1.4.1'
+ version = 'r1.4.2'
description = 'The ExoPlayer library.'
website = 'https://github.com/google/ExoPlayer'
}
diff --git a/library/src/main/java/com/google/android/exoplayer/ExoPlayerLibraryInfo.java b/library/src/main/java/com/google/android/exoplayer/ExoPlayerLibraryInfo.java
index be06690ca12..1d3ae0c6be1 100644
--- a/library/src/main/java/com/google/android/exoplayer/ExoPlayerLibraryInfo.java
+++ b/library/src/main/java/com/google/android/exoplayer/ExoPlayerLibraryInfo.java
@@ -23,7 +23,7 @@ public final class ExoPlayerLibraryInfo {
/**
* The version of the library, expressed as a string.
*/
- public static final String VERSION = "1.4.1";
+ public static final String VERSION = "1.4.2";
/**
* The version of the library, expressed as an integer.
@@ -31,7 +31,7 @@ public final class ExoPlayerLibraryInfo {
* Three digits are used for each component of {@link #VERSION}. For example "1.2.3" has the
* corresponding integer version 001002003.
*/
- public static final int VERSION_INT = 001004001;
+ public static final int VERSION_INT = 001004002;
/**
* Whether the library was compiled with {@link com.google.android.exoplayer.util.Assertions}
From b912dcbb280b49f9bee1b4aa1fdedec0d738c9da Mon Sep 17 00:00:00 2001
From: Billy Hnath
Date: Fri, 7 Aug 2015 16:04:33 -0400
Subject: [PATCH 7/8] update internal versioning
---
gradle.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gradle.properties b/gradle.properties
index b3b694d535d..b10970012fd 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -17,5 +17,5 @@
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
-version=1.3.2
+version=1.4.2-INTERNAL
group=com.google.exoplayer
\ No newline at end of file
From c51feafded7b15ebcb1c5ec7bf5c6e90ce151be0 Mon Sep 17 00:00:00 2001
From: Billy Hnath
Date: Fri, 7 Aug 2015 16:11:35 -0400
Subject: [PATCH 8/8] add rendition url to format for analytics
---
.../com/google/android/exoplayer/chunk/Format.java | 10 ++++++++--
.../dash/mpd/MediaPresentationDescriptionParser.java | 2 +-
.../java/com/google/android/exoplayer/hls/Variant.java | 2 +-
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/Format.java b/library/src/main/java/com/google/android/exoplayer/chunk/Format.java
index 0c2f404426c..562358b6f0a 100644
--- a/library/src/main/java/com/google/android/exoplayer/chunk/Format.java
+++ b/library/src/main/java/com/google/android/exoplayer/chunk/Format.java
@@ -41,6 +41,11 @@ public int compare(Format a, Format b) {
*/
public final String id;
+ /**
+ * The rendition url.
+ */
+ public final String renditionUrl;
+
/**
* The mime type of the format.
*/
@@ -119,7 +124,7 @@ public Format(String id, String mimeType, int width, int height, float frameRate
*/
public Format(String id, String mimeType, int width, int height, float frameRate, int numChannels,
int audioSamplingRate, int bitrate, String language) {
- this(id, mimeType, width, height, frameRate, numChannels, audioSamplingRate, bitrate, language,
+ this(id, null, mimeType, width, height, frameRate, numChannels, audioSamplingRate, bitrate, language,
null);
}
@@ -137,9 +142,10 @@ public Format(String id, String mimeType, int width, int height, float frameRate
* @param language The language of the format.
* @param codecs The codecs used to decode the format.
*/
- public Format(String id, String mimeType, int width, int height, float frameRate, int numChannels,
+ public Format(String id, String renditionUrl, String mimeType, int width, int height, float frameRate, int numChannels,
int audioSamplingRate, int bitrate, String language, String codecs) {
this.id = Assertions.checkNotNull(id);
+ this.renditionUrl = renditionUrl;
this.mimeType = mimeType;
this.width = width;
this.height = height;
diff --git a/library/src/main/java/com/google/android/exoplayer/dash/mpd/MediaPresentationDescriptionParser.java b/library/src/main/java/com/google/android/exoplayer/dash/mpd/MediaPresentationDescriptionParser.java
index 0f0c8a5058f..50e79f41092 100644
--- a/library/src/main/java/com/google/android/exoplayer/dash/mpd/MediaPresentationDescriptionParser.java
+++ b/library/src/main/java/com/google/android/exoplayer/dash/mpd/MediaPresentationDescriptionParser.java
@@ -347,7 +347,7 @@ protected Representation parseRepresentation(XmlPullParser xpp, String baseUrl,
protected Format buildFormat(String id, String mimeType, int width, int height, float frameRate,
int numChannels, int audioSamplingRate, int bandwidth, String language, String codecs) {
- return new Format(id, mimeType, width, height, frameRate, numChannels, audioSamplingRate,
+ return new Format(id, null, mimeType, width, height, frameRate, numChannels, audioSamplingRate,
bandwidth, language, codecs);
}
diff --git a/library/src/main/java/com/google/android/exoplayer/hls/Variant.java b/library/src/main/java/com/google/android/exoplayer/hls/Variant.java
index 61d6fb54ae3..b152e43af9b 100644
--- a/library/src/main/java/com/google/android/exoplayer/hls/Variant.java
+++ b/library/src/main/java/com/google/android/exoplayer/hls/Variant.java
@@ -29,7 +29,7 @@ public final class Variant implements FormatWrapper {
public Variant(int index, String url, int bitrate, String codecs, int width, int height) {
this.url = url;
- format = new Format(Integer.toString(index), MimeTypes.APPLICATION_M3U8, width, height, -1, -1,
+ format = new Format(Integer.toString(index), url, MimeTypes.APPLICATION_M3U8, width, height, -1, -1,
-1, bitrate, null, codecs);
}