gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r1232 - Extractor/src/plugins/exiv2


From: grothoff
Subject: [GNUnet-SVN] r1232 - Extractor/src/plugins/exiv2
Date: Sun, 3 Jul 2005 13:20:30 -0700 (PDT)

Author: grothoff
Date: 2005-07-03 13:20:25 -0700 (Sun, 03 Jul 2005)
New Revision: 1232

Added:
   Extractor/src/plugins/exiv2/Makefile.am
   Extractor/src/plugins/exiv2/Todo
   Extractor/src/plugins/exiv2/metacopy.cpp
   Extractor/src/plugins/exiv2/metacopy.hpp
   Extractor/src/plugins/exiv2/metacopy.lo
Log:
update

Added: Extractor/src/plugins/exiv2/Makefile.am
===================================================================
--- Extractor/src/plugins/exiv2/Makefile.am     2005-07-03 20:18:18 UTC (rev 
1231)
+++ Extractor/src/plugins/exiv2/Makefile.am     2005-07-03 20:20:25 UTC (rev 
1232)
@@ -0,0 +1,74 @@
+INCLUDES = -I$(top_srcdir)/src/include
+
+# install plugins under:
+plugindir = $(libdir)/libextractor
+
+SUBDIRS = .
+
+LIBS = \
+ @LTLIBINTL@ @LIBS@
+
+plugin_LTLIBRARIES = \
+ libextractor_exiv2.la
+
+PLUGINFLAGS = -export-dynamic -avoid-version -module -no-undefined
+
+libextractor_exiv2_la_LINK = \
+  /bin/sh ../../../libtool --mode=link $(CXXLD) -o libextractor_exiv2.la
+libextractor_exiv2_la_LDFLAGS = \
+  $(PLUGINFLAGS) $(XTRA_CPPLIBS)
+libextractor_exiv2_la_LIBADD = \
+  $(top_builddir)/src/main/libextractor.la
+
+libextractor_exiv2_la_SOURCES = \
+exiv2extractor.cc \
+basicio.cpp \
+basicio.hpp \
+canonmn.cpp \
+canonmn.hpp \
+datasets.cpp \
+datasets.hpp \
+doxygen.hpp \
+error.cpp \
+error.hpp \
+exif.cpp \
+exif.hpp \
+fujimn.cpp \
+fujimn.hpp \
+futils.cpp \
+futils.hpp \
+ifd.cpp \
+ifd.hpp \
+image.cpp \
+image.hpp \
+iptc.cpp \
+iptc.hpp \
+jpgimage.cpp \
+jpgimage.hpp \
+makernote.cpp \
+makernote.hpp \
+metacopy.cpp \
+metacopy.hpp \
+metadatum.cpp \
+metadatum.hpp \
+mn.hpp \
+nikonmn.cpp \
+nikonmn.hpp \
+olympusmn.cpp \
+olympusmn.hpp \
+panasonicmn.cpp \
+panasonicmn.hpp \
+rcsid.hpp \
+sigmamn.cpp \
+sigmamn.hpp \
+sonymn.cpp \
+sonymn.hpp \
+tags.cpp \
+tags.hpp \
+types.cpp \
+types.hpp \
+utils.cpp \
+utils.hpp \
+value.cpp \
+value.hpp 
+

Added: Extractor/src/plugins/exiv2/Todo
===================================================================
--- Extractor/src/plugins/exiv2/Todo    2005-07-03 20:18:18 UTC (rev 1231)
+++ Extractor/src/plugins/exiv2/Todo    2005-07-03 20:20:25 UTC (rev 1232)
@@ -0,0 +1,40 @@
+Library Features:
++ rename erase* methods that access a file to remove* 
++ add ExifData::erase(tag)
++ Thumbnail support: set (re-calculate)
++ operator>> for Value, since we already have read()?
++ Use size_t where appropriate
++ Support TIFF type ids
++ Support for broken IFD makernotes (which have corrupted IFD offsets)
++ Support non-intrusive deletion of entries from an IFD.
++ Write an example using low level IFD classes to print summary Exif info
++ Extended JPEG support (actual resolution of the image)
++ Implement proper error handling
++ Complete support to create Exif data from scratch:
+  + set thumbnail, write thumbnail tags
++ Make it possible to force write from metadata (just an optional arg to 
write?)
+
++ Make Image::doWriteMetadata do its work in a single pass
+
++ Revise Image and IptcData+ExifData API (aka turn it inside out)
++ Add PSD images support (and TIFF, NEF, CRW...)
++ Add support for XML metadata files
+
+Exiv2 functionality
++ Add offset to value for hexdump (requires metadata to have an offset)
+
+Bugs:
++ Handle all Todo's
++ Cleanup and fix implementation of JpegImage (must be able to read any 
APP0/1),
+  should be able to insert exv into extracted thumbs (usually w/o APP0/1)
++ Review Image interface. Is it really necessary to have so many functions 
there?
++ Review the handling of type ids? What if we encounter type 27 in an IFD?
++ Rational and other output operators (see Josuttis, p653)
++ Through ExifData::iterator and Metadatum::operator= it is possible to have 
+  multiple copies of one metadatum in the metadata container
++ Checks and non-intrusive updates must be atomic, i.e., not change anything
+  if the metadata is not compatible
++ Review: Exception safety
++ Review: Ifd1 only at Thumbnail, do we really need Thumbnail::update() ?
++ Is the hexdump output of exiv2 byte-swapped??
++ Should JpegImage differ between NO Jpeg comment and an empty Jpeg comment??

