.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.40) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Image::MetaData::JPEG::MakerNotes 3pm" .TH Image::MetaData::JPEG::MakerNotes 3pm "2021-01-03" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Image::MetaData::JPEG::MakerNotes \- This document contains random information and details on MakerNotes; it is an appendix to the main manual page of the Image::MetaData::JPEG module, which the reader should refer to for further details and the general scope. The note on MakerNote parsing in the main manual page is of particular interest. .SH "Pieces of information available after parsing the MakerNote" .IX Header "Pieces of information available after parsing the MakerNote" The result of the process of parsing the maker note is stored in a directory in the internal data structure for the \s-1APP1\s0 Segment, whose path is \*(L"IFD@SubIFD@MakerNoteData_$format\*(R", where \f(CW$format\fR is the specific note format; the 'MakerNote' entry in IFD0@SubIFD is then removed. This translation happens always, because there is a catch-all 'unknown' rule for a binary makernote with very broad acceptance rules. The maker note directory contains, in addition, a special subdir with some fields reporting about the parsing process. .PP .Vb 7 \& key content \& \-\-\-\-\-\-\-\- \-\-\-\-\-\-\- \& ORIGINAL the raw content of the maker note (unparsed) \& SIGNATURE the first few bytes which allowed the format to be chosen \& ENDIANNESS the byte order chosen during parsing \& FORMAT the maker note format chosen during parsing \& ERROR [optional] error details, in case of failure while parsing .Ve .SH "Supported MakerNote formats" .IX Header "Supported MakerNote formats" Maker note formats are specified in a special internal hash, with a key for each format (including the 'unknown' format). Each format entry corresponds to an anonymous hash containing information for parsing the MakerNote; the \&\*(L"normal\*(R" format is considered to be an IFD-like MakerNote with a next_link pointer, offsets counted from the global \s-1TIFF\s0 header and no MakerNote internal \s-1TIFF\s0 header. .PP .Vb 11 \& key meaning or effect \& \-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \& signature the MakerNote signature (a regular expression) \& maker the Maker signature (i.e., its name, no regex) \& tags a reference to a hash for tag translations \& (A) mkntstart if set, offsets are counted from the maker note start \& (B) mkntTIFF if set, offsets are counted from the internal TIFF header \& (C) ignore if set, the format is to be ignored \& (D) nonext if set, the maker note IFD does not have a next_link \& (E) endianness if set, the byte order is fixed to this value \& (F) nonIFD if set, the maker note is not IFD\-like .Ve .PP Currently, \*(L"supported\*(R" formats are described in the following table; authoritative data is indeed kept in Tables_makernotes.pl, to which the reader should refer for tag definitions and translations. Remember that both the 'signature' and the 'maker' fields are regular expressions matching at the beginning (the real signature corresponds to \f(CW$1\fR). .PP .Vb 10 \& A B C D E F Maker Signature \& \-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \& Agfa AGFA (AGFA \e000\e001) \& Canon Canon () \& Casio_1 CASIO ()[^Q] \& Casio_2 CASIO (QVC\e000{3}) \& Epson EPSON (EPSON\e000\e001\e000) \& Foveon FOVEON (FOVEON\e000{2}\e001\e000) \& Fujifilm x FUJIFILM (FUJIFILM\e014\e000{3}) \& HPackard x Hewlett\-Packard (HP) \& Kyocera x x KYOCERA (KYOCERA {12}\e000{3}) \& Kodak B x KODAK (KDK INFO[a\-zA\-Z0\-9]* ) \& Minolta_1 MINOLTA ().{10}MLT0 \& Minolta_2 Minolta ().{10}MLT0 \& Konica x Minolta|KONICA ((MLY|KC|(\e+M){4})|\e001\e000{5}\e004) \& Nikon_1 NIKON (Nikon\e000\e001\e000) \& Nikon_2 NIKON ()[^N] \& Nikon_3 x NIKON (Nikon\e000\e002[\e020\e000]\e000{2}) \& Olympus OLYMPUS (OLYMP\e000[\e001\e002]\e000) \& Panasonic_1 x Panasonic (Panasonic\e000{3}) \& Panasonic_2 x x Panasonic (MKED) \& Pentax_1 x Asahi ()[^A] \& Pentax_2 x x Asahi (AOC\e000..) \& Ricoh_1 x RICOH (Rv|Rev) \& Ricoh_2 x RICOH (\e000) \& Ricoh_3 RICOH ((Ricoh|RICOH)\e000{3}) \& Sanyo SANYO (SANYO\e000\e001\e000) \& Sigma SIGMA (SIGMA\e000{3}\e001\e000) \& Sony x SONY (SONY (CAM|DSC) \e000{3}) \& Toshiba x TOSHIBA () \& unknown x . () .Ve .SH "References" .IX Header "References" MakerNote format details are not usually released by vendors (well, this is an euphemism: no vendor ever, to my knowledge, released any detail on its format, exception made for Sigma/Foveon). All information used for this package was collected on the Internet (and its reliability is therefore limited) or through personal tests. Some interesting sites are (not an exhaustive list at all): .PP .Vb 2 \& General: home.arcor.de/ahuggel/exiv2/makernote.html \& .....: www.ozhiker.com/electronics/pjmt/jpeg_info/makernotes.html \& \& Agfa: www.ozhiker.com/electronics/pjmt/jpeg_info/agfa_mn.html \& Canon: www.burren.cx/david/canon.html \& Casio: park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif\-e.html \& ...: www.dicasoft.de/casiomn.htm \& Epson: www.ozhiker.com/electronics/pjmt/jpeg_info/epson_mn.html \& Foveon: Foveon is the same as Sigma, see Sigma \& Fujifilm: park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif\-e.html \& ......: www.ozhiker.com/electronics/pjmt/jpeg_info/fujifilm_mn.html \& Kyocera: www.ozhiker.com/electronics/pjmt/jpeg_info/kyocera_mn.html \& Kodak: my personal tests with my Kodak DX3900 (not IFD\-like) \& Minolta: www.dalibor.cz/minolta/makernote.htm \& .....: www.ozhiker.com/electronics/pjmt/jpeg_info/minolta_mn.html \& Nikon: park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif\-e.html \& ...: www.tawbaware.com/990exif.htm \& ...: www.ozhiker.com/electronics/pjmt/jpeg_info/nikon_mn.html \& Olympus: park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif\-e.html \& .....: www.ozhiker.com/electronics/pjmt/jpeg_info/olympus_mn.html \& Panasonic: www.compton.nu/panasonic.html \& Pentax: www.ozhiker.com/electronics/pjmt/jpeg_info/pentax_mn.html \& Ricoh: www.ozhiker.com/electronics/pjmt/jpeg_info/ricoh_mn.html \& Sanyo: www.exif.org/makernotes/SanyoMakerNote.html \& Sigma: www.x3f.info/technotes/FileDocs/MakerNoteDoc.html \& Sony: www.ozhiker.com/electronics/pjmt/jpeg_info/sony_mn.html .Ve .SH "DX3900 MakerNote format" .IX Header "DX3900 MakerNote format" Kodak MakerNotes are written in a proprietary binary format, which is not IFD-like. So, there is no way to detect the beginning, end and type of a field; everything here was inferred through a careful comparison of the content of a set of Kodak \s-1JPEG\s0 files and their shot parameters. Fields seems to be aligned on four bytes boundaries. For the \s-1DX3900\s0 model the endianness is always fixed to big endian. The signature regular expression is \*(L"^(\s-1KDK\s0 INFO[a\-zA\-Z0\-9]* )\*(R", the maker is '\s-1KODAK\s0'. The meaning of the tags is as follows: .PP .Vb 10 \& BYTE ??? firmware version? This is always 3 \& BYTE Compression 1 = normal, 2 = 2160x1440 high compression \& BYTE BurstMode 0 = off, 1 = on \& BYTE MacroMode 0 = normal, 1 = close\-up \& SHORT PixelXDimension \e allowed 2160x1440, 1800x1200, \& SHORT PixelYDimension / values: 1536x1024, 1080x720 \& SHORT Year the year value, with four digits \& BYTE Month the month value (in [1,12]) \& BYTE Day the day value (in [1,31]) \& BYTE Hour the hour value (in [0,23]) \& BYTE Minute the minute value (in [0,59]) \& BYTE Second the second value (in [0,59]) \& BYTE SubSecond (in 130th of seconds?) \& SHORT ??? ??? \& BYTE ??? ??? \& BYTE ShutterMode 0 = auto, 32 = manual \& BYTE MeteringMode 0 = multi\-pattern, 1=centre weight., 2=centre spot \& BYTE BurstSequenceIndex index in [1,8], 0 if burst mode off \& SHORT FNumber 100 times the Exif F\-number \& LONG ExposureTime in 10^\-5 seconds \& SSHORT ExposureBiasValue 1000 times the exposure bias in [\-2,+2 step .5] \& SHORT ??? ??? \& LONG ??? \e \& LONG ??? \e is this an estimate of the subject \& LONG ??? / distance? If so, it is very rough. \& LONG ??? / \& BYTE FocusMode 0 = auto, 2 = close, 3 = infinity \& BYTE ??? always 2 \& SHORT ??? ??? \& SSHORT PanoramaMode 0 = normal, \-1 = focus at infinity \& SHORT SubjectDistance (x\-28)*2.54+7 looks like the distance in cm \& BYTE WhiteBalance 0 = normal, 1 = fluor., 2 = tungsten, 3 = daylight \& (27 bytes with unknown meaning here) \& BYTE FlashMode 0 = auto, 1 = on, 2 = off, 3 = red\-eyes \& BYTE FlashFired 0 = yes, 1 = no \& SHORT ISOSpeedMode the requested speed in {100,200,400} or zero \& SHORT ??? ??? \& SHORT TotalZoomFactor 100 times the zoom factor in [+1,+6 step 0.1] \& SHORT DateTimeStampMode 0 = none, [1,6] = the six modes \& SHORT ColourMode 1 = black & white, 2 = sepia, 32 = colour \& SHORT DigitalZoomFactor 100 times the zoom factor in [+1,+3 step 0.1] \& BYTE ??? always zero \& SBYTE Sharpness 0 = standard, 1 = sharp, \-1 = soft \& (808 bytes with unknown meaning here, maybe a thumbnail?) .Ve .SH "AUTHOR" .IX Header "AUTHOR" Stefano Bettelli, \fBbettelli@cpan.org\fR .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" Copyright (C) 2004,2005,2006 by Stefano Bettelli .PP This library is free software; you can redistribute it and/or modify it under the terms of the \s-1GNU\s0 General Public License. See the \&\s-1COPYING\s0 and \s-1LICENSE\s0 file for the license terms. .SH "SEE ALSO" .IX Header "SEE ALSO" The main documentation page for the Image::MetaData::JPEG module.