From 1732aa761c72e0b35dcd393edbe1a749c085556f Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Fri, 5 Jun 2015 18:24:22 +0100 Subject: [PATCH] Set MediaFormat for VTT chunks + cleanup. ChunkSampleSource had a null check solely for the VTT case, where DashChunkSource wasn't setting a MediaFormat on VTT chunks. It's trivial to do so, and is more consistent, so I've done that and removed the null check. Also done some small tidying. --- .../google/android/exoplayer/MediaFormat.java | 17 ++--------------- .../exoplayer/chunk/BaseMediaChunk.java | 18 +++++++++--------- .../exoplayer/chunk/ChunkSampleSource.java | 4 ++-- .../exoplayer/chunk/ContainerMediaChunk.java | 6 +++--- .../exoplayer/dash/DashChunkSource.java | 4 ++-- .../exoplayer/extractor/mp4/AtomParsers.java | 4 ++-- .../exoplayer/extractor/ts/Id3Reader.java | 3 ++- .../exoplayer/extractor/ts/SeiReader.java | 3 ++- .../SmoothStreamingChunkSource.java | 2 +- 9 files changed, 25 insertions(+), 36 deletions(-) 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 aaaad2cf26..898223969f 100644 --- a/library/src/main/java/com/google/android/exoplayer/MediaFormat.java +++ b/library/src/main/java/com/google/android/exoplayer/MediaFormat.java @@ -15,7 +15,6 @@ */ package com.google.android.exoplayer; -import com.google.android.exoplayer.util.MimeTypes; import com.google.android.exoplayer.util.Util; import android.annotation.SuppressLint; @@ -94,20 +93,8 @@ public class MediaFormat { channelCount, sampleRate, initializationData); } - public static MediaFormat createId3Format() { - return createFormatForMimeType(MimeTypes.APPLICATION_ID3); - } - - public static MediaFormat createEia608Format() { - return createFormatForMimeType(MimeTypes.APPLICATION_EIA608); - } - - public static MediaFormat createTtmlFormat() { - return createFormatForMimeType(MimeTypes.APPLICATION_TTML); - } - - public static MediaFormat createTx3GFormat() { - return createFormatForMimeType(MimeTypes.APPLICATION_TX3G); + public static MediaFormat createTextFormat(String mimeType) { + return createFormatForMimeType(mimeType); } public static MediaFormat createFormatForMimeType(String mimeType) { diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/BaseMediaChunk.java b/library/src/main/java/com/google/android/exoplayer/chunk/BaseMediaChunk.java index 73db1785d1..04f8a084cd 100644 --- a/library/src/main/java/com/google/android/exoplayer/chunk/BaseMediaChunk.java +++ b/library/src/main/java/com/google/android/exoplayer/chunk/BaseMediaChunk.java @@ -33,7 +33,7 @@ public abstract class BaseMediaChunk extends MediaChunk { * obtain the chunk's media format and drm initialization data. If false, these methods are only * guaranteed to return correct data after the first sample data has been output from the chunk. */ - public final boolean isFormatFinal; + public final boolean isMediaFormatFinal; private DefaultTrackOutput output; private int firstSampleIndex; @@ -47,16 +47,16 @@ public abstract class BaseMediaChunk extends MediaChunk { * @param endTimeUs The end time of the media contained by the chunk, in microseconds. * @param chunkIndex The index of the chunk. * @param isLastChunk True if this is the last chunk in the media. False otherwise. - * @param isFormatFinal True if {@link #getMediaFormat()} and {@link #getDrmInitData()} can be - * called at any time to obtain the media format and drm initialization data. False if these - * methods are only guaranteed to return correct data after the first sample data has been - * output from the chunk. + * @param isMediaFormatFinal True if {@link #getMediaFormat()} and {@link #getDrmInitData()} can + * be called at any time to obtain the media format and drm initialization data. False if + * these methods are only guaranteed to return correct data after the first sample data has + * been output from the chunk. */ public BaseMediaChunk(DataSource dataSource, DataSpec dataSpec, int trigger, Format format, long startTimeUs, long endTimeUs, int chunkIndex, boolean isLastChunk, - boolean isFormatFinal) { + boolean isMediaFormatFinal) { super(dataSource, dataSpec, trigger, format, startTimeUs, endTimeUs, chunkIndex, isLastChunk); - this.isFormatFinal = isFormatFinal; + this.isMediaFormatFinal = isMediaFormatFinal; } /** @@ -81,7 +81,7 @@ public abstract class BaseMediaChunk extends MediaChunk { /** * Gets the {@link MediaFormat} corresponding to the chunk. *

- * See {@link #isFormatFinal} for information about when this method is guaranteed to return + * See {@link #isMediaFormatFinal} for information about when this method is guaranteed to return * correct data. * * @return The {@link MediaFormat} corresponding to this chunk. @@ -91,7 +91,7 @@ public abstract class BaseMediaChunk extends MediaChunk { /** * Gets the {@link DrmInitData} corresponding to the chunk. *

- * See {@link #isFormatFinal} for information about when this method is guaranteed to return + * See {@link #isMediaFormatFinal} for information about when this method is guaranteed to return * correct data. * * @return The {@link DrmInitData} corresponding to this chunk. diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java b/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java index 9287abea88..570f04e0f6 100644 --- a/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java +++ b/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java @@ -225,9 +225,9 @@ public class ChunkSampleSource implements SampleSource, Loader.Callback { downstreamFormat = currentChunk.format; } - if (haveSamples || currentChunk.isFormatFinal) { + if (haveSamples || currentChunk.isMediaFormatFinal) { MediaFormat mediaFormat = currentChunk.getMediaFormat(); - if (mediaFormat != null && !mediaFormat.equals(downstreamMediaFormat, true)) { + if (!mediaFormat.equals(downstreamMediaFormat, true)) { chunkSource.getMaxVideoDimensions(mediaFormat); formatHolder.format = mediaFormat; formatHolder.drmInitData = currentChunk.getDrmInitData(); 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 d1145ff91b..031495e306 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 @@ -62,15 +62,15 @@ public class ContainerMediaChunk extends BaseMediaChunk implements SingleTrackOu * known to define its own format. * @param drmInitData The {@link DrmInitData} for the chunk. Null if the media is not drm * protected. May also be null if the data is known to define its own initialization data. - * @param isFormatFinal True if {@code mediaFormat} and {@code drmInitData} are known to be + * @param isMediaFormatFinal True if {@code mediaFormat} and {@code drmInitData} are known to be * correct and final. False if the data may define its own format or initialization data. */ public ContainerMediaChunk(DataSource dataSource, DataSpec dataSpec, int trigger, Format format, long startTimeUs, long endTimeUs, int chunkIndex, boolean isLastChunk, long sampleOffsetUs, ChunkExtractorWrapper extractorWrapper, MediaFormat mediaFormat, DrmInitData drmInitData, - boolean isFormatFinal) { + boolean isMediaFormatFinal) { super(dataSource, dataSpec, trigger, format, startTimeUs, endTimeUs, chunkIndex, isLastChunk, - isFormatFinal); + isMediaFormatFinal); this.extractorWrapper = extractorWrapper; this.sampleOffsetUs = sampleOffsetUs; this.mediaFormat = mediaFormat; diff --git a/library/src/main/java/com/google/android/exoplayer/dash/DashChunkSource.java b/library/src/main/java/com/google/android/exoplayer/dash/DashChunkSource.java index 08068f1a63..8a93b792d6 100644 --- a/library/src/main/java/com/google/android/exoplayer/dash/DashChunkSource.java +++ b/library/src/main/java/com/google/android/exoplayer/dash/DashChunkSource.java @@ -503,8 +503,8 @@ public class DashChunkSource implements ChunkSource { representationHolder.vttHeaderOffsetUs = presentationTimeOffsetUs; } return new SingleSampleMediaChunk(dataSource, dataSpec, Chunk.TRIGGER_INITIAL, - representation.format, startTimeUs, endTimeUs, absoluteSegmentNum, isLastSegment, null, - null, representationHolder.vttHeader); + representation.format, startTimeUs, endTimeUs, absoluteSegmentNum, isLastSegment, + MediaFormat.createTextFormat(MimeTypes.TEXT_VTT), null, representationHolder.vttHeader); } else { return new ContainerMediaChunk(dataSource, dataSpec, trigger, representation.format, startTimeUs, endTimeUs, absoluteSegmentNum, isLastSegment, 0, diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/mp4/AtomParsers.java b/library/src/main/java/com/google/android/exoplayer/extractor/mp4/AtomParsers.java index 418fb3e855..0d5288ad66 100644 --- a/library/src/main/java/com/google/android/exoplayer/extractor/mp4/AtomParsers.java +++ b/library/src/main/java/com/google/android/exoplayer/extractor/mp4/AtomParsers.java @@ -339,9 +339,9 @@ import java.util.List; parseAudioSampleEntry(stsd, childAtomType, childStartPosition, childAtomSize, durationUs, holder, i); } else if (childAtomType == Atom.TYPE_TTML) { - holder.mediaFormat = MediaFormat.createTtmlFormat(); + holder.mediaFormat = MediaFormat.createTextFormat(MimeTypes.APPLICATION_TTML); } else if (childAtomType == Atom.TYPE_tx3g) { - holder.mediaFormat = MediaFormat.createTx3GFormat(); + holder.mediaFormat = MediaFormat.createTextFormat(MimeTypes.APPLICATION_TX3G); } stsd.setPosition(childStartPosition + childAtomSize); } 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 04fe15481e..28c4fe71d1 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 @@ -18,6 +18,7 @@ package com.google.android.exoplayer.extractor.ts; import com.google.android.exoplayer.C; import com.google.android.exoplayer.MediaFormat; import com.google.android.exoplayer.extractor.TrackOutput; +import com.google.android.exoplayer.util.MimeTypes; import com.google.android.exoplayer.util.ParsableByteArray; /** @@ -34,7 +35,7 @@ import com.google.android.exoplayer.util.ParsableByteArray; public Id3Reader(TrackOutput output) { super(output); - output.format(MediaFormat.createId3Format()); + output.format(MediaFormat.createTextFormat(MimeTypes.APPLICATION_ID3)); } @Override 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 0283ceea92..3aa57557cc 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 @@ -19,6 +19,7 @@ import com.google.android.exoplayer.C; import com.google.android.exoplayer.MediaFormat; import com.google.android.exoplayer.extractor.TrackOutput; import com.google.android.exoplayer.text.eia608.Eia608Parser; +import com.google.android.exoplayer.util.MimeTypes; import com.google.android.exoplayer.util.ParsableByteArray; /** @@ -31,7 +32,7 @@ import com.google.android.exoplayer.util.ParsableByteArray; public SeiReader(TrackOutput output) { super(output); - output.format(MediaFormat.createEia608Format()); + output.format(MediaFormat.createTextFormat(MimeTypes.APPLICATION_EIA608)); } @Override diff --git a/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingChunkSource.java b/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingChunkSource.java index 77b187d464..ad8a2b9836 100644 --- a/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingChunkSource.java +++ b/library/src/main/java/com/google/android/exoplayer/smoothstreaming/SmoothStreamingChunkSource.java @@ -395,7 +395,7 @@ public class SmoothStreamingChunkSource implements ChunkSource { trackFormat.numChannels, trackFormat.audioSamplingRate, csd); return format; } else if (streamElement.type == StreamElement.TYPE_TEXT) { - return MediaFormat.createFormatForMimeType(trackFormat.mimeType); + return MediaFormat.createTextFormat(trackFormat.mimeType); } return null; }