$Header: /usr/people/sam/tiff/RCS/CHANGES-v3.0,v 1.5 92/03/31 11:31:03 sam Exp $

TIFF Software "Release" 3.00 (changes since 2.4.2 release)
----------------------------------------------------------
Changes in libtiff:
    o the mkg3states program has been made more portable
    o global library data structures can now be compiled as const
      (this is important for building shared libraries)
    o the file machdep.h is no longer needed and has been purged
    o the format of the include file generated by mkg3states
      has been altered so that applications can access the
      Group 3 and Group 4 compression machinery more easily
      (see tools/fax2tiff and contrib/fax2ps for examples)
    o a new -c option has been added to mkg3states to generate
      const data structures
    o the function prototyping macros now fail at compile time
      if the library is configured to not use prototypes and
      not use varargs
    o two new functions, TIFFGetFieldDefaulted and TIFFVGetFieldDefaulted,
      for getting either a tag's value or a default value
      (if one exists) have been added
    o a new function TIFFReadRGBAImage has been added to read
      an entire image into memory and return it in a common
      format (packed into 32-bit pixels)
    o function prototype inconsistencies for TIFFMapFileContents
      and TIFFUnmapFileContents have been fixed
    o the directory handling code has been broken up into
      4 separate files:
	tif_dir.c	routines for getting & setting tag values
	tif_dirinfo.c	information about known tags
	tif_dirread.c	directory reading support
	tif_dirwrite.c	directory writing support
    o the directory handling code has been substantially reworked
      to eliminate many special cases and add more general reading
      and writing support routines; this is mainly for supporting
      the 6.0 tags
    o the code that deduces a value for StripByteCounts when the
      tag is not present has been improved slightly
    o the directory reading code is now more careful about checking
      count fields and tag definitions (when known)
    o support has been added for the color information tags that are
      to appear in TIFF 6.0: WhitePoint, PrimaryChromaticities,
      ReferenceBlackWhite, and TransferFunction
    o support has been added for the JPEG tags that are to appear
      in TIFF 6.0 (but still no compression/decompression code yet):
      JPEGProc, JPEGRestartInterval, JPEGQTables, JPEGACTables,
      JPEGDCTables
    o support has been added for the CMYK tags that are to appear
      in TIFF 6.0: InkSet, InkNames, DotRange, TargetPrinter
    o support has been added for the YCbCr tags that are to appear
      in TIFF 6.0: YCbCrCoefficients, YCbCrSubsampling, YCbCrPositioning
    o support has been added for some 6.0 tags that replace SGI-private
      tags previously supported by the library: ExtraSamples, SampleFormat
    o the reading and writing of packed sampled YCbCr data by strip
      or tile works correctly (i.e. buffer sizes are calculated
      according to the sampling factors and the Y...YCbCr packing)
    o it is no longer necessary to call TIFFFlushData before a
      call to TIFFWriteDirectory; this is now handled automatically;
      old code that did this will still work as the library is
      now more intelligent about doing end-of-strip work only once
      per strip
    o the values for certain tags are now checked when the tag's
      value is set; e.g. FillOrder may only be FILLORDER_LSB2MSB
      or FILLORDER_MSB2LSB
    o old tags obsoleted by changes in TIFF 6.0 have been removed:
      ColorResponseUnit, ColorResponseCurves, GrayResponseUnit,
      GrayResponseCurve
    o a bug whereby the library could leak memory if directories
      were read in a non-sequential order has been fixed
    o a bug in the Group 3 2D/Group 4 decoding+encoding routines
      whereby the reference scanline was not reset to white at the
      start of each strip after the first has been fixed
    o bugs in the Group 3 2D/Group 4 decoding routine logic for
      several (slightly obscure) cases were fixed
    o a bug in the LZW encoding routine that could result in invalid
      codes being generated was fixed (this only happened in a
      low probability situation where the encoding process was
      considered "poor" and the library attempted to reset its
      encoding state to improve the compression performance)
    o a new routine, TIFFCurrentDirectory has been added; it
      returns the index of the current directory -- suitable for
      passing to TIFFSetDirectory
    o TIFFPrintDirectory has been updated to reflect the changes
      in the tags supported by the library
    o an obscure case in TIFFReadEncodedStrip where an error could
      occur without a diagnostic has been corrected
    o the private Picio and SGI RLE compression codes have been deleted
      (along with the associated code)
    o the JPEG compression code has been renumbered to reflect the
      value that it will have in TIFF 6.0
    o support has been added for the the HalftoneHints tag that
      is to appear in TIFF 6.0
    o support has been added for using the library under VMS
    o the bit reversal routine TIFFReverseBits has been made faster
    o a bug in the TIFFWriteTile routine where the tile size might
      be used before it's calculated has been fixed
    o some portability problems with 16-bit machines such as the
      Macintosh have been fixed
    o the library now treats RATIONAL values as the ratio of two
      unsigned 32-bit quantities; it used to treat them as the ratio
      of two *signed* values
    o the library now supports all the new 6.0 tag data types except DOUBLE
    o the SUBFILE_COMPAT configuration define has been removed
      (compatibility for SHORT SubfileType tags is always included).
    o a new global variable, TIFFVersion, has been added -- it is a
      string giving the version and copyright information for the library

