ImageGear Professional v18.2 > User Guide > Appendices/General Reference > Non-Image Data Storage > Non-Image Data Structure > EXIF-JPEG Non-image Data Structure > EXIF Makernote |
Makernote is a standard EXIF tag of UNDEFINED (byte) type. This tag usually is used as a "hidden" IFD. Makernote can not be read in and written out as a BLOB, because IFD offsets become invalid. Therefore, to preserve this tag while writing an image it's necessary to decode it during reading and re-encode it during writing, despite the fact that formally makernote is just a binary tag.
There are several types of makernotes, all of them have corresponding constants in Metadata.h file:
IG_MAKERNOTE_TYPE_UNKNOWN | This is the default type. This type means that we can't detect Makernote as any other type. Preserving such makernote and saving it with the file, most likely, does not make any sense, because IFD offsets will be corrupted. |
IG_MAKERNOTE_TYPE_IFD | Makernote is a valid TIF IFD, except that it is not referenced from anywhere in the file, and does not reference other IFDs. Such makernote is preserved entirely when writing to a file. |
IG_MAKERNOTE_TYPE_IFD_PREFIXED | Same as IG_MAKERNOTE_TYPE_IFD, but with a short prefix before the IFD. The prefix is also preserved, so the whole Makernote*s* is preserved when writing to a file. |
IG_MAKERNOTE_TYPE_TIF_HEADER_PREFIXED | Makernote starts with a prefix, then goes TIF image header, which points to an IFD. |
IG_MAKERNOTE_TYPE_IFD_PREFIXED_OFFSET_II | Makernote starts with a prefix, then goes offset to the IFD, then IFD itself. Makernote IFD uses Intel byte ordering (II), even though the whole file uses Motorola ordering. |
To present Makernote info in a convenient way ImageGear introduces a special structure as an addition to the standard EXIF Metadata: "Makernote*s* Wrapper IFD". Instead of a single binary Makernote*s* tag (37500), we are adding a virtual IFD, containing all the information about Makernote*s*.
'MakerNote Wrapper IFD' has the following format depending on the 'type' tag:
Copy Code
|
|
---|---|
'MakerNote wrapper IFD' -------->'type' = IG_MAKERNOTE_TYPE_UNKNOWN -------->'binary MakerNote' |
Copy Code
|
|
---|---|
'MakerNote wrapper IFD' -------->'type' = IG_MAKERNOTE_TYPE_IFD -------->'MakerNote IFD' ----------------> 'individual MakerNote tag 1' ----------------> 'individual MakerNote tag 2' ... ----------------> 'individual MakerNote tag N' -------->'binary MakerNote' |
Copy Code
|
|
---|---|
'MakerNote wrapper IFD' -------->'type' = IG_MAKERNOTE_TYPE_IFD_PREFIXED -------->'MakerNote IFD prefix' -------->'MakerNote IFD' ----------------> 'individual MakerNote tag 1' ----------------> 'individual MakerNote tag 2' ... ----------------> 'individual MakerNote tag N' -------->'binary MakerNote' |
Copy Code
|
|
---|---|
'MakerNote wrapper IFD' -------->'type' = IG_MAKERNOTE_TYPE_TIF_HEADER_PREFIXED <The rest of the structure is identical to IG_MAKERNOTE_TYPE_IFD_PREFIXED> |
Copy Code
|
|
---|---|
'MakerNote wrapper IFD' -------->'type' = IG_MAKERNOTE_TYPE_IFD_PREFIXED_OFFSET_II <The rest of the structure is identical to IG_MAKERNOTE_TYPE_IFD_PREFIXED> |
If 'Makernote' EXIF tag is present in the file then ImageGear will always provide it in its original binary form via metadata callback ('binary Makernote' tag) on the read side, and will also optionally provide it as a decoded sub-IFD (w/ or w/o prefix depending on how it is stored in the original file) if it can be decoded.
ImageGear will ignore 'binary Makernote' tag on the write side for the 'Makernote wrapper IFDs' that have 'type' other than IG_MAKERNOTE_TYPE_UNKNOWN - and construct 'Makernote' EXIF tag based on the 'Makernote IFD'.
ImageGear will store 'binary Makernote' to file 'as is' for the 'Makernote wrapper IFDs' that have 'type' set to IG_MAKERNOTE_TYPE_UNKNOWN.
If 'Makernote wrapper IFD' is not provided to ImageGear during saving operation then 'Makernote' EXIF tag will not be saved into the output file.
Makernote IFD tags are listed below:
Name | Id | Type | Value Type | Value | Value Length | Read Only |
---|---|---|---|---|---|---|
"IFD" | See respective IGMDTAG_ID_EXIF_MAKERNOTE_ Id constants in the section Custom Makernote Tags and IFDs. | LEVEL_START | 0 | NULL | False | |
"MakerNoteType" | VALUE_ITEM | UINT16 |
One of the following enumIGEXIFMakerNoteType constants:
|
1 | False | |
"MakerNotePrefix" | VALUE_ITEM | RAW_DATA | "FPXR" | False | ||
"MakerNoteBinary" | VALUE_ITEM | RAW_DATA | False | |||
"IFD" | LEVEL_START | 0 | NULL | 0 | False | |
"UNDEFINED" [Manufacturer specific tags, not covered by EXIF standard] |
VALUE_ITEM | RAW_DATA | False | |||
... | ||||||
"IFD" | LEVEL_END | 0 | NULL | 0 | False | |
"IFD" | LEVEL_END | 0 | NULL | False |
The following custom tags and IFDs are introduced for Makernote support:
Makernote Wrapper IFD: tag = 37500 (same as standard Makernote tag). This IFD is located in the "Exif IFD" (34665).
New tags, which belong to the Makernote Wrapper IFD:
Copy Code
|
|
---|---|
enum enumIGEXIFMakerNoteTagIDs
{
IGMDTAG_ID_EXIF_MAKERNOTE_TYPE = 1,
IGMDTAG_ID_EXIF_MAKERNOTE_PREFIX = 2,
IGMDTAG_ID_EXIF_MAKERNOTE_BINARY = 1000,
IGMDTAG_ID_EXIF_MAKERNOTE_DATA_IFD = 1001
};
|
Make | Model |
---|---|
Canon | Canon DIGITAL IXUS |
Canon | Canon EOS D30 |
Canon | Canon PowerShot G2 |
Canon | Canon PowerShot S50 |
FUJIFILM | FinePix4900Z |
LEICA | digilux 4.3 |
Minolta Co., Ltd. | DiMAGE 7i |
Nikon | E5000 (TIF) |
NIKON | E5700 |
NIKON | E950 |
OLYMPUS OPTICAL CO.,LTD | C2040Z |
OLYMPUS OPTICAL CO.,LTD | C960Z,D460Z |
Panasonic | DMC-LC5 |
RICOH | Caplio RR1 |
SANYO Electric Co.,Ltd. | SR6 |
SANYO Electric Co.,Ltd. | SX113 |
SANYO Electric Co.,Ltd. | SX212 |
SEIKO EPSON CORP. | PhotoPC 850Z |