~ubuntu-branches/ubuntu/wily/mkvtoolnix/wily

1.3.20 by Christian Marillat
Import upstream version 6.0.0
1
/*
2
   mkvmerge -- utility for splicing together matroska files
3
   from component media subtypes
4
1.3.35 by Christian Marillat
Import upstream version 7.8.0
5
   Distributed under the GPL v2
1.3.20 by Christian Marillat
Import upstream version 6.0.0
6
   see the file COPYING for details
7
   or visit http://www.gnu.org/copyleft/gpl.html
8
9
   definitions and helper functions for FourCC handling
10
11
   Written by Moritz Bunkus <moritz@bunkus.org>.
12
*/
13
14
#ifndef MTX_COMMON_FOURCC_H
15
#define MTX_COMMON_FOURCC_H
16
17
#include "common/common_pch.h"
18
19
#include <ostream>
20
21
#include "common/mm_io.h"
22
23
class fourcc_c {
24
public:
1.3.35 by Christian Marillat
Import upstream version 7.8.0
25
  enum byte_order_t { big_endian, little_endian };
1.3.20 by Christian Marillat
Import upstream version 6.0.0
26
27
private:
28
  uint32_t m_value;
29
30
public:
31
  fourcc_c();
32
33
  // From an integer value:
34
  fourcc_c(uint32_t value, byte_order_t byte_order = big_endian);
35
36
  // From strings:
37
  fourcc_c(std::string const &value);
38
  fourcc_c(char const *value);
39
40
  // From memory:
41
  fourcc_c(memory_cptr const &mem, byte_order_t byte_order = big_endian);
42
  fourcc_c(unsigned char const *mem, byte_order_t byte_order = big_endian);
43
  fourcc_c(uint32_t const *mem, byte_order_t byte_order = big_endian);
44
45
  // From mm_io_c instances:
46
  fourcc_c(mm_io_cptr const &io, byte_order_t byte_order = big_endian);
47
  fourcc_c(mm_io_c &io, byte_order_t byte_order = big_endian);
48
  fourcc_c(mm_io_c *io, byte_order_t byte_order = big_endian);
49
1.3.21 by Christian Marillat
Import upstream version 6.1.0
50
  fourcc_c &shift_read(mm_io_cptr const &io, byte_order_t byte_order = big_endian);
51
  fourcc_c &shift_read(mm_io_c &io, byte_order_t byte_order = big_endian);
52
  fourcc_c &shift_read(mm_io_c *io, byte_order_t byte_order = big_endian);
53
1.3.20 by Christian Marillat
Import upstream version 6.0.0
54
  size_t write(memory_cptr const &mem, byte_order_t byte_order = big_endian);
55
  size_t write(unsigned char *mem, byte_order_t byte_order = big_endian);
56
  size_t write(mm_io_cptr const &io, byte_order_t byte_order = big_endian);
57
  size_t write(mm_io_c &io, byte_order_t byte_order = big_endian);
58
  size_t write(mm_io_c *io, byte_order_t byte_order = big_endian);
59
60
  fourcc_c &reset();
61
62
  uint32_t value(byte_order_t byte_order = big_endian) const;
63
  std::string str() const;
1.3.35 by Christian Marillat
Import upstream version 7.8.0
64
  std::string description() const;
1.3.20 by Christian Marillat
Import upstream version 6.0.0
65
66
  bool equiv(char const *cmp) const;
1.3.21 by Christian Marillat
Import upstream version 6.1.0
67
  bool equiv(std::vector<std::string> const &cmp) const;
68
  bool human_readable(size_t min_num = 3) const;
1.3.20 by Christian Marillat
Import upstream version 6.0.0
69
70
  explicit operator bool() const;
71
  bool operator ==(fourcc_c const &cmp) const;
72
  bool operator !=(fourcc_c const &cmp) const;
73
74
protected:
75
  // From memory & strings:
76
  static uint32_t read(void const *mem, byte_order_t byte_order);
77
  // From mm_io_c instances:
78
  static uint32_t read(mm_io_c &io, byte_order_t byte_order);
79
};
80
81
inline std::ostream &
82
operator <<(std::ostream &out,
83
            fourcc_c const &fourcc) {
84
  out << fourcc.str();
85
  return out;
86
}
87
88
#endif  // MTX_COMMON_FOURCC_H