annotate IM_AF Encoder/IM_AM Encoder/IM_AF Encoder.h @ 8:c51c0b844461 tip

Ok
author Eugenio Oñate Hospital <eo301@eecs.qmul.ac.uk>
date Tue, 28 Aug 2012 12:20:04 +0100
parents 1636a6250528
children
rev   line source
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