Blame include/exiv2/jp2image.hpp

Packit Service 21b5d1
// ***************************************************************** -*- C++ -*-
Packit Service 21b5d1
/*
Packit Service 21b5d1
 * Copyright (C) 2004-2018 Exiv2 authors
Packit Service 21b5d1
 * This program is part of the Exiv2 distribution.
Packit Service 21b5d1
 *
Packit Service 21b5d1
 * This program is free software; you can redistribute it and/or
Packit Service 21b5d1
 * modify it under the terms of the GNU General Public License
Packit Service 21b5d1
 * as published by the Free Software Foundation; either version 2
Packit Service 21b5d1
 * of the License, or (at your option) any later version.
Packit Service 21b5d1
 *
Packit Service 21b5d1
 * This program is distributed in the hope that it will be useful,
Packit Service 21b5d1
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 21b5d1
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 21b5d1
 * GNU General Public License for more details.
Packit Service 21b5d1
 *
Packit Service 21b5d1
 * You should have received a copy of the GNU General Public License
Packit Service 21b5d1
 * along with this program; if not, write to the Free Software
Packit Service 21b5d1
 * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
Packit Service 21b5d1
 */
Packit Service 21b5d1
Packit Service 21b5d1
/*
Packit Service 21b5d1
  File:      jp2image.cpp
Packit Service 21b5d1
*/
Packit Service 21b5d1
Packit Service 21b5d1
#ifndef JP2IMAGE_HPP_
Packit Service 21b5d1
#define JP2IMAGE_HPP_
Packit Service 21b5d1
Packit Service 21b5d1
// *****************************************************************************
Packit Service 21b5d1
#include "exiv2lib_export.h"
Packit Service 21b5d1
Packit Service 21b5d1
// included header files
Packit Service 21b5d1
#include "image.hpp"
Packit Service 21b5d1
Packit Service 21b5d1
// *****************************************************************************
Packit Service 21b5d1
// namespace extensions
Packit Service 21b5d1
namespace Exiv2
Packit Service 21b5d1
{
Packit Service 21b5d1
Packit Service 21b5d1
// *****************************************************************************
Packit Service 21b5d1
// class definitions
Packit Service 21b5d1
Packit Service 21b5d1
    // Add JPEG-2000 to the supported image formats
Packit Service 21b5d1
    namespace ImageType
Packit Service 21b5d1
    {
Packit Service 21b5d1
        const int jp2 = 15;                     //!< JPEG-2000 image type
Packit Service 21b5d1
    }
Packit Service 21b5d1
Packit Service 21b5d1
    /*!
Packit Service 21b5d1
      @brief Class to access JPEG-2000 images.
Packit Service 21b5d1
     */
Packit Service 21b5d1
    class EXIV2API Jp2Image : public Image {
Packit Service 21b5d1
    public:
Packit Service 21b5d1
        //! @name Creators
Packit Service 21b5d1
        //@{
Packit Service 21b5d1
        /*!
Packit Service 21b5d1
          @brief Constructor to open a JPEG-2000 image. Since the
Packit Service 21b5d1
              constructor can not return a result, callers should check the
Packit Service 21b5d1
              good() method after object construction to determine success
Packit Service 21b5d1
              or failure.
Packit Service 21b5d1
          @param io An auto-pointer that owns a BasicIo instance used for
Packit Service 21b5d1
              reading and writing image metadata. \b Important: The constructor
Packit Service 21b5d1
              takes ownership of the passed in BasicIo instance through the
Packit Service 21b5d1
              auto-pointer. Callers should not continue to use the BasicIo
Packit Service 21b5d1
              instance after it is passed to this method.  Use the Image::io()
Packit Service 21b5d1
              method to get a temporary reference.
Packit Service 21b5d1
          @param create Specifies if an existing image should be read (false)
Packit Service 21b5d1
              or if a new file should be created (true).
Packit Service 21b5d1
         */
Packit Service 21b5d1
        Jp2Image(BasicIo::AutoPtr io, bool create);
Packit Service 21b5d1
        //@}
Packit Service 21b5d1
Packit Service 21b5d1
        //! @name Manipulators
Packit Service 21b5d1
        //@{
Packit Service 21b5d1
        void readMetadata();
Packit Service 21b5d1
        void writeMetadata();
Packit Service 21b5d1
Packit Service 21b5d1
        /*!
Packit Service 21b5d1
          @brief Print out the structure of image file.
Packit Service 21b5d1
          @throw Error if reading of the file fails or the image data is
Packit Service 21b5d1
                not valid (does not look like data of the specific image type).
Packit Service 21b5d1
          @warning This function is not thread safe and intended for exiv2 -pS for debugging.
Packit Service 21b5d1
         */
Packit Service 21b5d1
        void printStructure(std::ostream& out, PrintStructureOption option,int depth);
Packit Service 21b5d1
Packit Service 21b5d1
        /*!
Packit Service 21b5d1
          @brief Todo: Not supported yet(?). Calling this function will throw
Packit Service 21b5d1
              an instance of Error(kerInvalidSettingForImage).
Packit Service 21b5d1
         */
Packit Service 21b5d1
        void setComment(const std::string& comment);
Packit Service 21b5d1
        //@}
Packit Service 21b5d1
Packit Service 21b5d1
        //! @name Accessors
Packit Service 21b5d1
        //@{
Packit Service 21b5d1
        std::string mimeType() const;
Packit Service 21b5d1
        //@}
Packit Service 21b5d1
Packit Service 21b5d1
    private:
Packit Service 21b5d1
        //! @name NOT Implemented
Packit Service 21b5d1
        //@{
Packit Service 21b5d1
        //! Copy constructor
Packit Service 21b5d1
        Jp2Image(const Jp2Image& rhs);
Packit Service 21b5d1
        //! Assignment operator
Packit Service 21b5d1
        Jp2Image& operator=(const Jp2Image& rhs);
Packit Service 21b5d1
        /*!
Packit Service 21b5d1
          @brief Provides the main implementation of writeMetadata() by
Packit Service 21b5d1
                writing all buffered metadata to the provided BasicIo.
Packit Service 21b5d1
          @param oIo BasicIo instance to write to (a temporary location).
Packit Service 21b5d1
Packit Service 21b5d1
          @return 4 if opening or writing to the associated BasicIo fails
Packit Service 21b5d1
         */
Packit Service 21b5d1
        void doWriteMetadata(BasicIo& oIo);
Packit Service 21b5d1
Packit Service 21b5d1
        /*!
Packit Service 21b5d1
         @brief reformats the Jp2Header to store iccProfile
Packit Service 21b5d1
         @param oldData DataBufRef to data in the file.
Packit Service 21b5d1
         @param newData DataBufRef with updated data
Packit Service 21b5d1
         */
Packit Service 21b5d1
        void encodeJp2Header(const DataBuf& oldData,DataBuf& newData);
Packit Service 21b5d1
        //@}
Packit Service 21b5d1
Packit Service 21b5d1
    }; // class Jp2Image
Packit Service 21b5d1
Packit Service 21b5d1
// *****************************************************************************
Packit Service 21b5d1
// template, inline and free functions
Packit Service 21b5d1
Packit Service 21b5d1
    // These could be static private functions on Image subclasses but then
Packit Service 21b5d1
    // ImageFactory needs to be made a friend.
Packit Service 21b5d1
    /*!
Packit Service 21b5d1
      @brief Create a new Jp2Image instance and return an auto-pointer to it.
Packit Service 21b5d1
             Caller owns the returned object and the auto-pointer ensures that
Packit Service 21b5d1
             it will be deleted.
Packit Service 21b5d1
     */
Packit Service 21b5d1
    EXIV2API Image::AutoPtr newJp2Instance(BasicIo::AutoPtr io, bool create);
Packit Service 21b5d1
Packit Service 21b5d1
    //! Check if the file iIo is a JPEG-2000 image.
Packit Service 21b5d1
    EXIV2API bool isJp2Type(BasicIo& iIo, bool advance);
Packit Service 21b5d1
Packit Service 21b5d1
}                                       // namespace Exiv2
Packit Service 21b5d1
Packit Service 21b5d1
#endif                                  // #ifndef JP2IMAGE_HPP_