diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java index 0c9bc73f4e..6df328c4e7 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java @@ -2064,18 +2064,20 @@ public class MatroskaExtractor implements Extractor { throw new ParserException("Unrecognized codec identifier."); } - int type; - Format format; @C.SelectionFlags int selectionFlags = 0; selectionFlags |= flagDefault ? C.SELECTION_FLAG_DEFAULT : 0; selectionFlags |= flagForced ? C.SELECTION_FLAG_FORCED : 0; + + int type; + Format.Builder formatBuilder = new Format.Builder(); // TODO: Consider reading the name elements of the tracks and, if present, incorporating them // into the trackId passed when creating the formats. if (MimeTypes.isAudio(mimeType)) { type = C.TRACK_TYPE_AUDIO; - format = Format.createAudioSampleFormat(Integer.toString(trackId), mimeType, null, - Format.NO_VALUE, maxInputSize, channelCount, sampleRate, pcmEncoding, - initializationData, drmInitData, selectionFlags, language); + formatBuilder + .setChannelCount(channelCount) + .setSampleRate(sampleRate) + .setPcmEncoding(pcmEncoding); } else if (MimeTypes.isVideo(mimeType)) { type = C.TRACK_TYPE_VIDEO; if (displayUnit == Track.DISPLAY_UNIT_PIXELS) { @@ -2086,9 +2088,9 @@ public class MatroskaExtractor implements Extractor { if (displayWidth != Format.NO_VALUE && displayHeight != Format.NO_VALUE) { pixelWidthHeightRatio = ((float) (height * displayWidth)) / (width * displayHeight); } - ColorInfo colorInfo = null; + @Nullable ColorInfo colorInfo = null; if (hasColorInfo) { - byte[] hdrStaticInfo = getHdrStaticInfo(); + @Nullable byte[] hdrStaticInfo = getHdrStaticInfo(); colorInfo = new ColorInfo(colorSpace, colorRange, colorTransfer, hdrStaticInfo); } int rotationDegrees = Format.NO_VALUE; @@ -2117,60 +2119,40 @@ public class MatroskaExtractor implements Extractor { rotationDegrees = 270; } } - format = - Format.createVideoSampleFormat( - Integer.toString(trackId), - mimeType, - /* codecs= */ null, - /* bitrate= */ Format.NO_VALUE, - maxInputSize, - width, - height, - /* frameRate= */ Format.NO_VALUE, - initializationData, - rotationDegrees, - pixelWidthHeightRatio, - projectionData, - stereoMode, - colorInfo, - drmInitData); + formatBuilder + .setWidth(width) + .setHeight(height) + .setPixelWidthHeightRatio(pixelWidthHeightRatio) + .setRotationDegrees(rotationDegrees) + .setProjectionData(projectionData) + .setStereoMode(stereoMode) + .setColorInfo(colorInfo); } else if (MimeTypes.APPLICATION_SUBRIP.equals(mimeType)) { type = C.TRACK_TYPE_TEXT; - format = - Format.createTextSampleFormat( - Integer.toString(trackId), mimeType, selectionFlags, language) - .copyWithDrmInitData(drmInitData); } else if (MimeTypes.TEXT_SSA.equals(mimeType)) { type = C.TRACK_TYPE_TEXT; initializationData = new ArrayList<>(2); initializationData.add(SSA_DIALOGUE_FORMAT); initializationData.add(codecPrivate); - format = - Format.createTextSampleFormat( - Integer.toString(trackId), - mimeType, - selectionFlags, - language, - /* accessibilityChannel= */ Format.NO_VALUE, - Format.OFFSET_SAMPLE_RELATIVE, - initializationData) - .copyWithDrmInitData(drmInitData); } else if (MimeTypes.APPLICATION_VOBSUB.equals(mimeType) || MimeTypes.APPLICATION_PGS.equals(mimeType) || MimeTypes.APPLICATION_DVBSUBS.equals(mimeType)) { type = C.TRACK_TYPE_TEXT; - format = - Format.createImageSampleFormat( - Integer.toString(trackId), - mimeType, - selectionFlags, - initializationData, - language) - .copyWithDrmInitData(drmInitData); } else { throw new ParserException("Unexpected MIME type."); } + Format format = + formatBuilder + .setId(trackId) + .setSampleMimeType(mimeType) + .setMaxInputSize(maxInputSize) + .setLanguage(language) + .setSelectionFlags(selectionFlags) + .setInitializationData(initializationData) + .setDrmInitData(drmInitData) + .build(); + this.output = output.track(number, type); this.output.format(format); } @@ -2335,7 +2317,5 @@ public class MatroskaExtractor implements Extractor { throw new ParserException("Error parsing MS/ACM codec private"); } } - } - } diff --git a/testdata/src/test/assets/mkv/sample.mkv.0.dump b/testdata/src/test/assets/mkv/sample.mkv.0.dump index 6eb566f069..bb8c0632f3 100644 --- a/testdata/src/test/assets/mkv/sample.mkv.0.dump +++ b/testdata/src/test/assets/mkv/sample.mkv.0.dump @@ -14,6 +14,8 @@ track 1: sampleMimeType = video/avc width = 1080 height = 720 + selectionFlags = 1 + language = und initializationData: data = length 30, hash F6F3D010 data = length 10, hash 7A0D0F2B diff --git a/testdata/src/test/assets/mkv/sample.mkv.1.dump b/testdata/src/test/assets/mkv/sample.mkv.1.dump index d8cfc60e8e..348f66e363 100644 --- a/testdata/src/test/assets/mkv/sample.mkv.1.dump +++ b/testdata/src/test/assets/mkv/sample.mkv.1.dump @@ -14,6 +14,8 @@ track 1: sampleMimeType = video/avc width = 1080 height = 720 + selectionFlags = 1 + language = und initializationData: data = length 30, hash F6F3D010 data = length 10, hash 7A0D0F2B diff --git a/testdata/src/test/assets/mkv/sample.mkv.2.dump b/testdata/src/test/assets/mkv/sample.mkv.2.dump index 20152094e4..e965e5039c 100644 --- a/testdata/src/test/assets/mkv/sample.mkv.2.dump +++ b/testdata/src/test/assets/mkv/sample.mkv.2.dump @@ -14,6 +14,8 @@ track 1: sampleMimeType = video/avc width = 1080 height = 720 + selectionFlags = 1 + language = und initializationData: data = length 30, hash F6F3D010 data = length 10, hash 7A0D0F2B diff --git a/testdata/src/test/assets/mkv/sample.mkv.3.dump b/testdata/src/test/assets/mkv/sample.mkv.3.dump index f48207e5c8..ab6d8e06cd 100644 --- a/testdata/src/test/assets/mkv/sample.mkv.3.dump +++ b/testdata/src/test/assets/mkv/sample.mkv.3.dump @@ -14,6 +14,8 @@ track 1: sampleMimeType = video/avc width = 1080 height = 720 + selectionFlags = 1 + language = und initializationData: data = length 30, hash F6F3D010 data = length 10, hash 7A0D0F2B diff --git a/testdata/src/test/assets/mkv/sample.mkv.unklen.dump b/testdata/src/test/assets/mkv/sample.mkv.unklen.dump index 6eb566f069..bb8c0632f3 100644 --- a/testdata/src/test/assets/mkv/sample.mkv.unklen.dump +++ b/testdata/src/test/assets/mkv/sample.mkv.unklen.dump @@ -14,6 +14,8 @@ track 1: sampleMimeType = video/avc width = 1080 height = 720 + selectionFlags = 1 + language = und initializationData: data = length 30, hash F6F3D010 data = length 10, hash 7A0D0F2B diff --git a/testdata/src/test/assets/mkv/subsample_encrypted_altref.webm.0.dump b/testdata/src/test/assets/mkv/subsample_encrypted_altref.webm.0.dump index a03dc12eca..303654d721 100644 --- a/testdata/src/test/assets/mkv/subsample_encrypted_altref.webm.0.dump +++ b/testdata/src/test/assets/mkv/subsample_encrypted_altref.webm.0.dump @@ -11,6 +11,8 @@ track 1: sampleMimeType = video/x-vnd.on2.vp9 width = 360 height = 240 + selectionFlags = 1 + language = en drmInitData = 1305012705 sample 0: time = 0 diff --git a/testdata/src/test/assets/mkv/subsample_encrypted_altref.webm.unklen.dump b/testdata/src/test/assets/mkv/subsample_encrypted_altref.webm.unklen.dump index a03dc12eca..303654d721 100644 --- a/testdata/src/test/assets/mkv/subsample_encrypted_altref.webm.unklen.dump +++ b/testdata/src/test/assets/mkv/subsample_encrypted_altref.webm.unklen.dump @@ -11,6 +11,8 @@ track 1: sampleMimeType = video/x-vnd.on2.vp9 width = 360 height = 240 + selectionFlags = 1 + language = en drmInitData = 1305012705 sample 0: time = 0 diff --git a/testdata/src/test/assets/mkv/subsample_encrypted_noaltref.webm.0.dump b/testdata/src/test/assets/mkv/subsample_encrypted_noaltref.webm.0.dump index fd85556602..af5a5af9a0 100644 --- a/testdata/src/test/assets/mkv/subsample_encrypted_noaltref.webm.0.dump +++ b/testdata/src/test/assets/mkv/subsample_encrypted_noaltref.webm.0.dump @@ -11,6 +11,8 @@ track 1: sampleMimeType = video/x-vnd.on2.vp9 width = 360 height = 240 + selectionFlags = 1 + language = en drmInitData = 1305012705 sample 0: time = 0 diff --git a/testdata/src/test/assets/mkv/subsample_encrypted_noaltref.webm.unklen.dump b/testdata/src/test/assets/mkv/subsample_encrypted_noaltref.webm.unklen.dump index fd85556602..af5a5af9a0 100644 --- a/testdata/src/test/assets/mkv/subsample_encrypted_noaltref.webm.unklen.dump +++ b/testdata/src/test/assets/mkv/subsample_encrypted_noaltref.webm.unklen.dump @@ -11,6 +11,8 @@ track 1: sampleMimeType = video/x-vnd.on2.vp9 width = 360 height = 240 + selectionFlags = 1 + language = en drmInitData = 1305012705 sample 0: time = 0