box: Initialize predefined children by non-existing box constants whenever
[L-SMASH.git] / core / box_default.h
blob553915787115517168d45b7892bf3c1d83078680
1 /*****************************************************************************
2 * box_default.h
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 ) \
30 { \
31 return (isom_##box_name##_t *)&isom_##box_name##_box_default; \
34 DEFINE_BOX_DEFAULT_CONSTANT( unknown )
35 DEFINE_BOX_DEFAULT_CONSTANT( ftyp )
36 DEFINE_BOX_DEFAULT_CONSTANT( ctab )
37 DEFINE_BOX_DEFAULT_CONSTANT( tkhd )
38 DEFINE_BOX_DEFAULT_CONSTANT( clef )
39 DEFINE_BOX_DEFAULT_CONSTANT( prof )
40 DEFINE_BOX_DEFAULT_CONSTANT( enof )
41 DEFINE_BOX_DEFAULT_CONSTANT( tapt )
42 DEFINE_BOX_DEFAULT_CONSTANT( elst )
43 DEFINE_BOX_DEFAULT_CONSTANT( edts )
44 DEFINE_BOX_DEFAULT_CONSTANT( tref_type )
45 DEFINE_BOX_DEFAULT_CONSTANT( tref )
46 DEFINE_BOX_DEFAULT_CONSTANT( mdhd )
47 DEFINE_BOX_DEFAULT_CONSTANT( hdlr )
48 DEFINE_BOX_DEFAULT_CONSTANT( vmhd )
49 DEFINE_BOX_DEFAULT_CONSTANT( smhd )
50 DEFINE_BOX_DEFAULT_CONSTANT( hmhd )
51 DEFINE_BOX_DEFAULT_CONSTANT( nmhd )
52 DEFINE_BOX_DEFAULT_CONSTANT( gmin )
53 DEFINE_BOX_DEFAULT_CONSTANT( text )
54 DEFINE_BOX_DEFAULT_CONSTANT( gmhd )
55 DEFINE_BOX_DEFAULT_CONSTANT( dref_entry )
56 DEFINE_BOX_DEFAULT_CONSTANT( dref )
57 DEFINE_BOX_DEFAULT_CONSTANT( dinf )
58 DEFINE_BOX_DEFAULT_CONSTANT( esds )
59 DEFINE_BOX_DEFAULT_CONSTANT( btrt )
60 DEFINE_BOX_DEFAULT_CONSTANT( glbl )
61 DEFINE_BOX_DEFAULT_CONSTANT( clap )
62 DEFINE_BOX_DEFAULT_CONSTANT( pasp )
63 DEFINE_BOX_DEFAULT_CONSTANT( colr )
64 DEFINE_BOX_DEFAULT_CONSTANT( gama )
65 DEFINE_BOX_DEFAULT_CONSTANT( fiel )
66 DEFINE_BOX_DEFAULT_CONSTANT( cspc )
67 DEFINE_BOX_DEFAULT_CONSTANT( sgbt )
68 DEFINE_BOX_DEFAULT_CONSTANT( stsl )
69 DEFINE_BOX_DEFAULT_CONSTANT( sample_entry )
70 DEFINE_BOX_DEFAULT_CONSTANT( mp4s_entry )
71 DEFINE_BOX_DEFAULT_CONSTANT( visual_entry )
72 DEFINE_BOX_DEFAULT_CONSTANT( frma )
73 DEFINE_BOX_DEFAULT_CONSTANT( enda )
74 DEFINE_BOX_DEFAULT_CONSTANT( mp4a )
75 DEFINE_BOX_DEFAULT_CONSTANT( terminator )
76 DEFINE_BOX_DEFAULT_CONSTANT( wave )
77 DEFINE_BOX_DEFAULT_CONSTANT( chan )
78 DEFINE_BOX_DEFAULT_CONSTANT( srat )
79 DEFINE_BOX_DEFAULT_CONSTANT( audio_entry )
80 DEFINE_BOX_DEFAULT_CONSTANT( hint_entry )
81 DEFINE_BOX_DEFAULT_CONSTANT( metadata_entry )
82 DEFINE_BOX_DEFAULT_CONSTANT( qt_text_entry )
83 DEFINE_BOX_DEFAULT_CONSTANT( ftab )
84 DEFINE_BOX_DEFAULT_CONSTANT( tx3g_entry )
85 DEFINE_BOX_DEFAULT_CONSTANT( stsd )
86 DEFINE_BOX_DEFAULT_CONSTANT( stts )
87 DEFINE_BOX_DEFAULT_CONSTANT( ctts )
88 DEFINE_BOX_DEFAULT_CONSTANT( cslg )
89 DEFINE_BOX_DEFAULT_CONSTANT( stsz )
90 DEFINE_BOX_DEFAULT_CONSTANT( stz2 )
91 DEFINE_BOX_DEFAULT_CONSTANT( stss )
92 DEFINE_BOX_DEFAULT_CONSTANT( stps )
93 DEFINE_BOX_DEFAULT_CONSTANT( sdtp )
94 DEFINE_BOX_DEFAULT_CONSTANT( stsc )
95 DEFINE_BOX_DEFAULT_CONSTANT( stco )
96 DEFINE_BOX_DEFAULT_CONSTANT( sgpd )
97 DEFINE_BOX_DEFAULT_CONSTANT( sbgp )
98 DEFINE_BOX_DEFAULT_CONSTANT( stbl )
99 DEFINE_BOX_DEFAULT_CONSTANT( minf )
100 DEFINE_BOX_DEFAULT_CONSTANT( mdia )
101 DEFINE_BOX_DEFAULT_CONSTANT( mvhd )
102 DEFINE_BOX_DEFAULT_CONSTANT( iods )
103 DEFINE_BOX_DEFAULT_CONSTANT( mdat )
104 DEFINE_BOX_DEFAULT_CONSTANT( skip )
105 DEFINE_BOX_DEFAULT_CONSTANT( chpl )
106 DEFINE_BOX_DEFAULT_CONSTANT( keys )
107 DEFINE_BOX_DEFAULT_CONSTANT( mean )
108 DEFINE_BOX_DEFAULT_CONSTANT( name )
109 DEFINE_BOX_DEFAULT_CONSTANT( data )
110 DEFINE_BOX_DEFAULT_CONSTANT( metaitem )
111 DEFINE_BOX_DEFAULT_CONSTANT( ilst )
112 DEFINE_BOX_DEFAULT_CONSTANT( meta )
113 DEFINE_BOX_DEFAULT_CONSTANT( WLOC )
114 DEFINE_BOX_DEFAULT_CONSTANT( LOOP )
115 DEFINE_BOX_DEFAULT_CONSTANT( SelO )
116 DEFINE_BOX_DEFAULT_CONSTANT( AllF )
117 DEFINE_BOX_DEFAULT_CONSTANT( cprt )
118 DEFINE_BOX_DEFAULT_CONSTANT( udta )
119 DEFINE_BOX_DEFAULT_CONSTANT( mehd )
120 DEFINE_BOX_DEFAULT_CONSTANT( trex )
121 DEFINE_BOX_DEFAULT_CONSTANT( mvex )
122 DEFINE_BOX_DEFAULT_CONSTANT( mfhd )
123 DEFINE_BOX_DEFAULT_CONSTANT( tfhd )
124 DEFINE_BOX_DEFAULT_CONSTANT( tfdt )
125 DEFINE_BOX_DEFAULT_CONSTANT( trun )
126 DEFINE_BOX_DEFAULT_CONSTANT( traf )
127 DEFINE_BOX_DEFAULT_CONSTANT( moof )
128 DEFINE_BOX_DEFAULT_CONSTANT( tfra )
129 DEFINE_BOX_DEFAULT_CONSTANT( mfro )
130 DEFINE_BOX_DEFAULT_CONSTANT( mfra )
131 DEFINE_BOX_DEFAULT_CONSTANT( trak )
132 DEFINE_BOX_DEFAULT_CONSTANT( moov )
133 DEFINE_BOX_DEFAULT_CONSTANT( styp )
134 DEFINE_BOX_DEFAULT_CONSTANT( sidx )
135 DEFINE_BOX_DEFAULT_CONSTANT( file_abstract )
136 DEFINE_BOX_DEFAULT_CONSTANT( root_abstract )
138 void *allocate_box_by_default
140 const void *nonexist_ptr,
141 const size_t data_type_size