diff --git a/library/src/main/java/com/google/android/exoplayer/C.java b/library/src/main/java/com/google/android/exoplayer/C.java index f710b0d7a7..6bf5e08c42 100644 --- a/library/src/main/java/com/google/android/exoplayer/C.java +++ b/library/src/main/java/com/google/android/exoplayer/C.java @@ -15,6 +15,8 @@ */ package com.google.android.exoplayer; +import android.media.MediaExtractor; + /** * Defines constants that are generally useful throughout the library. */ @@ -40,6 +42,12 @@ public final class C { */ public static final String UTF8_NAME = "UTF-8"; + /** + * Sample flag that indicates the sample is a synchronization sample. + */ + @SuppressWarnings("InlinedApi") + public static final int SAMPLE_FLAG_SYNC = MediaExtractor.SAMPLE_FLAG_SYNC; + private C() {} } diff --git a/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java index dd56d54050..61b12e33b1 100644 --- a/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java @@ -572,7 +572,7 @@ public abstract class MediaCodecTrackRenderer extends TrackRenderer { if (waitingForFirstSyncFrame) { // TODO: Find out if it's possible to supply samples prior to the first sync // frame for HE-AAC. - if ((sampleHolder.flags & MediaExtractor.SAMPLE_FLAG_SYNC) == 0) { + if ((sampleHolder.flags & C.SAMPLE_FLAG_SYNC) == 0) { sampleHolder.data.clear(); if (codecReconfigurationState == RECONFIGURATION_STATE_QUEUE_PENDING) { // The buffer we just cleared contained reconfiguration data. We need to re-write this diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/parser/mp4/FragmentedMp4Extractor.java b/library/src/main/java/com/google/android/exoplayer/chunk/parser/mp4/FragmentedMp4Extractor.java index 01006d469d..d6229cf805 100644 --- a/library/src/main/java/com/google/android/exoplayer/chunk/parser/mp4/FragmentedMp4Extractor.java +++ b/library/src/main/java/com/google/android/exoplayer/chunk/parser/mp4/FragmentedMp4Extractor.java @@ -762,7 +762,6 @@ public final class FragmentedMp4Extractor implements Extractor { return 0; } - @SuppressLint("InlinedApi") private int readSample(NonBlockingInputStream inputStream, int sampleSize, SampleHolder out) { if (out == null) { return RESULT_NEED_SAMPLE_HOLDER; @@ -770,7 +769,7 @@ public final class FragmentedMp4Extractor implements Extractor { out.timeUs = fragmentRun.getSamplePresentationTime(sampleIndex) * 1000L; out.flags = 0; if (fragmentRun.sampleIsSyncFrameTable[sampleIndex]) { - out.flags |= MediaExtractor.SAMPLE_FLAG_SYNC; + out.flags |= C.SAMPLE_FLAG_SYNC; lastSyncSampleIndex = sampleIndex; } if (out.data == null || out.data.capacity() < sampleSize) { diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/parser/webm/WebmExtractor.java b/library/src/main/java/com/google/android/exoplayer/chunk/parser/webm/WebmExtractor.java index 829d604a77..ddf15e5610 100644 --- a/library/src/main/java/com/google/android/exoplayer/chunk/parser/webm/WebmExtractor.java +++ b/library/src/main/java/com/google/android/exoplayer/chunk/parser/webm/WebmExtractor.java @@ -25,9 +25,6 @@ import com.google.android.exoplayer.upstream.NonBlockingInputStream; import com.google.android.exoplayer.util.LongArray; import com.google.android.exoplayer.util.MimeTypes; -import android.annotation.TargetApi; -import android.media.MediaExtractor; - import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; @@ -42,7 +39,6 @@ import java.util.concurrent.TimeUnit; * Matroska is available here. * More info about WebM is here. */ -@TargetApi(16) public final class WebmExtractor implements Extractor { private static final String DOC_TYPE_WEBM = "webm"; @@ -412,7 +408,7 @@ public final class WebmExtractor implements Extractor { case LACING_NONE: long elementEndOffsetBytes = elementOffsetBytes + headerSizeBytes + contentsSizeBytes; simpleBlockTimecodeUs = clusterTimecodeUs + timecodeUs; - sampleHolder.flags = keyframe ? MediaExtractor.SAMPLE_FLAG_SYNC : 0; + sampleHolder.flags = keyframe ? C.SAMPLE_FLAG_SYNC : 0; sampleHolder.decodeOnly = invisible; sampleHolder.timeUs = clusterTimecodeUs + timecodeUs; sampleHolder.size = (int) (elementEndOffsetBytes - reader.getBytesRead()); diff --git a/library/src/main/java/com/google/android/exoplayer/hls/parser/SampleQueue.java b/library/src/main/java/com/google/android/exoplayer/hls/parser/SampleQueue.java index 18cb3226a5..348a2cd843 100644 --- a/library/src/main/java/com/google/android/exoplayer/hls/parser/SampleQueue.java +++ b/library/src/main/java/com/google/android/exoplayer/hls/parser/SampleQueue.java @@ -15,14 +15,12 @@ */ package com.google.android.exoplayer.hls.parser; +import com.google.android.exoplayer.C; import com.google.android.exoplayer.MediaFormat; import com.google.android.exoplayer.SampleHolder; import com.google.android.exoplayer.upstream.BufferPool; import com.google.android.exoplayer.util.ParsableByteArray; -import android.annotation.SuppressLint; -import android.media.MediaExtractor; - /** * Wraps a {@link RollingSampleBuffer}, adding higher level functionality such as enforcing that * the first sample returned from the queue is a keyframe, allowing splicing to another queue, and @@ -117,7 +115,6 @@ import android.media.MediaExtractor; * @param nextQueue The queue being spliced to. * @return Whether the splice was configured successfully. */ - @SuppressLint("InlinedApi") public boolean configureSpliceTo(SampleQueue nextQueue) { if (spliceOutTimeUs != Long.MIN_VALUE) { // We've already configured the splice. @@ -132,7 +129,7 @@ import android.media.MediaExtractor; RollingSampleBuffer nextRollingBuffer = nextQueue.rollingBuffer; while (nextRollingBuffer.peekSample(sampleInfoHolder) && (sampleInfoHolder.timeUs < firstPossibleSpliceTime - || (sampleInfoHolder.flags & MediaExtractor.SAMPLE_FLAG_SYNC) == 0)) { + || (sampleInfoHolder.flags & C.SAMPLE_FLAG_SYNC) == 0)) { // Discard samples from the next queue for as long as they are before the earliest possible // splice time, or not keyframes. nextRollingBuffer.skipSample(); @@ -152,11 +149,10 @@ import android.media.MediaExtractor; * @boolean True if an eligible sample was found. False otherwise, in which case the underlying * buffer has been emptied. */ - @SuppressLint("InlinedApi") private boolean advanceToEligibleSample() { boolean haveNext = rollingBuffer.peekSample(sampleInfoHolder); if (needKeyframe) { - while (haveNext && (sampleInfoHolder.flags & MediaExtractor.SAMPLE_FLAG_SYNC) == 0) { + while (haveNext && (sampleInfoHolder.flags & C.SAMPLE_FLAG_SYNC) == 0) { rollingBuffer.skipSample(); haveNext = rollingBuffer.peekSample(sampleInfoHolder); } diff --git a/library/src/main/java/com/google/android/exoplayer/mp4/CommonMp4AtomParsers.java b/library/src/main/java/com/google/android/exoplayer/mp4/CommonMp4AtomParsers.java index 141db60063..4443e573c9 100644 --- a/library/src/main/java/com/google/android/exoplayer/mp4/CommonMp4AtomParsers.java +++ b/library/src/main/java/com/google/android/exoplayer/mp4/CommonMp4AtomParsers.java @@ -24,8 +24,6 @@ import com.google.android.exoplayer.util.MimeTypes; import com.google.android.exoplayer.util.ParsableByteArray; import com.google.android.exoplayer.util.Util; -import android.annotation.SuppressLint; -import android.media.MediaExtractor; import android.util.Pair; import java.util.ArrayList; @@ -81,7 +79,6 @@ public final class CommonMp4AtomParsers { * @param stblAtom stbl (sample table) atom to parse. * @return Sample table described by the stbl atom. */ - @SuppressLint("InlinedApi") public static Mp4TrackSampleTable parseStbl(Track track, Atom.ContainerAtom stblAtom) { // Array of sample sizes. ParsableByteArray stsz = stblAtom.getLeafAtomOfType(Atom.TYPE_stsz).data; @@ -174,9 +171,9 @@ public final class CommonMp4AtomParsers { timestamps[i] = timestampTimeUnits + timestampOffset; // All samples are synchronization samples if the stss is not present. - flags[i] = stss == null ? MediaExtractor.SAMPLE_FLAG_SYNC : 0; + flags[i] = stss == null ? C.SAMPLE_FLAG_SYNC : 0; if (i == nextSynchronizationSampleIndex) { - flags[i] = MediaExtractor.SAMPLE_FLAG_SYNC; + flags[i] = C.SAMPLE_FLAG_SYNC; remainingSynchronizationSamples--; if (remainingSynchronizationSamples > 0) { nextSynchronizationSampleIndex = stss.readUnsignedIntToInt() - 1; diff --git a/library/src/main/java/com/google/android/exoplayer/mp4/Mp4TrackSampleTable.java b/library/src/main/java/com/google/android/exoplayer/mp4/Mp4TrackSampleTable.java index 325247edf1..9e60146140 100644 --- a/library/src/main/java/com/google/android/exoplayer/mp4/Mp4TrackSampleTable.java +++ b/library/src/main/java/com/google/android/exoplayer/mp4/Mp4TrackSampleTable.java @@ -15,11 +15,10 @@ */ package com.google.android.exoplayer.mp4; +import com.google.android.exoplayer.C; import com.google.android.exoplayer.util.Assertions; import com.google.android.exoplayer.util.Util; -import android.media.MediaExtractor; - /** Sample table for a track in an MP4 file. */ public final class Mp4TrackSampleTable { @@ -59,7 +58,7 @@ public final class Mp4TrackSampleTable { public int getIndexOfEarlierOrEqualSynchronizationSample(long timeUs) { int startIndex = Util.binarySearchFloor(timestampsUs, timeUs, true, false); for (int i = startIndex; i >= 0; i--) { - if (timestampsUs[i] <= timeUs && (flags[i] & MediaExtractor.SAMPLE_FLAG_SYNC) != 0) { + if (timestampsUs[i] <= timeUs && (flags[i] & C.SAMPLE_FLAG_SYNC) != 0) { return i; } } @@ -77,7 +76,7 @@ public final class Mp4TrackSampleTable { public int getIndexOfLaterOrEqualSynchronizationSample(long timeUs) { int startIndex = Util.binarySearchCeil(timestampsUs, timeUs, true, false); for (int i = startIndex; i < timestampsUs.length; i++) { - if (timestampsUs[i] >= timeUs && (flags[i] & MediaExtractor.SAMPLE_FLAG_SYNC) != 0) { + if (timestampsUs[i] >= timeUs && (flags[i] & C.SAMPLE_FLAG_SYNC) != 0) { return i; } }