diff --git a/library/core/src/main/java/com/google/android/exoplayer2/C.java b/library/core/src/main/java/com/google/android/exoplayer2/C.java index 75f1263a31..2997c250e3 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/C.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/C.java @@ -977,7 +977,10 @@ public final class C { public static final int NETWORK_TYPE_OTHER = 8; /** - * Adaptation set's role and accessibility descriptor value. + * Track role flags. Possible values are {@link #ROLE_FLAGS_MAIN}, {@link #ROLE_FLAGS_ALTERNATE}, + * {@link #ROLE_FLAGS_SUPPLEMENTARY}, {@link #ROLE_FLAGS_COMMENTARY}, {@link #ROLE_FLAGS_DUB}, + * {@link #ROLE_FLAGS_EMERGENCY}, {@link #ROLE_FLAGS_CAPTION}, {@link #ROLE_FLAGS_SIGN}, + * {@link #ROLE_FLAGS_ENHANCED_AUDIO_INTELLIGIBILITY}, {@link #ROLE_FLAGS_DESCRIPTION}. */ @Documented @Retention(RetentionPolicy.SOURCE) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/Format.java b/library/core/src/main/java/com/google/android/exoplayer2/Format.java index 509ef8011f..b20b3ba86c 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/Format.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/Format.java @@ -51,7 +51,7 @@ public final class Format implements Parcelable { /** Track selection flags. **/ @C.SelectionFlags public final int selectionFlags; - /** Track role and accessibility descriptor values. **/ + /** Track role flags. **/ @C.RoleFlags public final int roleFlags; /** @@ -234,9 +234,9 @@ public final class Format implements Parcelable { /* encoderDelay= */ NO_VALUE, /* encoderPadding= */ NO_VALUE, selectionFlags, + roleFlags, /* language= */ null, /* accessibilityChannel= */ NO_VALUE, - roleFlags, OFFSET_SAMPLE_RELATIVE, initializationData, /* drmInitData= */ null, @@ -338,9 +338,9 @@ public final class Format implements Parcelable { /* encoderDelay= */ NO_VALUE, /* encoderPadding= */ NO_VALUE, /* selectionFlags= */ 0, + /* roleFlags= */ 0, /* language= */ null, /* accessibilityChannel= */ NO_VALUE, - /* roleFlags= */ 0, OFFSET_SAMPLE_RELATIVE, initializationData, drmInitData, @@ -360,8 +360,8 @@ public final class Format implements Parcelable { int sampleRate, @Nullable List initializationData, @C.SelectionFlags int selectionFlags, - @Nullable String language, - @C.RoleFlags int roleFlags) { + @C.RoleFlags int roleFlags, + @Nullable String language) { return createAudioContainerFormat( id, /* label= */ null, @@ -373,8 +373,8 @@ public final class Format implements Parcelable { sampleRate, initializationData, selectionFlags, - language, - roleFlags); + roleFlags, + language); } public static Format createAudioContainerFormat( @@ -388,8 +388,8 @@ public final class Format implements Parcelable { int sampleRate, @Nullable List initializationData, @C.SelectionFlags int selectionFlags, - @Nullable String language, - @C.RoleFlags int roleFlags) { + @C.RoleFlags int roleFlags, + @Nullable String language) { return new Format( id, label, @@ -412,9 +412,9 @@ public final class Format implements Parcelable { /* encoderDelay= */ NO_VALUE, /* encoderPadding= */ NO_VALUE, selectionFlags, + roleFlags, language, /* accessibilityChannel= */ NO_VALUE, - roleFlags, OFFSET_SAMPLE_RELATIVE, initializationData, /* drmInitData= */ null, @@ -517,9 +517,9 @@ public final class Format implements Parcelable { encoderDelay, encoderPadding, selectionFlags, + /* roleFlags= */ 0, language, /* accessibilityChannel= */ NO_VALUE, - /* roleFlags= */ 0, OFFSET_SAMPLE_RELATIVE, initializationData, drmInitData, @@ -565,9 +565,9 @@ public final class Format implements Parcelable { codecs, bitrate, selectionFlags, + /* roleFlags= */ 0, language, - /* accessibilityChannel= */ NO_VALUE, - /* roleFlags= */ 0); + /* accessibilityChannel= */ NO_VALUE); } public static Format createTextContainerFormat( @@ -578,9 +578,9 @@ public final class Format implements Parcelable { @Nullable String codecs, int bitrate, @C.SelectionFlags int selectionFlags, + @C.RoleFlags int roleFlags, @Nullable String language, - int accessibilityChannel, - @C.RoleFlags int roleFlags) { + int accessibilityChannel) { return new Format( id, label, @@ -603,9 +603,9 @@ public final class Format implements Parcelable { /* encoderDelay= */ NO_VALUE, /* encoderPadding= */ NO_VALUE, selectionFlags, + roleFlags, language, accessibilityChannel, - roleFlags, OFFSET_SAMPLE_RELATIVE, /* initializationData= */ null, /* drmInitData= */ null, @@ -716,9 +716,9 @@ public final class Format implements Parcelable { /* encoderDelay= */ NO_VALUE, /* encoderPadding= */ NO_VALUE, selectionFlags, + /* roleFlags= */ 0, language, accessibilityChannel, - /* roleFlags= */ 0, subsampleOffsetUs, initializationData, drmInitData, @@ -758,9 +758,9 @@ public final class Format implements Parcelable { /* encoderDelay= */ NO_VALUE, /* encoderPadding= */ NO_VALUE, selectionFlags, + /* roleFlags= */ 0, language, /* accessibilityChannel= */ NO_VALUE, - /* roleFlags= */ 0, OFFSET_SAMPLE_RELATIVE, initializationData, drmInitData, @@ -777,6 +777,7 @@ public final class Format implements Parcelable { @Nullable String codecs, int bitrate, @C.SelectionFlags int selectionFlags, + @C.RoleFlags int roleFlags, @Nullable String language) { return createContainerFormat( id, @@ -786,6 +787,7 @@ public final class Format implements Parcelable { codecs, bitrate, selectionFlags, + roleFlags, language); } @@ -797,6 +799,7 @@ public final class Format implements Parcelable { @Nullable String codecs, int bitrate, @C.SelectionFlags int selectionFlags, + @C.RoleFlags int roleFlags, @Nullable String language) { return new Format( id, @@ -820,9 +823,9 @@ public final class Format implements Parcelable { /* encoderDelay= */ NO_VALUE, /* encoderPadding= */ NO_VALUE, selectionFlags, + roleFlags, language, /* accessibilityChannel= */ NO_VALUE, - /* roleFlags= */ 0, OFFSET_SAMPLE_RELATIVE, /* initializationData= */ null, /* drmInitData= */ null, @@ -853,9 +856,9 @@ public final class Format implements Parcelable { /* encoderDelay= */ NO_VALUE, /* encoderPadding= */ NO_VALUE, /* selectionFlags= */ 0, + /* roleFlags= */ 0, /* language= */ null, /* accessibilityChannel= */ NO_VALUE, - /* roleFlags= */ 0, subsampleOffsetUs, /* initializationData= */ null, /* drmInitData= */ null, @@ -890,9 +893,9 @@ public final class Format implements Parcelable { /* encoderDelay= */ NO_VALUE, /* encoderPadding= */ NO_VALUE, /* selectionFlags= */ 0, + /* roleFlags= */ 0, /* language= */ null, /* accessibilityChannel= */ NO_VALUE, - /* roleFlags= */ 0, OFFSET_SAMPLE_RELATIVE, /* initializationData= */ null, drmInitData, @@ -921,9 +924,9 @@ public final class Format implements Parcelable { int encoderDelay, int encoderPadding, @C.SelectionFlags int selectionFlags, + @C.RoleFlags int roleFlags, @Nullable String language, int accessibilityChannel, - @C.RoleFlags int roleFlags, long subsampleOffsetUs, @Nullable List initializationData, @Nullable DrmInitData drmInitData, @@ -950,9 +953,9 @@ public final class Format implements Parcelable { this.encoderDelay = encoderDelay == Format.NO_VALUE ? 0 : encoderDelay; this.encoderPadding = encoderPadding == Format.NO_VALUE ? 0 : encoderPadding; this.selectionFlags = selectionFlags; + this.roleFlags = roleFlags; this.language = Util.normalizeLanguageCode(language); this.accessibilityChannel = accessibilityChannel; - this.roleFlags = roleFlags; this.subsampleOffsetUs = subsampleOffsetUs; this.initializationData = initializationData == null ? Collections.emptyList() : initializationData; @@ -984,9 +987,9 @@ public final class Format implements Parcelable { encoderDelay = in.readInt(); encoderPadding = in.readInt(); selectionFlags = in.readInt(); + roleFlags = in.readInt(); language = in.readString(); accessibilityChannel = in.readInt(); - roleFlags = in.readInt(); subsampleOffsetUs = in.readLong(); int initializationDataSize = in.readInt(); initializationData = new ArrayList<>(initializationDataSize); @@ -1020,9 +1023,9 @@ public final class Format implements Parcelable { encoderDelay, encoderPadding, selectionFlags, + roleFlags, language, accessibilityChannel, - roleFlags, subsampleOffsetUs, initializationData, drmInitData, @@ -1052,9 +1055,9 @@ public final class Format implements Parcelable { encoderDelay, encoderPadding, selectionFlags, + roleFlags, language, accessibilityChannel, - roleFlags, subsampleOffsetUs, initializationData, drmInitData, @@ -1093,9 +1096,9 @@ public final class Format implements Parcelable { encoderDelay, encoderPadding, selectionFlags, + roleFlags, language, accessibilityChannel, - roleFlags, subsampleOffsetUs, initializationData, drmInitData, @@ -1165,9 +1168,9 @@ public final class Format implements Parcelable { encoderDelay, encoderPadding, selectionFlags, + roleFlags, language, accessibilityChannel, - roleFlags, subsampleOffsetUs, initializationData, drmInitData, @@ -1197,9 +1200,9 @@ public final class Format implements Parcelable { encoderDelay, encoderPadding, selectionFlags, + roleFlags, language, accessibilityChannel, - roleFlags, subsampleOffsetUs, initializationData, drmInitData, @@ -1229,9 +1232,9 @@ public final class Format implements Parcelable { encoderDelay, encoderPadding, selectionFlags, + roleFlags, language, accessibilityChannel, - roleFlags, subsampleOffsetUs, initializationData, drmInitData, @@ -1261,9 +1264,9 @@ public final class Format implements Parcelable { encoderDelay, encoderPadding, selectionFlags, + roleFlags, language, accessibilityChannel, - roleFlags, subsampleOffsetUs, initializationData, drmInitData, @@ -1293,9 +1296,9 @@ public final class Format implements Parcelable { encoderDelay, encoderPadding, selectionFlags, + roleFlags, language, accessibilityChannel, - roleFlags, subsampleOffsetUs, initializationData, drmInitData, @@ -1325,9 +1328,9 @@ public final class Format implements Parcelable { encoderDelay, encoderPadding, selectionFlags, + roleFlags, language, accessibilityChannel, - roleFlags, subsampleOffsetUs, initializationData, drmInitData, @@ -1357,9 +1360,9 @@ public final class Format implements Parcelable { encoderDelay, encoderPadding, selectionFlags, + roleFlags, language, accessibilityChannel, - roleFlags, subsampleOffsetUs, initializationData, drmInitData, @@ -1465,11 +1468,11 @@ public final class Format implements Parcelable { && encoderPadding == other.encoderPadding && subsampleOffsetUs == other.subsampleOffsetUs && selectionFlags == other.selectionFlags + && roleFlags == other.roleFlags && Util.areEqual(id, other.id) && Util.areEqual(label, other.label) && Util.areEqual(language, other.language) && accessibilityChannel == other.accessibilityChannel - && roleFlags == other.roleFlags && Util.areEqual(containerMimeType, other.containerMimeType) && Util.areEqual(sampleMimeType, other.sampleMimeType) && Util.areEqual(codecs, other.codecs) @@ -1569,9 +1572,9 @@ public final class Format implements Parcelable { dest.writeInt(encoderDelay); dest.writeInt(encoderPadding); dest.writeInt(selectionFlags); + dest.writeInt(roleFlags); dest.writeString(language); dest.writeInt(accessibilityChannel); - dest.writeInt(roleFlags); dest.writeLong(subsampleOffsetUs); int initializationDataSize = initializationData.size(); dest.writeInt(initializationDataSize); diff --git a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java index 0a629b3d19..1b432beb2c 100644 --- a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java +++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/DashManifestParser.java @@ -279,7 +279,6 @@ public class DashManifestParser extends DefaultHandler ArrayList roleDescriptors = new ArrayList<>(); ArrayList supplementalProperties = new ArrayList<>(); List representationInfos = new ArrayList<>(); - @C.SelectionFlags int selectionFlags = 0; boolean seenFirstBaseUrl = false; do { @@ -301,9 +300,7 @@ public class DashManifestParser extends DefaultHandler language = checkLanguageConsistency(language, xpp.getAttributeValue(null, "lang")); contentType = checkContentTypeConsistency(contentType, parseContentType(xpp)); } else if (XmlPullParserUtil.isStartTag(xpp, "Role")) { - Descriptor descriptor = parseDescriptor(xpp, "Role"); - selectionFlags |= parseSelectionFlags(descriptor); - roleDescriptors.add(descriptor); + roleDescriptors.add(parseDescriptor(xpp, "Role")); } else if (XmlPullParserUtil.isStartTag(xpp, "AudioChannelConfiguration")) { audioChannels = parseAudioChannelConfiguration(xpp); } else if (XmlPullParserUtil.isStartTag(xpp, "Accessibility")) { @@ -324,7 +321,6 @@ public class DashManifestParser extends DefaultHandler audioChannels, audioSamplingRate, language, - selectionFlags, roleDescriptors, accessibilityDescriptors, segmentBase); @@ -494,7 +490,6 @@ public class DashManifestParser extends DefaultHandler int adaptationSetAudioChannels, int adaptationSetAudioSamplingRate, String adaptationSetLanguage, - @C.SelectionFlags int adaptationSetSelectionFlags, List adaptationSetRoleDescriptors, List adaptationSetAccessibilityDescriptors, SegmentBase segmentBase) @@ -559,7 +554,6 @@ public class DashManifestParser extends DefaultHandler audioSamplingRate, bandwidth, adaptationSetLanguage, - adaptationSetSelectionFlags, adaptationSetRoleDescriptors, adaptationSetAccessibilityDescriptors, codecs, @@ -581,16 +575,16 @@ public class DashManifestParser extends DefaultHandler int audioSamplingRate, int bitrate, String language, - @C.SelectionFlags int selectionFlags, List roleDescriptors, List accessibilityDescriptors, String codecs, List supplementalProperties) { String sampleMimeType = getSampleMimeType(containerMimeType, codecs); + @C.SelectionFlags int selectionFlags = parseSelection(roleDescriptors); + @C.RoleFlags int role = parseRole(roleDescriptors); + @C.RoleFlags int accessibility = parseAccessibility(accessibilityDescriptors); + @C.RoleFlags int roleFlags = role | accessibility; if (sampleMimeType != null) { - @C.RoleFlags int role = parseRole(roleDescriptors); - @C.RoleFlags int accessibility = parseAccessibility(accessibilityDescriptors); - @C.RoleFlags int roleFlags = role | accessibility; if (MimeTypes.AUDIO_E_AC3.equals(sampleMimeType)) { sampleMimeType = parseEac3SupplementalProperties(supplementalProperties); } @@ -620,8 +614,8 @@ public class DashManifestParser extends DefaultHandler audioSamplingRate, /* initializationData= */ null, selectionFlags, - language, - roleFlags); + roleFlags, + language); } else if (mimeTypeIsRawText(sampleMimeType)) { int accessibilityChannel; if (MimeTypes.APPLICATION_CEA608.equals(sampleMimeType)) { @@ -639,13 +633,21 @@ public class DashManifestParser extends DefaultHandler codecs, bitrate, selectionFlags, + roleFlags, language, - accessibilityChannel, - roleFlags); + accessibilityChannel); } } return Format.createContainerFormat( - id, label, containerMimeType, sampleMimeType, codecs, bitrate, selectionFlags, language); + id, + label, + containerMimeType, + sampleMimeType, + codecs, + bitrate, + selectionFlags, + roleFlags, + language); } protected Representation buildRepresentation( @@ -1061,9 +1063,16 @@ public class DashManifestParser extends DefaultHandler // Selection flag parsing. - protected int parseSelectionFlags(Descriptor roleDescriptor) { - return "urn:mpeg:dash:role:2011".equals(roleDescriptor.schemeIdUri) - && "main".equals(roleDescriptor.value) ? C.SELECTION_FLAG_DEFAULT : 0; + protected int parseSelection(List roleDescriptors) { + for (int i = 0; i < roleDescriptors.size(); i++) { + Descriptor descriptor = roleDescriptors.get(i); + if ("urn:mpeg:dash:role:2011".equalsIgnoreCase(descriptor.schemeIdUri) + && "main".equals(descriptor.value)) { + return C.SELECTION_FLAG_DEFAULT; + } + } + + return 0; } // Role and Accessibility parsing. @@ -1072,7 +1081,7 @@ public class DashManifestParser extends DefaultHandler @C.RoleFlags int result = 0; for (int i = 0; i < roleDescriptors.size(); i++) { Descriptor descriptor = roleDescriptors.get(i); - if ("urn:mpeg:dash:role:2011".equalsIgnoreCase(descriptor.schemeIdUri) && descriptor.value != null) { + if ("urn:mpeg:dash:role:2011".equalsIgnoreCase(descriptor.schemeIdUri)) { result |= parseRoleSchemeValue(descriptor.value); } } @@ -1083,68 +1092,63 @@ public class DashManifestParser extends DefaultHandler @C.RoleFlags int result = 0; for (int i = 0; i < accessibilityDescriptors.size(); i++) { Descriptor descriptor = accessibilityDescriptors.get(i); - if ("urn:mpeg:dash:role:2011".equalsIgnoreCase(descriptor.schemeIdUri) && descriptor.value != null) { + if ("urn:mpeg:dash:role:2011".equalsIgnoreCase(descriptor.schemeIdUri)) { result |= parseRoleSchemeValue(descriptor.value); - } - if ("urn:tva:metadata:cs:AudioPurposeCS:2007".equalsIgnoreCase(descriptor.schemeIdUri) && - descriptor.value != null) { - switch (descriptor.value){ - case "1": // Audio description for the visually impaired - result |= C.ROLE_FLAGS_DESCRIPTION; - break; - case "2": // Audio description for the hard of hearing - result |= C.ROLE_FLAGS_ENHANCED_AUDIO_INTELLIGIBILITY; - break; - case "3": // Supplemental commentary - result |= C.ROLE_FLAGS_SUPPLEMENTARY; - break; - case "4": // Director's commentary - result |= C.ROLE_FLAGS_COMMENTARY; - break; - case "6": // Main programme audio - result |= C.ROLE_FLAGS_MAIN; - break; - } + } else if ("urn:tva:metadata:cs:AudioPurposeCS:2007".equalsIgnoreCase(descriptor.schemeIdUri)) { + result |= parseAudioPurposeValue(descriptor.value); } } return result; } - protected @C.RoleFlags int parseRoleSchemeValue(String value){ - @C.RoleFlags int result = 0; + protected @C.RoleFlags int parseRoleSchemeValue(String value) { + if (value == null) { + return 0; + } switch (value) { case "main": - result |= C.ROLE_FLAGS_MAIN; - break; + return C.ROLE_FLAGS_MAIN; case "alternate": - result |= C.ROLE_FLAGS_ALTERNATE; - break; + return C.ROLE_FLAGS_ALTERNATE; case "supplementary": - result |= C.ROLE_FLAGS_SUPPLEMENTARY; - break; + return C.ROLE_FLAGS_SUPPLEMENTARY; case "commentary": - result |= C.ROLE_FLAGS_COMMENTARY; - break; + return C.ROLE_FLAGS_COMMENTARY; case "dub": - result |= C.ROLE_FLAGS_DUB; - break; + return C.ROLE_FLAGS_DUB; case "emergency": - result |= C.ROLE_FLAGS_EMERGENCY; - break; + return C.ROLE_FLAGS_EMERGENCY; case "caption": - result |= C.ROLE_FLAGS_CAPTION; - break; + return C.ROLE_FLAGS_CAPTION; case "sign": - result |= C.ROLE_FLAGS_SIGN; - break; + return C.ROLE_FLAGS_SIGN; case "description": - result |= C.ROLE_FLAGS_DESCRIPTION; - break; + return C.ROLE_FLAGS_DESCRIPTION; case "enhanced-audio-intelligibility": - result |= C.ROLE_FLAGS_ENHANCED_AUDIO_INTELLIGIBILITY; - break; + return C.ROLE_FLAGS_ENHANCED_AUDIO_INTELLIGIBILITY; + default: + return 0; + } + } + + protected @C.RoleFlags int parseAudioPurposeValue(String value) { + if (value == null) { + return 0; + } + switch (value) { + case "1": // Audio description for the visually impaired + return C.ROLE_FLAGS_DESCRIPTION; + case "2": // Audio description for the hard of hearing + return C.ROLE_FLAGS_ENHANCED_AUDIO_INTELLIGIBILITY; + case "3": // Supplemental commentary + return C.ROLE_FLAGS_SUPPLEMENTARY; + case "4": // Director's commentary + return C.ROLE_FLAGS_COMMENTARY; + case "6": // Main programme audio + return C.ROLE_FLAGS_MAIN; + default: + return 0; } - return result; } // Utility methods. diff --git a/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DashMediaPeriodTest.java b/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DashMediaPeriodTest.java index 04820fd20c..077a34a6ab 100644 --- a/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DashMediaPeriodTest.java +++ b/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DashMediaPeriodTest.java @@ -193,6 +193,7 @@ public final class DashMediaPeriodTest { /* codecs= */ null, bitrate, /* selectionFlags= */ 0, + /* roleFlags= */ 0, /* language= */ null); } @@ -207,6 +208,7 @@ public final class DashMediaPeriodTest { /* codecs= */ null, bitrate, /* selectionFlags= */ 0, + /* roleFlags= */ 0, /* language= */ null), /* baseUrl= */ "", new SingleSegmentBase()); @@ -223,6 +225,7 @@ public final class DashMediaPeriodTest { /* codecs= */ null, /* bitrate= */ Format.NO_VALUE, /* selectionFlags= */ 0, + /* roleFlags= */ 0, language), /* baseUrl= */ "", new SingleSegmentBase()); diff --git a/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DashUtilTest.java b/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DashUtilTest.java index 3f5d317519..df451bb3a8 100644 --- a/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DashUtilTest.java +++ b/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/DashUtilTest.java @@ -85,7 +85,8 @@ public final class DashUtilTest { /* height= */ 768, Format.NO_VALUE, /* initializationData= */ null, - /* selectionFlags= */ 0); + /* selectionFlags= */ 0, + /* roleFlags= */ 0); if (drmInitData != null) { format = format.copyWithDrmInitData(drmInitData); } diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaPeriod.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaPeriod.java index 3465bfe6a9..e4e0245605 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaPeriod.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaPeriod.java @@ -741,8 +741,8 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper /* sampleRate= */ Format.NO_VALUE, /* initializationData= */ null, selectionFlags, - language, - /* roleFlags= */ 0); + /* roleFlags= */ 0, + language); } } diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java index ac14ea6de5..0e7f07cd7c 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java @@ -78,6 +78,7 @@ public final class HlsMasterPlaylist extends HlsPlaylist { /* codecs= */ null, /* bitrate= */ Format.NO_VALUE, /* selectionFlags= */ 0, + /* roleFlags= */ 0, /* language= */ null); return new HlsUrl(url, format, /* name= */ ""); } diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java index 31528353ee..177c9aaeff 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java @@ -362,8 +362,8 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser { samplingRate, codecSpecificData, /* selectionFlags= */ 0, - language, - /* roleFlags= */ 0); + /* roleFlags= */ 0, + language); } else if (type == C.TRACK_TYPE_TEXT) { String language = (String) getNormalizedAttribute(KEY_LANGUAGE); format = @@ -730,6 +730,7 @@ public class SsManifestParser implements ParsingLoadable.Parser { /* codecs= */ null, bitrate, /* selectionFlags= */ 0, + /* roleFlags= */ 0, /* language= */ null); } }