Commit d7c2519a by Arnold Szabo

Fixes according to the code review

parent 85441996
...@@ -977,7 +977,10 @@ public final class C { ...@@ -977,7 +977,10 @@ public final class C {
public static final int NETWORK_TYPE_OTHER = 8; 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 @Documented
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
......
...@@ -279,7 +279,6 @@ public class DashManifestParser extends DefaultHandler ...@@ -279,7 +279,6 @@ public class DashManifestParser extends DefaultHandler
ArrayList<Descriptor> roleDescriptors = new ArrayList<>(); ArrayList<Descriptor> roleDescriptors = new ArrayList<>();
ArrayList<Descriptor> supplementalProperties = new ArrayList<>(); ArrayList<Descriptor> supplementalProperties = new ArrayList<>();
List<RepresentationInfo> representationInfos = new ArrayList<>(); List<RepresentationInfo> representationInfos = new ArrayList<>();
@C.SelectionFlags int selectionFlags = 0;
boolean seenFirstBaseUrl = false; boolean seenFirstBaseUrl = false;
do { do {
...@@ -301,9 +300,7 @@ public class DashManifestParser extends DefaultHandler ...@@ -301,9 +300,7 @@ public class DashManifestParser extends DefaultHandler
language = checkLanguageConsistency(language, xpp.getAttributeValue(null, "lang")); language = checkLanguageConsistency(language, xpp.getAttributeValue(null, "lang"));
contentType = checkContentTypeConsistency(contentType, parseContentType(xpp)); contentType = checkContentTypeConsistency(contentType, parseContentType(xpp));
} else if (XmlPullParserUtil.isStartTag(xpp, "Role")) { } else if (XmlPullParserUtil.isStartTag(xpp, "Role")) {
Descriptor descriptor = parseDescriptor(xpp, "Role"); roleDescriptors.add(parseDescriptor(xpp, "Role"));
selectionFlags |= parseSelectionFlags(descriptor);
roleDescriptors.add(descriptor);
} else if (XmlPullParserUtil.isStartTag(xpp, "AudioChannelConfiguration")) { } else if (XmlPullParserUtil.isStartTag(xpp, "AudioChannelConfiguration")) {
audioChannels = parseAudioChannelConfiguration(xpp); audioChannels = parseAudioChannelConfiguration(xpp);
} else if (XmlPullParserUtil.isStartTag(xpp, "Accessibility")) { } else if (XmlPullParserUtil.isStartTag(xpp, "Accessibility")) {
...@@ -324,7 +321,6 @@ public class DashManifestParser extends DefaultHandler ...@@ -324,7 +321,6 @@ public class DashManifestParser extends DefaultHandler
audioChannels, audioChannels,
audioSamplingRate, audioSamplingRate,
language, language,
selectionFlags,
roleDescriptors, roleDescriptors,
accessibilityDescriptors, accessibilityDescriptors,
segmentBase); segmentBase);
...@@ -494,7 +490,6 @@ public class DashManifestParser extends DefaultHandler ...@@ -494,7 +490,6 @@ public class DashManifestParser extends DefaultHandler
int adaptationSetAudioChannels, int adaptationSetAudioChannels,
int adaptationSetAudioSamplingRate, int adaptationSetAudioSamplingRate,
String adaptationSetLanguage, String adaptationSetLanguage,
@C.SelectionFlags int adaptationSetSelectionFlags,
List<Descriptor> adaptationSetRoleDescriptors, List<Descriptor> adaptationSetRoleDescriptors,
List<Descriptor> adaptationSetAccessibilityDescriptors, List<Descriptor> adaptationSetAccessibilityDescriptors,
SegmentBase segmentBase) SegmentBase segmentBase)
...@@ -559,7 +554,6 @@ public class DashManifestParser extends DefaultHandler ...@@ -559,7 +554,6 @@ public class DashManifestParser extends DefaultHandler
audioSamplingRate, audioSamplingRate,
bandwidth, bandwidth,
adaptationSetLanguage, adaptationSetLanguage,
adaptationSetSelectionFlags,
adaptationSetRoleDescriptors, adaptationSetRoleDescriptors,
adaptationSetAccessibilityDescriptors, adaptationSetAccessibilityDescriptors,
codecs, codecs,
...@@ -581,16 +575,16 @@ public class DashManifestParser extends DefaultHandler ...@@ -581,16 +575,16 @@ public class DashManifestParser extends DefaultHandler
int audioSamplingRate, int audioSamplingRate,
int bitrate, int bitrate,
String language, String language,
@C.SelectionFlags int selectionFlags,
List<Descriptor> roleDescriptors, List<Descriptor> roleDescriptors,
List<Descriptor> accessibilityDescriptors, List<Descriptor> accessibilityDescriptors,
String codecs, String codecs,
List<Descriptor> supplementalProperties) { List<Descriptor> supplementalProperties) {
String sampleMimeType = getSampleMimeType(containerMimeType, codecs); 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) { 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)) { if (MimeTypes.AUDIO_E_AC3.equals(sampleMimeType)) {
sampleMimeType = parseEac3SupplementalProperties(supplementalProperties); sampleMimeType = parseEac3SupplementalProperties(supplementalProperties);
} }
...@@ -620,8 +614,8 @@ public class DashManifestParser extends DefaultHandler ...@@ -620,8 +614,8 @@ public class DashManifestParser extends DefaultHandler
audioSamplingRate, audioSamplingRate,
/* initializationData= */ null, /* initializationData= */ null,
selectionFlags, selectionFlags,
language, roleFlags,
roleFlags); language);
} else if (mimeTypeIsRawText(sampleMimeType)) { } else if (mimeTypeIsRawText(sampleMimeType)) {
int accessibilityChannel; int accessibilityChannel;
if (MimeTypes.APPLICATION_CEA608.equals(sampleMimeType)) { if (MimeTypes.APPLICATION_CEA608.equals(sampleMimeType)) {
...@@ -639,13 +633,21 @@ public class DashManifestParser extends DefaultHandler ...@@ -639,13 +633,21 @@ public class DashManifestParser extends DefaultHandler
codecs, codecs,
bitrate, bitrate,
selectionFlags, selectionFlags,
roleFlags,
language, language,
accessibilityChannel, accessibilityChannel);
roleFlags);
} }
} }
return Format.createContainerFormat( return Format.createContainerFormat(
id, label, containerMimeType, sampleMimeType, codecs, bitrate, selectionFlags, language); id,
label,
containerMimeType,
sampleMimeType,
codecs,
bitrate,
selectionFlags,
roleFlags,
language);
} }
protected Representation buildRepresentation( protected Representation buildRepresentation(
...@@ -1061,9 +1063,16 @@ public class DashManifestParser extends DefaultHandler ...@@ -1061,9 +1063,16 @@ public class DashManifestParser extends DefaultHandler
// Selection flag parsing. // Selection flag parsing.
protected int parseSelectionFlags(Descriptor roleDescriptor) { protected int parseSelection(List<Descriptor> roleDescriptors) {
return "urn:mpeg:dash:role:2011".equals(roleDescriptor.schemeIdUri) for (int i = 0; i < roleDescriptors.size(); i++) {
&& "main".equals(roleDescriptor.value) ? C.SELECTION_FLAG_DEFAULT : 0; 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. // Role and Accessibility parsing.
...@@ -1072,7 +1081,7 @@ public class DashManifestParser extends DefaultHandler ...@@ -1072,7 +1081,7 @@ public class DashManifestParser extends DefaultHandler
@C.RoleFlags int result = 0; @C.RoleFlags int result = 0;
for (int i = 0; i < roleDescriptors.size(); i++) { for (int i = 0; i < roleDescriptors.size(); i++) {
Descriptor descriptor = roleDescriptors.get(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); result |= parseRoleSchemeValue(descriptor.value);
} }
} }
...@@ -1083,68 +1092,63 @@ public class DashManifestParser extends DefaultHandler ...@@ -1083,68 +1092,63 @@ public class DashManifestParser extends DefaultHandler
@C.RoleFlags int result = 0; @C.RoleFlags int result = 0;
for (int i = 0; i < accessibilityDescriptors.size(); i++) { for (int i = 0; i < accessibilityDescriptors.size(); i++) {
Descriptor descriptor = accessibilityDescriptors.get(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); result |= parseRoleSchemeValue(descriptor.value);
} } else if ("urn:tva:metadata:cs:AudioPurposeCS:2007".equalsIgnoreCase(descriptor.schemeIdUri)) {
if ("urn:tva:metadata:cs:AudioPurposeCS:2007".equalsIgnoreCase(descriptor.schemeIdUri) && result |= parseAudioPurposeValue(descriptor.value);
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;
}
} }
} }
return result; return result;
} }
protected @C.RoleFlags int parseRoleSchemeValue(String value){ protected @C.RoleFlags int parseRoleSchemeValue(String value) {
@C.RoleFlags int result = 0; if (value == null) {
return 0;
}
switch (value) { switch (value) {
case "main": case "main":
result |= C.ROLE_FLAGS_MAIN; return C.ROLE_FLAGS_MAIN;
break;
case "alternate": case "alternate":
result |= C.ROLE_FLAGS_ALTERNATE; return C.ROLE_FLAGS_ALTERNATE;
break;
case "supplementary": case "supplementary":
result |= C.ROLE_FLAGS_SUPPLEMENTARY; return C.ROLE_FLAGS_SUPPLEMENTARY;
break;
case "commentary": case "commentary":
result |= C.ROLE_FLAGS_COMMENTARY; return C.ROLE_FLAGS_COMMENTARY;
break;
case "dub": case "dub":
result |= C.ROLE_FLAGS_DUB; return C.ROLE_FLAGS_DUB;
break;
case "emergency": case "emergency":
result |= C.ROLE_FLAGS_EMERGENCY; return C.ROLE_FLAGS_EMERGENCY;
break;
case "caption": case "caption":
result |= C.ROLE_FLAGS_CAPTION; return C.ROLE_FLAGS_CAPTION;
break;
case "sign": case "sign":
result |= C.ROLE_FLAGS_SIGN; return C.ROLE_FLAGS_SIGN;
break;
case "description": case "description":
result |= C.ROLE_FLAGS_DESCRIPTION; return C.ROLE_FLAGS_DESCRIPTION;
break;
case "enhanced-audio-intelligibility": case "enhanced-audio-intelligibility":
result |= C.ROLE_FLAGS_ENHANCED_AUDIO_INTELLIGIBILITY; return C.ROLE_FLAGS_ENHANCED_AUDIO_INTELLIGIBILITY;
break; 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. // Utility methods.
......
...@@ -193,6 +193,7 @@ public final class DashMediaPeriodTest { ...@@ -193,6 +193,7 @@ public final class DashMediaPeriodTest {
/* codecs= */ null, /* codecs= */ null,
bitrate, bitrate,
/* selectionFlags= */ 0, /* selectionFlags= */ 0,
/* roleFlags= */ 0,
/* language= */ null); /* language= */ null);
} }
...@@ -207,6 +208,7 @@ public final class DashMediaPeriodTest { ...@@ -207,6 +208,7 @@ public final class DashMediaPeriodTest {
/* codecs= */ null, /* codecs= */ null,
bitrate, bitrate,
/* selectionFlags= */ 0, /* selectionFlags= */ 0,
/* roleFlags= */ 0,
/* language= */ null), /* language= */ null),
/* baseUrl= */ "", /* baseUrl= */ "",
new SingleSegmentBase()); new SingleSegmentBase());
...@@ -223,6 +225,7 @@ public final class DashMediaPeriodTest { ...@@ -223,6 +225,7 @@ public final class DashMediaPeriodTest {
/* codecs= */ null, /* codecs= */ null,
/* bitrate= */ Format.NO_VALUE, /* bitrate= */ Format.NO_VALUE,
/* selectionFlags= */ 0, /* selectionFlags= */ 0,
/* roleFlags= */ 0,
language), language),
/* baseUrl= */ "", /* baseUrl= */ "",
new SingleSegmentBase()); new SingleSegmentBase());
......
...@@ -85,7 +85,8 @@ public final class DashUtilTest { ...@@ -85,7 +85,8 @@ public final class DashUtilTest {
/* height= */ 768, /* height= */ 768,
Format.NO_VALUE, Format.NO_VALUE,
/* initializationData= */ null, /* initializationData= */ null,
/* selectionFlags= */ 0); /* selectionFlags= */ 0,
/* roleFlags= */ 0);
if (drmInitData != null) { if (drmInitData != null) {
format = format.copyWithDrmInitData(drmInitData); format = format.copyWithDrmInitData(drmInitData);
} }
......
...@@ -741,8 +741,8 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper ...@@ -741,8 +741,8 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
/* sampleRate= */ Format.NO_VALUE, /* sampleRate= */ Format.NO_VALUE,
/* initializationData= */ null, /* initializationData= */ null,
selectionFlags, selectionFlags,
language, /* roleFlags= */ 0,
/* roleFlags= */ 0); language);
} }
} }
...@@ -78,6 +78,7 @@ public final class HlsMasterPlaylist extends HlsPlaylist { ...@@ -78,6 +78,7 @@ public final class HlsMasterPlaylist extends HlsPlaylist {
/* codecs= */ null, /* codecs= */ null,
/* bitrate= */ Format.NO_VALUE, /* bitrate= */ Format.NO_VALUE,
/* selectionFlags= */ 0, /* selectionFlags= */ 0,
/* roleFlags= */ 0,
/* language= */ null); /* language= */ null);
return new HlsUrl(url, format, /* name= */ ""); return new HlsUrl(url, format, /* name= */ "");
} }
......
...@@ -362,8 +362,8 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -362,8 +362,8 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
/* sampleRate= */ Format.NO_VALUE, /* sampleRate= */ Format.NO_VALUE,
/* initializationData= */ null, /* initializationData= */ null,
selectionFlags, selectionFlags,
language, /* roleFlags= */ 0,
/* roleFlags= */ 0); language);
if (isMediaTagMuxed(variants, uri)) { if (isMediaTagMuxed(variants, uri)) {
muxedAudioFormat = format; muxedAudioFormat = format;
} else { } else {
...@@ -406,9 +406,9 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -406,9 +406,9 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
/* codecs= */ null, /* codecs= */ null,
/* bitrate= */ Format.NO_VALUE, /* bitrate= */ Format.NO_VALUE,
selectionFlags, selectionFlags,
/* roleFlags= */ 0,
language, language,
accessibilityChannel, accessibilityChannel));
/* roleFlags= */ 0));
break; break;
default: default:
// Do nothing. // Do nothing.
......
...@@ -706,8 +706,8 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> { ...@@ -706,8 +706,8 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> {
samplingRate, samplingRate,
codecSpecificData, codecSpecificData,
/* selectionFlags= */ 0, /* selectionFlags= */ 0,
language, /* roleFlags= */ 0,
/* roleFlags= */ 0); language);
} else if (type == C.TRACK_TYPE_TEXT) { } else if (type == C.TRACK_TYPE_TEXT) {
String language = (String) getNormalizedAttribute(KEY_LANGUAGE); String language = (String) getNormalizedAttribute(KEY_LANGUAGE);
format = format =
...@@ -730,6 +730,7 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> { ...@@ -730,6 +730,7 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> {
/* codecs= */ null, /* codecs= */ null,
bitrate, bitrate,
/* selectionFlags= */ 0, /* selectionFlags= */ 0,
/* roleFlags= */ 0,
/* language= */ null); /* language= */ null);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment