in src/main/java/com/netflix/imflibrary/st0377/HeaderPartition.java [693:741]
public String getAudioEssenceSpokenLanguage() throws IOException {
String rfc5646SpokenLanguage = null;
if(this.hasWaveAudioEssenceDescriptor()){
List<InterchangeObject> soundfieldGroupLabelSubDescriptors = this.getSoundFieldGroupLabelSubDescriptors();
for (InterchangeObject subDescriptor : soundfieldGroupLabelSubDescriptors) {
SoundFieldGroupLabelSubDescriptor soundFieldGroupLabelSubDescriptor = (SoundFieldGroupLabelSubDescriptor) subDescriptor;
if (rfc5646SpokenLanguage == null) {
rfc5646SpokenLanguage = soundFieldGroupLabelSubDescriptor.getRFC5646SpokenLanguage();
} else if (!rfc5646SpokenLanguage.equals(soundFieldGroupLabelSubDescriptor.getRFC5646SpokenLanguage())) {
this.imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("Language Codes (%s, %s) do not match across the SoundFieldGroupLabelSubDescriptors", rfc5646SpokenLanguage, soundFieldGroupLabelSubDescriptor.getRFC5646SpokenLanguage()));
}
}
/**
* According to IMF Core Constraints st2067-2:2013 Section 5.3.6.5 the RFC5646 Spoken Language Tag in AudioChannelLabelSubDescriptor shall be ignored.
* However leaving this code commented out to serve as a sample in case we want to enable it in the future and check that this language tag matches
* what is present in the SoundFieldGroupLabelSubDescriptors.
* /
List<InterchangeObject> audioChannelLabelSubDescriptors = this.getAudioChannelLabelSubDescriptors();
for (InterchangeObject subDescriptor : audioChannelLabelSubDescriptors) {
AudioChannelLabelSubDescriptor audioChannelLabelSubDescriptor = (AudioChannelLabelSubDescriptor) subDescriptor;
if (rfc5646SpokenLanguage == null) {
rfc5646SpokenLanguage = audioChannelLabelSubDescriptor.getRFC5646SpokenLanguage();
} else if (!rfc5646SpokenLanguage.equals(audioChannelLabelSubDescriptor.getRFC5646SpokenLanguage())) {
throw new MXFException(String.format("Language Codes (%s, %s) do not match across SoundFieldGroupLabelSubdescriptors and AudioChannelLabelSubDescriptors", rfc5646SpokenLanguage, audioChannelLabelSubDescriptor.getRFC5646SpokenLanguage()));
}
}*/
} else if (this.hasIABEssenceDescriptor()) {
List<InterchangeObject> iabSoundFieldLabelSubDescriptors = this.getIABSoundFieldLabelSubDescriptors();
for (InterchangeObject subDescriptor : iabSoundFieldLabelSubDescriptors) {
IABSoundfieldLabelSubDescriptor iabSoundfieldLabelSubDescriptor = (IABSoundfieldLabelSubDescriptor) subDescriptor;
if (rfc5646SpokenLanguage == null) {
rfc5646SpokenLanguage = iabSoundfieldLabelSubDescriptor.getRFC5646SpokenLanguage();
} else if (!rfc5646SpokenLanguage.equals(iabSoundfieldLabelSubDescriptor.getRFC5646SpokenLanguage())) {
this.imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("Language Codes (%s, %s) do not match across the IABSoundFieldLabelSubDescriptors", rfc5646SpokenLanguage, iabSoundfieldLabelSubDescriptor.getRFC5646SpokenLanguage()));
}
}
} else if (this.hasMGASoundEssenceDescriptor()) {
List<InterchangeObject> mgaSoundfieldGroupLabelSubDescriptors = this.getMGASoundfieldGroupLabelSubDescriptors();
for (InterchangeObject subDescriptor : mgaSoundfieldGroupLabelSubDescriptors) {
MGASoundfieldGroupLabelSubDescriptor mgaSoundfieldLabelSubDescriptor = (MGASoundfieldGroupLabelSubDescriptor) subDescriptor;
if (rfc5646SpokenLanguage == null) {
rfc5646SpokenLanguage = mgaSoundfieldLabelSubDescriptor.getRFC5646SpokenLanguage();
} else if (!rfc5646SpokenLanguage.equals(mgaSoundfieldLabelSubDescriptor.getRFC5646SpokenLanguage())) {
this.imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.IMF_ESSENCE_COMPONENT_ERROR, IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL, String.format("Language Codes (%s, %s) do not match across the MGASoundfieldGroupLabelSubDescriptor", rfc5646SpokenLanguage, mgaSoundfieldLabelSubDescriptor.getRFC5646SpokenLanguage()));
}
}
}
return rfc5646SpokenLanguage;
}