in src/main/java/com/netflix/imflibrary/st2067_2/CompositionImageEssenceDescriptorModel.java [721:808]
private void parseApp5PixelLayout() {
DOMNodeObjectModel pixelLayout = imageEssencedescriptorDOMNode.getDOMNode(regXMLLibDictionary.getSymbolNameFromURN(pixelLayoutUL));
if (pixelLayout == null) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s shall have a Pixel Layout item",
imageEssencedescriptorID.toString()));
} else {
List<DOMNodeObjectModel> rgbaComponents = pixelLayout.getDOMNodes(regXMLLibDictionary.getSymbolNameFromURN(rgbaComponentUL));
if (rgbaComponents.size() == 0) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s is missing RGBAComponent in Pixel Layout",
imageEssencedescriptorID.toString()));
} else {
Map<RGBAComponentType, Integer> componentMap = new LinkedHashMap<>();
List<RGBAComponentType> componentList = new ArrayList<>();
for (DOMNodeObjectModel domNodeObjectModel : rgbaComponents) {
String code = domNodeObjectModel.getFieldAsString(regXMLLibDictionary.getTypeFieldNameFromURN(rgbaComponentUL, codeUL));
if (code == null) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s has a Pixel Layout item with an RGBAComponent with missing Code",
imageEssencedescriptorID.toString()));
} else {
RGBAComponentType codeValue = RGBAComponentType.valueOf(regXMLLibDictionary.getEnumerationValueFromName(rgbaComponentKindUL, code));
Integer pixelBitDepth = domNodeObjectModel.getFieldAsInteger(regXMLLibDictionary.getTypeFieldNameFromURN(rgbaComponentUL, componentSizeUL));
if (pixelBitDepth == null) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s has a Pixel Layout item with an RGBAComponent %s with missing Depth",
imageEssencedescriptorID.toString(), code));
} else {
if ((codeValue.equals(Null) && pixelBitDepth != 0) ||
(!codeValue.equals(Null) && (!pixelBitDepth.equals(253)))) { // In App#5, all components are of type HALF FLOAT
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s has a Pixel Layout item %s with invalid Depth value %d (expected depth value: 253)",
imageEssencedescriptorID.toString(), code, pixelBitDepth));
}
}
if (componentMap.containsKey(codeValue)) {
Integer count = componentMap.get(codeValue);
componentMap.put(codeValue, count + 1);
} else {
componentMap.put(codeValue, 1);
componentList.add(codeValue);
}
}
}
boolean error = true;
if (componentList.size() >= 4) { // ABGR or BGR per 2067-50 plus Null
if (componentList.get(0).toString().equals("Alpha")) { // ABGR per 2067-50
if (componentList.get(1).toString().equals("Blue") || componentList.get(2).toString().equals("Green") || componentList.get(3).toString().equals("Red") )
error = false;
} else if (componentList.get(0).toString().equals("Blue")) { // BGR per 2067-50
if (componentList.get(1).toString().equals("Green") || componentList.get(2).toString().equals("Red"))
error = false;
}
}
if (error) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s has incorrect PixelLayout %s",
imageEssencedescriptorID.toString(), componentList.toString()));
}
componentMap.entrySet().stream().forEach(
e -> {
if (e.getKey().equals(RGBAComponentType.Null)) {
if (!(e.getValue().equals(5) || e.getValue().equals(4))) { // ABGR or BGR per 2067-50
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s and ColorModel %s has invalid number of RGBAComponent %s in J2CLayout",
imageEssencedescriptorID.toString(), colorModel.name(), e.getKey()));
}
} else if (!e.getValue().equals(1)) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s has more than one RGBAComponent %s in Pixel Layout",
imageEssencedescriptorID.toString(), e.getKey()));
}
}
);
}
}
}