Commit 85441996 by Arnold Szabo

Merge role and accessibility fields into RoleFlags

parent 58d746ec
...@@ -977,52 +977,36 @@ public final class C { ...@@ -977,52 +977,36 @@ public final class C {
public static final int NETWORK_TYPE_OTHER = 8; public static final int NETWORK_TYPE_OTHER = 8;
/** /**
* Adaptation set's role descriptor value (ISO 23009-1) * Adaptation set's role and accessibility descriptor value.
*/ */
@Documented @Documented
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@IntDef({ @IntDef(
ROLE_UNSET, flag = true,
ROLE_MAIN, value = {
ROLE_ALTERNATE, ROLE_FLAGS_MAIN,
ROLE_SUPPLEMENTARY, ROLE_FLAGS_ALTERNATE,
ROLE_COMMENTARY, ROLE_FLAGS_SUPPLEMENTARY,
ROLE_DUB, ROLE_FLAGS_COMMENTARY,
ROLE_EMERGENCY, ROLE_FLAGS_DUB,
ROLE_CAPTION, ROLE_FLAGS_EMERGENCY,
ROLE_SIGN ROLE_FLAGS_CAPTION,
}) ROLE_FLAGS_SIGN,
public @interface Role {} ROLE_FLAGS_ENHANCED_AUDIO_INTELLIGIBILITY,
ROLE_FLAGS_DESCRIPTION
public static final int ROLE_UNSET = -1;
public static final int ROLE_MAIN = 0;
public static final int ROLE_ALTERNATE = 1;
public static final int ROLE_SUPPLEMENTARY = 2;
public static final int ROLE_COMMENTARY = 3;
public static final int ROLE_DUB = 4;
public static final int ROLE_EMERGENCY = 5;
public static final int ROLE_CAPTION = 6;
public static final int ROLE_SIGN = 7;
/**
* Adaptation set's accessibility descriptor value (ISO 23009-1)
*/
@Documented
@Retention(RetentionPolicy.SOURCE)
@IntDef({
ACCESSIBILITY_UNSET,
ACCESSIBILITY_ENHANCED_AUDIO_INTELLIGIBILITY,
ACCESSIBILITY_DESCRIPTION,
ACCESSIBILITY_CAPTION,
ACCESSIBILITY_SIGN
}) })
public @interface Accessibility {} public @interface RoleFlags {}
public static final int ACCESSIBILITY_UNSET = -1; public static final int ROLE_FLAGS_MAIN = 1;
public static final int ACCESSIBILITY_ENHANCED_AUDIO_INTELLIGIBILITY = 1; public static final int ROLE_FLAGS_ALTERNATE = 1 << 1;
public static final int ACCESSIBILITY_DESCRIPTION = 2; public static final int ROLE_FLAGS_SUPPLEMENTARY = 1 << 2;
public static final int ACCESSIBILITY_CAPTION = 3; public static final int ROLE_FLAGS_COMMENTARY = 1 << 3;
public static final int ACCESSIBILITY_SIGN = 4; public static final int ROLE_FLAGS_DUB = 1 << 4;
public static final int ROLE_FLAGS_EMERGENCY = 1 << 5;
public static final int ROLE_FLAGS_CAPTION = 1 << 6;
public static final int ROLE_FLAGS_SIGN = 1 << 7;
public static final int ROLE_FLAGS_ENHANCED_AUDIO_INTELLIGIBILITY = 1 << 8;
public static final int ROLE_FLAGS_DESCRIPTION = 1 << 9;
/** /**
* Converts a time in microseconds to the corresponding time in milliseconds, preserving * Converts a time in microseconds to the corresponding time in milliseconds, preserving
......
...@@ -588,8 +588,9 @@ public class DashManifestParser extends DefaultHandler ...@@ -588,8 +588,9 @@ public class DashManifestParser extends DefaultHandler
List<Descriptor> supplementalProperties) { List<Descriptor> supplementalProperties) {
String sampleMimeType = getSampleMimeType(containerMimeType, codecs); String sampleMimeType = getSampleMimeType(containerMimeType, codecs);
if (sampleMimeType != null) { if (sampleMimeType != null) {
int role = parseRole(roleDescriptors); @C.RoleFlags int role = parseRole(roleDescriptors);
int accessibility = parseAccessibility(accessibilityDescriptors); @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);
} }
...@@ -606,8 +607,7 @@ public class DashManifestParser extends DefaultHandler ...@@ -606,8 +607,7 @@ public class DashManifestParser extends DefaultHandler
frameRate, frameRate,
/* initializationData= */ null, /* initializationData= */ null,
selectionFlags, selectionFlags,
role, roleFlags);
accessibility);
} else if (MimeTypes.isAudio(sampleMimeType)) { } else if (MimeTypes.isAudio(sampleMimeType)) {
return Format.createAudioContainerFormat( return Format.createAudioContainerFormat(
id, id,
...@@ -621,8 +621,7 @@ public class DashManifestParser extends DefaultHandler ...@@ -621,8 +621,7 @@ public class DashManifestParser extends DefaultHandler
/* initializationData= */ null, /* initializationData= */ null,
selectionFlags, selectionFlags,
language, language,
role, roleFlags);
accessibility);
} else if (mimeTypeIsRawText(sampleMimeType)) { } else if (mimeTypeIsRawText(sampleMimeType)) {
int accessibilityChannel; int accessibilityChannel;
if (MimeTypes.APPLICATION_CEA608.equals(sampleMimeType)) { if (MimeTypes.APPLICATION_CEA608.equals(sampleMimeType)) {
...@@ -642,8 +641,7 @@ public class DashManifestParser extends DefaultHandler ...@@ -642,8 +641,7 @@ public class DashManifestParser extends DefaultHandler
selectionFlags, selectionFlags,
language, language,
accessibilityChannel, accessibilityChannel,
role, roleFlags);
accessibility);
} }
} }
return Format.createContainerFormat( return Format.createContainerFormat(
...@@ -1070,66 +1068,83 @@ public class DashManifestParser extends DefaultHandler ...@@ -1070,66 +1068,83 @@ public class DashManifestParser extends DefaultHandler
// Role and Accessibility parsing. // Role and Accessibility parsing.
protected @C.Role int parseRole(List<Descriptor> roleDescriptors) { protected @C.RoleFlags int parseRole(List<Descriptor> roleDescriptors) {
@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) && descriptor.value != null) {
switch (descriptor.value) { result |= parseRoleSchemeValue(descriptor.value);
case "main":
return C.ROLE_MAIN;
case "alternate":
return C.ROLE_ALTERNATE;
case "supplementary":
return C.ROLE_SUPPLEMENTARY;
case "commentary":
return C.ROLE_COMMENTARY;
case "dub":
return C.ROLE_DUB;
case "emergency":
return C.ROLE_EMERGENCY;
case "caption":
return C.ROLE_CAPTION;
case "sign":
return C.ROLE_SIGN;
default:
return C.ROLE_UNSET;
}
} }
} }
return C.ROLE_UNSET; return result;
} }
protected @C.Accessibility int parseAccessibility(List<Descriptor> accessibilityDescriptors) { protected @C.RoleFlags int parseAccessibility(List<Descriptor> accessibilityDescriptors) {
@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) && descriptor.value != null) {
switch (descriptor.value){ result |= parseRoleSchemeValue(descriptor.value);
case "description":
return C.ACCESSIBILITY_DESCRIPTION;
case "enhanced-audio-intelligibility":
return C.ACCESSIBILITY_ENHANCED_AUDIO_INTELLIGIBILITY;
case "caption":
return C.ACCESSIBILITY_CAPTION;
case "sign":
return C.ACCESSIBILITY_SIGN;
default:
return C.ACCESSIBILITY_UNSET;
}
} }
if ("urn:tva:metadata:cs:AudioPurposeCS:2007".equalsIgnoreCase(descriptor.schemeIdUri) && if ("urn:tva:metadata:cs:AudioPurposeCS:2007".equalsIgnoreCase(descriptor.schemeIdUri) &&
descriptor.value != null) { descriptor.value != null) {
switch (descriptor.value){ switch (descriptor.value){
case "1": case "1": // Audio description for the visually impaired
return C.ACCESSIBILITY_ENHANCED_AUDIO_INTELLIGIBILITY; result |= C.ROLE_FLAGS_DESCRIPTION;
case "2": break;
return C.ACCESSIBILITY_CAPTION; case "2": // Audio description for the hard of hearing
default: result |= C.ROLE_FLAGS_ENHANCED_AUDIO_INTELLIGIBILITY;
return C.ACCESSIBILITY_UNSET; 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 C.ACCESSIBILITY_UNSET; return result;
}
protected @C.RoleFlags int parseRoleSchemeValue(String value){
@C.RoleFlags int result = 0;
switch (value) {
case "main":
result |= C.ROLE_FLAGS_MAIN;
break;
case "alternate":
result |= C.ROLE_FLAGS_ALTERNATE;
break;
case "supplementary":
result |= C.ROLE_FLAGS_SUPPLEMENTARY;
break;
case "commentary":
result |= C.ROLE_FLAGS_COMMENTARY;
break;
case "dub":
result |= C.ROLE_FLAGS_DUB;
break;
case "emergency":
result |= C.ROLE_FLAGS_EMERGENCY;
break;
case "caption":
result |= C.ROLE_FLAGS_CAPTION;
break;
case "sign":
result |= C.ROLE_FLAGS_SIGN;
break;
case "description":
result |= C.ROLE_FLAGS_DESCRIPTION;
break;
case "enhanced-audio-intelligibility":
result |= C.ROLE_FLAGS_ENHANCED_AUDIO_INTELLIGIBILITY;
break;
}
return result;
} }
// Utility methods. // Utility methods.
......
...@@ -703,8 +703,7 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper ...@@ -703,8 +703,7 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
variantFormat.frameRate, variantFormat.frameRate,
/* initializationData= */ null, /* initializationData= */ null,
variantFormat.selectionFlags, variantFormat.selectionFlags,
/* role= */ C.ROLE_UNSET, /* roleFlags= */ 0);
/* accessibility= */ C.ACCESSIBILITY_UNSET);
} }
private static Format deriveAudioFormat( private static Format deriveAudioFormat(
...@@ -743,8 +742,7 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper ...@@ -743,8 +742,7 @@ public final class HlsMediaPeriod implements MediaPeriod, HlsSampleStreamWrapper
/* initializationData= */ null, /* initializationData= */ null,
selectionFlags, selectionFlags,
language, language,
/* role= */ C.ROLE_UNSET, /* roleFlags= */ 0);
/* accessibility= */ C.ACCESSIBILITY_UNSET);
} }
} }
...@@ -330,8 +330,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -330,8 +330,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
frameRate, frameRate,
/* initializationData= */ null, /* initializationData= */ null,
/* selectionFlags= */ 0, /* selectionFlags= */ 0,
/* role= */ C.ROLE_UNSET, /* roleFlags= */ 0);
/* accessibility= */ C.ACCESSIBILITY_UNSET);
variants.add(new HlsMasterPlaylist.HlsUrl(line, format, /* name= */ "")); variants.add(new HlsMasterPlaylist.HlsUrl(line, format, /* name= */ ""));
} }
} }
...@@ -364,8 +363,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -364,8 +363,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
/* initializationData= */ null, /* initializationData= */ null,
selectionFlags, selectionFlags,
language, language,
/* role= */ C.ROLE_UNSET, /* roleFlags= */ 0);
/* accessibility= */ C.ACCESSIBILITY_UNSET);
if (isMediaTagMuxed(variants, uri)) { if (isMediaTagMuxed(variants, uri)) {
muxedAudioFormat = format; muxedAudioFormat = format;
} else { } else {
...@@ -410,8 +408,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -410,8 +408,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
selectionFlags, selectionFlags,
language, language,
accessibilityChannel, accessibilityChannel,
/* role= */ C.ROLE_UNSET, /* roleFlags= */ 0));
/* accessibility= */ C.ACCESSIBILITY_UNSET));
break; break;
default: default:
// Do nothing. // Do nothing.
......
...@@ -682,8 +682,7 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> { ...@@ -682,8 +682,7 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> {
/* frameRate= */ Format.NO_VALUE, /* frameRate= */ Format.NO_VALUE,
codecSpecificData, codecSpecificData,
/* selectionFlags= */ 0, /* selectionFlags= */ 0,
/* role= */ C.ROLE_UNSET, /* roleFlags= */ 0);
/* accessibility= */ C.ACCESSIBILITY_UNSET);
} else if (type == C.TRACK_TYPE_AUDIO) { } else if (type == C.TRACK_TYPE_AUDIO) {
sampleMimeType = sampleMimeType == null ? MimeTypes.AUDIO_AAC : sampleMimeType; sampleMimeType = sampleMimeType == null ? MimeTypes.AUDIO_AAC : sampleMimeType;
int channels = parseRequiredInt(parser, KEY_CHANNELS); int channels = parseRequiredInt(parser, KEY_CHANNELS);
...@@ -708,8 +707,7 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> { ...@@ -708,8 +707,7 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> {
codecSpecificData, codecSpecificData,
/* selectionFlags= */ 0, /* selectionFlags= */ 0,
language, language,
/* role= */ C.ROLE_UNSET, /* roleFlags= */ 0);
/* accessibility= */ C.ACCESSIBILITY_UNSET);
} 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 =
......
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