in src/main/java/com/netflix/imflibrary/st2067_2/Application2Composition.java [80:175]
public static void validateGenericPictureEssenceDescriptor(CompositionImageEssenceDescriptorModel imageEssenceDescriptorModel,
ApplicationCompositionFactory.ApplicationCompositionType applicationCompositionType,
IMFErrorLogger
imfErrorLogger)
{
UUID imageEssenceDescriptorID = imageEssenceDescriptorModel.getImageEssencedescriptorID();
ColorModel colorModel = imageEssenceDescriptorModel.getColorModel();
if( colorModel.equals(ColorModel.Unknown)) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s has Invalid color components as per %s",
imageEssenceDescriptorID.toString(), applicationCompositionType.toString()));
return;
}
Integer componentDepth = imageEssenceDescriptorModel.getComponentDepth();
if (colorModel.equals(ColorModel.YUV) && componentDepth == null) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s is missing component depth required per %s",
imageEssenceDescriptorID.toString(), applicationCompositionType.toString()));
}
Integer storedWidth = imageEssenceDescriptorModel.getStoredWidth();
Integer storedHeight = imageEssenceDescriptorModel.getStoredHeight();
if ((storedWidth <= 0) || (storedHeight <= 0)) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s has invalid storedWidth(%d) or storedHeight(%d) as per %s",
imageEssenceDescriptorID.toString(), storedWidth, storedHeight, applicationCompositionType.toString()));
}
Integer sampleWidth = imageEssenceDescriptorModel.getSampleWidth();
Integer sampleHeight = imageEssenceDescriptorModel.getSampleHeight();
if ((sampleWidth != null && !sampleWidth.equals(storedWidth)) ||
(sampleHeight != null && !sampleHeight.equals(storedHeight))) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s has invalid sampleWidth(%d) or sampleHeight(%d) as per %s",
imageEssenceDescriptorID.toString(), sampleWidth != null ? sampleWidth : 0, sampleHeight != null ? sampleHeight : 0,
applicationCompositionType.toString()));
}
if( imageEssenceDescriptorModel.getStoredOffset() != null) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s invalid StoredOffset as per %s",
imageEssenceDescriptorID.toString(), applicationCompositionType.toString()));
}
ColorPrimaries colorPrimaries = imageEssenceDescriptorModel.getColorPrimaries();
if(colorPrimaries.equals(ColorPrimaries.Unknown)) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s has invalid ColorPrimaries as per %s",
imageEssenceDescriptorID.toString(), applicationCompositionType.toString()));
}
TransferCharacteristic transferCharacteristic = imageEssenceDescriptorModel.getTransferCharacteristic();
if(transferCharacteristic.equals(TransferCharacteristic.Unknown)) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s has invalid TransferCharacteristic as per %s",
imageEssenceDescriptorID.toString(), applicationCompositionType.toString()));
}
CodingEquation codingEquation = imageEssenceDescriptorModel.getCodingEquation();
if(codingEquation.equals(CodingEquation.Unknown)) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s has invalid CodingEquation as per %s",
imageEssenceDescriptorID.toString(), applicationCompositionType.toString()));
}
Colorimetry color = imageEssenceDescriptorModel.getColor();
if(color.equals(Colorimetry.Unknown)) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s has invalid ColorPrimaries(%s)-TransferCharacteristic(%s)-CodingEquation(%s) combination as per %s",
imageEssenceDescriptorID.toString(), colorPrimaries.name(), transferCharacteristic.name(), codingEquation.name(), applicationCompositionType.toString()));
}
FrameLayoutType frameLayoutType = imageEssenceDescriptorModel.getFrameLayoutType();
UL essenceContainerFormatUL = imageEssenceDescriptorModel.getEssenceContainerFormatUL();
if(essenceContainerFormatUL != null) {
JP2KContentKind contentKind = JP2KContentKind.valueOf(essenceContainerFormatUL.getULAsBytes()[14]);
if ((frameLayoutType.equals(FrameLayoutType.FullFrame) && !contentKind.equals(JP2KContentKind.P1)) ||
(frameLayoutType.equals(FrameLayoutType.SeparateFields) && !contentKind.equals(JP2KContentKind.I1))) {
imfErrorLogger.addError(IMFErrorLogger.IMFErrors.ErrorCodes.APPLICATION_COMPOSITION_ERROR,
IMFErrorLogger.IMFErrors.ErrorLevels.NON_FATAL,
String.format("EssenceDescriptor with ID %s has invalid JPEG-2000 ContentKind (%s) indicated by the ContainerFormat as per %s",
imageEssenceDescriptorID.toString(), contentKind, applicationCompositionType.toString()));
}
}
}