One positive thing is that most manufacturers seem to have adopted the use of an EXIF-like IFD (Image File Directory) structure for their maker notes. But many problems arise because of a fundamental design flaw in the EXIF/TIFF format. Values longer than 4 bytes are stored at a location referenced by an offset from an absolute position in the file (where offset 0 is the start of the EXIF/TIFF information).
The difficulty is that these offsets must be recalculated when a file is rewritten, but in general this is not possible (particularly for the maker notes) because the format of not all information is known. Some manufacturers have attempted to avoid this problem using offsets which are relative to the start of the maker note IFD instead of the usual start of EXIF. This is a good idea if implemented properly, but this is not done consistently. (And some manufacturers are not even consistent about how the offsets are calculated from one camera model to the next!)
Technical aside: If EXIF were designed properly, all offsets would be relative to 4 bytes after the end of the IFD, which is the normal position for values to be stored, and all value data for the IFD would be stored in a block at this location. If this was done, an entire IFD could be relocated easily without causing problems.Below is a list of idiosyncracies in files written by the digital cameras or software from various manufacturers. Many of these quirks relate to the offset problem mentioned above.
Canon: The 350D (firmware 1.0.1) gets the size of the thumbnail image wrong and reports it to be 10 bytes too long. This can cause the reported thumbnail image data to run off the end of the APP1 segment.
Casio: The preview image is referenced by two different offsets (the PreviewImage tag plus a PreviewImageStart/PreviewImageLength pair). Also, the offset for the PrintIM information is relative to the start of the IFD entry even though other offsets aren't.
Concord: Some models write PrintIM information with an entry-based offset like Casio.
Kodak: Professional DCS Photo Desk software writes a cyclical EXIF directory such that the InteropIFD pointer points back to IFD0.
Konica: The KD-300Z writes all maker notes offsets relative to the start of the individual IFD entry.
Minolta: An obvious bug in the firmware of the Z2 writes an incorrect offset for the 'MinoltaCameraSettings2' information -- it writes the offset of the offset itself instead of the offset of the value (hahaha!). Other offsets are correct.
Kyocera: A number of models write all maker notes offsets relative to the start of the individual IFD entry.
Nikon: D2H NEF files have huge blocks with all zero data (3.7 MB in my test file!).
Olympus: The E-1 and E-300 have subdirectories in the maker notes, but not only does the data size of these subdirectories exclude the subdirectory value data, but also it is 2 bytes too small for the directory information itself (doh! -- they forgot to include the entry count).
Pentax: The Optio 330 uses an offset for the PrintIM information which is relative to the start of the IFD entry (hmmm, like some Casio models...). Also, preview image offsets in the maker notes are given relative to the EXIF base rather than the maker note base (like all other maker notes offsets).
The Optio 550, 555, 33WR and 43WR all specify a PrintIM directory at a the same offset of 0x29a with length 40 bytes, but the only PrintIM information in the file is nowhere near that offset and is 128 bytes long. Also for these models, tag 0x002e has a constant value of 0x6a6 even though its position changes. Finally, all of these models plus the Optio WP waste many kilobytes of space in each image with large unused data blocks in the EXIF information.
The Optio 330RS and 430RS double reference the preview image information.
Note that the worst problems are with the Optio 230, 330, and 430, which were built for Pentax by Asahi.
Photoshop and Nikon Capture: Both of these packages write TIFF IPTC information as 'int32u' (or 'LONG'). This is wrong (see reference). Nikon Capture goes one step further and simply ignores IPTC that is written correctly as 'undef' or 'int8u'. (So for compatibility, ExifTool also writes this incorrectly as 'int32u'.)
Ricoh: An IFD subdirectory in the Ricoh maker notes of both the Caplio RR30 and RR1. The RR30 uses standard EXIF offsets (relative to the start of the EXIF data), but for the RR1 the offsets are relative to the start of the subdirectory.
Rollei: The DK4010 writes all maker notes offsets relative to the start of the individual IFD entry.
Toshiba: The PDR-3310 writes all maker notes offsets relative to the start of the individual IFD entry. (very similar to Konica KD-300Z)