Added Panasonic makernote, tweaked Olympus makernote just a little bit, updated doc and tests
This commit is contained in:
Vendored
+1
-1
@@ -15,7 +15,7 @@
|
||||
#
|
||||
|
||||
TABLES = Exif Canon CanonCs1 CanonCs2 CanonCf Fujifilm Nikon1 Nikon2 Nikon3 \
|
||||
Olympus Sigma Sony
|
||||
Olympus Panasonic Sigma Sony
|
||||
|
||||
TAGLIST = ../../src/taglist
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -1,3 +1,3 @@
|
||||
<h1>Exiv2 Tag Tables</h1>
|
||||
|
||||
<div class="qindex"><a class="qindex" href="tags-exif.html">Exif</a> | <a class="qindex" href="tags-canon.html">Canon</a> | <a class="qindex" href="tags-fujifilm.html">Fujifilm</a> | <a class="qindex" href="tags-nikon.html">Nikon</a> | <a class="qindex" href="tags-olympus.html">Olympus</a> | <a class="qindex" href="tags-sigma.html">Sigma/Foveon</a> | <a class="qindex" href="tags-sony.html">Sony</a> | <a class="qindex" href="tags-iptc.html">Iptc datasets</a></div>
|
||||
<div class="qindex"><a class="qindex" href="tags-exif.html">Exif</a> | <a class="qindex" href="tags-canon.html">Canon</a> | <a class="qindex" href="tags-fujifilm.html">Fujifilm</a> | <a class="qindex" href="tags-nikon.html">Nikon</a> | <a class="qindex" href="tags-olympus.html">Olympus</a> | <a class="qindex" href="tags-panasonic.html">Panasonic</a> | <a class="qindex" href="tags-sigma.html">Sigma/Foveon</a> | <a class="qindex" href="tags-sony.html">Sony</a> | <a class="qindex" href="tags-iptc.html">Iptc datasets</a></div>
|
||||
|
||||
Vendored
+3
-2
@@ -138,7 +138,7 @@ Please let me know if you find further specifications on the Internet.</p>
|
||||
<tr class="OddRow">
|
||||
<td>Panasonic</td>
|
||||
<td> </td>
|
||||
<td>IFD; Starts with an 12-byte ID string "Panasonic\0\0\0"</td>
|
||||
<td>Non-standard IFD (without a next-IFD pointer); Starts with an 12-byte ID string "Panasonic\0\0\0"</td>
|
||||
<td><a href="#R8">[8]</a></td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
@@ -183,7 +183,8 @@ t1.onsort = function () {
|
||||
MakerNote Information</a> by Tom Hughes<br>
|
||||
<a name="R9">[9]</a> <a href="http://www.ozhiker.com/electronics/pjmt/jpeg_info/makernotes.html">
|
||||
Various Makernote specifications</a> from the <a href="http://www.ozhiker.com/electronics/pjmt/index.html">
|
||||
PHP JPEG Metadata Toolkit</a> by Evan Hunter</p>
|
||||
PHP JPEG Metadata Toolkit</a> by Evan Hunter<br>
|
||||
<a name="R10">[10]</a> <a href="http://www.sno.phy.queensu.ca/~phil/exiftool/">ExifTool</a>, the most complete and up-to-date tool for reading and writing meta information in image files, by Phil Harvey</p>
|
||||
|
||||
</div>
|
||||
<!-- closes content -->
|
||||
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
__doctype__
|
||||
<html>
|
||||
__header2__
|
||||
<body>
|
||||
|
||||
<div id="content">
|
||||
__index1__
|
||||
__index2__
|
||||
<h2>Panasonic MakerNote Tags defined in Exiv2</h2>
|
||||
<div>
|
||||
<p>Tags found in the MakerNote of images taken with Panasonic cameras.</p>
|
||||
<p>Click on a column header to sort the table.</p>
|
||||
</div>
|
||||
__Panasonic__
|
||||
</div>
|
||||
<!-- closes content -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
+2
-2
@@ -53,8 +53,8 @@ CCHDR = exv_conf.h exv_msvc.h mn.hpp rcsid.hpp
|
||||
# Add library C++ source files to this list
|
||||
CCSRC = basicio.cpp canonmn.cpp datasets.cpp error.cpp exif.cpp futils.cpp \
|
||||
fujimn.cpp ifd.cpp image.cpp iptc.cpp jpgimage.cpp makernote.cpp \
|
||||
metadatum.cpp nikonmn.cpp olympusmn.cpp sigmamn.cpp sonymn.cpp \
|
||||
tags.cpp types.cpp value.cpp
|
||||
metadatum.cpp nikonmn.cpp olympusmn.cpp panasonicmn.cpp sigmamn.cpp \
|
||||
sonymn.cpp tags.cpp types.cpp value.cpp
|
||||
|
||||
# Add source files of simple applications to this list
|
||||
BINSRC = addmoddel.cpp dataarea-test.cpp exifcomment.cpp exifdata-test.cpp \
|
||||
|
||||
+4
-2
@@ -13,8 +13,9 @@
|
||||
@section overview Exiv2 Overview
|
||||
|
||||
%Exiv2 comprises of a C++ library and a command line utility to access image
|
||||
metadata. %Exiv2 is free software.
|
||||
|
||||
metadata. %Exiv2 is free software. The homepage of %Exiv2 is at
|
||||
<A HREF="http://home.arcor.de/ahuggel/exiv2">http://home.arcor.de/ahuggel/exiv2</A>.
|
||||
|
||||
The %Exiv2 library provides
|
||||
- full read and write access to the Exif and Iptc metadata of an image through
|
||||
%Exiv2 keys and standard C++ iterators
|
||||
@@ -47,6 +48,7 @@
|
||||
- <A HREF="tags-fujifilm.html">Fujifilm MakerNote tags</A>
|
||||
- <A HREF="tags-nikon.html">Nikon MakerNote tags</A>
|
||||
- <A HREF="tags-olympus.html">Olympus MakerNote tags</A>
|
||||
- <A HREF="tags-panasonic.html">Panasonic MakerNote tags</A>
|
||||
- <A HREF="tags-sigma.html">Sigma/Foveon MakerNote tags</A>
|
||||
- <A HREF="tags-sony.html">Sony MakerNote tags</A>
|
||||
- <A HREF="tags-iptc.html">Iptc datasets</A>
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "fujimn.hpp"
|
||||
#include "nikonmn.hpp"
|
||||
#include "olympusmn.hpp"
|
||||
#include "panasonicmn.hpp"
|
||||
#include "sigmamn.hpp"
|
||||
#include "sonymn.hpp"
|
||||
|
||||
|
||||
+28
-28
@@ -66,16 +66,16 @@ namespace Exiv2 {
|
||||
// Olympus Tag Info
|
||||
const TagInfo OlympusMakerNote::tagInfo_[] = {
|
||||
TagInfo(0x0200, "SpecialMode", "Picture taking mode", olympusIfdId, makerTags, unsignedLong, print0x0200),
|
||||
TagInfo(0x0201, "Quality", "Jpeg quality", olympusIfdId, makerTags, unsignedShort, print0x0201),
|
||||
TagInfo(0x0201, "Quality", "Image quality setting", olympusIfdId, makerTags, unsignedShort, print0x0201),
|
||||
TagInfo(0x0202, "Macro", "Macro mode", olympusIfdId, makerTags, unsignedShort, print0x0202),
|
||||
TagInfo(0x0203, "BWMode", "Black and White Mode", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x0204, "DigitalZoom", "Digital Zoom Ratio", olympusIfdId, makerTags, unsignedRational, print0x0204),
|
||||
TagInfo(0x0205, "FocalPlaneDiagonal", "Focal Plane Diagonal", olympusIfdId, makerTags, unsignedRational, printValue),
|
||||
TagInfo(0x0204, "DigitalZoom", "Digital zoom ratio", olympusIfdId, makerTags, unsignedRational, print0x0204),
|
||||
TagInfo(0x0205, "FocalPlaneDiagonal", "Focal plane diagonal", olympusIfdId, makerTags, unsignedRational, printValue),
|
||||
TagInfo(0x0206, "0x0206", "Unknown", olympusIfdId, makerTags, signedShort, printValue),
|
||||
TagInfo(0x0207, "FirmwareVersion", "Software firmware version", olympusIfdId, makerTags, asciiString, printValue),
|
||||
TagInfo(0x0208, "PictureInfo", "ASCII format data such as [PictureInfo]", olympusIfdId, makerTags, asciiString, printValue),
|
||||
TagInfo(0x0209, "CameraID", "CameraID data", olympusIfdId, makerTags, undefined, printValue),
|
||||
TagInfo(0x0300, "PreCaptureFrames", "Pre-capture Frames", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x0300, "PreCaptureFrames", "Pre-capture frames", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x0301, "0x0301", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x0302, "OneTouchWB", "OneTouchWB", olympusIfdId, makerTags, unsignedShort, print0x0302),
|
||||
TagInfo(0x0303, "0x0303", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
@@ -85,29 +85,29 @@ namespace Exiv2 {
|
||||
TagInfo(0x1001, "0x1001", "Unknown", olympusIfdId, makerTags, signedRational, printValue),
|
||||
TagInfo(0x1002, "0x1002", "Unknown", olympusIfdId, makerTags, signedRational, printValue),
|
||||
TagInfo(0x1003, "0x1003", "Unknown", olympusIfdId, makerTags, signedRational, printValue),
|
||||
TagInfo(0x1004, "FlashMode", "Flash Mode", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1005, "FlashDevice", "Flash Device", olympusIfdId, makerTags, unsignedShort, print0x1005),
|
||||
TagInfo(0x1004, "FlashMode", "Flash mode", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1005, "FlashDevice", "Flash device", olympusIfdId, makerTags, unsignedShort, print0x1005),
|
||||
TagInfo(0x1006, "Bracket", "Bracket", olympusIfdId, makerTags, signedRational, printValue),
|
||||
TagInfo(0x1007, "0x1007", "Unknown", olympusIfdId, makerTags, signedShort, printValue),
|
||||
TagInfo(0x1008, "0x1008", "Unknown", olympusIfdId, makerTags, signedShort, printValue),
|
||||
TagInfo(0x1009, "0x1009", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x100a, "0x100a", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x100b, "FocusMode", "Focus Mode", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x100c, "FocusDistance", "Focus Distance", olympusIfdId, makerTags, unsignedRational, printValue),
|
||||
TagInfo(0x100b, "FocusMode", "Focus mode", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x100c, "FocusDistance", "Focus distance", olympusIfdId, makerTags, unsignedRational, printValue),
|
||||
TagInfo(0x100d, "Zoom", "Zoom", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x100e, "MacroFocus", "MacroFocus", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x100f, "SharpnessFactor", "Sharpness Factor", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x100e, "MacroFocus", "Macro focus", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x100f, "SharpnessFactor", "Sharpness factor", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1010, "0x1010", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1011, "ColorMatrix", "Color Matrix", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1012, "BlackLevel", "Black Level", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1011, "ColorMatrix", "Color matrix", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1012, "BlackLevel", "Black level", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1013, "0x1013", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1014, "0x1014", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1015, "WhiteBalance", "White Balance", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1015, "WhiteBalance", "White balance", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1016, "0x1016", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1017, "RedBalance", "Red Balance", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1018, "BlueBalance", "Blue Balance", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1017, "RedBalance", "Red balance", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1018, "BlueBalance", "Blue balance", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1019, "0x1019", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x101a, "SerialNumber", "Serial Number", olympusIfdId, makerTags, asciiString, printValue),
|
||||
TagInfo(0x101a, "SerialNumber", "Serial number", olympusIfdId, makerTags, asciiString, printValue),
|
||||
TagInfo(0x101b, "0x101b", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
|
||||
TagInfo(0x101c, "0x101c", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
|
||||
TagInfo(0x101d, "0x101d", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
|
||||
@@ -116,19 +116,19 @@ namespace Exiv2 {
|
||||
TagInfo(0x1020, "0x1020", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
|
||||
TagInfo(0x1021, "0x1021", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
|
||||
TagInfo(0x1022, "0x1022", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
|
||||
TagInfo(0x1023, "FlashBias", "Flash Bias", olympusIfdId, makerTags, signedRational, printValue),
|
||||
TagInfo(0x1023, "FlashBias", "Flash bias", olympusIfdId, makerTags, signedRational, printValue),
|
||||
TagInfo(0x1024, "0x1024", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1025, "0x1025", "Unknown", olympusIfdId, makerTags, signedRational, printValue),
|
||||
TagInfo(0x1026, "0x1026", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1027, "0x1027", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1028, "0x1028", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1029, "Contrast", "Contrast", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x102a, "SharpnessFactor", "Sharpness Factor", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x102b, "ColorControl", "Color Control", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x102c, "ValidBits", "Valid Bits", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x102d, "Coring Filter", "Coring Filter", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x102e, "ImageWidth", "Image Width", olympusIfdId, makerTags, unsignedLong, printValue),
|
||||
TagInfo(0x102f, "ImageHeight", "Image Height", olympusIfdId, makerTags, unsignedLong, printValue),
|
||||
TagInfo(0x1029, "Contrast", "Contrast setting", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x102a, "SharpnessFactor", "Sharpness factor", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x102b, "ColorControl", "Color control", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x102c, "ValidBits", "Valid bits", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x102d, "Coring Filter", "Coring filter", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x102e, "ImageWidth", "Image width", olympusIfdId, makerTags, unsignedLong, printValue),
|
||||
TagInfo(0x102f, "ImageHeight", "Image height", olympusIfdId, makerTags, unsignedLong, printValue),
|
||||
TagInfo(0x1030, "0x1030", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x1031, "0x1031", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
|
||||
TagInfo(0x1032, "0x1032", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
|
||||
@@ -234,7 +234,7 @@ namespace Exiv2 {
|
||||
} // OlympusMakerNote::print0x0200
|
||||
|
||||
//! Quality
|
||||
const TagDetails Quality[] = {
|
||||
const TagDetails quality[] = {
|
||||
{ 0, "(start)" },
|
||||
{ 1, "Standard Quality (SQ)" },
|
||||
{ 2, "High Quality (HQ)" },
|
||||
@@ -246,11 +246,11 @@ namespace Exiv2 {
|
||||
std::ostream& OlympusMakerNote::print0x0201(std::ostream& os,
|
||||
const Value& value)
|
||||
{
|
||||
return TagTranslator(Quality).print(os, value);
|
||||
return TagTranslator(quality).print(os, value);
|
||||
} // OlympusMakerNote::print0x0201
|
||||
|
||||
//! Macro
|
||||
const TagDetails Macro[] = {
|
||||
const TagDetails macro[] = {
|
||||
{ -1, "(start)" },
|
||||
{ 0, "Off" },
|
||||
{ 1, "On" },
|
||||
@@ -261,7 +261,7 @@ namespace Exiv2 {
|
||||
std::ostream& OlympusMakerNote::print0x0202(std::ostream& os,
|
||||
const Value& value)
|
||||
{
|
||||
return TagTranslator(Macro).print(os, value);
|
||||
return TagTranslator(macro).print(os, value);
|
||||
} // OlympusMakerNote::print0x0202
|
||||
|
||||
std::ostream& OlympusMakerNote::print0x0204(std::ostream& os,
|
||||
|
||||
@@ -0,0 +1,361 @@
|
||||
// ***************************************************************** -*- C++ -*-
|
||||
/*
|
||||
* Copyright (C) 2004, 2005 Andreas Huggel <ahuggel@gmx.net>
|
||||
*
|
||||
* This program is part of the Exiv2 distribution.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
/*
|
||||
File: panasonicmn.cpp
|
||||
Version: $Rev$
|
||||
Author(s): Andreas Huggel (ahu) <ahuggel@gmx.net>
|
||||
History: 11-Jun-04, ahu: created
|
||||
Credits: See header file
|
||||
*/
|
||||
// *****************************************************************************
|
||||
#include "rcsid.hpp"
|
||||
EXIV2_RCSID("@(#) $Id$");
|
||||
|
||||
// *****************************************************************************
|
||||
// included header files
|
||||
#include "types.hpp"
|
||||
#include "panasonicmn.hpp"
|
||||
#include "makernote.hpp"
|
||||
#include "value.hpp"
|
||||
|
||||
// + standard includes
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include <cassert>
|
||||
|
||||
// Define DEBUG_MAKERNOTE to output debug information to std::cerr
|
||||
#undef DEBUG_MAKERNOTE
|
||||
|
||||
// *****************************************************************************
|
||||
// class member definitions
|
||||
namespace Exiv2 {
|
||||
|
||||
//! @cond IGNORE
|
||||
PanasonicMakerNote::RegisterMn::RegisterMn()
|
||||
{
|
||||
MakerNoteFactory::registerMakerNote("Panasonic", "*", createPanasonicMakerNote);
|
||||
MakerNoteFactory::registerMakerNote(
|
||||
panasonicIfdId, MakerNote::AutoPtr(new PanasonicMakerNote));
|
||||
|
||||
ExifTags::registerMakerTagInfo(panasonicIfdId, tagInfo_);
|
||||
}
|
||||
//! @endcond
|
||||
|
||||
// Panasonic MakerNote Tag Info
|
||||
const TagInfo PanasonicMakerNote::tagInfo_[] = {
|
||||
TagInfo(0x0001, "Quality", "Image Quality", panasonicIfdId, makerTags, unsignedShort, print0x0001),
|
||||
TagInfo(0x0002, "FirmwareVersion", "Firmware version", panasonicIfdId, makerTags, undefined, printValue),
|
||||
TagInfo(0x0003, "WhiteBalance", "White balance setting", panasonicIfdId, makerTags, unsignedShort, print0x0003),
|
||||
TagInfo(0x0004, "0x0004", "Unknown", panasonicIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x0007, "FocusMode", "Focus mode", panasonicIfdId, makerTags, unsignedShort, print0x0007),
|
||||
TagInfo(0x000f, "SpotMode", "Spot mode", panasonicIfdId, makerTags, unsignedByte, print0x000f),
|
||||
TagInfo(0x001a, "ImageStabilizer", "Image stabilizer", panasonicIfdId, makerTags, unsignedShort, print0x001a),
|
||||
TagInfo(0x001c, "Macro", "Macro mode", panasonicIfdId, makerTags, unsignedShort, print0x001c),
|
||||
TagInfo(0x001f, "ShootingMode", "Shooting mode", panasonicIfdId, makerTags, unsignedShort, print0x001f),
|
||||
TagInfo(0x0020, "Audio", "Audio", panasonicIfdId, makerTags, unsignedShort, print0x0020),
|
||||
TagInfo(0x0021, "DataDump", "Data dump", panasonicIfdId, makerTags, undefined, printValue),
|
||||
TagInfo(0x0022, "0x0022", "Unknown", panasonicIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x0023, "WhiteBalanceBias", "White balance adjustment", panasonicIfdId, makerTags, unsignedShort, print0x0023),
|
||||
TagInfo(0x0024, "FlashBias", "Flash bias", panasonicIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x0025, "SerialNumber", "Serial number", panasonicIfdId, makerTags, undefined, printValue),
|
||||
TagInfo(0x0026, "0x0026", "Unknown", panasonicIfdId, makerTags, undefined, printValue),
|
||||
TagInfo(0x0027, "0x0027", "Unknown", panasonicIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x0028, "ColorEffect", "Color effect", panasonicIfdId, makerTags, unsignedShort, print0x0028),
|
||||
TagInfo(0x0029, "0x0029", "Unknown", panasonicIfdId, makerTags, unsignedLong, printValue),
|
||||
TagInfo(0x002a, "0x002a", "Unknown", panasonicIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x002b, "0x002b", "Unknown", panasonicIfdId, makerTags, unsignedLong, printValue),
|
||||
TagInfo(0x002c, "Contrast", "Contrast setting", panasonicIfdId, makerTags, unsignedShort, print0x002c),
|
||||
TagInfo(0x002d, "NoiseReduction", "Noise reduction", panasonicIfdId, makerTags, unsignedShort, print0x002d),
|
||||
TagInfo(0x002e, "0x002e", "Unknown", panasonicIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x002f, "0x002f", "Unknown", panasonicIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x0030, "0x0030", "Unknown", panasonicIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x0031, "0x0031", "Unknown", panasonicIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x0032, "0x0032", "Unknown", panasonicIfdId, makerTags, unsignedShort, printValue),
|
||||
TagInfo(0x4449, "0x4449", "Unknown", panasonicIfdId, makerTags, undefined, printValue),
|
||||
// End of list marker
|
||||
TagInfo(0xffff, "(UnknownPanasonicMakerNoteTag)", "Unknown PanasonicMakerNote tag", panasonicIfdId, makerTags, invalidTypeId, printValue)
|
||||
};
|
||||
|
||||
PanasonicMakerNote::PanasonicMakerNote(bool alloc)
|
||||
: IfdMakerNote(panasonicIfdId, alloc, false)
|
||||
{
|
||||
byte buf[] = {
|
||||
'P', 'a', 'n', 'a', 's', 'o', 'n', 'i', 'c', 0x00, 0x00, 0x00
|
||||
};
|
||||
readHeader(buf, 12, byteOrder_);
|
||||
}
|
||||
|
||||
PanasonicMakerNote::PanasonicMakerNote(const PanasonicMakerNote& rhs)
|
||||
: IfdMakerNote(rhs)
|
||||
{
|
||||
}
|
||||
|
||||
int PanasonicMakerNote::readHeader(const byte* buf,
|
||||
long len,
|
||||
ByteOrder byteOrder)
|
||||
{
|
||||
if (len < 12) return 1;
|
||||
|
||||
header_.alloc(12);
|
||||
memcpy(header_.pData_, buf, header_.size_);
|
||||
// Adjust the offset of the IFD for the prefix
|
||||
adjOffset_ = 12;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int PanasonicMakerNote::checkHeader() const
|
||||
{
|
||||
int rc = 0;
|
||||
// Check the Panasonic prefix
|
||||
if ( header_.size_ < 12
|
||||
|| std::string(reinterpret_cast<char*>(header_.pData_), 9)
|
||||
!= std::string("Panasonic", 9)) {
|
||||
rc = 2;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
PanasonicMakerNote::AutoPtr PanasonicMakerNote::create(bool alloc) const
|
||||
{
|
||||
return AutoPtr(create_(alloc));
|
||||
}
|
||||
|
||||
PanasonicMakerNote* PanasonicMakerNote::create_(bool alloc) const
|
||||
{
|
||||
AutoPtr makerNote = AutoPtr(new PanasonicMakerNote(alloc));
|
||||
assert(makerNote.get() != 0);
|
||||
makerNote->readHeader(header_.pData_, header_.size_, byteOrder_);
|
||||
return makerNote.release();
|
||||
}
|
||||
|
||||
PanasonicMakerNote::AutoPtr PanasonicMakerNote::clone() const
|
||||
{
|
||||
return AutoPtr(clone_());
|
||||
}
|
||||
|
||||
PanasonicMakerNote* PanasonicMakerNote::clone_() const
|
||||
{
|
||||
return new PanasonicMakerNote(*this);
|
||||
}
|
||||
|
||||
//! Quality
|
||||
const TagDetails quality[] = {
|
||||
{ 0, "(start)" },
|
||||
{ 2, "High" },
|
||||
{ 3, "Standard" },
|
||||
{ 6, "Very High" },
|
||||
{ 7, "Raw" },
|
||||
{ 0, "(end)" }
|
||||
};
|
||||
|
||||
std::ostream& PanasonicMakerNote::print0x0001(std::ostream& os,
|
||||
const Value& value)
|
||||
{
|
||||
return TagTranslator(quality).print(os, value);
|
||||
} // PanasonicMakerNote::print0x0001
|
||||
|
||||
//! WhiteBalance
|
||||
const TagDetails whiteBalance[] = {
|
||||
{ 0, "(start)" },
|
||||
{ 1, "Auto" },
|
||||
{ 2, "Daylight" },
|
||||
{ 3, "Cloudy" },
|
||||
{ 4, "Halogen" },
|
||||
{ 5, "Manual" },
|
||||
{ 8, "Flash" },
|
||||
{ 10, "Black and White" },
|
||||
{ 0, "(end)" }
|
||||
};
|
||||
|
||||
std::ostream& PanasonicMakerNote::print0x0003(std::ostream& os,
|
||||
const Value& value)
|
||||
{
|
||||
return TagTranslator(whiteBalance).print(os, value);
|
||||
} // PanasonicMakerNote::print0x0003
|
||||
|
||||
//! FocusMode
|
||||
const TagDetails focusMode[] = {
|
||||
{ 0, "(start)" },
|
||||
{ 1, "Auto" },
|
||||
{ 2, "Manual" },
|
||||
{ 0, "(end)" }
|
||||
};
|
||||
|
||||
std::ostream& PanasonicMakerNote::print0x0007(std::ostream& os,
|
||||
const Value& value)
|
||||
{
|
||||
return TagTranslator(focusMode).print(os, value);
|
||||
} // PanasonicMakerNote::print0x0007
|
||||
|
||||
std::ostream& PanasonicMakerNote::print0x000f(std::ostream& os,
|
||||
const Value& value)
|
||||
{
|
||||
if (value.count() < 2 || value.typeId() != unsignedByte) {
|
||||
return os << value;
|
||||
}
|
||||
long l0 = value.toLong(0);
|
||||
if (l0 == 1) os << "On";
|
||||
else if (l0 == 16) os << "Off";
|
||||
else os << value;
|
||||
return os;
|
||||
} // PanasonicMakerNote::print0x000f
|
||||
|
||||
//! ImageStabilizer
|
||||
const TagDetails imageStabilizer[] = {
|
||||
{ 0, "(start)" },
|
||||
{ 2, "On, Mode 1" },
|
||||
{ 3, "Off" },
|
||||
{ 4, "On, Mode 2" },
|
||||
{ 0, "(end)" }
|
||||
};
|
||||
|
||||
std::ostream& PanasonicMakerNote::print0x001a(std::ostream& os,
|
||||
const Value& value)
|
||||
{
|
||||
return TagTranslator(imageStabilizer).print(os, value);
|
||||
} // PanasonicMakerNote::print0x001a
|
||||
|
||||
//! Macro
|
||||
const TagDetails macro[] = {
|
||||
{ 0, "(start)" },
|
||||
{ 1, "On" },
|
||||
{ 2, "Off" },
|
||||
{ 0, "(end)" }
|
||||
};
|
||||
|
||||
std::ostream& PanasonicMakerNote::print0x001c(std::ostream& os,
|
||||
const Value& value)
|
||||
{
|
||||
return TagTranslator(macro).print(os, value);
|
||||
} // PanasonicMakerNote::print0x001c
|
||||
|
||||
//! ShootingMode
|
||||
const TagDetails shootingMode[] = {
|
||||
{ 0, "(start)" },
|
||||
{ 1, "Normal" },
|
||||
{ 2, "Portrait" },
|
||||
{ 3, "Scenery" },
|
||||
{ 4, "Sports" },
|
||||
{ 5, "Night Portrait" },
|
||||
{ 6, "Program" },
|
||||
{ 7, "Aperture Priority" },
|
||||
{ 8, "Shutter Priority" },
|
||||
{ 9, "Macro" },
|
||||
{ 11, "Manual" },
|
||||
{ 13, "Panning" },
|
||||
{ 18, "Fireworks" },
|
||||
{ 19, "Party" },
|
||||
{ 20, "Snow" },
|
||||
{ 21, "Night Scenery" },
|
||||
{ 0, "(end)" }
|
||||
};
|
||||
|
||||
std::ostream& PanasonicMakerNote::print0x001f(std::ostream& os,
|
||||
const Value& value)
|
||||
{
|
||||
return TagTranslator(shootingMode).print(os, value);
|
||||
} // PanasonicMakerNote::print0x001f
|
||||
|
||||
//! Audio
|
||||
const TagDetails Audio[] = {
|
||||
{ 0, "(start)" },
|
||||
{ 1, "Yes" },
|
||||
{ 2, "No" },
|
||||
{ 0, "(end)" }
|
||||
};
|
||||
|
||||
std::ostream& PanasonicMakerNote::print0x0020(std::ostream& os,
|
||||
const Value& value)
|
||||
{
|
||||
return TagTranslator(Audio).print(os, value);
|
||||
} // PanasonicMakerNote::print0x0020
|
||||
|
||||
std::ostream& PanasonicMakerNote::print0x0023(std::ostream& os,
|
||||
const Value& value)
|
||||
{
|
||||
return os << std::fixed << std::setprecision(1)
|
||||
<< value.toLong() / 3 << " EV";
|
||||
} // PanasonicMakerNote::print0x0023
|
||||
|
||||
//! ColorEffect
|
||||
const TagDetails colorEffect[] = {
|
||||
{ 0, "(start)" },
|
||||
{ 1, "Off" },
|
||||
{ 2, "Warm" },
|
||||
{ 3, "Cool" },
|
||||
{ 4, "Black and White" },
|
||||
{ 5, "Sepia" },
|
||||
{ 0, "(end)" }
|
||||
};
|
||||
|
||||
std::ostream& PanasonicMakerNote::print0x0028(std::ostream& os,
|
||||
const Value& value)
|
||||
{
|
||||
return TagTranslator(colorEffect).print(os, value);
|
||||
} // PanasonicMakerNote::print0x0028
|
||||
|
||||
//! Contrast
|
||||
const TagDetails contrast[] = {
|
||||
{ -1, "(start)" },
|
||||
{ 0, "Standard" },
|
||||
{ 1, "Low" },
|
||||
{ 2, "High" },
|
||||
{ 0x100, "Low" },
|
||||
{ 0x110, "Standard" },
|
||||
{ 0x120, "High" },
|
||||
{ -1, "(end)" }
|
||||
};
|
||||
|
||||
std::ostream& PanasonicMakerNote::print0x002c(std::ostream& os,
|
||||
const Value& value)
|
||||
{
|
||||
return TagTranslator(contrast).print(os, value);
|
||||
} // PanasonicMakerNote::print0x002c
|
||||
|
||||
//! NoiseReduction
|
||||
const TagDetails noiseReduction[] = {
|
||||
{ -1, "(start)" },
|
||||
{ 0, "Standard" },
|
||||
{ 1, "Low" },
|
||||
{ 2, "High" },
|
||||
{ -1, "(end)" }
|
||||
};
|
||||
|
||||
std::ostream& PanasonicMakerNote::print0x002d(std::ostream& os,
|
||||
const Value& value)
|
||||
{
|
||||
return TagTranslator(noiseReduction).print(os, value);
|
||||
} // PanasonicMakerNote::print0x002d
|
||||
|
||||
// *****************************************************************************
|
||||
// free functions
|
||||
|
||||
MakerNote::AutoPtr createPanasonicMakerNote(bool alloc,
|
||||
const byte* buf,
|
||||
long len,
|
||||
ByteOrder byteOrder,
|
||||
long offset)
|
||||
{
|
||||
return MakerNote::AutoPtr(new PanasonicMakerNote(alloc));
|
||||
}
|
||||
|
||||
} // namespace Exiv2
|
||||
@@ -0,0 +1,170 @@
|
||||
// ***************************************************************** -*- C++ -*-
|
||||
/*
|
||||
* Copyright (C) 2004, 2005 Andreas Huggel <ahuggel@gmx.net>
|
||||
*
|
||||
* This program is part of the Exiv2 distribution.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
/*!
|
||||
@file panasonicmn.hpp
|
||||
@brief Panasonic MakerNote implemented using the following references:
|
||||
<a href="http://www.compton.nu/panasonic.html">Panasonic MakerNote Information</a> by Tom Hughes,
|
||||
Panasonic.pm of <a href="http://www.sno.phy.queensu.ca/~phil/exiftool/">ExifTool</a> by Phil Harvey,
|
||||
<a href="http://www.ozhiker.com/electronics/pjmt/jpeg_info/panasonic_mn.html">Panasonic Makernote Format Specification</a> by Evan Hunter.
|
||||
@version $Rev$
|
||||
@author Andreas Huggel (ahu)
|
||||
<a href="mailto:ahuggel@gmx.net">ahuggel@gmx.net</a>
|
||||
@date 11-Jun-05, ahu: created
|
||||
*/
|
||||
#ifndef PANASONICMN_HPP_
|
||||
#define PANASONICMN_HPP_
|
||||
|
||||
// *****************************************************************************
|
||||
// included header files
|
||||
#include "types.hpp"
|
||||
#include "makernote.hpp"
|
||||
#include "tags.hpp"
|
||||
|
||||
// + standard includes
|
||||
#include <string>
|
||||
#include <iosfwd>
|
||||
#include <memory>
|
||||
|
||||
// *****************************************************************************
|
||||
// namespace extensions
|
||||
namespace Exiv2 {
|
||||
|
||||
// *****************************************************************************
|
||||
// class declarations
|
||||
class Value;
|
||||
|
||||
// *****************************************************************************
|
||||
// free functions
|
||||
|
||||
/*!
|
||||
@brief Return an auto-pointer to a newly created empty MakerNote
|
||||
initialized to operate in the memory management model indicated.
|
||||
The caller owns this copy and the auto-pointer ensures that it
|
||||
will be deleted.
|
||||
|
||||
@param alloc Memory management model for the new MakerNote. Determines if
|
||||
memory required to store data should be allocated and deallocated
|
||||
(true) or not (false). If false, only pointers to the buffer
|
||||
provided to read() will be kept. See Ifd for more background on
|
||||
this concept.
|
||||
@param buf Pointer to the makernote character buffer (not used).
|
||||
@param len Length of the makernote character buffer (not used).
|
||||
@param byteOrder Byte order in which the Exif data (and possibly the
|
||||
makernote) is encoded (not used).
|
||||
@param offset Offset from the start of the TIFF header of the makernote
|
||||
buffer (not used).
|
||||
|
||||
@return An auto-pointer to a newly created empty MakerNote. The caller
|
||||
owns this copy and the auto-pointer ensures that it will be
|
||||
deleted.
|
||||
*/
|
||||
MakerNote::AutoPtr createPanasonicMakerNote(bool alloc,
|
||||
const byte* buf,
|
||||
long len,
|
||||
ByteOrder byteOrder,
|
||||
long offset);
|
||||
|
||||
// *****************************************************************************
|
||||
// class definitions
|
||||
|
||||
//! MakerNote for Panasonic cameras
|
||||
class PanasonicMakerNote : public IfdMakerNote {
|
||||
public:
|
||||
//! Shortcut for a %PanasonicMakerNote auto pointer.
|
||||
typedef std::auto_ptr<PanasonicMakerNote> AutoPtr;
|
||||
|
||||
//! @name Creators
|
||||
//@{
|
||||
/*!
|
||||
@brief Constructor. Allows to choose whether or not memory management
|
||||
is required for the makernote entries.
|
||||
*/
|
||||
PanasonicMakerNote(bool alloc =true);
|
||||
//! Copy constructor
|
||||
PanasonicMakerNote(const PanasonicMakerNote& rhs);
|
||||
//! Virtual destructor
|
||||
virtual ~PanasonicMakerNote() {}
|
||||
//@}
|
||||
|
||||
//! @name Manipulators
|
||||
//@{
|
||||
int readHeader(const byte* buf,
|
||||
long len,
|
||||
ByteOrder byteOrder);
|
||||
//@}
|
||||
|
||||
//! @name Accessors
|
||||
//@{
|
||||
int checkHeader() const;
|
||||
AutoPtr create(bool alloc =true) const;
|
||||
AutoPtr clone() const;
|
||||
//@}
|
||||
|
||||
//! @name Print functions for Panasonic %MakerNote tags
|
||||
//@{
|
||||
//! Print Quality
|
||||
static std::ostream& print0x0001(std::ostream& os, const Value& value);
|
||||
//! Print WhiteBalance
|
||||
static std::ostream& print0x0003(std::ostream& os, const Value& value);
|
||||
//! Print FocusMode
|
||||
static std::ostream& print0x0007(std::ostream& os, const Value& value);
|
||||
//! Print SpotMode
|
||||
static std::ostream& print0x000f(std::ostream& os, const Value& value);
|
||||
//! Print ImageStabilizer
|
||||
static std::ostream& print0x001a(std::ostream& os, const Value& value);
|
||||
//! Print Macro
|
||||
static std::ostream& print0x001c(std::ostream& os, const Value& value);
|
||||
//! Print ShootingMode
|
||||
static std::ostream& print0x001f(std::ostream& os, const Value& value);
|
||||
//! Print Audio
|
||||
static std::ostream& print0x0020(std::ostream& os, const Value& value);
|
||||
//! Print WhiteBalanceBias
|
||||
static std::ostream& print0x0023(std::ostream& os, const Value& value);
|
||||
//! Print ColorEffect
|
||||
static std::ostream& print0x0028(std::ostream& os, const Value& value);
|
||||
//! Print Contrast
|
||||
static std::ostream& print0x002c(std::ostream& os, const Value& value);
|
||||
//! Print NoiseReduction
|
||||
static std::ostream& print0x002d(std::ostream& os, const Value& value);
|
||||
//@}
|
||||
|
||||
//! @cond IGNORE
|
||||
// Public only so that we can create a static instance
|
||||
struct RegisterMn {
|
||||
RegisterMn();
|
||||
};
|
||||
//! @endcond
|
||||
|
||||
private:
|
||||
//! Internal virtual create function.
|
||||
PanasonicMakerNote* create_(bool alloc =true) const;
|
||||
//! Internal virtual copy constructor.
|
||||
PanasonicMakerNote* clone_() const;
|
||||
|
||||
//! Tag information
|
||||
static const TagInfo tagInfo_[];
|
||||
|
||||
}; // class PanasonicMakerNote
|
||||
|
||||
static PanasonicMakerNote::RegisterMn registerPanasonicMakerNote;
|
||||
} // namespace Exiv2
|
||||
|
||||
#endif // #ifndef PANASONICMN_HPP_
|
||||
@@ -73,6 +73,7 @@ namespace Exiv2 {
|
||||
IfdInfo(nikon2IfdId, "Makernote", "Nikon2"),
|
||||
IfdInfo(nikon3IfdId, "Makernote", "Nikon3"),
|
||||
IfdInfo(olympusIfdId, "Makernote", "Olympus"),
|
||||
IfdInfo(panasonicIfdId, "Makernote", "Panasonic"),
|
||||
IfdInfo(sigmaIfdId, "Makernote", "Sigma"),
|
||||
IfdInfo(sonyIfdId, "Makernote", "Sony"),
|
||||
IfdInfo(lastIfdId, "(Last IFD info)", "(Last IFD item)")
|
||||
|
||||
+1
-1
@@ -90,7 +90,7 @@ namespace Exiv2 {
|
||||
ifd0Id, exifIfdId, gpsIfdId, iopIfdId, ifd1Id,
|
||||
canonIfdId, canonCs1IfdId, canonCs2IfdId, canonCfIfdId,
|
||||
fujiIfdId, nikon1IfdId, nikon2IfdId, nikon3IfdId,
|
||||
olympusIfdId, sigmaIfdId, sonyIfdId,
|
||||
olympusIfdId, panasonicIfdId, sigmaIfdId, sonyIfdId,
|
||||
lastIfdId };
|
||||
|
||||
// *****************************************************************************
|
||||
|
||||
@@ -122,6 +122,30 @@ try {
|
||||
write(file, edMn6);
|
||||
print(file);
|
||||
|
||||
std::cout <<"\n----- One Olympus MakerNote tag\n";
|
||||
Exiv2::ExifData edMn7;
|
||||
edMn7["Exif.Image.Make"] = "OLYMPUS CORPORATION";
|
||||
edMn7["Exif.Image.Model"] = "C8080WZ";
|
||||
edMn7["Exif.Olympus.0x0201"] = uint16_t(1);
|
||||
write(file, edMn7);
|
||||
print(file);
|
||||
|
||||
std::cout <<"\n----- One Panasonic MakerNote tag\n";
|
||||
Exiv2::ExifData edMn8;
|
||||
edMn8["Exif.Image.Make"] = "Panasonic";
|
||||
edMn8["Exif.Image.Model"] = "DMC-FZ5";
|
||||
edMn8["Exif.Panasonic.0x0001"] = uint16_t(1);
|
||||
write(file, edMn8);
|
||||
print(file);
|
||||
|
||||
std::cout <<"\n----- One Sony MakerNote tag\n";
|
||||
Exiv2::ExifData edMn9;
|
||||
edMn9["Exif.Image.Make"] = "SONY";
|
||||
edMn9["Exif.Image.Model"] = "DSC-W7";
|
||||
edMn9["Exif.Sony.0x2000"] = "0 1 2 3 4 5";
|
||||
write(file, edMn9);
|
||||
print(file);
|
||||
|
||||
std::cout <<"\n----- One IOP tag\n";
|
||||
Exiv2::ExifData ed3;
|
||||
ed3["Exif.Iop.InteroperabilityIndex"] = "Test 3";
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
+507
-135
File diff suppressed because one or more lines are too long
@@ -67,6 +67,24 @@ Exif.Image.Model 0x0110 IFD0 Ascii 10
|
||||
Exif.Image.ExifTag 0x8769 IFD0 Long 1 78
|
||||
Exif.Nikon3.Quality 0x0004 Makernote Ascii 28 A boring Nikon3 Quality tag
|
||||
|
||||
----- One Olympus MakerNote tag
|
||||
Exif.Image.Make 0x010f IFD0 Ascii 20 OLYMPUS CORPORATION
|
||||
Exif.Image.Model 0x0110 IFD0 Ascii 8 C8080WZ
|
||||
Exif.Image.ExifTag 0x8769 IFD0 Long 1 78
|
||||
Exif.Olympus.Quality 0x0201 Makernote Short 1 1
|
||||
|
||||
----- One Panasonic MakerNote tag
|
||||
Exif.Image.Make 0x010f IFD0 Ascii 10 Panasonic
|
||||
Exif.Image.Model 0x0110 IFD0 Ascii 8 DMC-FZ5
|
||||
Exif.Image.ExifTag 0x8769 IFD0 Long 1 68
|
||||
Exif.Panasonic.Quality 0x0001 Makernote Short 1 1
|
||||
|
||||
----- One Sony MakerNote tag
|
||||
Exif.Image.Make 0x010f IFD0 Ascii 5 SONY
|
||||
Exif.Image.Model 0x0110 IFD0 Ascii 7 DSC-W7
|
||||
Exif.Image.ExifTag 0x8769 IFD0 Long 1 62
|
||||
Exif.Sony.0x2000 0x2000 Makernote Undefined 6 0 1 2 3 4 5
|
||||
|
||||
----- One IOP tag
|
||||
Exif.Image.ExifTag 0x8769 IFD0 Long 1 26
|
||||
Exif.Photo.InteroperabilityTag 0xa005 Exif Long 1 44
|
||||
|
||||
+12
-3
@@ -21,7 +21,10 @@ images="exiv2-empty.jpg \
|
||||
exiv2-canon-eos-300d.jpg \
|
||||
exiv2-kodak-dc210.jpg \
|
||||
exiv2-fujifilm-finepix-s2pro.jpg \
|
||||
exiv2-sigma-d10.jpg"
|
||||
exiv2-sigma-d10.jpg \
|
||||
exiv2-olympus-c8080wz.jpg \
|
||||
exiv2-panasonic-dmc-fz5.jpg \
|
||||
exiv2-sony-dsc-w7.jpg"
|
||||
|
||||
image2="exiv2-empty.jpg \
|
||||
20031214_000043.jpg \
|
||||
@@ -31,7 +34,10 @@ image2="exiv2-empty.jpg \
|
||||
20030925_201850.jpg \
|
||||
20001026_044550.jpg \
|
||||
20030926_111535.jpg \
|
||||
20040316_075137.jpg"
|
||||
20040316_075137.jpg \
|
||||
20040208_093744.jpg \
|
||||
20050218_212016.jpg \
|
||||
20050527_051833.jpg"
|
||||
|
||||
image3="exiv2-empty.exv \
|
||||
20031214_000043.exv \
|
||||
@@ -41,7 +47,10 @@ image3="exiv2-empty.exv \
|
||||
20030925_201850.exv \
|
||||
20001026_044550.exv \
|
||||
20030926_111535.exv \
|
||||
20040316_075137.exv"
|
||||
20040316_075137.exv \
|
||||
20040208_093744.exv \
|
||||
20050218_212016.exv \
|
||||
20050527_051833.exv"
|
||||
|
||||
for i in $images; do cp -f data/$i tmp/; done
|
||||
echo "Exiv2 test directory -----------------------------------------------------"
|
||||
|
||||
Reference in New Issue
Block a user