Commit d7c2519a by Arnold Szabo

Fixes according to the code review

parent 85441996
......@@ -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)
......
......@@ -279,7 +279,6 @@ public class DashManifestParser extends DefaultHandler
ArrayList<Descriptor> roleDescriptors = new ArrayList<>();
ArrayList<Descriptor> supplementalProperties = new ArrayList<>();
List<RepresentationInfo> 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<Descriptor> adaptationSetRoleDescriptors,
List<Descriptor> 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<Descriptor> roleDescriptors,
List<Descriptor> accessibilityDescriptors,
String codecs,
List<Descriptor> 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<Descriptor> 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.
......
......@@ -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());
......
......@@ -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);
}
......
......@@ -741,8 +741,8 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
/* sampleRate= */ Format.NO_VALUE,
/* initializationData= */ null,
selectionFlags,
language,
/* roleFlags= */ 0);
/* roleFlags= */ 0,
language);
}
}
......@@ -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= */ "");
}
......
......@@ -362,8 +362,8 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
/* sampleRate= */ Format.NO_VALUE,
/* initializationData= */ null,
selectionFlags,
language,
/* roleFlags= */ 0);
/* roleFlags= */ 0,
language);
if (isMediaTagMuxed(variants, uri)) {
muxedAudioFormat = format;
} else {
......@@ -406,9 +406,9 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
/* codecs= */ null,
/* bitrate= */ Format.NO_VALUE,
selectionFlags,
/* roleFlags= */ 0,
language,
accessibilityChannel,
/* roleFlags= */ 0));
accessibilityChannel));
break;
default:
// Do nothing.
......
......@@ -706,8 +706,8 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> {
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<SsManifest> {
/* codecs= */ null,
bitrate,
/* selectionFlags= */ 0,
/* roleFlags= */ 0,
/* 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