32#ifndef _ACFUTILS_DSF_H_
33#define _ACFUTILS_DSF_H_
45#define DSF_ATOM(a, b, c, d) (((a) << 24) | ((b) << 16) | ((c) << 8) | (d))
47#define DSF_ATOM_HEAD DSF_ATOM('H', 'E', 'A', 'D')
48#define DSF_ATOM_PROP DSF_ATOM('P', 'R', 'O', 'P')
50#define DSF_ATOM_DEFN DSF_ATOM('D', 'E', 'F', 'N')
51#define DSF_ATOM_TERT DSF_ATOM('T', 'E', 'R', 'T')
52#define DSF_ATOM_OBJT DSF_ATOM('O', 'B', 'J', 'T')
53#define DSF_ATOM_POLY DSF_ATOM('P', 'O', 'L', 'Y')
54#define DSF_ATOM_NEWT DSF_ATOM('N', 'E', 'T', 'W')
56#define DSF_ATOM_DEMN DSF_ATOM('D', 'E', 'M', 'N')
57#define DSF_ATOM_GEOD DSF_ATOM('G', 'E', 'O', 'D')
58#define DSF_ATOM_POOL DSF_ATOM('P', 'O', 'O', 'L')
59#define DSF_ATOM_SCAL DSF_ATOM('S', 'C', 'A', 'L')
60#define DSF_ATOM_PO32 DSF_ATOM('P', 'O', '3', '2')
61#define DSF_ATOM_SC32 DSF_ATOM('S', 'C', '3', '2')
63#define DSF_ATOM_DEMS DSF_ATOM('D', 'E', 'M', 'S')
64#define DSF_ATOM_DEMI DSF_ATOM('D', 'E', 'M', 'I')
65#define DSF_ATOM_DEMD DSF_ATOM('D', 'E', 'M', 'D')
67#define DSF_ATOM_CMDS DSF_ATOM('C', 'M', 'D', 'S')
69enum { DSF_REASON_SZ = 256 };
71#define DSF_ATOM_ID_PRINTF(atom) \
72 ((atom)->id & 0xff000000) >> 24, \
73 ((atom)->id & 0xff0000) >> 16, \
74 ((atom)->id & 0xff00) >> 8, \
90 DSF_ENC_DIFF = 1 << 0,
92} dsf_data_plane_enc_t;
109 DEMI_POST_CTR = 1 << 2
123 dsf_data_type_t data_type;
125 unsigned plane_count;
128 int16_t **data_sint16;
129 uint16_t **data_uint16;
130 int32_t **data_sint32;
131 uint32_t **data_uint32;
132 int64_t **data_sint64;
133 uint64_t **data_uint64;
142 const uint8_t *payload;
144 unsigned long long file_off;
146 bool_t subtype_inited;
171 DSF_JUNCT_OFFSET_SEL,
186 DSF_TERR_PATCH_FLAGS,
187 DSF_TERR_PATCH_FLAGS_N_LOD,
189 DSF_PATCH_TRIA_XPOOL,
191 DSF_PATCH_TRIA_STRIP,
192 DSF_PATCH_TRIA_STRIP_XPOOL,
193 DSF_PATCH_TRIA_STRIP_RNG,
195 DSF_PATCH_TRIA_FAN_XPOOL,
196 DSF_PATCH_TRIA_FAN_RNG,
222 unsigned last_plus_one;
227 unsigned indices[255];
242 unsigned indices[255];
248 unsigned last_plus_one;
262typedef void (*dsf_cmd_cb_t)(dsf_cmd_t cmd,
const void *cmd_args,
267 char reason[DSF_REASON_SZ]);
277 dsf_cmd_cb_t user_cbs[NUM_DSF_CMDS],
278 void *userinfo,
char reason[DSF_REASON_SZ]);
const dsf_atom_t * dsf_iter(const dsf_atom_t *parent, uint32_t atom_id, const dsf_atom_t *prev)
const dsf_atom_t * dsf_lookup_v(const dsf_t *dsf, const dsf_lookup_t *lookup)
bool_t dsf_parse_cmds(const dsf_t *dsf, dsf_cmd_cb_t user_cbs[NUM_DSF_CMDS], void *userinfo, char reason[DSF_REASON_SZ])
dsf_t * dsf_parse(uint8_t *buf, size_t bufsz, char reason[DSF_REASON_SZ])
const dsf_atom_t * dsf_lookup(const dsf_t *dsf,...)
const char * dsf_cmd2str(dsf_cmd_t cmd)
dsf_t * dsf_init(const char *filename)
void dsf_fini(dsf_t *dsf)
char * dsf_dump(const dsf_t *dsf)