live
EBMLNumber.hh
Go to the documentation of this file.
1 /**********
2 This library is free software; you can redistribute it and/or modify it under
3 the terms of the GNU Lesser General Public License as published by the
4 Free Software Foundation; either version 3 of the License, or (at your
5 option) any later version. (See <http://www.gnu.org/copyleft/lesser.html>.)
6 
7 This library is distributed in the hope that it will be useful, but WITHOUT
8 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
9 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
10 more details.
11 
12 You should have received a copy of the GNU Lesser General Public License
13 along with this library; if not, write to the Free Software Foundation, Inc.,
14 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
15 **********/
16 // "liveMedia"
17 // Copyright (c) 1996-2022 Live Networks, Inc. All rights reserved.
18 // EBML numbers (ids and sizes)
19 // C++ header
20 
21 #ifndef _EBML_NUMBER_HH
22 #define _EBML_NUMBER_HH
23 
24 #include "NetCommon.h"
25 #include "Boolean.hh"
26 #include <stdio.h>
27 
28 #define EBML_NUMBER_MAX_LEN 8
29 
30 class EBMLNumber {
31 public:
33  virtual ~EBMLNumber();
34 
35  u_int64_t val() const;
36  char* hexString() const; // used for debugging
37  Boolean operator==(u_int64_t arg2) const { return val() == arg2; }
38  Boolean operator!=(u_int64_t arg2) const { return !(*this == arg2); }
39 
40 public:
42  unsigned len;
44 };
45 
46 // Definitions of some Matroska/EBML IDs (including the ones that we check for):
47 #define MATROSKA_ID_EBML 0x1A45DFA3
48 #define MATROSKA_ID_VOID 0xEC
49 #define MATROSKA_ID_CRC_32 0xBF
50 #define MATROSKA_ID_SEGMENT 0x18538067
51 #define MATROSKA_ID_SEEK_HEAD 0x114D9B74
52 #define MATROSKA_ID_SEEK 0x4DBB
53 #define MATROSKA_ID_SEEK_ID 0x53AB
54 #define MATROSKA_ID_SEEK_POSITION 0x53AC
55 #define MATROSKA_ID_INFO 0x1549A966
56 #define MATROSKA_ID_SEGMENT_UID 0x73A4
57 #define MATROSKA_ID_TIMECODE_SCALE 0x2AD7B1
58 #define MATROSKA_ID_DURATION 0x4489
59 #define MATROSKA_ID_DATE_UTC 0x4461
60 #define MATROSKA_ID_TITLE 0x7BA9
61 #define MATROSKA_ID_MUXING_APP 0x4D80
62 #define MATROSKA_ID_WRITING_APP 0x5741
63 #define MATROSKA_ID_CLUSTER 0x1F43B675
64 #define MATROSKA_ID_TIMECODE 0xE7
65 #define MATROSKA_ID_POSITION 0xA7
66 #define MATROSKA_ID_PREV_SIZE 0xAB
67 #define MATROSKA_ID_SIMPLEBLOCK 0xA3
68 #define MATROSKA_ID_BLOCK_GROUP 0xA0
69 #define MATROSKA_ID_BLOCK 0xA1
70 #define MATROSKA_ID_BLOCK_DURATION 0x9B
71 #define MATROSKA_ID_REFERENCE_BLOCK 0xFB
72 #define MATROSKA_ID_TRACKS 0x1654AE6B
73 #define MATROSKA_ID_TRACK_ENTRY 0xAE
74 #define MATROSKA_ID_TRACK_NUMBER 0xD7
75 #define MATROSKA_ID_TRACK_UID 0x73C5
76 #define MATROSKA_ID_TRACK_TYPE 0x83
77 #define MATROSKA_ID_FLAG_ENABLED 0xB9
78 #define MATROSKA_ID_FLAG_DEFAULT 0x88
79 #define MATROSKA_ID_FLAG_FORCED 0x55AA
80 #define MATROSKA_ID_FLAG_LACING 0x9C
81 #define MATROSKA_ID_MIN_CACHE 0x6DE7
82 #define MATROSKA_ID_DEFAULT_DURATION 0x23E383
83 #define MATROSKA_ID_TRACK_TIMECODE_SCALE 0x23314F
84 #define MATROSKA_ID_MAX_BLOCK_ADDITION_ID 0x55EE
85 #define MATROSKA_ID_NAME 0x536E
86 #define MATROSKA_ID_LANGUAGE 0x22B59C
87 #define MATROSKA_ID_CODEC 0x86
88 #define MATROSKA_ID_CODEC_PRIVATE 0x63A2
89 #define MATROSKA_ID_CODEC_NAME 0x258688
90 #define MATROSKA_ID_CODEC_DECODE_ALL 0xAA
91 #define MATROSKA_ID_VIDEO 0xE0
92 #define MATROSKA_ID_FLAG_INTERLACED 0x9A
93 #define MATROSKA_ID_PIXEL_WIDTH 0xB0
94 #define MATROSKA_ID_PIXEL_HEIGHT 0xBA
95 #define MATROSKA_ID_DISPLAY_WIDTH 0x54B0
96 #define MATROSKA_ID_DISPLAY_HEIGHT 0x54BA
97 #define MATROSKA_ID_DISPLAY_UNIT 0x54B2
98 #define MATROSKA_ID_AUDIO 0xE1
99 #define MATROSKA_ID_SAMPLING_FREQUENCY 0xB5
100 #define MATROSKA_ID_OUTPUT_SAMPLING_FREQUENCY 0x78B5
101 #define MATROSKA_ID_CHANNELS 0x9F
102 #define MATROSKA_ID_BIT_DEPTH 0x6264
103 #define MATROSKA_ID_CONTENT_ENCODINGS 0x6D80
104 #define MATROSKA_ID_CONTENT_ENCODING 0x6240
105 #define MATROSKA_ID_CONTENT_COMPRESSION 0x5034
106 #define MATROSKA_ID_CONTENT_COMP_ALGO 0x4254
107 #define MATROSKA_ID_CONTENT_COMP_SETTINGS 0x4255
108 #define MATROSKA_ID_CONTENT_ENCRYPTION 0x5035
109 #define MATROSKA_ID_ATTACHMENTS 0x1941A469
110 #define MATROSKA_ID_ATTACHED_FILE 0x61A7
111 #define MATROSKA_ID_FILE_DESCRIPTION 0x467E
112 #define MATROSKA_ID_FILE_NAME 0x466E
113 #define MATROSKA_ID_FILE_MIME_TYPE 0x4660
114 #define MATROSKA_ID_FILE_DATA 0x465C
115 #define MATROSKA_ID_FILE_UID 0x46AE
116 #define MATROSKA_ID_CUES 0x1C53BB6B
117 #define MATROSKA_ID_CUE_POINT 0xBB
118 #define MATROSKA_ID_CUE_TIME 0xB3
119 #define MATROSKA_ID_CUE_TRACK_POSITIONS 0xB7
120 #define MATROSKA_ID_CUE_TRACK 0xF7
121 #define MATROSKA_ID_CUE_CLUSTER_POSITION 0xF1
122 #define MATROSKA_ID_CUE_BLOCK_NUMBER 0x5378
123 #define MATROSKA_ID_TAGS 0x1254C367
124 #define MATROSKA_ID_SEEK_PRE_ROLL 0x56BB
125 #define MATROSKA_ID_CODEC_DELAY 0x56AA
126 #define MATROSKA_ID_DISCARD_PADDING 0x75A2
127 #define MATROSKA_ID_COLOR_SPACE 0x2EB524
128 #define MATROSKA_ID_PRIMARIES 0x55BB
129 
130 class EBMLId: public EBMLNumber {
131 public:
133  virtual ~EBMLId();
134 
135  char const* stringName() const; // used for debugging
136 };
137 
138 class EBMLDataSize: public EBMLNumber {
139 public:
141  virtual ~EBMLDataSize();
142 };
143 
144 #endif
const Boolean True
Definition: Boolean.hh:31
unsigned char Boolean
Definition: Boolean.hh:25
#define EBML_NUMBER_MAX_LEN
Definition: EBMLNumber.hh:28
virtual ~EBMLDataSize()
virtual ~EBMLId()
char const * stringName() const
u_int64_t val() const
Boolean stripLeading1
Definition: EBMLNumber.hh:41
unsigned len
Definition: EBMLNumber.hh:42
Boolean operator==(u_int64_t arg2) const
Definition: EBMLNumber.hh:37
EBMLNumber(Boolean stripLeading1=True)
virtual ~EBMLNumber()
char * hexString() const
Boolean operator!=(u_int64_t arg2) const
Definition: EBMLNumber.hh:38
u_int8_t data[EBML_NUMBER_MAX_LEN]
Definition: EBMLNumber.hh:43