in src/main/java/com/netflix/imflibrary/app/IMFTrackFileReader.java [691:772]
public static void main(String[] args) throws IOException
{
if (args.length != 2)
{
logger.error(usage());
throw new IllegalArgumentException("Invalid parameters");
}
File inputFile = new File(args[0]);
if(!inputFile.exists()){
logger.error(String.format("File %s does not exist", inputFile.getAbsolutePath()));
System.exit(-1);
}
File workingDirectory = new File(args[1]);
ResourceByteRangeProvider resourceByteRangeProvider = new FileByteRangeProvider(inputFile);
IMFTrackFileReader imfTrackFileReader = null;
IMFTrackFileCPLBuilder imfTrackFileCPLBuilder = null;
IMFErrorLogger imfErrorLogger = new IMFErrorLoggerImpl();
try {
imfTrackFileReader = new IMFTrackFileReader(workingDirectory, resourceByteRangeProvider);
imfTrackFileCPLBuilder = new IMFTrackFileCPLBuilder(workingDirectory, inputFile);
}
catch (IMFException | MXFException e){
if(e instanceof IMFException){
IMFException imfException = (IMFException)e;
imfErrorLogger.addAllErrors(imfException.getErrors());
}
else if(e instanceof MXFException){
MXFException mxfException = (MXFException)e;
imfErrorLogger.addAllErrors(mxfException.getErrors());
}
imfErrorLogger.addAllErrors(imfErrorLogger.getErrors());
}
Set<HeaderPartition.EssenceTypeEnum> supportedEssenceComponentTypes = new HashSet<>();
supportedEssenceComponentTypes.add(HeaderPartition.EssenceTypeEnum.MainImageEssence);
supportedEssenceComponentTypes.add(HeaderPartition.EssenceTypeEnum.MainAudioEssence);
supportedEssenceComponentTypes.add(HeaderPartition.EssenceTypeEnum.MarkerEssence);
supportedEssenceComponentTypes.add(HeaderPartition.EssenceTypeEnum.MGASADMEssence);
if(imfTrackFileReader != null
&& imfTrackFileCPLBuilder != null
&& supportedEssenceComponentTypes.contains(imfTrackFileReader.getEssenceType(imfErrorLogger))) {
try {
for (InterchangeObject.InterchangeObjectBO essenceDescriptor : imfTrackFileReader.getEssenceDescriptors(imfErrorLogger)) {
/* create dom */
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document document = docBuilder.newDocument();
/*Output file containing the RegXML representation of the EssenceDescriptor*/
KLVPacket.Header essenceDescriptorHeader = essenceDescriptor.getHeader();
List<KLVPacket.Header> subDescriptorHeaders = imfTrackFileReader.getSubDescriptorKLVHeader(essenceDescriptor, imfErrorLogger);
File outputFile = imfTrackFileCPLBuilder.getEssenceDescriptorAsXMLFile(document, essenceDescriptorHeader, subDescriptorHeaders, imfErrorLogger);
logger.info(String.format("The EssenceDescriptor in the IMFTrackFile has been written to a XML document at the following location %s", outputFile.getAbsolutePath()));
}
} catch (ParserConfigurationException | TransformerException e) {
throw new MXFException(e);
}
}
List<ErrorLogger.ErrorObject> errors = imfErrorLogger.getErrors();
if(errors.size() > 0){
long warningCount = errors.stream().filter(e -> e.getErrorLevel().equals(IMFErrorLogger.IMFErrors.ErrorLevels
.WARNING)).count();
logger.info(String.format("IMFTrackFile has %d errors and %d warnings",
errors.size() - warningCount, warningCount));
for(ErrorLogger.ErrorObject errorObject : errors){
if(errorObject.getErrorLevel() != IMFErrorLogger.IMFErrors.ErrorLevels.WARNING) {
logger.error(errorObject.toString());
}
else if(errorObject.getErrorLevel() == IMFErrorLogger.IMFErrors.ErrorLevels.WARNING) {
logger.warn(errorObject.toString());
}
}
}
else{
/*if(imfTrackFileReader != null
&& imfTrackFileCPLBuilder != null) {
logger.info(String.format("%n %s", imfTrackFileReader.toString()));
}*/
logger.info("No errors were detected in the IMFTrackFile");
}
}