Added: Extractor/src/plugins/exiv2/metacopy.cpp
===================================================================
--- Extractor/src/plugins/exiv2/metacopy.cpp    2005-07-03 20:18:18 UTC (rev 
1231)
+++ Extractor/src/plugins/exiv2/metacopy.cpp    2005-07-03 20:20:25 UTC (rev 
1232)
@@ -0,0 +1,184 @@
+// ***************************************************************** -*- C++ 
-*-
+/*
+ * Copyright (C) 2004, 2005 Andreas Huggel <address@hidden>
+ * 
+ * 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.
+ */
+/*
+  Abstract : Tester application for image file handling
+
+  File     : metacopy.cpp
+  Version  : $Rev: 560 $
+  Author(s): Brad Schick (brad) <address@hidden>
+  History  : 13-Jul-04, brad: created
+ */
+// 
*****************************************************************************
+// included header files
+#include "image.hpp"
+#include "iptc.hpp"
+#include "exif.hpp"
+#include "types.hpp"
+#include "metacopy.hpp"
+#include <iostream>
+#include <fstream>
+#include <cassert>
+
+#if 0
+// 
*****************************************************************************
+// Main
+int main(int argc, char* const argv[])
+{
+try {
+    // Handle command line arguments
+    Params params;
+    if (params.getopt(argc, argv)) {
+        params.usage();
+        return 1;
+    }
+    if (params.help_) {
+        params.help();
+        return 2;
+    }
+
+    // Use MemIo to increase test coverage.
+    Exiv2::BasicIo::AutoPtr fileIo(new Exiv2::FileIo(params.read_));
+    Exiv2::BasicIo::AutoPtr memIo(new Exiv2::MemIo);
+    memIo->transfer(*fileIo);
+    
+    Exiv2::Image::AutoPtr readImg = Exiv2::ImageFactory::open(memIo);
+    assert(readImg.get() != 0);
+    readImg->readMetadata();
+
+    Exiv2::Image::AutoPtr writeImg = Exiv2::ImageFactory::open(params.write_);
+    assert(writeImg.get() != 0);
+    if (params.preserve_) writeImg->readMetadata();
+    if (params.iptc_) {
+        writeImg->setIptcData(readImg->iptcData());
+    }
+    if (params.exif_) {
+        writeImg->setExifData(readImg->exifData());
+    }
+    if (params.comment_) {
+        writeImg->setComment(readImg->comment());
+    }
+
+    try {
+        writeImg->writeMetadata();
+    }
+    catch (const Exiv2::AnyError&) {
+        std::cerr << params.progname() << 
+            ": Could not write metadata to (" << params.write_ << ")\n";
+        return 8;
+    }
+
+    return 0;
+}
+catch (Exiv2::AnyError& e) {
+    std::cerr << "Caught Exiv2 exception '" << e << "'\n";
+    return 10;
+}
+}
+#endif
+
+int Params::option(int opt, const std::string& optarg, int optopt)
+{
+    int rc = 0;
+    switch (opt) {
+    case 'h': help_ = true; break;
+    case 'i': iptc_ = true; break;
+    case 'e': exif_ = true; break;
+    case 'c': comment_ = true; break;
+    case 'p': preserve_ = true; break;
+    case 'a': 
+        iptc_ =true; 
+        exif_ =true; 
+        comment_ =true; 
+        break;
+    case ':':
+        std::cerr << progname() << ": Option -" << static_cast<char>(optopt) 
+                  << " requires an argument\n";
+        rc = 1;
+        break;
+    case '?':
+        std::cerr << progname() << ": Unrecognized option -" 
+                  << static_cast<char>(optopt) << "\n";
+        rc = 1;
+        break;
+    default:
+        std::cerr << progname() 
+                  << ": getopt returned unexpected character code " 
+                  << std::hex << opt << "\n";
+        rc = 1;
+        break;
+    }
+
+    return rc;
+} 
+
+int Params::nonoption(const std::string& argv)
+{
+    if (!write_.empty()) {
+        std::cerr << progname() << ": Unexpected extra argument (" << argv << 
")\n";
+        return 1;
+    }
+    if (first_) read_ = argv;
+    else write_ = argv;
+    first_ = false;
+    return 0;
+} 
+
+int Params::getopt(int argc, char* const argv[])
+{ 
+    int rc = Util::Getopt::getopt(argc, argv, optstring_);
+    // Further consistency checks
+    if (help_==false) {
+        if (rc==0 && read_.empty() ) {
+            std::cerr << progname() << ": Read and write files must be 
specified\n";
+            rc = 1;
+        }
+        if (rc==0 && write_.empty() ) {
+            std::cerr << progname() << ": Write file must be specified\n";
+            rc = 1;
+        }
+        if (preserve_ && iptc_ && exif_ && comment_ ) {
+            std::cerr << progname() << ": Option -p has no effect when all 
metadata types are specified.\n";
+            rc = 1;
+        }
+    }
+    return rc;
+} // Params::getopt
+
+
+void Params::usage(std::ostream& os) const
+{
+    os << "\nReads and writes raw metadata. Use -h option for help.\n"
+       << "Usage: " << progname() 
+       << " [-iecaph] readfile writefile\n";
+}
+
+void Params::help(std::ostream& os) const
+{
+    usage(os);
+    os << "\nOptions:\n"
+       << "   -i      Read Iptc data from readfile and write to writefile.\n"
+       << "   -e      Read Exif data from readfile and write to writefile.\n"
+       << "   -c      Read Jpeg comment from readfile and write to 
writefile.\n"
+       << "   -a      Read all metadata from readfile and write to 
writefile.\n"
+       << "   -p      Preserve existing metadata in writefile if not 
replaced.\n"
+       << "   -h      Display this help and exit.\n\n";
+} // Params::help
+

