OSDN Git Service

add tstools.
[rec10/rec10-git.git] / tstools / DtsEdit / src / gpac / mpeg4_odf.h
1 /*\r
2  *                      GPAC - Multimedia Framework C SDK\r
3  *\r
4  *                      Copyright (c) Jean Le Feuvre 2000-2005 \r
5  *                                      All rights reserved\r
6  *\r
7  *  This file is part of GPAC / MPEG-4 Object Descriptor sub-project\r
8  *\r
9  *  GPAC is free software; you can redistribute it and/or modify\r
10  *  it under the terms of the GNU Lesser General Public License as published by\r
11  *  the Free Software Foundation; either version 2, or (at your option)\r
12  *  any later version.\r
13  *   \r
14  *  GPAC is distributed in the hope that it will be useful,\r
15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
17  *  GNU Lesser General Public License for more details.\r
18  *   \r
19  *  You should have received a copy of the GNU Lesser General Public\r
20  *  License along with this library; see the file COPYING.  If not, write to\r
21  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. \r
22  *\r
23  */\r
24 \r
25 #ifndef _GF_MPEG4_ODF_H_\r
26 #define _GF_MPEG4_ODF_H_\r
27 \r
28 #ifdef __cplusplus\r
29 extern "C" {\r
30 #endif\r
31 \r
32 #include <gpac/list.h>\r
33 #include <gpac/bitstream.h>\r
34 #include <gpac/sync_layer.h>\r
35 \r
36 /***************************************\r
37                         Descriptors Tag\r
38 ***************************************/\r
39 enum\r
40 {\r
41         GF_ODF_OD_TAG                   = 0x01,\r
42         GF_ODF_IOD_TAG                  = 0x02,\r
43         GF_ODF_ESD_TAG                  = 0x03,\r
44         GF_ODF_DCD_TAG                  = 0x04,\r
45         GF_ODF_DSI_TAG                  = 0x05,\r
46         GF_ODF_SLC_TAG                  = 0x06,\r
47         GF_ODF_CI_TAG                   = 0x07,\r
48         GF_ODF_SCI_TAG                  = 0x08,\r
49         GF_ODF_IPI_PTR_TAG              = 0x09,\r
50         GF_ODF_IPMP_PTR_TAG             = 0x0A,\r
51         GF_ODF_IPMP_TAG                 = 0x0B,\r
52         GF_ODF_QOS_TAG                  = 0x0C,\r
53         GF_ODF_REG_TAG                  = 0x0D,\r
54 \r
55         /*FILE FORMAT RESERVED IDs - NEVER CREATE / USE THESE DESCRIPTORS*/\r
56         GF_ODF_ESD_INC_TAG              = 0x0E,\r
57         GF_ODF_ESD_REF_TAG              = 0x0F,\r
58         GF_ODF_ISOM_IOD_TAG             = 0x10,\r
59         GF_ODF_ISOM_OD_TAG              = 0x11,\r
60         GF_ODF_ISOM_IPI_PTR_TAG = 0x12,\r
61         /*END FILE FORMAT RESERVED*/\r
62         \r
63         GF_ODF_EXT_PL_TAG               = 0x13,\r
64         GF_ODF_PL_IDX_TAG               = 0x14,\r
65         \r
66         GF_ODF_ISO_BEGIN_TAG    = 0x15,\r
67         GF_ODF_ISO_END_TAG              = 0x3F,\r
68 \r
69         GF_ODF_CC_TAG                   = 0x40,\r
70         GF_ODF_KW_TAG                   = 0x41,\r
71         GF_ODF_RATING_TAG               = 0x42,\r
72         GF_ODF_LANG_TAG                 = 0x43,\r
73         GF_ODF_SHORT_TEXT_TAG   = 0x44,\r
74         GF_ODF_TEXT_TAG                 = 0x45,\r
75         GF_ODF_CC_NAME_TAG              = 0x46,\r
76         GF_ODF_CC_DATE_TAG              = 0x47,\r
77         GF_ODF_OCI_NAME_TAG             = 0x48,\r
78         GF_ODF_OCI_DATE_TAG             = 0x49,\r
79         GF_ODF_SMPTE_TAG                = 0x4A,\r
80 \r
81         GF_ODF_SEGMENT_TAG              = 0x4B,\r
82         GF_ODF_MEDIATIME_TAG    = 0x4C,\r
83 \r
84         GF_ODF_IPMP_TL_TAG              = 0x60,\r
85         GF_ODF_IPMP_TOOL_TAG    = 0x61,\r
86 \r
87         GF_ODF_ISO_RES_BEGIN_TAG        = 0x62,\r
88         GF_ODF_ISO_RES_END_TAG          = 0xBF,\r
89         \r
90         GF_ODF_USER_BEGIN_TAG   = 0xC0,\r
91 \r
92         /*internal descriptor for mux input description*/\r
93         GF_ODF_MUXINFO_TAG              = GF_ODF_USER_BEGIN_TAG,\r
94         /*internal descriptor for bifs config input description*/\r
95         GF_ODF_BIFS_CFG_TAG             = GF_ODF_USER_BEGIN_TAG + 1,\r
96         /*internal descriptor for UI config input description*/\r
97         GF_ODF_UI_CFG_TAG               = GF_ODF_USER_BEGIN_TAG + 2,\r
98         /*internal descriptor for TextConfig description*/\r
99         GF_ODF_TEXT_CFG_TAG             = GF_ODF_USER_BEGIN_TAG + 3,\r
100         GF_ODF_TX3G_TAG                 = GF_ODF_USER_BEGIN_TAG + 4,\r
101         GF_ODF_ELEM_MASK_TAG    = GF_ODF_USER_BEGIN_TAG + 5,\r
102         /*internal descriptor for LASeR config input description*/\r
103         GF_ODF_LASER_CFG_TAG    = GF_ODF_USER_BEGIN_TAG + 6,\r
104 \r
105         GF_ODF_USER_END_TAG             = 0xFE,\r
106 \r
107         GF_ODF_OCI_BEGIN_TAG    = 0x40,\r
108         GF_ODF_OCI_END_TAG              = (GF_ODF_ISO_RES_BEGIN_TAG - 1),\r
109 \r
110         GF_ODF_EXT_BEGIN_TAG    = 0x80,\r
111         GF_ODF_EXT_END_TAG              = 0xFE,\r
112 \r
113 \r
114         /*descriptor for aucilary video data*/\r
115         GF_ODF_AUX_VIDEO_DATA   = GF_ODF_EXT_BEGIN_TAG + 1,\r
116 };\r
117 \r
118 \r
119 /***************************************\r
120                         Descriptors\r
121 ***************************************/\r
122 \r
123 #define BASE_DESCRIPTOR \\r
124                 u8 tag;\r
125 \r
126 typedef struct\r
127 {\r
128         BASE_DESCRIPTOR\r
129 } GF_Descriptor;\r
130 \r
131 \r
132 /*      default descriptor. \r
133         NOTE: The decoderSpecificInfo is used as a default desc with tag 0x05 */\r
134 typedef struct\r
135 {\r
136         BASE_DESCRIPTOR\r
137         u32 dataLength;\r
138         char *data;\r
139 } GF_DefaultDescriptor;\r
140 \r
141 /*Object Descriptor*/\r
142 typedef struct\r
143 {\r
144         BASE_DESCRIPTOR\r
145         GF_List *ipmp_tools;\r
146 } GF_IPMP_ToolList;\r
147 \r
148 /*ObjectDescriptor*/\r
149 typedef struct\r
150 {\r
151         BASE_DESCRIPTOR\r
152         u16 objectDescriptorID;\r
153         char *URLString;\r
154         GF_List *ESDescriptors;\r
155         GF_List *OCIDescriptors;\r
156         /*includes BOTH IPMP_DescriptorPointer (IPMP & IPMPX) and GF_IPMP_Descriptor (IPMPX only)*/\r
157         GF_List *IPMP_Descriptors;\r
158         GF_List *extensionDescriptors;\r
159 } GF_ObjectDescriptor;\r
160 \r
161 /*GF_InitialObjectDescriptor - WARNING: even though the bitstream IOD is not\r
162 a bit extension of OD, internally it is a real overclass of OD\r
163 we usually typecast IOD to OD when flags are not needed !!!*/\r
164 typedef struct\r
165 {\r
166         BASE_DESCRIPTOR\r
167         u16 objectDescriptorID;\r
168         char *URLString;\r
169         GF_List *ESDescriptors;\r
170         GF_List *OCIDescriptors;\r
171         /*includes BOTH IPMP_DescriptorPointer (IPMP & IPMPX) and GF_IPMP_Descriptor (IPMPX only)*/\r
172         GF_List *IPMP_Descriptors;\r
173         GF_List *extensionDescriptors;\r
174 \r
175         /*IOD extensions*/\r
176         u8 inlineProfileFlag;\r
177         u8 OD_profileAndLevel;\r
178         u8 scene_profileAndLevel;\r
179         u8 audio_profileAndLevel;\r
180         u8 visual_profileAndLevel;\r
181         u8 graphics_profileAndLevel;\r
182 \r
183         GF_IPMP_ToolList *IPMPToolList;\r
184 } GF_InitialObjectDescriptor;\r
185 \r
186 /*File Format Object Descriptor*/\r
187 typedef struct\r
188 {\r
189         BASE_DESCRIPTOR\r
190         u16 objectDescriptorID;\r
191         char *URLString;\r
192         GF_List *ES_ID_RefDescriptors;\r
193         GF_List *OCIDescriptors;\r
194         GF_List *IPMP_Descriptors;\r
195         GF_List *extensionDescriptors;\r
196         GF_List *ES_ID_IncDescriptors;\r
197 } GF_IsomObjectDescriptor;\r
198 \r
199 /*File Format Initial Object Descriptor - same remark as IOD*/\r
200 typedef struct\r
201 {\r
202         BASE_DESCRIPTOR\r
203         u16 objectDescriptorID;\r
204         char *URLString;\r
205         GF_List *ES_ID_RefDescriptors;\r
206         GF_List *OCIDescriptors;\r
207         GF_List *IPMP_Descriptors;\r
208         GF_List *extensionDescriptors;\r
209         GF_List *ES_ID_IncDescriptors;\r
210 \r
211         u8 inlineProfileFlag;\r
212         u8 OD_profileAndLevel;\r
213         u8 scene_profileAndLevel;\r
214         u8 audio_profileAndLevel;\r
215         u8 visual_profileAndLevel;\r
216         u8 graphics_profileAndLevel;\r
217 \r
218         GF_IPMP_ToolList *IPMPToolList;\r
219 } GF_IsomInitialObjectDescriptor;\r
220 \r
221 \r
222 /*File Format ES Descriptor for IOD*/\r
223 typedef struct {\r
224         BASE_DESCRIPTOR\r
225         u32 trackID;\r
226 } GF_ES_ID_Inc;\r
227 \r
228 /*File Format ES Descriptor for OD*/\r
229 typedef struct {\r
230         BASE_DESCRIPTOR\r
231         u16 trackRef;\r
232 } GF_ES_ID_Ref;\r
233 \r
234 /*Decoder config Descriptor*/\r
235 typedef struct\r
236 {\r
237         BASE_DESCRIPTOR\r
238         u8 objectTypeIndication;\r
239         u8 streamType;\r
240         u8 upstream;\r
241         u32 bufferSizeDB;\r
242         u32 maxBitrate;\r
243         u32 avgBitrate;\r
244         GF_DefaultDescriptor *decoderSpecificInfo;\r
245         GF_List *profileLevelIndicationIndexDescriptor;\r
246 } GF_DecoderConfig;\r
247 \r
248 \r
249 /*Content Identification Descriptor*/\r
250 typedef struct {\r
251         BASE_DESCRIPTOR\r
252         u8 compatibility;\r
253         u8 protectedContent;\r
254         u8 contentTypeFlag;\r
255         u8 contentIdentifierFlag;\r
256         u8 contentType;\r
257         u8 contentIdentifierType;\r
258         /*international code string*/\r
259         char *contentIdentifier;        \r
260 } GF_CIDesc;\r
261 \r
262 /*Supplementary Content Identification Descriptor)*/\r
263 typedef struct {\r
264         BASE_DESCRIPTOR\r
265         u32 languageCode;\r
266         char *supplContentIdentifierTitle;\r
267         char *supplContentIdentifierValue;\r
268 } GF_SCIDesc;\r
269 \r
270 /*IPI (Intelectual Property Identification) Descriptor Pointer*/\r
271 typedef struct {\r
272         BASE_DESCRIPTOR\r
273         u16 IPI_ES_Id;\r
274 } GF_IPIPtr;\r
275 \r
276 /*IPMP Descriptor Pointer*/\r
277 typedef struct {\r
278         BASE_DESCRIPTOR\r
279         u8 IPMP_DescriptorID;\r
280         u16 IPMP_DescriptorIDEx;\r
281         u16 IPMP_ES_ID; \r
282 } GF_IPMPPtr;\r
283 \r
284 /*IPMPX control points*/\r
285 enum\r
286 {\r
287         /*no control point*/\r
288         IPMP_CP_NONE = 0,\r
289         /*control point between DB and decoder*/\r
290         IPMP_CP_DB = 1,\r
291         /*control point between decoder and CB*/\r
292         IPMP_CP_CB = 2,\r
293         /*control point between CB and render*/\r
294         IPMP_CP_CM = 3,\r
295         /*control point in BIFS tree (???)*/\r
296         IPMP_CP_BIFS = 4,\r
297         /*the rest is reserved or forbidden(0xFF)*/\r
298 };\r
299 \r
300 /*IPMPX base classe*/\r
301 #define GF_IPMPX_BASE   \\r
302         u8 tag; \\r
303         u8 version;     \\r
304         u32 dataID;     \\r
305 \r
306 typedef struct \r
307 {\r
308         GF_IPMPX_BASE\r
309 } GF_GF_IPMPX_Base;\r
310 \r
311 /*IPMP descriptor*/\r
312 typedef struct {\r
313         BASE_DESCRIPTOR\r
314         u8 IPMP_DescriptorID;\r
315         u16 IPMPS_Type;\r
316         /*if IPMPS_Type=0, NULL-terminated URL, else if IPMPS_Type is not IPMPX, opaque data*/\r
317         char *opaque_data;\r
318         /*if IPMPS_Type=0, irrelevant (strlen(URL)), else if IPMPS_Type is not IPMPX, opaque data size*/\r
319         u32 opaque_data_size;\r
320 \r
321         /*IPMPX specific*/\r
322         u16 IPMP_DescriptorIDEx;\r
323         bin128 IPMP_ToolID;\r
324         u8 control_point;\r
325         u8 cp_sequence_code;\r
326         GF_List *ipmpx_data;\r
327 } GF_IPMP_Descriptor;\r
328 \r
329 \r
330 /*IPMPTool*/\r
331 #define MAX_IPMP_ALT_TOOLS      20\r
332 typedef struct\r
333 {\r
334         BASE_DESCRIPTOR\r
335         bin128 IPMP_ToolID;\r
336         /*if set, this is an alternate tool*/\r
337         u32 num_alternate;\r
338         bin128 specificToolID[MAX_IPMP_ALT_TOOLS];\r
339 \r
340         struct _tagIPMPXParamDesc *toolParamDesc;\r
341         char *tool_url;\r
342 } GF_IPMP_Tool;\r
343 \r
344 \r
345 /* Elementary Mask of Bifs Config - parsing only */\r
346 typedef struct {\r
347         BASE_DESCRIPTOR\r
348         u32 node_id;                    // referenced nodeID\r
349         char *node_name;                // referenced node name\r
350 } GF_ElementaryMask;\r
351 \r
352 /*BIFSConfig - parsing only, STORED IN ESD:DCD:DSI*/\r
353 typedef struct __tag_bifs_config\r
354 {\r
355         BASE_DESCRIPTOR\r
356         u32 version;\r
357         u16 nodeIDbits;\r
358         u16 routeIDbits;\r
359         u16 protoIDbits;\r
360         Bool pixelMetrics;\r
361         u16 pixelWidth, pixelHeight;\r
362         /*BIFS-Anim stuff*/\r
363         Bool randomAccess;\r
364         GF_List *elementaryMasks;\r
365         /*internal extensions for encoding*/\r
366         Bool useNames;\r
367 } GF_BIFSConfig;\r
368 \r
369 /*flags for style*/\r
370 enum\r
371 {\r
372         GF_TXT_STYLE_NORMAL = 0,\r
373         GF_TXT_STYLE_BOLD = 1,\r
374         GF_TXT_STYLE_ITALIC = 2,\r
375         GF_TXT_STYLE_UNDERLINED = 4\r
376 };\r
377 \r
378 typedef struct\r
379 {\r
380         u16 startCharOffset;\r
381         u16 endCharOffset;\r
382         u16 fontID;\r
383         u8 style_flags;\r
384         u8 font_size;\r
385         /*ARGB*/\r
386         u32 text_color;\r
387 } GF_StyleRecord;\r
388 \r
389 typedef struct\r
390 {\r
391         u16 fontID;\r
392         char *fontName;\r
393 } GF_FontRecord;\r
394 \r
395 typedef struct\r
396 {\r
397         s16 top, left, bottom, right;\r
398 } GF_BoxRecord;\r
399 \r
400 /*scroll flags*/\r
401 enum\r
402 {\r
403         GF_TXT_SCROLL_CREDITS = 0,\r
404         GF_TXT_SCROLL_MARQUEE = 1,\r
405         GF_TXT_SCROLL_DOWN = 2,\r
406         GF_TXT_SCROLL_RIGHT = 3\r
407 };\r
408 \r
409 /* display flags*/\r
410 enum\r
411 {\r
412         GF_TXT_SCROLL_IN = 0x00000020,\r
413         GF_TXT_SCROLL_OUT = 0x00000040,\r
414         /*use one of the scroll flags, eg GF_TXT_SCROLL_DIRECTION | GF_TXT_SCROLL_CREDITS*/\r
415         GF_TXT_SCROLL_DIRECTION = 0x00000180,\r
416         GF_TXT_KARAOKE  = 0x00000800,\r
417         GF_TXT_VERTICAL = 0x00020000,\r
418         GF_TXT_FILL_REGION = 0x00040000,\r
419 };\r
420 \r
421 typedef struct\r
422 {\r
423         /*this is defined as a descriptor for parsing*/\r
424         BASE_DESCRIPTOR\r
425 \r
426         u32 displayFlags;\r
427         /*left, top: 0 -  centered: 1 - bottom, right: -1*/\r
428         s8 horiz_justif, vert_justif;\r
429         /*ARGB*/\r
430         u32 back_color;\r
431         GF_BoxRecord default_pos;\r
432         GF_StyleRecord  default_style;\r
433 \r
434         u32 font_count;\r
435         GF_FontRecord *fonts;\r
436 \r
437         /*unused in isomedia but needed for streamingText*/\r
438         u8 sample_index;\r
439 } GF_TextSampleDescriptor;\r
440 \r
441 typedef struct\r
442 {\r
443         BASE_DESCRIPTOR\r
444         /*only 0x10 shall be used for 3GP text stream*/\r
445         u8 Base3GPPFormat;\r
446         /*only 0x10 shall be used for StreamingText*/\r
447         u8 MPEGExtendedFormat;\r
448         /*only 0x10 shall be used for StreamingText (base profile, base level)*/\r
449         u8 profileLevel;\r
450         u32 timescale;\r
451         /*0 forbidden, 1: out-of-band desc only, 2: in-band desc only, 3: both*/\r
452         u8 sampleDescriptionFlags;\r
453         /*More negative layer values are towards the viewer*/\r
454         s16 layer;\r
455         /*text track width & height*/\r
456         u16 text_width;\r
457         u16 text_height;\r
458         /*compatible 3GP formats, same coding as 3GPPBaseFormat*/\r
459         u8 nb_compatible_formats;\r
460         u8 compatible_formats[20];\r
461         /*defined in isomedia.h*/\r
462         GF_List *sample_descriptions;\r
463 \r
464         /*if true info below are valid (cf 3GPP for their meaning)*/\r
465         Bool has_vid_info;\r
466         u16 video_width;\r
467         u16 video_height;\r
468         s16 horiz_offset;\r
469         s16 vert_offset;\r
470 } GF_TextConfig;\r
471 \r
472 \r
473 /*MuxInfo descriptor - parsing only, stored in ESD:extDescr*/\r
474 typedef struct {\r
475         BASE_DESCRIPTOR\r
476         /*input location*/\r
477         char *file_name;\r
478         /*input groupID for interleaving*/\r
479         u32 GroupID;\r
480         /*input stream format (not required, guessed from file_name)*/\r
481         char *streamFormat;\r
482         /*time offset in ms from first TS (appends an edit list in mp4)*/\r
483         u32 startTime;\r
484 \r
485         /*media length to import in ms (from 0)*/\r
486         u32 duration;\r
487 \r
488         /*SRT/SUB import extensions - only support for text and italic style*/\r
489         char *textNode;\r
490         char *fontNode;\r
491 \r
492         /*video and SUB import*/\r
493         Double frame_rate;\r
494 \r
495         /*same as importer flags, cf media.h*/\r
496         u32 import_flags;\r
497 \r
498         /*indicates input file shall be destryed - used during SWF import*/\r
499         Bool delete_file;\r
500 } GF_MuxInfo;\r
501 \r
502 typedef struct\r
503 {\r
504         BASE_DESCRIPTOR\r
505         /*input type*/\r
506         char *deviceName;\r
507         /*string sensor terminaison (validation) char*/\r
508         char termChar;\r
509         /*string sensor deletion char*/\r
510         char delChar;\r
511         /*device-specific data*/\r
512         char *ui_data;\r
513         u32 ui_data_length;\r
514 } GF_UIConfig;\r
515 \r
516 /*LASERConfig - parsing only, STORED IN ESD:DCD:DSI*/\r
517 typedef struct __tag_laser_config\r
518 {\r
519         BASE_DESCRIPTOR\r
520         u8 profile;\r
521         u8 level;\r
522         u8 pointsCodec;\r
523         u8 pathComponents;\r
524         u8 fullRequestHost;\r
525         u16 time_resolution;\r
526         u8 colorComponentBits;\r
527         s8 resolution;\r
528         u8 coord_bits;\r
529         u8 scale_bits_minus_coord_bits;\r
530         u8 newSceneIndicator;\r
531         u8 extensionIDBits;\r
532 \r
533         /*the rest of the structure is never coded, only used for the config of GPAC...*/\r
534         Bool force_string_ids;/*forces all nodes to be defined with string IDs*/\r
535 } GF_LASERConfig;\r
536 \r
537 \r
538 /***************************************\r
539                         QoS Tags\r
540 ***************************************/\r
541 enum\r
542 {\r
543         QoSMaxDelayTag = 0x01,\r
544         QoSPrefMaxDelayTag = 0x02,\r
545         QoSLossProbTag = 0x03,\r
546         QoSMaxGapLossTag = 0x04,\r
547         QoSMaxAUSizeTag = 0x41,\r
548         QoSAvgAUSizeTag = 0x42,\r
549         QoSMaxAURateTag = 0x43\r
550 };\r
551 \r
552 /***************************************\r
553                         QoS Qualifiers\r
554 ***************************************/\r
555 typedef struct {\r
556         BASE_DESCRIPTOR\r
557         u8 predefined;\r
558         GF_List *QoS_Qualifiers;\r
559 } GF_QoS_Descriptor;\r
560 \r
561 \r
562 #define QOS_BASE_QUALIFIER \\r
563         u8 tag; \\r
564         u32 size;\r
565 \r
566 typedef struct {\r
567         QOS_BASE_QUALIFIER\r
568 } GF_QoS_Default;\r
569 \r
570 typedef struct {\r
571         QOS_BASE_QUALIFIER\r
572         u32 MaxDelay;\r
573 } GF_QoS_MaxDelay;\r
574 \r
575 typedef struct {\r
576         QOS_BASE_QUALIFIER\r
577         u32 PrefMaxDelay;\r
578 } GF_QoS_PrefMaxDelay;\r
579 \r
580 typedef struct {\r
581         QOS_BASE_QUALIFIER\r
582         Float LossProb;\r
583 } GF_QoS_LossProb;\r
584 \r
585 typedef struct {\r
586         QOS_BASE_QUALIFIER\r
587         u32 MaxGapLoss;\r
588 } GF_QoS_MaxGapLoss;\r
589 \r
590 typedef struct {\r
591         QOS_BASE_QUALIFIER\r
592         u32 MaxAUSize;\r
593 } GF_QoS_MaxAUSize;\r
594 \r
595 typedef struct {\r
596         QOS_BASE_QUALIFIER\r
597         u32 AvgAUSize;\r
598 } GF_QoS_AvgAUSize;\r
599 \r
600 typedef struct {\r
601         QOS_BASE_QUALIFIER\r
602         u32 MaxAURate;\r
603 } GF_QoS_MaxAURate;\r
604 \r
605 typedef struct {\r
606         QOS_BASE_QUALIFIER\r
607         u32 DataLength;         /*max size class : 2^28 - 1*/\r
608         char *Data;\r
609 } GF_QoS_Private;\r
610 \r
611 \r
612 /*Registration Descriptor*/\r
613 typedef struct {\r
614         BASE_DESCRIPTOR\r
615         u32 formatIdentifier;\r
616         u32 dataLength;\r
617         char *additionalIdentificationInfo;\r
618 } GF_Registration;\r
619 \r
620 /*Language Descriptor*/\r
621 typedef struct {\r
622         BASE_DESCRIPTOR\r
623         u32 langCode;\r
624 } GF_Language;\r
625 \r
626 /*Elementary Stream Descriptor*/\r
627 typedef struct\r
628 {\r
629         BASE_DESCRIPTOR\r
630         u16 ESID;\r
631         u16 OCRESID;\r
632         u16 dependsOnESID;\r
633         u8 streamPriority;\r
634         char *URLString;\r
635         GF_DecoderConfig *decoderConfig;\r
636         GF_SLConfig *slConfig;\r
637         GF_IPIPtr *ipiPtr;\r
638         GF_QoS_Descriptor *qos;\r
639         GF_Registration *RegDescriptor;\r
640         /*0 or 1 lang desc*/\r
641         GF_Language *langDesc;\r
642         \r
643         GF_List *IPIDataSet;\r
644         GF_List *IPMPDescriptorPointers;\r
645         GF_List *extensionDescriptors;\r
646 \r
647 } GF_ESD;\r
648 \r
649 \r
650 /*Auxiliary Video Data Descriptor*/\r
651 typedef struct {\r
652         BASE_DESCRIPTOR\r
653         u32 aux_video_type;\r
654         u32 position_offset_h;\r
655         u32 position_offset_v;\r
656         u32 knear;\r
657         u32 kfar;\r
658         u32 parallax_zero;\r
659         u32 parallax_scale;\r
660         u32 dref;\r
661         u32 wref;\r
662 } GF_AuxVideoDescriptor;\r
663 \r
664 /*Content Classification Descriptor*/\r
665 typedef struct {\r
666         BASE_DESCRIPTOR\r
667         u32 classificationEntity;\r
668         u16 classificationTable;\r
669         u32 dataLength;\r
670         char *contentClassificationData;\r
671 } GF_CCDescriptor;\r
672 \r
673 \r
674 /*this structure is used in GF_KeyWord*/\r
675 typedef struct {\r
676         char *keyWord;\r
677 } GF_KeyWordItem;\r
678 \r
679 /*Key Word Descriptor*/\r
680 typedef struct {\r
681         BASE_DESCRIPTOR\r
682         u32 languageCode;\r
683         u8 isUTF8;\r
684         GF_List *keyWordsList;\r
685 } GF_KeyWord;\r
686 \r
687 /*Rating Descriptor*/\r
688 typedef struct {\r
689         BASE_DESCRIPTOR\r
690         u32 ratingEntity;\r
691         u16 ratingCriteria;\r
692         u32 infoLength;\r
693         char *ratingInfo;\r
694 } GF_Rating;\r
695 \r
696 \r
697 /*Short Textual Descriptor*/\r
698 typedef struct {\r
699         BASE_DESCRIPTOR\r
700         u32 langCode;\r
701         u8 isUTF8;\r
702         char *eventName;\r
703         char *eventText;\r
704 } GF_ShortTextual;\r
705 \r
706 \r
707 /*this structure is used in GF_ExpandedTextual*/\r
708 typedef struct {\r
709         char *text;\r
710 } GF_ETD_ItemText;\r
711 \r
712 /*Expanded Textual Descriptor*/\r
713 typedef struct {\r
714         BASE_DESCRIPTOR\r
715         u32 langCode;\r
716         u8 isUTF8;\r
717         GF_List *itemDescriptionList;\r
718         GF_List *itemTextList;\r
719         char *NonItemText;\r
720 } GF_ExpandedTextual;\r
721 \r
722 /*this structure is used in GF_CC_Name*/\r
723 typedef struct {\r
724         u32 langCode;\r
725         u8 isUTF8;\r
726         char *contentCreatorName;\r
727 } GF_ContentCreatorInfo;\r
728 \r
729 /*Content Creator Name GF_Descriptor\r
730 NOTE: the desctructor will delete all the items in the list\r
731 (GF_ContentCreatorInfo items) */\r
732 typedef struct {\r
733         BASE_DESCRIPTOR\r
734         GF_List *ContentCreators;\r
735 } GF_CC_Name;\r
736 \r
737 /*Content Creation Date Descriptor*/\r
738 typedef struct {\r
739         BASE_DESCRIPTOR\r
740         char contentCreationDate[5];\r
741 } GF_CC_Date;\r
742 \r
743 \r
744 /*this structure is used in GF_OCICreators*/\r
745 typedef struct {\r
746         u32 langCode;\r
747         u8 isUTF8;\r
748         char *OCICreatorName;\r
749 } GF_OCICreator_item;\r
750 \r
751 /*OCI Creator Name Descriptor*/\r
752 typedef struct {\r
753         BASE_DESCRIPTOR\r
754         GF_List *OCICreators;\r
755 } GF_OCICreators;\r
756 \r
757 /*OCI Creation Date Descriptor*/\r
758 typedef struct {\r
759         BASE_DESCRIPTOR\r
760         char OCICreationDate[5];\r
761 } GF_OCI_Data;\r
762 \r
763 \r
764 /*this structure is used in GF_SMPTECamera*/\r
765 typedef struct {\r
766         u8 paramID;\r
767         u32 param;\r
768 } GF_SmpteParam;\r
769 \r
770 /*Smpte Camera Position Descriptor*/\r
771 typedef struct {\r
772         BASE_DESCRIPTOR\r
773         u8 cameraID;\r
774         GF_List *ParamList;\r
775 } GF_SMPTECamera;\r
776 \r
777 \r
778 /*Extension Profile Level Descriptor*/\r
779 typedef struct {\r
780         BASE_DESCRIPTOR\r
781         u8 profileLevelIndicationIndex;\r
782         u8 ODProfileLevelIndication;\r
783         u8 SceneProfileLevelIndication;\r
784         u8 AudioProfileLevelIndication;\r
785         u8 VisualProfileLevelIndication;\r
786         u8 GraphicsProfileLevelIndication;\r
787         u8 MPEGJProfileLevelIndication;\r
788 } GF_PLExt;\r
789 \r
790 /*Profile Level Indication Index Descriptor*/\r
791 typedef struct {\r
792         BASE_DESCRIPTOR\r
793         u8 profileLevelIndicationIndex;\r
794 } GF_PL_IDX;\r
795 \r
796 \r
797 /*AVC config descriptor - not a real MPEG-4 descriptor */\r
798 /*used for sequenceParameterSetNALUnit and pictureParameterSetNALUnit*/\r
799 typedef struct\r
800 {\r
801         u16 size;\r
802         char *data;\r
803 } GF_AVCConfigSlot;\r
804 \r
805 typedef struct \r
806 {\r
807         u8 configurationVersion;\r
808         u8 AVCProfileIndication;\r
809         u8 profile_compatibility;\r
810         u8 AVCLevelIndication; \r
811         u8 nal_unit_size;\r
812         \r
813         GF_List *sequenceParameterSets;\r
814         GF_List *pictureParameterSets;\r
815 } GF_AVCConfig;\r
816 \r
817 \r
818 /************************************************************\r
819                                 Media Control Extensions\r
820 ************************************************************/\r
821 typedef struct\r
822 {\r
823         BASE_DESCRIPTOR\r
824         Double startTime;\r
825         Double Duration;\r
826         char *SegmentName;\r
827 } GF_Segment;\r
828 \r
829 typedef struct\r
830 {\r
831         BASE_DESCRIPTOR\r
832         Double mediaTimeStamp;\r
833 } GF_MediaTime;\r
834 \r
835 \r
836 /****************************************************************************\r
837 \r
838                         MPEG-4 SYSTEM - OBJECT DESCRIPTORS COMMANDS DECLARATION\r
839 \r
840 ****************************************************************************/\r
841 \r
842 \r
843 /***************************************\r
844                         Commands Tags\r
845 ***************************************/\r
846 enum\r
847 {\r
848         GF_ODF_OD_UPDATE_TAG                                    = 0x01,\r
849         GF_ODF_OD_REMOVE_TAG                                    = 0x02,\r
850         GF_ODF_ESD_UPDATE_TAG                                   = 0x03,\r
851         GF_ODF_ESD_REMOVE_TAG                                   = 0x04,\r
852         GF_ODF_IPMP_UPDATE_TAG                                  = 0x05,\r
853         GF_ODF_IPMP_REMOVE_TAG                                  = 0x06,\r
854 \r
855         /*file format reserved*/\r
856         GF_ODF_ESD_REMOVE_REF_TAG                               = 0x07,\r
857 \r
858         GF_ODF_COM_ISO_BEGIN_TAG                = 0x0D,\r
859         GF_ODF_COM_ISO_END_TAG          = 0xBF,\r
860         \r
861         GF_ODF_COM_USER_BEGIN_TAG       = 0xC0,\r
862         GF_ODF_COM_USER_END_TAG         = 0xFE\r
863 };\r
864 \r
865 /***************************************\r
866                         OD commands\r
867 ***************************************/\r
868 #define BASE_OD_COMMAND \\r
869         u8 tag;\r
870 \r
871 /*the (abstract) base command. */\r
872 typedef struct {\r
873         BASE_OD_COMMAND\r
874 } GF_ODCom;\r
875 \r
876 /*the default bcommand*/\r
877 typedef struct {\r
878         BASE_OD_COMMAND\r
879         u32 dataSize;\r
880         char *data;\r
881 } GF_BaseODCom;\r
882 \r
883 /*Object Descriptor Update\r
884 NB: the list can contain OD or IOD, except internally in the File Format (only MP4_OD)*/\r
885 typedef struct\r
886 {\r
887         BASE_OD_COMMAND\r
888         GF_List *objectDescriptors;\r
889 } GF_ODUpdate;\r
890 \r
891 /*Object Descriptor Remove*/\r
892 typedef struct\r
893 {\r
894         BASE_OD_COMMAND\r
895         u32 NbODs;\r
896         u16 *OD_ID;\r
897 } GF_ODRemove;\r
898 \r
899 /*Elementary Stream Descriptor Update*/\r
900 typedef struct\r
901 {\r
902         BASE_OD_COMMAND\r
903         u16 ODID;\r
904         GF_List *ESDescriptors;\r
905 } GF_ESDUpdate;\r
906 \r
907 /*Elementary Stream Descriptor Remove*/\r
908 typedef struct {\r
909         BASE_OD_COMMAND\r
910         u16 ODID;\r
911         u32 NbESDs;\r
912         u16 *ES_ID;\r
913 } GF_ESDRemove;\r
914 \r
915 /*IPMP Descriptor Update*/\r
916 typedef struct {\r
917         BASE_OD_COMMAND\r
918         GF_List *IPMPDescList;\r
919 } GF_IPMPUpdate;\r
920 \r
921 /*IPMP Descriptor Remove*/\r
922 typedef struct {\r
923         BASE_OD_COMMAND\r
924         u32 NbIPMPDs;\r
925         /*now this is bad: only IPMPv1 descriptors can be removed at run tim...*/\r
926         u8 *IPMPDescID;\r
927 } GF_IPMPRemove;\r
928 \r
929 \r
930 \r
931 \r
932 \r
933 \r
934 /********************************************************************\r
935         OD Exports\r
936 ********************************************************************/\r
937 \r
938 /*OD CODEC object - just a simple reader/writer*/\r
939 typedef struct tagODCoDec\r
940 {\r
941         GF_BitStream *bs;\r
942         GF_List *CommandList;\r
943 } GF_ODCodec;\r
944 \r
945 /*construction / destruction*/\r
946 GF_ODCodec *gf_odf_codec_new();\r
947 void gf_odf_codec_del(GF_ODCodec *codec);\r
948 /* add a command to the codec command list. */\r
949 GF_Err gf_odf_codec_add_com(GF_ODCodec *codec, GF_ODCom *command);\r
950 /*encode the current coimmand list - once called the commands are destroyed*/\r
951 GF_Err gf_odf_codec_encode(GF_ODCodec *codec, Bool delete_content);\r
952 /*get the encoded AU. user is responsible of allocated space*/\r
953 GF_Err gf_odf_codec_get_au(GF_ODCodec *codec, char **outAU, u32 *au_length);\r
954 /* set the encoded AU to the codec*/\r
955 GF_Err gf_odf_codec_set_au(GF_ODCodec *codec, char *au, u32 au_length);\r
956 /*decode the previously set-up AU*/\r
957 GF_Err gf_odf_codec_decode(GF_ODCodec *codec);\r
958 /*get the first OD command in the list. Once called, the command is removed \r
959 from the command list. Return NULL when commandList is empty*/\r
960 GF_ODCom *gf_odf_codec_get_com(GF_ODCodec *codec);\r
961 \r
962 /*apply a command to the codec command list. Command is duplicated if needed\r
963 This is used for state maintenance and RAP generation.*/\r
964 GF_Err gf_odf_codec_apply_com(GF_ODCodec *codec, GF_ODCom *command);\r
965 \r
966 /************************************************************\r
967                 GF_ODCom Functions\r
968 ************************************************************/\r
969 \r
970 /*Commands Creation / Destruction*/\r
971 GF_ODCom *gf_odf_com_new(u8 tag);\r
972 GF_Err gf_odf_com_del(GF_ODCom **com);\r
973 \r
974 \r
975 /************************************************************\r
976                 Descriptors Functions\r
977 ************************************************************/\r
978 \r
979 /*Descriptors Creation / Destruction*/\r
980 GF_Descriptor *gf_odf_desc_new(u8 tag);\r
981 void gf_odf_desc_del(GF_Descriptor *desc);\r
982 \r
983 /*use this function to decode a standalone descriptor\r
984 the raw descriptor MUST be formatted with tag and size field!!!\r
985 a new desc is created and you must delete it when done*/\r
986 GF_Err gf_odf_desc_read(char *raw_desc, u32 descSize, GF_Descriptor * *outDesc);\r
987 \r
988 /*use this function to encode a standalone descriptor\r
989 the desc will be formatted with tag and size field\r
990 the output buffer is allocated and you must delete it when done*/\r
991 GF_Err gf_odf_desc_write(GF_Descriptor *desc, char **outEncDesc, u32 *outSize);\r
992 \r
993 /*use this function to get the size of a standalone descriptor (including tag and size fields)\r
994 return 0 if error*/\r
995 u32 gf_odf_desc_size(GF_Descriptor *desc);\r
996 \r
997 /*this is usefull to duplicate on the fly a descriptor*/\r
998 GF_Err gf_odf_desc_copy(GF_Descriptor *inDesc, GF_Descriptor **outDesc);\r
999 \r
1000 \r
1001 /*This functions handles internally what desc can be added to another desc\r
1002 and adds it. NO DUPLICATION of the descriptor, so\r
1003 once a desc is added to its parent, destroying the parent WILL DESTROY \r
1004 this descriptor*/\r
1005 GF_Err gf_odf_desc_add_desc(GF_Descriptor *parentDesc, GF_Descriptor *newDesc);\r
1006 \r
1007 \r
1008 /*this is a helper for building a preformatted GF_ESD with decoderConfig, decoderSpecificInfo with no data and \r
1009 SLConfig descriptor with predefined*/\r
1010 GF_ESD *gf_odf_desc_esd_new(u32 sl_predefined);\r
1011 \r
1012 \r
1013 /*Since IPMP V2, we introduce a new set of functions to read / write a list of descriptors\r
1014 that have no containers (a bit like an OD command, but for descriptors)\r
1015 This is usefull for IPMPv2 DecoderSpecificInfo which contains a set of IPMP_Declarators\r
1016 As it could be used for other purposes we keep it generic\r
1017 you must create the list yourself, the functions just encode/decode from/to the list*/\r
1018 \r
1019 /*uncompress an encoded list of descriptors. You must pass an empty GF_List structure\r
1020 to know exactly what was in the buffer*/\r
1021 GF_Err gf_odf_desc_list_read(char *raw_list, u32 raw_size, GF_List *descList);\r
1022 /*compress all descriptors in the list into a single buffer. The buffer is allocated\r
1023 by the lib and must be destroyed by your app\r
1024 you must pass (outEncList != NULL  && *outEncList == NULL)*/\r
1025 GF_Err gf_odf_desc_list_write(GF_List *descList, char **outEncList, u32 *outSize);\r
1026 /*returns size of encoded desc list*/\r
1027 GF_Err gf_odf_desc_list_size(GF_List *descList, u32 *outSize);\r
1028 /*destroy the descriptors in a list but not the list*/\r
1029 GF_Err gf_odf_desc_list_del(GF_List *descList);\r
1030 \r
1031 /*retuns NULL if unknown, otherwise value*/\r
1032 const char *gf_odf_stream_type_name(u32 streamType);\r
1033 u32 gf_odf_stream_type_by_name(const char *streamType);\r
1034 \r
1035 /*special function for authoring - convert DSI to BIFSConfig*/\r
1036 GF_BIFSConfig *gf_odf_get_bifs_config(GF_DefaultDescriptor *dsi, u8 oti);\r
1037 /*special function for authoring - convert DSI to LASERConfig*/\r
1038 GF_Err gf_odf_get_laser_config(GF_DefaultDescriptor *dsi, GF_LASERConfig *cfg);\r
1039 /*sepcial function for authoring - convert DSI to TextConfig*/\r
1040 GF_Err gf_odf_get_text_config(GF_DefaultDescriptor *dsi, u8 oti, GF_TextConfig *cfg);\r
1041 /*special function for authoring - convert DSI to UIConfig*/\r
1042 GF_Err gf_odf_get_ui_config(GF_DefaultDescriptor *dsi, GF_UIConfig *cfg);\r
1043 /*converts UIConfig to dsi - does not destroy input descr but does create output one*/\r
1044 GF_Err gf_odf_encode_ui_config(GF_UIConfig *cfg, GF_DefaultDescriptor **out_dsi);\r
1045 \r
1046 /*simple constructor/destructor*/\r
1047 GF_AVCConfig *gf_odf_avc_cfg_new();\r
1048 void gf_odf_avc_cfg_del(GF_AVCConfig *cfg);\r
1049 /*gets GF_AVCConfig from MPEG-4 DSI*/\r
1050 GF_AVCConfig *gf_odf_avc_cfg_read(char *dsi, u32 dsi_size);\r
1051 /*writes GF_AVCConfig as MPEG-4 DSI*/\r
1052 GF_Err gf_odf_avc_cfg_write(GF_AVCConfig *cfg, char **outData, u32 *outSize);\r
1053 \r
1054 \r
1055 \r
1056 /************************************************************\r
1057                 QoS Qualifiers Functions\r
1058 ************************************************************/\r
1059 \r
1060 /*QoS Qualifiers Creation / Destruction*/\r
1061 GF_QoS_Default *gf_odf_qos_new(u8 tag);\r
1062 GF_Err gf_odf_qos_del(GF_QoS_Default **qos);\r
1063 \r
1064 /*READ/WRITE functions: QoS qualifiers are special descriptors but follow the same rules as descriptors.\r
1065 therefore, use gf_odf_desc_read and gf_odf_desc_write for QoS*/\r
1066 \r
1067 /*same function, but for QoS, as a Qualifier IS NOT a descriptor*/\r
1068 GF_Err gf_odf_qos_add_qualif(GF_QoS_Descriptor *desc, GF_QoS_Default *qualif);\r
1069 \r
1070 \r
1071 \r
1072 /*\r
1073         OCI Stream AU is a list of OCI event (like OD AU is a list of OD commands)\r
1074 */\r
1075 \r
1076 typedef struct __tag_oci_event OCIEvent;\r
1077 \r
1078 OCIEvent *gf_oci_event_new(u16 EventID);\r
1079 void gf_oci_event_del(OCIEvent *event);\r
1080 \r
1081 GF_Err gf_oci_event_set_start_time(OCIEvent *event, u8 Hours, u8 Minutes, u8 Seconds, u8 HundredSeconds, u8 IsAbsoluteTime);\r
1082 GF_Err gf_oci_event_set_duration(OCIEvent *event, u8 Hours, u8 Minutes, u8 Seconds, u8 HundredSeconds);\r
1083 GF_Err gf_oci_event_add_desc(OCIEvent *event, GF_Descriptor *oci_desc);\r
1084 \r
1085 GF_Err gf_oci_event_get_id(OCIEvent *event, u16 *ID);\r
1086 GF_Err gf_oci_event_get_start_time(OCIEvent *event, u8 *Hours, u8 *Minutes, u8 *Seconds, u8 *HundredSeconds, u8 *IsAbsoluteTime);\r
1087 GF_Err gf_oci_event_get_duration(OCIEvent *event, u8 *Hours, u8 *Minutes, u8 *Seconds, u8 *HundredSeconds);\r
1088 u32 gf_oci_event_get_desc_count(OCIEvent *event);\r
1089 GF_Descriptor *gf_oci_event_get_desc(OCIEvent *event, u32 DescIndex);\r
1090 GF_Err gf_oci_event_rem_desc(OCIEvent *event, u32 DescIndex);\r
1091 \r
1092 \r
1093 \r
1094 typedef struct __tag_oci_codec OCICodec;\r
1095 \r
1096 /*construction / destruction\r
1097 IsEncoder specifies an OCI Event encoder\r
1098 version is for future extensions, and only 0x01 is valid for now*/\r
1099 OCICodec *gf_oci_codec_new(u8 IsEncoder, u8 Version);\r
1100 void gf_oci_codec_del(OCICodec *codec);\r
1101 \r
1102 /*                              ENCODER FUNCTIONS\r
1103 add a command to the codec event list. \r
1104 The event WILL BE DESTROYED BY THE CODEC after encoding*/\r
1105 GF_Err gf_oci_codec_add_event(OCICodec *codec, OCIEvent *event);\r
1106 \r
1107 /*encode AU. The memory allocation is done in place\r
1108 WARNING: once this function called, the codec event List is empty \r
1109 and events destroyed\r
1110 you must set *outAU = NULL*/\r
1111 GF_Err gf_oci_codec_encode(OCICodec *codec, char **outAU, u32 *au_length);\r
1112 \r
1113 \r
1114 \r
1115 /*Decoder: decode the previously set-up AU\r
1116 the input buffer is cleared once decoded*/\r
1117 GF_Err gf_oci_codec_decode(OCICodec *codec, char *au, u32 au_length);\r
1118 \r
1119 /*get the first OCI Event in the list. Once called, the event is removed \r
1120 from the event list. Return NULL when the event List is empty\r
1121 you MUST delete events */\r
1122 OCIEvent *gf_oci_codec_get_event(OCICodec *codec);\r
1123 \r
1124 \r
1125 /*OD dump tools*/\r
1126 GF_Err gf_odf_dump_au(char *data, u32 dataLength, FILE *trace, u32 indent, Bool XMTDump);\r
1127 GF_Err gf_odf_dump_com(void *p, FILE *trace, u32 indent, Bool XMTDump);\r
1128 GF_Err gf_odf_dump_desc(void *ptr, FILE *trace, u32 indent, Bool XMTDump);\r
1129 GF_Err gf_odf_dump_com_list(GF_List *commandList, FILE *trace, u32 indent, Bool XMTDump);\r
1130 \r
1131 /*OCI dump tools*/\r
1132 GF_Err gf_oci_dump_event(OCIEvent *ev, FILE *trace, u32 indent, Bool XMTDump);\r
1133 GF_Err gf_oci_dump_au(u8 version, char *au, u32 au_length, FILE *trace, u32 indent, Bool XMTDump);\r
1134 \r
1135 \r
1136 /*OD parsing tools (XMT/BT)*/\r
1137 /*returns desc tag based on name*/\r
1138 u32 gf_odf_get_tag_by_name(char *descName);\r
1139 /*field type for OD/QoS/IPMPX/etc*/\r
1140 enum\r
1141 {\r
1142         /*regular type*/\r
1143         GF_ODF_FT_DEFAULT = 0,\r
1144         /*single descriptor type*/\r
1145         GF_ODF_FT_OD = 1,\r
1146         /*descriptor list type*/\r
1147         GF_ODF_FT_OD_LIST = 2,\r
1148         /*IPMP Data type*/\r
1149         GF_ODF_FT_IPMPX = 3,\r
1150         /*IPMP Data list type*/\r
1151         GF_ODF_FT_IPMPX_LIST = 4,\r
1152         /*IPMP ByteArray type*/\r
1153         GF_ODF_FT_IPMPX_BA = 5,\r
1154         /*IPMP ByteArray list type*/\r
1155         GF_ODF_FT_IPMPX_BA_LIST = 6,\r
1156 };\r
1157 u32 gf_odf_get_field_type(GF_Descriptor *desc, char *fieldName);\r
1158 /*set non-descriptor field value - value string shall be presented without ' or " characters*/\r
1159 GF_Err gf_odf_set_field(GF_Descriptor *desc, char *fieldName, char *val);\r
1160 \r
1161 \r
1162 \r
1163 \r
1164 /*\r
1165         IPMPX extensions - IPMP Data only (messages are not supported yet)\r
1166 */\r
1167 \r
1168 typedef struct\r
1169 {\r
1170         u32 length;\r
1171         char *data;\r
1172 } GF_IPMPX_ByteArray;\r
1173 \r
1174 /*IPMPX authentication descriptors*/\r
1175 #define GF_IPMPX_AUTH_DESC      \\r
1176         u8 tag; \\r
1177 \r
1178 typedef struct\r
1179 {\r
1180         GF_IPMPX_AUTH_DESC\r
1181 } GF_IPMPX_Authentication;\r
1182 \r
1183 enum\r
1184 {\r
1185         GF_IPMPX_AUTH_Forbidden_Tag = 0x00,\r
1186         GF_IPMPX_AUTH_AlgorithmDescr_Tag = 0x01,\r
1187         GF_IPMPX_AUTH_KeyDescr_Tag = 0x02,\r
1188 };\r
1189 \r
1190 typedef struct\r
1191 {\r
1192         GF_IPMPX_AUTH_DESC\r
1193         char *keyBody;\r
1194         u32 keyBodyLength;\r
1195 } GF_IPMPX_AUTH_KeyDescriptor;\r
1196 \r
1197 typedef struct\r
1198 {\r
1199         GF_IPMPX_AUTH_DESC\r
1200         /*used if no specAlgoID*/\r
1201         u16 regAlgoID;\r
1202         GF_IPMPX_ByteArray *specAlgoID;\r
1203         GF_IPMPX_ByteArray *OpaqueData;\r
1204 } GF_IPMPX_AUTH_AlgorithmDescriptor;\r
1205 \r
1206 \r
1207 /*IPMP data messages*/\r
1208 enum \r
1209 {\r
1210         GF_IPMPX_OPAQUE_DATA_TAG = 0x01,\r
1211         GF_IPMPX_AUDIO_WM_INIT_TAG = 0x02,\r
1212         GF_IPMPX_VIDEO_WM_INIT_TAG = 0x03,\r
1213         GF_IPMPX_SEL_DEC_INIT_TAG = 0x04,\r
1214         GF_IPMPX_KEY_DATA_TAG = 0x05,\r
1215         GF_IPMPX_AUDIO_WM_SEND_TAG = 0x06,\r
1216         GF_IPMPX_VIDEO_WM_SEND_TAG = 0x07,\r
1217         GF_IPMPX_RIGHTS_DATA_TAG = 0x08,\r
1218         GF_IPMPX_SECURE_CONTAINER_TAG = 0x09,\r
1219         GF_IPMPX_ADD_TOOL_LISTENER_TAG = 0x0A,\r
1220         GF_IPMPX_REMOVE_TOOL_LISTENER_TAG = 0x0B,\r
1221         GF_IPMPX_INIT_AUTHENTICATION_TAG = 0x0C,\r
1222         GF_IPMPX_MUTUAL_AUTHENTICATION_TAG = 0x0D,\r
1223         GF_IPMPX_USER_QUERY_TAG = 0x0E,\r
1224         GF_IPMPX_USER_RESPONSE_TAG = 0x0F,\r
1225         GF_IPMPX_PARAMETRIC_DESCRIPTION_TAG = 0x10,\r
1226         GF_IPMPX_PARAMETRIC_CAPS_QUERY_TAG = 0x11,\r
1227         GF_IPMPX_PARAMETRIC_CAPS_RESPONSE_TAG = 0x12,\r
1228         /*NO ASSOCIATED STRUCTURE*/\r
1229         GF_IPMPX_GET_TOOLS_TAG = 0x13,\r
1230         GF_IPMPX_GET_TOOLS_RESPONSE_TAG = 0x14,\r
1231         GF_IPMPX_GET_TOOL_CONTEXT_TAG = 0x15,\r
1232         GF_IPMPX_GET_TOOL_CONTEXT_RESPONSE_TAG = 0x16,\r
1233         GF_IPMPX_CONNECT_TOOL_TAG = 0x17,\r
1234         GF_IPMPX_DISCONNECT_TOOL_TAG = 0x18,\r
1235         GF_IPMPX_NOTIFY_TOOL_EVENT_TAG = 0x19,\r
1236         GF_IPMPX_CAN_PROCESS_TAG = 0x1A,\r
1237         GF_IPMPX_TRUST_SECURITY_METADATA_TAG = 0x1B,\r
1238         GF_IPMPX_TOOL_API_CONFIG_TAG = 0x1C,\r
1239 \r
1240         /*ISMA*/\r
1241         GF_IPMPX_ISMACRYP_TAG = 0xD0, \r
1242 \r
1243         /*intern ones for parsing (not real datas)*/\r
1244         GF_IPMPX_TRUSTED_TOOL_TAG = 0xA1,\r
1245         GF_IPMPX_TRUST_SPECIFICATION_TAG = 0xA2,\r
1246         /*emulate algo descriptors as base IPMP classes for parsing...*/\r
1247         GF_IPMPX_ALGORITHM_DESCRIPTOR_TAG = 0xA3,\r
1248         GF_IPMPX_KEY_DESCRIPTOR_TAG = 0xA4,\r
1249         GF_IPMPX_PARAM_DESCRIPTOR_ITEM_TAG = 0xA5,\r
1250         GF_IPMPX_SEL_ENC_BUFFER_TAG = 0xA6,\r
1251         GF_IPMPX_SEL_ENC_FIELD_TAG = 0xA7,\r
1252 };\r
1253 \r
1254 typedef char GF_IPMPX_Date[5];\r
1255 \r
1256 \r
1257 #define GF_IPMPX_DATA_BASE      \\r
1258         u8 tag; \\r
1259         u8 Version;     \\r
1260         u8 dataID;      \\r
1261 \r
1262 typedef struct\r
1263 {\r
1264         GF_IPMPX_DATA_BASE\r
1265 } GF_IPMPX_Data;\r
1266 \r
1267 typedef struct\r
1268 {\r
1269         GF_IPMPX_DATA_BASE\r
1270         u32 Context;\r
1271         u8 AuthType;\r
1272 } GF_IPMPX_InitAuthentication;\r
1273 \r
1274 /*NOT a real DATA, only used as data for parsing*/\r
1275 typedef struct\r
1276 {\r
1277         GF_IPMPX_DATA_BASE\r
1278         GF_IPMPX_Date startDate;\r
1279         u8 attackerProfile;\r
1280         u32 trustedDuration;\r
1281         GF_IPMPX_ByteArray      *CCTrustMetadata;\r
1282 } GF_IPMPX_TrustSpecification;\r
1283 \r
1284 /*NOT a real DATA, only used as data for parsing*/\r
1285 typedef struct\r
1286 {\r
1287         GF_IPMPX_DATA_BASE\r
1288         bin128 toolID;  \r
1289         GF_IPMPX_Date AuditDate;\r
1290         GF_List *trustSpecifications;\r
1291 } GF_IPMPX_TrustedTool;\r
1292 \r
1293 typedef struct _ipmpx_TrustSecurityMetadata\r
1294 {\r
1295         GF_IPMPX_DATA_BASE\r
1296         GF_List *TrustedTools;\r
1297 } GF_IPMPX_TrustSecurityMetadata;\r
1298 \r
1299 \r
1300 typedef struct\r
1301 {\r
1302         GF_IPMPX_DATA_BASE\r
1303         Bool failedNegotiation;\r
1304 \r
1305         GF_List *candidateAlgorithms;\r
1306         GF_List *agreedAlgorithms;\r
1307         GF_IPMPX_ByteArray *AuthenticationData;\r
1308 \r
1309         /*inclAuthCodes will be set if any of the members is set (cf spec...)*/\r
1310         u32 certType;\r
1311         /*GF_IPMPX_ByteArray list*/\r
1312         GF_List *certificates;\r
1313         GF_IPMPX_AUTH_KeyDescriptor *publicKey;\r
1314         GF_IPMPX_ByteArray *opaque;\r
1315         GF_IPMPX_TrustSecurityMetadata *trustData;\r
1316         GF_IPMPX_ByteArray *authCodes;\r
1317 } GF_IPMPX_MutualAuthentication;\r
1318 \r
1319 typedef struct\r
1320 {\r
1321         GF_IPMPX_DATA_BASE\r
1322         /*if set MAC is part of the encrypted data*/\r
1323         Bool isMACEncrypted;\r
1324 \r
1325         GF_IPMPX_ByteArray *encryptedData;\r
1326         GF_IPMPX_Data *protectedMsg;\r
1327         GF_IPMPX_ByteArray *MAC;\r
1328 } GF_IPMPX_SecureContainer;\r
1329 \r
1330 typedef struct\r
1331 {\r
1332         GF_List *ipmp_tools;\r
1333 } GF_IPMPX_GetToolsResponse;\r
1334 \r
1335 typedef struct\r
1336 {\r
1337         GF_IPMPX_DATA_BASE\r
1338         GF_IPMPX_ByteArray      *main_class;\r
1339         GF_IPMPX_ByteArray      *subClass;\r
1340         GF_IPMPX_ByteArray      *typeData;\r
1341         GF_IPMPX_ByteArray      *type;\r
1342         GF_IPMPX_ByteArray      *addedData;\r
1343 } GF_IPMPX_ParametricDescriptionItem;\r
1344 \r
1345 typedef struct _tagIPMPXParamDesc\r
1346 {\r
1347         GF_IPMPX_DATA_BASE\r
1348         GF_IPMPX_ByteArray *descriptionComment;\r
1349         u8 majorVersion;\r
1350         u8 minorVersion;\r
1351         /*list of GF_IPMPX_ParametricDescriptionItem*/\r
1352         GF_List *descriptions;\r
1353 } GF_IPMPX_ParametricDescription;\r
1354 \r
1355 typedef struct\r
1356 {\r
1357         GF_IPMPX_DATA_BASE\r
1358         GF_IPMPX_ParametricDescription *description;\r
1359 } GF_IPMPX_ToolParamCapabilitiesQuery;\r
1360 \r
1361 typedef struct\r
1362 {\r
1363         GF_IPMPX_DATA_BASE\r
1364         Bool capabilitiesSupported;\r
1365 } GF_IPMPX_ToolParamCapabilitiesResponse;\r
1366 \r
1367 \r
1368 typedef struct\r
1369 {\r
1370         GF_IPMPX_DATA_BASE\r
1371         GF_IPMP_Descriptor *toolDescriptor;\r
1372 } GF_IPMPX_ConnectTool;\r
1373 \r
1374 typedef struct\r
1375 {\r
1376         GF_IPMPX_DATA_BASE\r
1377         u32 IPMP_ToolContextID;\r
1378 } GF_IPMPX_DisconnectTool;\r
1379 \r
1380 \r
1381 typedef struct\r
1382 {\r
1383         GF_IPMPX_DATA_BASE\r
1384     u8 scope;\r
1385         u16 IPMP_DescriptorIDEx;\r
1386 } GF_IPMPX_GetToolContext;\r
1387 \r
1388 \r
1389 typedef struct\r
1390 {\r
1391         GF_IPMPX_DATA_BASE\r
1392     u16 OD_ID;\r
1393         u16 ESD_ID;\r
1394     u32 IPMP_ToolContextID;\r
1395 } GF_IPMPX_GetToolContextResponse;\r
1396 \r
1397 /*GF_IPMPX_LISTEN_Types*/\r
1398 enum\r
1399 {\r
1400         GF_IPMPX_LISTEN_CONNECTED = 0x00,\r
1401         GF_IPMPX_LISTEN_CONNECTIONFAILED = 0x01,\r
1402         GF_IPMPX_LISTEN_DISCONNECTED = 0x02,\r
1403         GF_IPMPX_LISTEN_DISCONNECTIONFAILED = 0x03,\r
1404         GF_IPMPX_LISTEN_WATERMARKDETECTED = 0x04,\r
1405 };\r
1406 \r
1407 typedef struct\r
1408 {\r
1409         GF_IPMPX_DATA_BASE\r
1410         u8 scope;\r
1411         /*events to listen to*/\r
1412         u8 eventTypeCount;\r
1413         u8 eventType[10];\r
1414 } GF_IPMPX_AddToolNotificationListener;\r
1415 \r
1416 typedef struct\r
1417 {\r
1418         GF_IPMPX_DATA_BASE\r
1419         u8 eventTypeCount;\r
1420         u8 eventType[10];\r
1421 } GF_IPMPX_RemoveToolNotificationListener;\r
1422 \r
1423 typedef struct\r
1424 {\r
1425         GF_IPMPX_DATA_BASE\r
1426         u16 OD_ID;\r
1427         u16 ESD_ID;\r
1428         u8 eventType;\r
1429         u32 IPMP_ToolContextID;\r
1430 } GF_IPMPX_NotifyToolEvent;\r
1431 \r
1432 typedef struct\r
1433 {\r
1434         GF_IPMPX_DATA_BASE\r
1435         Bool canProcess;\r
1436 } GF_IPMPX_CanProcess;\r
1437 \r
1438 typedef struct\r
1439 {\r
1440         GF_IPMPX_DATA_BASE\r
1441         GF_IPMPX_ByteArray *opaqueData;\r
1442 } GF_IPMPX_OpaqueData;\r
1443 \r
1444 \r
1445 typedef struct\r
1446 {\r
1447         GF_IPMPX_DATA_BASE\r
1448         GF_IPMPX_ByteArray *keyBody;\r
1449         /*flags meaning\r
1450         hasStartDTS = 1;\r
1451         hasStartPacketID = 1<<1;\r
1452         hasExpireDTS = 1<<2;\r
1453         hasExpirePacketID = 1<<3\r
1454         */\r
1455         u32 flags;\r
1456 \r
1457         u64 startDTS;\r
1458         u32 startPacketID;\r
1459         u64 expireDTS;\r
1460         u32 expirePacketID;\r
1461         GF_IPMPX_ByteArray *OpaqueData;\r
1462 } GF_IPMPX_KeyData;\r
1463 \r
1464 typedef struct\r
1465 {\r
1466         GF_IPMPX_DATA_BASE\r
1467         GF_IPMPX_ByteArray *rightsInfo; \r
1468 } GF_IPMPX_RightsData;\r
1469 \r
1470 \r
1471 /*not a real GF_IPMPX_Data in spec, but emulated as if for parsing*/\r
1472 typedef struct\r
1473 {\r
1474         GF_IPMPX_DATA_BASE\r
1475         bin128 cipher_Id; \r
1476         u8 syncBoundary;\r
1477         /*block mode if stream cypher info is NULL*/\r
1478         u8 mode;  \r
1479         u16 blockSize;\r
1480         u16 keySize;\r
1481         GF_IPMPX_ByteArray *Stream_Cipher_Specific_Init_Info; \r
1482 } GF_IPMPX_SelEncBuffer;\r
1483 \r
1484 /*not a real GF_IPMPX_Data in spec, but emulated as if for parsing*/\r
1485 typedef struct\r
1486 {\r
1487         GF_IPMPX_DATA_BASE\r
1488         u8 field_Id; \r
1489         u8 field_Scope;\r
1490         u8 buf; \r
1491 \r
1492         u16 mappingTableSize;\r
1493         u16 *mappingTable;\r
1494         GF_IPMPX_ByteArray *shuffleSpecificInfo;\r
1495 } GF_IPMPX_SelEncField;\r
1496 \r
1497 \r
1498 /*mediaTypeExtension*/\r
1499 enum\r
1500 {\r
1501         GF_IPMPX_SE_MT_ISO_IEC = 0x00,\r
1502         GF_IPMPX_SE_MT_ITU = 0x01\r
1503         /*the rest is reserved or forbidden*/\r
1504 };\r
1505 \r
1506 /*compliance*/\r
1507 enum\r
1508 {\r
1509         GF_IPMPX_SE_COMP_FULLY = 0x00,\r
1510         GF_IPMPX_SE_COMP_VIDEO_PACKETS = 0x01,\r
1511         GF_IPMPX_SE_COMP_VIDEO_VOP = 0x02,\r
1512         GF_IPMPX_SE_COMP_VIDEO_NONE = 0x03,\r
1513         GF_IPMPX_SE_COMP_VIDEO_GOB = 0x04,\r
1514         /*0x05-2F       ISO Reserved for video*/\r
1515         GF_IPMPX_SE_COMP_AAC_DF = 0x30,\r
1516         GF_IPMPX_SE_COMP_AAC_NONE = 0x31,\r
1517         /*\r
1518         0x32 -  0x5F    ISO Reserved for audio\r
1519         0x60 - 0xCF     ISO Reserved\r
1520         0xD0 - 0xFE     User Defined\r
1521         0xFF    Forbidden\r
1522         */\r
1523 };\r
1524 \r
1525 /*syncBoundary*/\r
1526 enum\r
1527 {\r
1528         GF_IPMPX_SE_SYNC_VID7EO_PACKETS = 0x00,\r
1529         GF_IPMPX_SE_SYNC_VIDEO_VOP = 0x01,\r
1530         GF_IPMPX_SE_SYNC_VIDEO_GOV = 0x02,\r
1531         /*0x03-2F       ISO Reserved for video,*/\r
1532         GF_IPMPX_SE_SYNC_AAC_DF = 0x30,\r
1533         /*0x31 -  0x5F  ISO Reserved for audio\r
1534         0x60 - 0xCF     ISO Reserved\r
1535         0xD0 - 0xFE     User Defined\r
1536         0xFF    Forbidden\r
1537         */\r
1538 };\r
1539 \r
1540 /*field_Id*/\r
1541 enum\r
1542 {\r
1543         GF_IPMPX_SE_FID_VIDEO_MV = 0x00,\r
1544         GF_IPMPX_SE_FID_VIDEO_DC = 0x01,\r
1545         GF_IPMPX_SE_FID_VIDEO_DCT_SIGN = 0x02,\r
1546         GF_IPMPX_SE_FID_VIDEO_DQUANT = 0x03,\r
1547         GF_IPMPX_SE_FID_VIDEO_DCT_COEF = 0x04,\r
1548         GF_IPMPX_SE_FID_VIDEO_ALL = 0x05,\r
1549         /*0x06-2F       ISO Reserved for video*/\r
1550         GF_IPMPX_SE_FID_AAC_SIGN = 0x30,\r
1551         GF_IPMPX_SE_FID_AAC_CODEWORDS = 0x31,\r
1552         GF_IPMPX_SE_FID_AAC_SCALE = 0x32,\r
1553         /*0x32 -  0x5F  ISO Reserved for audio\r
1554         0x60 - 0xCF     ISO Reserved\r
1555         0xD0 - 0xFE     User Defined\r
1556         0xFF    Forbidden*/\r
1557 };\r
1558 \r
1559 \r
1560 typedef struct\r
1561 {\r
1562         GF_IPMPX_DATA_BASE\r
1563         u8 mediaTypeExtension; \r
1564         u8 mediaTypeIndication;\r
1565         u8 profileLevelIndication; \r
1566         u8 compliance;\r
1567 \r
1568         GF_List *SelEncBuffer;\r
1569 \r
1570         GF_List *SelEncFields;\r
1571 \r
1572         u16 RLE_DataLength;\r
1573         u16 *RLE_Data;\r
1574 } GF_IPMPX_SelectiveDecryptionInit;\r
1575 \r
1576 \r
1577 /*watermark init ops*/\r
1578 enum\r
1579 {\r
1580         GF_IPMPX_WM_INSERT = 0,\r
1581         GF_IPMPX_WM_EXTRACT = 1,\r
1582         GF_IPMPX_WM_REMARK = 2,\r
1583         GF_IPMPX_WM_DETECT_COMPRESSION = 3,\r
1584 };\r
1585 \r
1586 /*used for both audio and video WM init*/\r
1587 typedef struct\r
1588 {\r
1589         GF_IPMPX_DATA_BASE\r
1590         /*\r
1591         for audio: PCM defined (0x01) and all audio objectTypeIndications\r
1592         for video: YUV defined (0x01) and all visual objectTypeIndications\r
1593         */\r
1594         u8 inputFormat;\r
1595         u8 requiredOp;\r
1596 \r
1597         /*valid for audio WM, inputFormat=0x01*/\r
1598         u8 nChannels;\r
1599         u8 bitPerSample;\r
1600         u32 frequency;\r
1601 \r
1602         /*valid for video WM, inputFormat=0x01*/\r
1603         u16 frame_horizontal_size;\r
1604         u16 frame_vertical_size;\r
1605         u8 chroma_format;\r
1606 \r
1607         u32 wmPayloadLen;\r
1608         char *wmPayload;\r
1609 \r
1610         u16 wmRecipientId;\r
1611         \r
1612         u32 opaqueDataSize;\r
1613         char *opaqueData;\r
1614 } GF_IPMPX_WatermarkingInit;\r
1615 \r
1616 \r
1617 \r
1618 /*WM status*/\r
1619 enum\r
1620 {\r
1621         GF_IPMPX_WM_PAYLOAD = 0,\r
1622         GF_IPMPX_WM_NOPAYLOAD = 1,\r
1623         GF_IPMPX_WM_NONE = 2,\r
1624         GF_IPMPX_WM_UNKNOWN = 3\r
1625 };\r
1626 \r
1627 /*compression status*/\r
1628 enum\r
1629 {\r
1630         GF_IPMPX_WM_COMPRESSION = 0,\r
1631         GF_IPMPX_WM_NO_COMPRESSION = 1,\r
1632         GF_IPMPX_WM_COMPRESSION_UNKNOWN = 2,\r
1633 };\r
1634 \r
1635 typedef struct\r
1636 {\r
1637         GF_IPMPX_DATA_BASE\r
1638         u8 wm_status;\r
1639         u8 compression_status;\r
1640         /*if payload is set, status is FORCED to AUDIO_GF_IPMPX_WM_PAYLOAD*/\r
1641         GF_IPMPX_ByteArray *payload;\r
1642         GF_IPMPX_ByteArray *opaqueData;\r
1643 } GF_IPMPX_SendWatermark;\r
1644 \r
1645 \r
1646 typedef struct\r
1647 {\r
1648         GF_IPMPX_DATA_BASE\r
1649         /*GPAC only supports non-0 IDs*/\r
1650         u32 Instantiation_API_ID;\r
1651         u32 Messaging_API_ID;\r
1652         GF_IPMPX_ByteArray *opaqueData;\r
1653 } GF_IPMPX_ToolAPI_Config;\r
1654 \r
1655 typedef struct\r
1656 {\r
1657         GF_IPMPX_DATA_BASE\r
1658         u8 cryptoSuite;\r
1659         u8 IV_length;\r
1660         Bool use_selective_encryption;\r
1661         u8 key_indicator_length;\r
1662 } GF_IPMPX_ISMACryp;\r
1663 \r
1664 \r
1665 /*constructor/destructor*/\r
1666 GF_IPMPX_Data *gf_ipmpx_data_new(u8 tag);\r
1667 void gf_ipmpx_data_del(GF_IPMPX_Data *p);\r
1668 \r
1669 /*parse from bitstream*/\r
1670 GF_Err gf_ipmpx_data_parse(GF_BitStream *bs, GF_IPMPX_Data **out_data);\r
1671 /*get IPMP_Data contained size (eg without tag & sizeofinstance)*/\r
1672 u32 gf_ipmpx_data_size(GF_IPMPX_Data *p);\r
1673 /*get fulml IPMP_Data encoded size (eg with tag & sizeofinstance)*/\r
1674 u32 gf_ipmpx_data_full_size(GF_IPMPX_Data *p);\r
1675 /*writes IPMP_Data to buffer*/\r
1676 GF_Err gf_ipmpx_data_write(GF_BitStream *bs, GF_IPMPX_Data *_p);\r
1677 \r
1678 /*returns GF_IPMPX_Tag based on name*/\r
1679 u8 gf_ipmpx_get_tag(char *dataName);\r
1680 /*return values: cf above */\r
1681 u32 gf_ipmpx_get_field_type(GF_IPMPX_Data *p, char *fieldName);\r
1682 GF_Err gf_ipmpx_set_field(GF_IPMPX_Data *desc, char *fieldName, char *val);\r
1683 /*assign subdata*/\r
1684 GF_Err gf_ipmpx_set_sub_data(GF_IPMPX_Data *desc, char *fieldName, GF_IPMPX_Data *subdesc);\r
1685 /*assign bytearray*/\r
1686 GF_Err gf_ipmpx_set_byte_array(GF_IPMPX_Data *p, char *field, char *str);\r
1687 \r
1688 /*ipmpx dumper*/\r
1689 GF_Err gf_ipmpx_dump_data(GF_IPMPX_Data *_p, FILE *trace, u32 indent, Bool XMTDump);\r
1690 \r
1691 \r
1692 \r
1693 #ifdef __cplusplus\r
1694 }\r
1695 #endif\r
1696 \r
1697 #endif  /*_GF_MPEG4_ODF_H_*/\r