1 /*****************************************************************************
3 *****************************************************************************
4 * Copyright (C) 2017 L-SMASH project
6 * Authors: Yusuke Nakamura <muken.the.vfrmaniac@gmail.com>
8 * Permission to use, copy, modify, and/or distribute this software for any
9 * purpose with or without fee is hereby granted, provided that the above
10 * copyright notice and this permission notice appear in all copies.
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 *****************************************************************************/
21 /* This file is available under an ISC license. */
23 #define ALLOCATE_BOX( box_name ) \
24 (isom_##box_name##_t *)allocate_box_by_default( &isom_##box_name##_box_default, \
25 sizeof(isom_##box_name##_box_default) )
27 #define DEFINE_BOX_DEFAULT_CONSTANT( box_name ) \
28 extern const isom_##box_name##_t isom_##box_name##_box_default; \
29 static inline isom_##box_name##_t *isom_non_existing_##box_name( void ) \
31 return (isom_##box_name##_t *)&isom_##box_name##_box_default; \
34 DEFINE_BOX_DEFAULT_CONSTANT( dummy
)
35 DEFINE_BOX_DEFAULT_CONSTANT( unknown
)
36 DEFINE_BOX_DEFAULT_CONSTANT( ftyp
)
37 DEFINE_BOX_DEFAULT_CONSTANT( ctab
)
38 DEFINE_BOX_DEFAULT_CONSTANT( tkhd
)
39 DEFINE_BOX_DEFAULT_CONSTANT( clef
)
40 DEFINE_BOX_DEFAULT_CONSTANT( prof
)
41 DEFINE_BOX_DEFAULT_CONSTANT( enof
)
42 DEFINE_BOX_DEFAULT_CONSTANT( tapt
)
43 DEFINE_BOX_DEFAULT_CONSTANT( elst
)
44 DEFINE_BOX_DEFAULT_CONSTANT( edts
)
45 DEFINE_BOX_DEFAULT_CONSTANT( tref_type
)
46 DEFINE_BOX_DEFAULT_CONSTANT( tref
)
47 DEFINE_BOX_DEFAULT_CONSTANT( mdhd
)
48 DEFINE_BOX_DEFAULT_CONSTANT( hdlr
)
49 DEFINE_BOX_DEFAULT_CONSTANT( vmhd
)
50 DEFINE_BOX_DEFAULT_CONSTANT( smhd
)
51 DEFINE_BOX_DEFAULT_CONSTANT( hmhd
)
52 DEFINE_BOX_DEFAULT_CONSTANT( nmhd
)
53 DEFINE_BOX_DEFAULT_CONSTANT( gmin
)
54 DEFINE_BOX_DEFAULT_CONSTANT( text
)
55 DEFINE_BOX_DEFAULT_CONSTANT( gmhd
)
56 DEFINE_BOX_DEFAULT_CONSTANT( dref_entry
)
57 DEFINE_BOX_DEFAULT_CONSTANT( dref
)
58 DEFINE_BOX_DEFAULT_CONSTANT( dinf
)
59 DEFINE_BOX_DEFAULT_CONSTANT( esds
)
60 DEFINE_BOX_DEFAULT_CONSTANT( btrt
)
61 DEFINE_BOX_DEFAULT_CONSTANT( glbl
)
62 DEFINE_BOX_DEFAULT_CONSTANT( clap
)
63 DEFINE_BOX_DEFAULT_CONSTANT( pasp
)
64 DEFINE_BOX_DEFAULT_CONSTANT( colr
)
65 DEFINE_BOX_DEFAULT_CONSTANT( gama
)
66 DEFINE_BOX_DEFAULT_CONSTANT( fiel
)
67 DEFINE_BOX_DEFAULT_CONSTANT( cspc
)
68 DEFINE_BOX_DEFAULT_CONSTANT( sgbt
)
69 DEFINE_BOX_DEFAULT_CONSTANT( stsl
)
70 DEFINE_BOX_DEFAULT_CONSTANT( sample_entry
)
71 DEFINE_BOX_DEFAULT_CONSTANT( mp4s_entry
)
72 DEFINE_BOX_DEFAULT_CONSTANT( visual_entry
)
73 DEFINE_BOX_DEFAULT_CONSTANT( frma
)
74 DEFINE_BOX_DEFAULT_CONSTANT( enda
)
75 DEFINE_BOX_DEFAULT_CONSTANT( mp4a
)
76 DEFINE_BOX_DEFAULT_CONSTANT( terminator
)
77 DEFINE_BOX_DEFAULT_CONSTANT( wave
)
78 DEFINE_BOX_DEFAULT_CONSTANT( chan
)
79 DEFINE_BOX_DEFAULT_CONSTANT( srat
)
80 DEFINE_BOX_DEFAULT_CONSTANT( audio_entry
)
81 DEFINE_BOX_DEFAULT_CONSTANT( hint_entry
)
82 DEFINE_BOX_DEFAULT_CONSTANT( metadata_entry
)
83 DEFINE_BOX_DEFAULT_CONSTANT( qt_text_entry
)
84 DEFINE_BOX_DEFAULT_CONSTANT( ftab
)
85 DEFINE_BOX_DEFAULT_CONSTANT( tx3g_entry
)
86 DEFINE_BOX_DEFAULT_CONSTANT( stsd
)
87 DEFINE_BOX_DEFAULT_CONSTANT( stts
)
88 DEFINE_BOX_DEFAULT_CONSTANT( ctts
)
89 DEFINE_BOX_DEFAULT_CONSTANT( cslg
)
90 DEFINE_BOX_DEFAULT_CONSTANT( stsz
)
91 DEFINE_BOX_DEFAULT_CONSTANT( stz2
)
92 DEFINE_BOX_DEFAULT_CONSTANT( stss
)
93 DEFINE_BOX_DEFAULT_CONSTANT( stps
)
94 DEFINE_BOX_DEFAULT_CONSTANT( sdtp
)
95 DEFINE_BOX_DEFAULT_CONSTANT( stsc
)
96 DEFINE_BOX_DEFAULT_CONSTANT( stco
)
97 DEFINE_BOX_DEFAULT_CONSTANT( sgpd
)
98 DEFINE_BOX_DEFAULT_CONSTANT( sbgp
)
99 DEFINE_BOX_DEFAULT_CONSTANT( stbl
)
100 DEFINE_BOX_DEFAULT_CONSTANT( minf
)
101 DEFINE_BOX_DEFAULT_CONSTANT( mdia
)
102 DEFINE_BOX_DEFAULT_CONSTANT( mvhd
)
103 DEFINE_BOX_DEFAULT_CONSTANT( iods
)
104 DEFINE_BOX_DEFAULT_CONSTANT( mdat
)
105 DEFINE_BOX_DEFAULT_CONSTANT( skip
)
106 DEFINE_BOX_DEFAULT_CONSTANT( chpl
)
107 DEFINE_BOX_DEFAULT_CONSTANT( keys
)
108 DEFINE_BOX_DEFAULT_CONSTANT( mean
)
109 DEFINE_BOX_DEFAULT_CONSTANT( name
)
110 DEFINE_BOX_DEFAULT_CONSTANT( data
)
111 DEFINE_BOX_DEFAULT_CONSTANT( metaitem
)
112 DEFINE_BOX_DEFAULT_CONSTANT( ilst
)
113 DEFINE_BOX_DEFAULT_CONSTANT( meta
)
114 DEFINE_BOX_DEFAULT_CONSTANT( WLOC
)
115 DEFINE_BOX_DEFAULT_CONSTANT( LOOP
)
116 DEFINE_BOX_DEFAULT_CONSTANT( SelO
)
117 DEFINE_BOX_DEFAULT_CONSTANT( AllF
)
118 DEFINE_BOX_DEFAULT_CONSTANT( cprt
)
119 DEFINE_BOX_DEFAULT_CONSTANT( udta
)
120 DEFINE_BOX_DEFAULT_CONSTANT( mehd
)
121 DEFINE_BOX_DEFAULT_CONSTANT( trex
)
122 DEFINE_BOX_DEFAULT_CONSTANT( mvex
)
123 DEFINE_BOX_DEFAULT_CONSTANT( mfhd
)
124 DEFINE_BOX_DEFAULT_CONSTANT( tfhd
)
125 DEFINE_BOX_DEFAULT_CONSTANT( tfdt
)
126 DEFINE_BOX_DEFAULT_CONSTANT( trun
)
127 DEFINE_BOX_DEFAULT_CONSTANT( traf
)
128 DEFINE_BOX_DEFAULT_CONSTANT( moof
)
129 DEFINE_BOX_DEFAULT_CONSTANT( tfra
)
130 DEFINE_BOX_DEFAULT_CONSTANT( mfro
)
131 DEFINE_BOX_DEFAULT_CONSTANT( mfra
)
132 DEFINE_BOX_DEFAULT_CONSTANT( trak
)
133 DEFINE_BOX_DEFAULT_CONSTANT( moov
)
134 DEFINE_BOX_DEFAULT_CONSTANT( styp
)
135 DEFINE_BOX_DEFAULT_CONSTANT( sidx
)
136 DEFINE_BOX_DEFAULT_CONSTANT( file_abstract
)
137 DEFINE_BOX_DEFAULT_CONSTANT( root_abstract
)
139 void *allocate_box_by_default
141 const void *nonexist_ptr
,
142 const size_t data_type_size