Added: Extractor/src/plugins/exiv2/metacopy.hpp
===================================================================
--- Extractor/src/plugins/exiv2/metacopy.hpp    2005-07-03 20:18:18 UTC (rev 
1231)
+++ Extractor/src/plugins/exiv2/metacopy.hpp    2005-07-03 20:20:25 UTC (rev 
1232)
@@ -0,0 +1,86 @@
+// ***************************************************************** -*- C++ 
-*-
+/*
+ * Copyright (C) 2004, 2005 Andreas Huggel <address@hidden>
+ * 
+ * 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    metacopy.hpp
+  @brief   Defines class Params, used for the command line handling
+  @version $Rev: 538 $
+  @author  Brad Schick (brad) <address@hidden>
+  @date    13-Jul-04, brad: created
+ */
+#ifndef METACOPY_HPP_
+#define METACOPY_HPP_
+
+#include "utils.hpp"
+
+class Params : public Util::Getopt {
+private:
+    std::string optstring_;
+    bool first_;
+
+public:
+    bool help_;                    //!< Help option flag.
+    bool iptc_;                    //!< Iptc option flag.
+    bool exif_;                    //!< Exif option flag.
+    bool comment_;                 //!< JPEG comment option flag.
+    bool preserve_;                //!< Preserve existing metadata option flag.
+    std::string read_;             //!< Source file
+    std::string write_;            //!< Destination file
+
+public:
+    /*!
+      @brief Default constructor. Note that optstring_ is initialized here.
+     */
+    Params() : optstring_(":iecaph"),
+               first_(true),
+               help_(false), 
+               iptc_(false),
+               exif_(false),
+               comment_(false),
+               preserve_(false)
+        {}
+
+    /*!
+      @brief Call Getopt::getopt() with optstring, to initiate command line
+             argument parsing, perform consistency checks after all command 
line
+             arguments are parsed.
+
+      @param argc Argument count as passed to main() on program invocation.
+      @param argv Argument array as passed to main() on program invocation.
+
+      @return 0 if successful, >0 in case of errors.
+     */
+    int getopt(int argc, char* const argv[]);
+
+    //! Handle options and their arguments.
+    virtual int option(int opt, const std::string& optarg, int optopt);
+
+    //! Handle non-option parameters.
+    virtual int nonoption(const std::string& argv);
+
+    //! Print a minimal usage note to an output stream.
+    void usage(std::ostream& os =std::cout) const;
+
+    //! Print further usage explanations to an output stream.
+    void help(std::ostream& os =std::cout) const;
+
+}; // class Params
+
+#endif // METACOPY_HPP_

Added: Extractor/src/plugins/exiv2/metacopy.lo
===================================================================
--- Extractor/src/plugins/exiv2/metacopy.lo     2005-07-03 20:18:18 UTC (rev 
1231)
+++ Extractor/src/plugins/exiv2/metacopy.lo     2005-07-03 20:20:25 UTC (rev 
1232)
@@ -0,0 +1,12 @@
+# metacopy.lo - a libtool object file
+# Generated by ltmain.sh - GNU libtool 1.5.6 (1.1220.2.95 2004/04/11 05:50:42) 
Debian: 224 $
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object='.libs/metacopy.o'
+
+# Name of the non-PIC object.
+non_pic_object=none
+





reply via email to

[Prev in Thread] Current Thread [Next in Thread]