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> { +public final class Id3Parser implements MetadataParser> { private static final int ID3_TEXT_ENCODING_ISO_8859_1 = 0; private static final int ID3_TEXT_ENCODING_UTF_16 = 1; diff --git a/library/src/main/java/com/google/android/exoplayer/metadata/MetadataTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/metadata/MetadataTrackRenderer.java index b1722e2596c..767214482f5 100644 --- a/library/src/main/java/com/google/android/exoplayer/metadata/MetadataTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/metadata/MetadataTrackRenderer.java @@ -35,7 +35,7 @@ * * @param The type of the metadata. */ -public class MetadataTrackRenderer extends TrackRenderer implements Callback { +public final class MetadataTrackRenderer extends TrackRenderer implements Callback { /** * An interface for components that process metadata. diff --git a/library/src/main/java/com/google/android/exoplayer/metadata/PrivMetadata.java b/library/src/main/java/com/google/android/exoplayer/metadata/PrivMetadata.java index 8573b259062..94ba6e52cc8 100644 --- a/library/src/main/java/com/google/android/exoplayer/metadata/PrivMetadata.java +++ b/library/src/main/java/com/google/android/exoplayer/metadata/PrivMetadata.java @@ -19,7 +19,7 @@ * A metadata that contains parsed ID3 PRIV (Private) frame data associated * with time indices. */ -public class PrivMetadata { +public final class PrivMetadata { public static final String TYPE = "PRIV"; diff --git a/library/src/main/java/com/google/android/exoplayer/metadata/TxxxMetadata.java b/library/src/main/java/com/google/android/exoplayer/metadata/TxxxMetadata.java index c455bb825db..c0f1d2c5b38 100644 --- a/library/src/main/java/com/google/android/exoplayer/metadata/TxxxMetadata.java +++ b/library/src/main/java/com/google/android/exoplayer/metadata/TxxxMetadata.java @@ -19,7 +19,7 @@ * A metadata that contains parsed ID3 TXXX (User defined text information) frame data associated * with time indices. */ -public class TxxxMetadata { +public final class TxxxMetadata { public static final String TYPE = "TXXX"; diff --git a/library/src/main/java/com/google/android/exoplayer/text/SubtitleParserHelper.java b/library/src/main/java/com/google/android/exoplayer/text/SubtitleParserHelper.java index 69872bf3854..835f66aa514 100644 --- a/library/src/main/java/com/google/android/exoplayer/text/SubtitleParserHelper.java +++ b/library/src/main/java/com/google/android/exoplayer/text/SubtitleParserHelper.java @@ -31,7 +31,7 @@ * Wraps a {@link SubtitleParser}, exposing an interface similar to {@link MediaCodec} for * asynchronous parsing of subtitles. */ -public class SubtitleParserHelper implements Handler.Callback { +public final class SubtitleParserHelper implements Handler.Callback { private final SubtitleParser parser; diff --git a/library/src/main/java/com/google/android/exoplayer/text/TextTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/text/TextTrackRenderer.java index 47ef4a41c4a..dd9b7bd28f7 100644 --- a/library/src/main/java/com/google/android/exoplayer/text/TextTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/text/TextTrackRenderer.java @@ -58,7 +58,7 @@ * {@link SubtitleParser#canParse(String)} will be used. */ @TargetApi(16) -public class TextTrackRenderer extends TrackRenderer implements Callback { +public final class TextTrackRenderer extends TrackRenderer implements Callback { private static final int MSG_UPDATE_OVERLAY = 0; diff --git a/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608Parser.java b/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608Parser.java index 9fdf41ba08a..e47d1dc29f0 100644 --- a/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608Parser.java +++ b/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608Parser.java @@ -26,7 +26,7 @@ * Facilitates the extraction and parsing of EIA-608 (a.k.a. "line 21 captions" and "CEA-608") * Closed Captions from the SEI data block from H.264. */ -public class Eia608Parser { +public final class Eia608Parser { private static final int PAYLOAD_TYPE_CC = 4; private static final int COUNTRY_CODE = 0xB5; diff --git a/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java index 8f81dc62ddc..ffb9faddbbb 100644 --- a/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java @@ -39,7 +39,7 @@ /** * A {@link TrackRenderer} for EIA-608 closed captions in a media stream. */ -public class Eia608TrackRenderer extends TrackRenderer implements Callback { +public final class Eia608TrackRenderer extends TrackRenderer implements Callback { private static final int MSG_INVOKE_RENDERER = 0; diff --git a/library/src/main/java/com/google/android/exoplayer/text/ttml/TtmlParser.java b/library/src/main/java/com/google/android/exoplayer/text/ttml/TtmlParser.java index d93f99fea0e..22bc7e1975b 100644 --- a/library/src/main/java/com/google/android/exoplayer/text/ttml/TtmlParser.java +++ b/library/src/main/java/com/google/android/exoplayer/text/ttml/TtmlParser.java @@ -54,7 +54,7 @@ *

* @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); }