[SCM] exiv2 packaging branch, master, updated. debian/0.25-3.1-3734-gdcbc29a

Maximiliano Curia maxy at moszumanska.debian.org
Thu Jul 13 17:36:08 UTC 2017


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=0630d75

The following commit has been merged in the master branch:
commit 0630d75b8562a4bfbfbc12d89dc5173242fdf7f3
Author: Andreas Huggel <ahuggel at gmx.net>
Date:   Mon Mar 8 16:37:57 2004 +0000

    Makernote write support, part 2, added and updated documentation
---
 src/makernote.cpp | 13 ++++++---
 src/makernote.hpp | 86 +++++++++++++++++++++++++++++++++++++++++--------------
 2 files changed, 73 insertions(+), 26 deletions(-)

diff --git a/src/makernote.cpp b/src/makernote.cpp
index d1bc93c..601e31e 100644
--- a/src/makernote.cpp
+++ b/src/makernote.cpp
@@ -20,13 +20,13 @@
  */
 /*
   File:      makernote.cpp
-  Version:   $Name:  $ $Revision: 1.6 $
+  Version:   $Name:  $ $Revision: 1.7 $
   Author(s): Andreas Huggel (ahu) <ahuggel at gmx.net>
   History:   18-Feb-04, ahu: created
  */
 // *****************************************************************************
 #include "rcsid.hpp"
-EXIV2_RCSID("@(#) $Name:  $ $Revision: 1.6 $ $RCSfile: makernote.cpp,v $")
+EXIV2_RCSID("@(#) $Name:  $ $Revision: 1.7 $ $RCSfile: makernote.cpp,v $")
 
 // *****************************************************************************
 // included header files
