eo301@0
|
1 //
|
eo301@0
|
2 // IM_AF Encoder.h
|
eo301@0
|
3 // IM_AM Encoder
|
eo301@0
|
4 //
|
eo301@0
|
5 // Created by eugenio oƱate hospital on 14/06/12.
|
eo301@0
|
6 // Copyright (c) 2012 SAE. All rights reserved.
|
eo301@0
|
7 //
|
eo301@0
|
8
|
eo301@0
|
9 #ifndef IM_AM_Encoder_IM_AF_Encoder_h
|
eo301@0
|
10 #define IM_AM_Encoder_IM_AF_Encoder_h
|
eo301@0
|
11
|
eo301@0
|
12 /* for FILE typedef, */
|
eo301@0
|
13 #include <stdio.h>
|
eo301@0
|
14
|
eo301@2
|
15 #define maxtracks 8
|
eo301@1
|
16 #define maxpreset 10
|
eo301@1
|
17 #define maxrules 10
|
eo301@1
|
18
|
eo301@0
|
19 typedef long long u64;
|
eo301@0
|
20 typedef unsigned int u32;
|
eo301@0
|
21 typedef unsigned short u16;
|
eo301@0
|
22
|
eo301@2
|
23 typedef struct nametrack { // Stores the different titles of the tracks
|
eo301@0
|
24 char title[20];
|
eo301@1
|
25 }nametrack[maxtracks];
|
eo301@0
|
26
|
eo301@1
|
27 typedef struct FileTypeBox
|
eo301@0
|
28 {
|
eo301@1
|
29 u32 size;
|
eo301@1
|
30 u32 type; // ftyp
|
eo301@0
|
31 u32 major_brand; // brand identifier
|
eo301@0
|
32 u32 minor_version; // informative integer for the mirror version
|
eo301@2
|
33 u32 compatible_brands[2]; //list of brands
|
eo301@0
|
34 }FileTypeBox;
|
eo301@0
|
35
|
eo301@0
|
36 typedef struct MoiveBox //extends Box('moov')
|
eo301@0
|
37 {
|
eo301@1
|
38 u32 size;
|
eo301@1
|
39 u32 type; // moov
|
eo301@1
|
40
|
eo301@1
|
41 struct MovieHeaderBox
|
eo301@0
|
42 {
|
eo301@1
|
43 u32 size;
|
eo301@1
|
44 u32 type; // mvhd
|
eo301@1
|
45 u32 version; // version + flag
|
eo301@0
|
46 u32 creation_time;
|
eo301@0
|
47 u32 modification_time;
|
eo301@1
|
48 u32 timescale; // specifies the time-scale
|
eo301@0
|
49 u32 duration;
|
eo301@0
|
50 u32 rate; // typically 1.0
|
eo301@1
|
51 u16 volume; // typically full volume
|
eo301@0
|
52 u16 reserved; // =0
|
eo301@1
|
53 u32 reserved2[2]; //=0
|
eo301@1
|
54 u32 matrix[9]; // information matrix for video (u,v,w)
|
eo301@0
|
55 u32 pre_defined[6]; // =0
|
eo301@0
|
56 u32 next_track_ID; //non zero value for the next track ID
|
eo301@1
|
57 }MovieHeaderBox;
|
eo301@0
|
58
|
eo301@1
|
59 struct TrackBox
|
eo301@0
|
60 {
|
eo301@1
|
61 u32 size;
|
eo301@1
|
62 u32 type;
|
eo301@1
|
63 struct TrackHeaderBox
|
eo301@0
|
64 {
|
eo301@1
|
65 u32 size;
|
eo301@1
|
66 u32 type;
|
eo301@1
|
67 u32 version; // version + flag
|
eo301@0
|
68 u32 creation_time;
|
eo301@0
|
69 u32 modification_time;
|
eo301@1
|
70 u32 track_ID;
|
eo301@0
|
71 u32 reserved; // =0
|
eo301@0
|
72 u32 duration;
|
eo301@0
|
73 u32 reserved2[2]; // =0
|
eo301@0
|
74 u16 layer; // =0 // for video
|
eo301@0
|
75 u16 alternate_group; // =0
|
eo301@0
|
76 u16 volume; // full volume is 1 = 0x0100
|
eo301@0
|
77 u16 reserved3;// =0
|
eo301@0
|
78 u32 matrix[9]; // for video
|
eo301@0
|
79 u32 width; // video
|
eo301@0
|
80 u32 height; // video
|
eo301@0
|
81 }TrackHeaderBox;
|
eo301@1
|
82
|
eo301@0
|
83 struct MediaBox // extends Box('mdia')
|
eo301@0
|
84 {
|
eo301@1
|
85 u32 size;
|
eo301@1
|
86 u32 type;
|
eo301@0
|
87 struct MediaHeaderBox // extends FullBox('mdhd', version,0)
|
eo301@0
|
88 {
|
eo301@1
|
89 u32 size;
|
eo301@1
|
90 u32 type;
|
eo301@1
|
91 u32 version; // version + flag
|
eo301@0
|
92 u32 creation_time;
|
eo301@0
|
93 u32 modification_time;
|
eo301@0
|
94 u32 timescale;
|
eo301@0
|
95 u32 duration;
|
eo301@1
|
96 u16 language; // [pad,5x3] = 16 bits and pad = 0
|
eo301@0
|
97 u16 pre_defined; // =0
|
eo301@0
|
98 }MediaHeaderBox;
|
eo301@1
|
99 struct HandlerBox
|
eo301@0
|
100 {
|
eo301@1
|
101 u32 size;
|
eo301@1
|
102 u32 type;
|
eo301@1
|
103 u32 version; // version = 0 + flag
|
eo301@0
|
104 u32 pre_defined; // =0
|
eo301@0
|
105 u32 handler_type; // = 'soun' for audio track, text or hint
|
eo301@0
|
106 u32 reserved[3]; // =0
|
eo301@1
|
107 unsigned char data[5]; // Does not work! only 4 bytes
|
eo301@1
|
108
|
eo301@1
|
109 }HandlerBox;
|
eo301@1
|
110 struct MediaInformationBox //extends Box('minf')
|
eo301@0
|
111 {
|
eo301@1
|
112 u32 size;
|
eo301@1
|
113 u32 type;
|
eo301@0
|
114 // smhd in sound track only!!
|
eo301@1
|
115 struct SoundMediaHeaderBox
|
eo301@0
|
116 {
|
eo301@1
|
117 u32 size;
|
eo301@1
|
118 u32 type;
|
eo301@1
|
119 u32 version;
|
eo301@0
|
120 u16 balance; // =0 place mono tracks in stereo. 0 is center
|
eo301@0
|
121 u16 reserved; // =0
|
eo301@0
|
122 }SoundMediaHeaderBox;
|
eo301@1
|
123
|
eo301@1
|
124 struct DataInformationBox //extends Box('dinf')
|
eo301@0
|
125 {
|
eo301@1
|
126 u32 size;
|
eo301@1
|
127 u32 type;
|
eo301@1
|
128 struct DataReferenceBox
|
eo301@0
|
129 {
|
eo301@1
|
130 u32 size;
|
eo301@1
|
131 u32 type;
|
eo301@0
|
132 u32 flags;
|
eo301@1
|
133 u32 entry_count; // counts the actual entries.
|
eo301@1
|
134 struct DataEntryUrlBox //extends FullBox('url', version=0, flags)
|
eo301@1
|
135 {
|
eo301@1
|
136 u32 size;
|
eo301@1
|
137 u32 type;
|
eo301@1
|
138 u32 flags;
|
eo301@1
|
139 }DataEntryUrlBox;
|
eo301@1
|
140 }DataReferenceBox;
|
eo301@0
|
141 }DataInformationBox;
|
eo301@0
|
142 struct SampleTableBox // extends Box('stbl')
|
eo301@0
|
143 {
|
eo301@1
|
144 u32 size;
|
eo301@1
|
145 u32 type;
|
eo301@1
|
146 struct TimeToSampleBox{
|
eo301@1
|
147 u32 size;
|
eo301@1
|
148 u32 type;
|
eo301@1
|
149 u32 version;
|
eo301@1
|
150 u32 entry_count;
|
eo301@1
|
151 u32 sample_count[3000];
|
eo301@1
|
152 u32 sample_delta[3000];
|
eo301@1
|
153 }TimeToSampleBox;
|
eo301@1
|
154 struct SampleDescriptionBox // stsd
|
eo301@0
|
155 {
|
eo301@1
|
156 u32 size;
|
eo301@1
|
157 u32 type;
|
eo301@1
|
158 u32 version;
|
eo301@1
|
159 u32 entry_count; // = 1 number of entries
|
eo301@1
|
160 // unsigned char esds[88];
|
eo301@1
|
161 struct AudioSampleEntry{
|
eo301@1
|
162 u32 size;
|
eo301@1
|
163 u32 type; //mp4a
|
eo301@1
|
164 char reserved[6];
|
eo301@1
|
165 u16 data_reference_index; // = 1
|
eo301@1
|
166 u32 reserved2[2];
|
eo301@1
|
167 u16 channelcount; // = 2
|
eo301@1
|
168 u16 samplesize; // = 16
|
eo301@1
|
169 u32 reserved3;
|
eo301@1
|
170 u32 samplerate; // 44100 << 16
|
eo301@1
|
171 // unsigned char esds[81];
|
eo301@1
|
172 struct ESbox{
|
eo301@1
|
173 u32 size;
|
eo301@1
|
174 u32 type;
|
eo301@1
|
175 u32 version;
|
eo301@1
|
176 struct ES_Descriptor{
|
eo301@1
|
177 unsigned char tag;
|
eo301@1
|
178 unsigned char length;
|
eo301@1
|
179 u16 ES_ID;
|
eo301@1
|
180 unsigned char mix;
|
eo301@1
|
181 struct DecoderConfigDescriptor{
|
eo301@1
|
182 unsigned char tag;
|
eo301@1
|
183 unsigned char length;
|
eo301@1
|
184 unsigned char objectProfileInd;
|
eo301@1
|
185 u32 mix;
|
eo301@1
|
186 u32 maxBitRate;
|
eo301@1
|
187 u32 avgBitrate;
|
eo301@1
|
188 /* struct DecoderSpecificInfo{
|
eo301@1
|
189 unsigned char tag;
|
eo301@1
|
190 unsigned length;
|
eo301@1
|
191 // unsigned char decSpecificInfosize;
|
eo301@1
|
192 unsigned char decSpecificInfoData[2];
|
eo301@1
|
193 }DecoderSpecificInfo;
|
eo301@1
|
194 */ }DecoderConfigDescriptor;
|
eo301@1
|
195 struct SLConfigDescriptor{
|
eo301@1
|
196 unsigned char tag;
|
eo301@1
|
197 unsigned char length;
|
eo301@1
|
198 unsigned char predifined;
|
eo301@1
|
199 }SLConfigDescriptor;
|
eo301@1
|
200 }ES_Descriptor;
|
eo301@1
|
201 }ESbox;
|
eo301@1
|
202 }AudioSampleEntry;
|
eo301@0
|
203 }SampleDescriptionBox;
|
eo301@1
|
204 struct SampleSizeBox{
|
eo301@1
|
205 u32 size;
|
eo301@1
|
206 u32 type;
|
eo301@1
|
207 u32 version;
|
eo301@1
|
208 u32 sample_size; // =0
|
eo301@1
|
209 u32 sample_count;
|
eo301@2
|
210 u32 entry_size[9000];
|
eo301@1
|
211 }SampleSizeBox;
|
eo301@1
|
212 struct SampleToChunk{
|
eo301@1
|
213 u32 size;
|
eo301@1
|
214 u32 type;
|
eo301@1
|
215 u32 version;
|
eo301@0
|
216 u32 entry_count;
|
eo301@1
|
217 u32 first_chunk;
|
eo301@1
|
218 u32 samples_per_chunk;
|
eo301@1
|
219 u32 sample_description_index;
|
eo301@1
|
220 }SampleToChunk;
|
eo301@1
|
221 struct ChunkOffsetBox{
|
eo301@1
|
222 u32 size;
|
eo301@1
|
223 u32 type;
|
eo301@1
|
224 u32 version;
|
eo301@0
|
225 u32 entry_count;
|
eo301@1
|
226 u32 chunk_offset[maxtracks];
|
eo301@0
|
227 }ChunkOffsetBox;
|
eo301@0
|
228 }SampleTableBox;
|
eo301@0
|
229 }MediaInformationBox;
|
eo301@0
|
230 }MediaBox;
|
eo301@0
|
231 }TrackBox[maxtracks]; // max 10 tracks
|
eo301@0
|
232 struct PresetContainerBox // extends Box('prco')
|
eo301@0
|
233 {
|
eo301@1
|
234 u32 size;
|
eo301@1
|
235 u32 type;
|
eo301@1
|
236 unsigned char num_preset;
|
eo301@1
|
237 unsigned char default_preset_ID;
|
eo301@0
|
238 struct PresetBox //extends FullBox('prst',version=0,flags)
|
eo301@0
|
239 {
|
eo301@1
|
240 u32 size;
|
eo301@1
|
241 u32 type;
|
eo301@1
|
242 u32 flags;
|
eo301@1
|
243 unsigned char preset_ID;
|
eo301@1
|
244 unsigned char num_preset_elements;
|
eo301@1
|
245 struct presElemId{
|
eo301@1
|
246 u32 preset_element_ID;
|
eo301@1
|
247 }presElemId[maxtracks];
|
eo301@1
|
248 unsigned char preset_type;
|
eo301@1
|
249 unsigned char preset_global_volume;
|
eo301@0
|
250 //IF preset_type == 1
|
eo301@1
|
251 struct presVolumElem{
|
eo301@1
|
252 unsigned char preset_volume_element;
|
eo301@1
|
253 }presVolumElem[maxtracks];
|
eo301@2
|
254 char preset_name[14];
|
eo301@1
|
255 }PresetBox[maxpreset];
|
eo301@0
|
256 }PresetContainerBox;
|
eo301@1
|
257
|
eo301@1
|
258 struct RulesContainer{
|
eo301@1
|
259 u32 size;
|
eo301@1
|
260 u32 type;
|
eo301@1
|
261 u16 num_selection_rules;
|
eo301@1
|
262 u16 num_mixing_rules;
|
eo301@1
|
263 struct SelectionRules{
|
eo301@1
|
264 u32 size;
|
eo301@1
|
265 u32 type;
|
eo301@1
|
266 u32 version;
|
eo301@1
|
267 u16 selection_rule_ID;
|
eo301@1
|
268 unsigned char selection_rule_type;
|
eo301@1
|
269 u32 element_ID;
|
eo301@1
|
270 char rule_description[14];
|
eo301@1
|
271 }SelectionRules;
|
eo301@1
|
272 struct MixingRules{
|
eo301@1
|
273 u32 size;
|
eo301@1
|
274 u32 type;
|
eo301@1
|
275 u32 version;
|
eo301@1
|
276 u16 mixing_rule_ID;
|
eo301@1
|
277 unsigned char mixing_type;
|
eo301@1
|
278 u32 element_ID;
|
eo301@1
|
279 u32 key_elem_ID;
|
eo301@2
|
280 char mix_description[17];
|
eo301@1
|
281 }MixingRules;
|
eo301@1
|
282 }RulesContainer;
|
eo301@0
|
283 }MovieBox;
|
eo301@0
|
284
|
eo301@0
|
285 typedef struct MediaDataBox // extends Box('mdat')
|
eo301@0
|
286 {
|
eo301@1
|
287 u32 size;
|
eo301@1
|
288 u32 type;
|
eo301@1
|
289 unsigned char data;
|
eo301@1
|
290 }MediaDataBox;
|
eo301@0
|
291
|
eo301@0
|
292 #endif
|
eo301@0
|
293
|
eo301@0
|
294
|
eo301@0
|
295
|
eo301@0
|
296
|
eo301@0
|
297
|
eo301@0
|
298
|
eo301@0
|
299
|
eo301@0
|
300
|
eo301@0
|
301
|
eo301@0
|
302
|
eo301@0
|
303
|
eo301@0
|
304
|
eo301@0
|
305
|
eo301@0
|
306
|
eo301@0
|
307
|
eo301@0
|
308
|
eo301@0
|
309
|
eo301@0
|
310
|
eo301@0
|
311
|
eo301@0
|
312
|