Beispiel #1
0
  /**
   * 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());
    }
  }