@@ -119,7 +119,7 @@ namespace Exif {
     {
         int rc = ifd_.read(buf, byteOrder, offset);
         if (rc == 0) {
-            // Todo: Make sure the Next field is 0.
+            // Todo: Make sure the Next field is 0, throw an error if it isn't
             Entries::iterator end = ifd_.end();
             for (Entries::iterator i = ifd_.begin(); i != end; ++i) {
                 i->setMakerNote(this);
@@ -137,9 +137,14 @@ namespace Exif {
         return ifd_.copy(buf, byteOrder, offset);
     }
 
+    Entries::const_iterator IfdMakerNote::findIdx(int idx) const 
+    {
+        return ifd_.findIdx(idx); 
+    }
+
     long IfdMakerNote::size() const
     {
-         return ifd_.size() + ifd_.dataSize();
+        return ifd_.size() + ifd_.dataSize();
     }
 
     MakerNoteFactory* MakerNoteFactory::instance_ = 0;
diff --git a/src/makernote.hpp b/src/makernote.hpp
index 14a0a82..4639cf4 100644
--- a/src/makernote.hpp
+++ b/src/makernote.hpp
@@ -22,7 +22,7 @@
   @file    makernote.hpp
   @brief   Contains the %Exif %MakerNote interface, IFD %MakerNote and a 
            MakerNote factory
-  @version $Name:  $ $Revision: 1.6 $
+  @version $Name:  $ $Revision: 1.7 $
   @author  Andreas Huggel (ahu)
            <a href="mailto:ahuggel at gmx.net">ahuggel at gmx.net</a>
   @date    18-Feb-04, ahu: created
@@ -53,11 +53,35 @@ namespace Exif {
     /*!
       @brief %Exif makernote interface
 
-      Defines methods to
+      %MakerNote is a low-level container for makernote entries. The ExifData
+      container uses makernote entries just like the other %Exif metadata. Thus,
+      clients can access %Exif and makernote tags and their values uniformly
+      through the %ExifData interface. The role of %MakerNote is very similar to
+      that of class Ifd (but makernotes do not need to be in IFD format, see
+      below). In addition, it provides %MakerNote specific tag descriptions and
+      print functions to interpret the makernote values.
+
+      MakerNote holds methods and functionality to
       - read the makernote from a character buffer
       - copy the makernote to a character buffer
-      - add the makernote tags to the %Exif metadata
-      - access Makernote specific tag descriptions and print functions
+      - maintain a list of makernote entries (similar to IFD entries) 
+      - provide makernote specific tag names and keys
+      - interpret (print) the values of makernote tags
+
+      Makernotes can be added to the system by subclassing %MakerNote and
+      registering a prototye of the new subclass together with the camera make
+      and model (which may contain wildcards) in the MakerNoteFactory. Since the
+      majority of makernotes are in IFD format, subclass IfdMakerNote is
+      provided. It contains an IFD container and implements all interface
+      methods related to the makernote entries. <BR>
+
+      To implement a new IFD makernote, all that you need to do is 
+      - subclass %IfdMakerNote, 
+      - implement the clone method, 
+      - add a list of tag descriptions and appropriate print functions and 
+      - register the subclass in the makernote factory. 
+      .
+      See CanonMakerNote for an example.
      */
     class MakerNote {
     public:
@@ -75,7 +99,7 @@ namespace Exif {
 
         //! @name Creators
         //@{
-        //! Constructor. Takes an optional MakerNote info tag array.
+        //! Constructor. Takes an optional makernote info tag array.
         MakerNote(const MnTagInfo* mnTagInfo =0) : mnTagInfo_(mnTagInfo) {}
         //! Virtual destructor.
         virtual ~MakerNote() {}
@@ -84,7 +108,7 @@ namespace Exif {
         //! @name Manipulators
         //@{
         /*!
-          @brief Read the MakerNote from character buffer buf of length len at
+          @brief Read the makernote from character buffer buf of length len at
                  position offset (from the start of the TIFF header) and encoded
                  in byte order byteOrder.
          */
@@ -99,9 +123,24 @@ namespace Exif {
                  Return the number of bytes written.
          */
         virtual long copy(char* buf, ByteOrder byteOrder, long offset) =0;
-        //! The first %MakerNote entry
+        /*!
+          @brief Reset the makernote. Delete all makernote entries from the
+                 class and put the object in a state where it can accept
+                 completely new entries.
+         */
+        virtual void clear() =0;
+        /*!
+          @brief Add the entry to the makernote. No duplicate-check is performed,
+                 i.e., it is possible to add multiple entries with the same tag.
+                 The memory allocation mode of the entry to be added must be true
+                 and the IFD id of the entry must be set to 'makerIfd'.
+         */
+        virtual void add(const Entry& entry) =0;
+        //! Sort the makernote entries by tag
+        virtual void sortByTag() =0;
+        //! The first makernote entry
         virtual Entries::iterator begin() =0;
-        //! End of the %MakerNote entries
+        //! End of the makernote entries
         virtual Entries::iterator end() =0;
         //@}
 
@@ -113,14 +152,14 @@ namespace Exif {
         uint16 decomposeKey(const std::string& key) const;
         /*!
           @brief Return the name of a makernote tag. The default implementation
-                 looks up the %MakerNote info tag array if one is set, else
+                 looks up the makernote info tag array if one is set, else
                  it translates the tag to a string with the hexadecimal value of
                  the tag.
          */
         virtual std::string tagName(uint16 tag) const;
         /*!
           @brief Return the tag associated with a makernote tag name. The
-                 default implementation looks up the %MakerNote info tag array
+                 default implementation looks up the makernote info tag array
                  if one is set, else it expects tag names in the form \"0x01ff\"
                  and converts them to unsigned integer.
          */
@@ -130,9 +169,9 @@ namespace Exif {
                  The caller owns this copy and is responsible to delete it!
          */
         virtual MakerNote* clone() const =0;
-        //! The first %MakerNote entry
+        //! The first makernote entry
         virtual Entries::const_iterator begin() const =0;
-        //! End of the %MakerNote entries
+        //! End of the makernote entries
         virtual Entries::const_iterator end() const =0;
         //! Find an entry by idx, return a const iterator to the record
         virtual Entries::const_iterator findIdx(int idx) const =0;
@@ -147,13 +186,13 @@ namespace Exif {
         //@}
 
     protected:
-        //! Pointer to an array of MakerNote tag infos
+        //! Pointer to an array of makernote tag infos
         const MnTagInfo* mnTagInfo_;   
 
     }; // class MakerNote
 
     /*!
-      @brief Interface for MakerNotes in IFD format
+      @brief Interface for MakerNotes in IFD format. See MakerNote.
 
       Todo: Allow for a 'prefix' before the IFD (OLYMP, etc)
             Cater for offsets from start of TIFF header as well as relative to Mn
@@ -162,7 +201,7 @@ namespace Exif {
     public:
         //! @name Creators
         //@{        
-        //! Constructor. Takes an optional MakerNote info tag array.
+        //! Constructor. Takes an optional makernote info tag array.
         IfdMakerNote(const MakerNote::MnTagInfo* mnTagInfo =0)
             : MakerNote(mnTagInfo), ifd_(makerIfd, 0, false) {}
         //! Virtual destructor
@@ -173,6 +212,9 @@ namespace Exif {
         //@{
         int read(const char* buf, long len, ByteOrder byteOrder, long offset);
         long copy(char* buf, ByteOrder byteOrder, long offset);
+        void clear() { ifd_.clear(); }
+        void add(const Entry& entry) { ifd_.add(entry); }
+        void sortByTag() { ifd_.sortByTag(); }
         Entries::iterator begin() { return ifd_.begin(); }
         Entries::iterator end() { return ifd_.end(); }
         //@}
@@ -181,8 +223,7 @@ namespace Exif {
         //@{
         Entries::const_iterator begin() const { return ifd_.begin(); }
         Entries::const_iterator end() const { return ifd_.end(); }
-        Entries::const_iterator findIdx(int idx) const 
-            { return ifd_.findIdx(idx); }
+        Entries::const_iterator findIdx(int idx) const;
         long size() const;
         virtual MakerNote* clone() const =0;
         virtual std::string sectionName(uint16 tag) const =0; 
@@ -197,16 +238,17 @@ namespace Exif {
     }; // class IfdMakerNote
 
     /*!
-      @brief %MakerNote factory.
+      @brief Factory for MakerNote objects.
 
-      Creates an instance of the %MakerNote for one camera model. The factory is
-      implemented as a singleton, which can be accessed only through the static
-      member function instance().
+      Maintains an associative list (tree) of camera makes/models and
+      corresponding %MakerNote prototypes. Creates an instance of the %MakerNote
+      for one camera make/model. The factory is implemented as a singleton,
+      which can be accessed only through the static member function instance().
     */
     class MakerNoteFactory {
     public:
         /*!
-          @brief Access the makerNote factory. Clients access the task factory
+          @brief Access the MakerNote factory. Clients access the task factory
                  exclusively through this method.
         */
         static MakerNoteFactory& instance();

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list