/** * Parse a WAVE chunk. * * @param jhove2 JHOVE2 framework * @param source WAVE source unit * @param input WAVE source input * @return Number of bytes consumed * @throws EOFException If End-of-File is reached reading the source unit * @throws IOException If an I/O exception is raised reading the source unit * @throws JHOVE2Exception */ @Override public long parse(JHOVE2 jhove2, Source source, Input input) throws EOFException, IOException, JHOVE2Exception { long consumed = super.parse(jhove2, source, input); long start = ((MeasurableSource) source).getStartingOffset(); int numErrors = 0; /* Format category */ this.formatCategory = input.readUnsignedShort(); FormatCategory category = FormatCategory.getFormatCategory(this.formatCategory, jhove2); if (category != null) { this.formatCategory_d = category.getCategory(); } else { numErrors++; this.isValid = Validity.False; Object[] args = new Object[] {input.getPosition() - 4L - start, this.formatCategory}; this.invalidFormatCategoryMessage = new Message( Severity.ERROR, Context.OBJECT, "org.jhove2.module.format.wave.FormatChunk.invalidFormatCategory", args, jhove2.getConfigInfo()); } consumed += 2; /* Number of channels. */ this.numChannels = input.readUnsignedShort(); consumed += 2; /* Sampling rate. */ this.samplingRate = input.readUnsignedInt(); consumed += 4; /* Average bytes per second. */ this.avgBytesPerSec = input.readUnsignedInt(); consumed += 4; /* Data block size. */ this.dataBlockSize = input.readUnsignedShort(); consumed += 2; this.bitsPerSample = input.readUnsignedShort(); consumed += 2; if (this.formatCategory != WAVE_FORMAT_PCM) { this.extraSize = input.readUnsignedShort(); consumed += 2; if (this.formatCategory == WAVE_FORMAT_MPEG) { this.mpeg = new MPEGFormatHeader(); consumed += this.mpeg.parse(jhove2, source, input); } } return consumed; }
/* * (non-Javadoc) * * @see * org.jhove2.module.format.tiff.profile.TiffProfile#validateThisProfile() */ @Override public void validateThisProfile(JHOVE2 jhove2, TiffIFD ifd) throws JHOVE2Exception { /* Check required tags. */ super.validateThisProfile(jhove2, ifd); /* Check required values. */ if (!isNewSubfileTypeValid(ifd, 0)) { this.invalidNewSubfileTypeMessage = new Message( Severity.WARNING, Context.OBJECT, "org.jhove2.module.format.tiff.profile.TIFFITProfile.InvalidNewSubfileTypeMessage", jhove2.getConfigInfo()); } if (!isCompressionValid(ifd, 1)) { this.isValid = Validity.False; Object[] args = new Object[] {1}; this.invalidCompressionValueMessage = new Message( Severity.WARNING, Context.OBJECT, "org.jhove2.module.format.tiff.profile.TIFFITProfile.InvalidCompressionValueMessage", args, jhove2.getConfigInfo()); } if (!isPhotometricInterpretationValid(ifd, 0)) { this.isValid = Validity.False; this.invalidPhotometricInterpretationValueMessage = new Message( Severity.WARNING, Context.OBJECT, "org.jhove2.module.format.tiff.profile.TIFFProfile.InvalidPhotometricInterpretationValueMessage", jhove2.getConfigInfo()); } if (!isSamplesPerPixelValid(ifd, 1)) { this.isValid = Validity.False; Object[] args = new Object[] {1}; this.invalidSPPValueMessage = new Message( Severity.WARNING, Context.OBJECT, "org.jhove2.module.format.tiff.profile.TIFFITProfile.InvalidSPPValueMessage", args, jhove2.getConfigInfo()); } if (!isResolutionUnitValid(ifd, new int[] {2, 3})) { this.isValid = Validity.False; this.invalidResolutionUnitValueMessage = new Message( Severity.WARNING, Context.OBJECT, "org.jhove2.module.format.tiff.profile.TIFFProfile.InvalidResolutionUnitValueMessage", jhove2.getConfigInfo()); } int[] validValues; /* ImageColorIndicator=1, but only if ImageColorValue is defined */ if ((ifd.getEntries().get(TiffIFD.IMAGECOLORVALUE)) != null) validValues = new int[] {1}; else { /* ImageColorIndicator=0,1,2 */ validValues = new int[] {0, 1, 2}; } if (!isImageColorIndicatorValid(ifd, validValues)) { this.isValid = Validity.False; this.invalidImageColorIndicatorMessage = new Message( Severity.WARNING, Context.OBJECT, "org.jhove2.module.format.tiff.profile.TIFFITProfile.InvalidImageColorIndicatorMessage", jhove2.getConfigInfo()); } /* * BackgroundColorIndicator=0,1, or 2; BackgroundColorIndicator=1, but * only if BackgroundColorValue is defined. */ if ((ifd.getEntries().get(TiffIFD.BACKGROUNDCOLORVALUE)) != null) { validValues = new int[] {1}; } else { validValues = new int[] {0, 1, 2}; } if (!isBackgroundColorIndicatorValid(ifd, validValues)) { this.isValid = Validity.False; this.invalidBackgroundColorIndicatorMessage = new Message( Severity.WARNING, Context.OBJECT, "org.jhove2.module.format.tiff.profile.TIFFITProfile.InvalidBackgroundColorIndicatorMessage", jhove2.getConfigInfo()); } /* Tags which must NOT be defined */ IFDEntry entry = null; if ((entry = ifd.getEntries().get(TiffIFD.DOCUMENTNAME)) != null) { this.isValid = Validity.False; Object[] args = new Object[] {entry.getName()}; this.tagShouldNotBePresentMessage = new Message( Severity.WARNING, Context.OBJECT, "org.jhove2.module.format.tiff.profile.TIFFProfile.tagShouldNotBePresentMessage", args, jhove2.getConfigInfo()); } if ((entry = ifd.getEntries().get(TiffIFD.MODEL)) != null) { this.isValid = Validity.False; Object[] args = new Object[] {entry.getName()}; this.tagShouldNotBePresentMessage = new Message( Severity.WARNING, Context.OBJECT, "org.jhove2.module.format.tiff.profile.TIFFProfile.tagShouldNotBePresentMessage", args, jhove2.getConfigInfo()); } if ((entry = ifd.getEntries().get(TiffIFD.PAGENAME)) != null) { this.isValid = Validity.False; Object[] args = new Object[] {entry.getName()}; this.tagShouldNotBePresentMessage = new Message( Severity.WARNING, Context.OBJECT, "org.jhove2.module.format.tiff.profile.TIFFProfile.tagShouldNotBePresentMessage", args, jhove2.getConfigInfo()); } if ((entry = ifd.getEntries().get(TiffIFD.HOSTCOMPUTER)) != null) { this.isValid = Validity.False; Object[] args = new Object[] {entry.getName()}; this.tagShouldNotBePresentMessage = new Message( Severity.WARNING, Context.OBJECT, "org.jhove2.module.format.tiff.profile.TIFFProfile.tagShouldNotBePresentMessage", args, jhove2.getConfigInfo()); } if ((entry = ifd.getEntries().get(TiffIFD.SITE)) != null) { this.isValid = Validity.False; Object[] args = new Object[] {entry.getName()}; this.tagShouldNotBePresentMessage = new Message( Severity.WARNING, Context.OBJECT, "org.jhove2.module.format.tiff.profile.TIFFProfile.tagShouldNotBePresentMessage", args, jhove2.getConfigInfo()); } if ((entry = ifd.getEntries().get(TiffIFD.COLORSEQUENCE)) != null) { this.isValid = Validity.False; Object[] args = new Object[] {entry.getName()}; this.tagShouldNotBePresentMessage = new Message( Severity.WARNING, Context.OBJECT, "org.jhove2.module.format.tiff.profile.TIFFProfile.tagShouldNotBePresentMessage", args, jhove2.getConfigInfo()); } if ((entry = ifd.getEntries().get(TiffIFD.IT8HEADER)) != null) { this.isValid = Validity.False; Object[] args = new Object[] {entry.getName()}; this.tagShouldNotBePresentMessage = new Message( Severity.WARNING, Context.OBJECT, "org.jhove2.module.format.tiff.profile.TIFFProfile.tagShouldNotBePresentMessage", args, jhove2.getConfigInfo()); } }