(Note, since the 2.5 BETA version the following user-visible
 modifications have been made:
    o the ReferenceBlackWhite tag changed from LONG to RATIONAL
      with a corresponding change in the parameters to TIFFGetField
      and TIFFSetField; LONG values may still be read, but only
      RATIONAL values are now written
    o the SGI-specific Matteing and DataType tags have been replaced
      by the new ExtraSamples and SampleFormat tags; the library will
      accept the old tags, but only generate the new tags
    o several bugs in the handling of the JPEG tags have been fixed
    o a bug in the Group 3 2D and Group 4 decoding routines was fixed
    o Group 3 2d tag bits are no longer included in the EOL
      byte-aligning logic: that is, EOL codes are consistently aligned
      to byte boundaries and any 2d tag bits are placed in the byte
      that follows
    o the writing of the TileByteCounts and TileOffsets tags has been
      corrected
    o the library now treats RATIONAL values as the ratio of two
      unsigned 32-bit quantities; it used to treat them as the ratio
      of two *signed* values
)
(Note, since the 3.0 BETA version the following user-visible
 modifications have been made:
    o a bug that caused RTC to be written at the end of each
      Group 4-encoded strip has been fixed
    o support for the DotRange tag was fixed
    o the PhotometricInterpretation, Orientation, and ResolutionUnit
      tags no longer may be modified once data is written (for the
      Group 3 compression algorithm)
    o portability problems with the IEEE floating point conversion
      code have been fixed
    o the PackBits encoding algorithm now breaks strips and tiles
      up into row-sized units to avoid problems caused by encoding by
      strip/tile and then decoding by scanline
)

Changes in the tools:
    o a new tool for converting PBM+ files, ppm2tiff, has been added
    o a new tool for converting an RGB, grayscale, or bilevel image
      to a sampled YCbCr image, rgb2ycbcr, has been added
    o a new tool for splitting multi-image files into multiple single-image
      files, tiffsplit, has been added
    o the fax2tiff utility has been rewritten to use the library
      decoding routines; because of this, it can now decode Group 4
      data as well as Group 3 data
    o all references to obsolete tags such as ColorResponseCurves
      were deleted
    o the picio2tiff utility was purged for lack of use
    o the pixargt utility was purged for lack of use
    o a bug in ras2tiff that caused the default value of RowsPerStrip
      to be large was fixed
    o tiffgt (SGI version) now continues in the face of decoding
      errors unless a -s flag is specified; support for displaying
      YCbCr data has been added; also, the -v (verbose)
      flag has been changed to alter the window title strip rather
      than print to the terminal; finally, a bug that caused certain
      kinds of images larger than the screen to not be displayed
      properly was fixed
    o the PostScript generated by tiff2ps has been changed
      slightly to conform to the latest Adobe document conventions;
      also, several bugs were fixed and support was added for converting
      CMYK images
    o a bug in tiffcmp that caused it to dump core was fixed
    o tiffcp has been enhanced so that it can be used to generate a
      multipage file from multiple source files; it now checks the
      colormap to see if it is an 8-bit colormap and, if so, coerces
      it to be 16-bit in the resultant file; it copies more tags;
      and it copies the most common data organization more efficiently
    o tiffdump has been updated to reflect the new tags added to the
      library for TIFF 6.0
    o tiffdump is now more resilient in the face of bad tag types
      and read errors; also, a longstanding bug whereby 2 SHORT
      values packed into an offset field were printed out of order
      has been fixed
    o tiffinfo has new -l and -m options to specify the FillOrder
      of the input file as LSB-to-MSB and MSB-to-LSB, respectively
    o tiffinfo now reads data by strip and tile (e.g. for the -D option)
    o tiffcmp can now compare 1, 2, and 4 bit data
    o a public domain version of getopt is now included with the tools
    o the tools have been ported to VMS

Changes in the documentation:
    o the section 3 manual pages have been renamed to reflect full
      function names and a Makefile now exists for creating links
      when multiple functions are described in a single manual page
      (NOTE that this means that many file names are now much longer
      than 14 characters.)
    o a draft copy of the TIFF 6.0 spec is in PostScript form
    o the obsolete 5.0spec has been removed

Changes in the contrib software:
    o a new program, fax2ps, was contributed by Sam Leffler; it
      converts bilevel TIFF images to a compressed PostScript
      that is typically much faster to print than the PostScript
      generated by tiff2ps
    o a vms area contains scripts and data files for building the
      library and tools under the VMS operating system
    o an xv area contains patches to add TIFF support to version
      2.00 of the XV program (xv versions >=2.10 include this support)
