Exiv2
matroskavideo.hpp
Go to the documentation of this file.
1 // ***************************************************************** -*- C++ -*-
2 /*
3  * Copyright (C) 2004-2018 Exiv2 authors
4  * This program is part of the Exiv2 distribution.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
19  */
27 #ifndef MATROSKAVIDEO_HPP_
28 #define MATROSKAVIDEO_HPP_
29 
30 // *****************************************************************************
31 #include "exiv2lib_export.h"
32 
33 // included header files
34 #include "image.hpp"
35 
36 // *****************************************************************************
37 // namespace extensions
38 namespace Exiv2 {
39 
40 // *****************************************************************************
41 // class definitions
42 
43  // Add MKV to the supported image formats
44  namespace ImageType {
45  const int mkv = 21;
46  }
47 
48  // Todo: Should be hidden
52  struct EXIV2LIB_DEPRECATED MatroskaTags {
53  uint64_t val_;
54  const char* label_;
55 
57  bool operator==(uint64_t key) const { return val_ == key; }
58  }; // struct TagDetails
59 
63  class EXIV2LIB_DEPRECATED_EXPORT MatroskaVideo : public Image {
64  public:
66 
67 
80 
82 
83  void readMetadata();
84  void writeMetadata();
86 
88 
91 
92  protected:
102  uint32_t findBlockSize(byte b);
107  void decodeBlock();
114  void contentManagement(const MatroskaTags* mt, const byte* buf, long size);
119  void aspectRatio();
120 
121  private:
123 
124  MatroskaVideo(const MatroskaVideo& rhs);
127  MatroskaVideo& operator=(const MatroskaVideo& rhs);
129 
130  private:
132  bool continueTraversing_;
134  uint64_t height_, width_;
135 
136  }; // class MatroskaVideo
137 
138 // *****************************************************************************
139 // template, inline and free functions
140 
141  // These could be static private functions on Image subclasses but then
142  // ImageFactory needs to be made a friend.
148  EXIV2LIB_DEPRECATED_EXPORT Image::AutoPtr newMkvInstance(BasicIo::AutoPtr io, bool create);
149 
151  EXIV2LIB_DEPRECATED_EXPORT bool isMkvType(BasicIo& iIo, bool advance);
152 
153 } // namespace Exiv2
154 
155 #endif // #ifndef MATROSKAVIDEO_HPP_
Exiv2::newMkvInstance
EXIV2LIB_DEPRECATED_EXPORT Image::AutoPtr newMkvInstance(BasicIo::AutoPtr io, bool create)
Create a new MatroskaVideo instance and return an auto-pointer to it. Caller owns the returned object...
Exiv2::MatroskaTags::label_
const char * label_
Translation of the tag value.
Definition: matroskavideo.hpp:54
Exiv2::MatroskaVideo
Class to access Matroska video files.
Definition: matroskavideo.hpp:63
Exiv2::MatroskaTags::val_
uint64_t val_
Tag value.
Definition: matroskavideo.hpp:53
matroskavideo.hpp
An Image subclass to support Matroska video files.
Exiv2::MatroskaVideo::MatroskaVideo
MatroskaVideo(BasicIo::AutoPtr io)
Constructor for a Matroska video. Since the constructor can not return a result, callers should check...
Exiv2::MatroskaVideo::contentManagement
void contentManagement(const MatroskaTags *mt, const byte *buf, long size)
Interpret tag information, and save it in the respective XMP container.
Exiv2::strError
EXIV2API std::string strError()
Return a system error message and the error code (errno). See strerror(3).
Definition: futils.cpp:356
Exiv2::MatroskaVideo::mimeType
std::string mimeType() const
Return the MIME type of the image.
Exiv2::MatroskaVideo::findBlockSize
uint32_t findBlockSize(byte b)
Function used to calulate the size of a block. This information is only stored in one byte....
Exiv2::isMkvType
EXIV2LIB_DEPRECATED_EXPORT bool isMkvType(BasicIo &iIo, bool advance)
Check if the file iIo is a Matroska Video.
Exiv2::MatroskaVideo::aspectRatio
void aspectRatio()
Calculates Aspect Ratio of a video, and stores it in the respective XMP container.
Exiv2::find
const T * find(T(&src)[N], const K &key)
Find an element that matches key in the array src.
Definition: types.hpp:508
Exiv2::ImageType::mkv
const int mkv
Treating mkv as an image type>
Definition: matroskavideo.hpp:45
Exiv2::MatroskaVideo::readMetadata
void readMetadata()
Read all metadata supported by a specific image format from the image. Before this method is called,...
Exiv2
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
Exiv2::getFloat
EXIV2API float getFloat(const byte *buf, ByteOrder byteOrder)
Read a 4 byte single precision floating point value (IEEE 754 binary32) from the data buffer.
Definition: types.cpp:347
image.hpp
EXV_WARNING
#define EXV_WARNING
Shorthand for a temp warning log message object and return its ostringstream.
Definition: error.hpp:148
Exiv2::MatroskaTags::operator==
bool operator==(uint64_t key) const
Comparison operator for use with the find template.
Definition: matroskavideo.hpp:57
Exiv2::MatroskaVideo::writeMetadata
void writeMetadata()
Write metadata back to the image.
Exiv2::Internal
Contains internal objects which are not published and are not part of the libexiv2 API.
Definition: slice.hpp:40
Exiv2::Image::AutoPtr
std::auto_ptr< Image > AutoPtr
Image auto_ptr type.
Definition: image.hpp:84
tags_int.hpp
Internal Exif tag and type information.
Exiv2::BasicIo::AutoPtr
std::auto_ptr< BasicIo > AutoPtr
BasicIo auto_ptr type.
Definition: basicio.hpp:58
Exiv2::Error
BasicError< char > Error
Error class used for exceptions (std::string based)
Definition: error.hpp:323
tags.hpp
Exif tag and type information.
Exiv2::string
@ string
IPTC string type.
Definition: types.hpp:147
Exiv2::getDouble
EXIV2API double getDouble(const byte *buf, ByteOrder byteOrder)
Read an 8 byte double precision floating point value (IEEE 754 binary64) from the data buffer.
Definition: types.cpp:361
Exiv2::MatroskaTags
Helper structure for the Matroska tags lookup table.
Definition: matroskavideo.hpp:52
Exiv2::BasicIo
An interface for simple binary IO.
Definition: basicio.hpp:55
Exiv2::Image
Abstract base class defining the interface for an image. This is the top-level interface to the Exiv2...
Definition: image.hpp:81
Exiv2::MatroskaVideo::decodeBlock
void decodeBlock()
Check for a valid tag and decode the block at the current IO position. Calls contentManagement() or s...
futils.hpp
Basic file utility functions required by Exiv2.
error.hpp
Error class for exceptions, log message class.