initial commit
[goodguy/history.git] / cinelerra-5.0 / quicktime / funcprotos.h
1 #ifndef FUNCPROTOS_H
2 #define FUNCPROTOS_H
3
4 #include "graphics.h"
5 #include "qtprivate.h"
6
7 // Used internally to replace ftello values
8 int64_t quicktime_byte_position(quicktime_t *file);
9 int64_t quicktime_ftell(quicktime_t *file);
10 int quicktime_fseek(quicktime_t *file,int64_t offset);
11
12 quicktime_trak_t* quicktime_add_track(quicktime_t *file);
13
14
15
16 int quicktime_file_open(quicktime_t *file, char *path, int rd, int wr);
17 int quicktime_file_close(quicktime_t *file);
18 int64_t quicktime_get_file_length(char *path);
19
20 /* Initialize audio_map_t and video_map_t objects after loading headers */
21 /* Called by quicktime_read_info */
22 void quicktime_init_maps(quicktime_t *file);
23
24 int quicktime_read_char(quicktime_t *file);
25 float quicktime_read_fixed32(quicktime_t *file);
26 float quicktime_read_fixed16(quicktime_t *file);
27 int64_t quicktime_read_int64(quicktime_t *file);
28 int64_t quicktime_read_int64_le(quicktime_t *file);
29 unsigned long quicktime_read_uint32(quicktime_t *file);
30 long quicktime_read_int32(quicktime_t *file);
31 long quicktime_read_int32_le(quicktime_t *file);
32 long quicktime_read_int24(quicktime_t *file);
33 int64_t quicktime_position(quicktime_t *file);
34 int quicktime_set_position(quicktime_t *file, int64_t position);
35 int quicktime_write_fixed32(quicktime_t *file, float number);
36 int quicktime_write_char(quicktime_t *file, char x);
37 int quicktime_write_int16(quicktime_t *file, int number);
38 int quicktime_write_int16_le(quicktime_t *file, int number);
39 int quicktime_write_int24(quicktime_t *file, long number);
40 int quicktime_write_int32(quicktime_t *file, long value);
41 int quicktime_write_int32_le(quicktime_t *file, long value);
42 int quicktime_write_int64(quicktime_t *file, int64_t value);
43 int quicktime_write_int64_le(quicktime_t *file, int64_t value);
44 int quicktime_write_char32(quicktime_t *file, char *string);
45 int quicktime_write_fixed16(quicktime_t *file, float number);
46 int quicktime_read_int16(quicktime_t *file);
47 int quicktime_read_int16_le(quicktime_t *file);
48 void quicktime_copy_char32(char *output,char *input);
49 void quicktime_read_char32(quicktime_t *file,char *string);
50
51 /* Returns number of bytes written */
52 int quicktime_write_data(quicktime_t *file, char *data, int size);
53 /* Enable or disable presave */
54 void quicktime_set_presave(quicktime_t *file, int value);
55 /* Returns 1 if equal or 0 if different */
56 int quicktime_match_32(char *input, char *output);
57 int quicktime_match_24(char *input, char *output);
58 void quicktime_print_chars(char *desc,char *input,int len);
59 void quicktime_write_pascal(quicktime_t *file, char *data);
60 void quicktime_read_pascal(quicktime_t *file,char *data);
61 int quicktime_read_data(quicktime_t *file, char *data, int64_t size);
62 /* Quantize the number to the nearest multiple of 16 */
63 /* Used by ffmpeg codecs */
64 int quicktime_quantize2(int number);
65 int quicktime_quantize8(int number);
66 int quicktime_quantize16(int number);
67 int quicktime_quantize32(int number);
68
69
70
71 /* Convert Microsoft audio id to codec */
72 void quicktime_id_to_codec(char *result, int id);
73
74 int quicktime_find_vcodec(quicktime_video_map_t *vtrack);
75 int quicktime_find_acodec(quicktime_audio_map_t *atrack);
76
77
78
79
80 /* Track functions */
81
82
83 /* Most codecs don't specify the actual number of bits on disk in the stbl. */
84 /* Convert the samples to the number of bytes for reading depending on the codec. */
85 int64_t quicktime_samples_to_bytes(quicktime_trak_t *track, long samples);
86
87 char* quicktime_compressor(quicktime_trak_t *trak);
88
89 /* Get median duration of video frames for calculating frame rate. */
90 int quicktime_sample_duration(quicktime_trak_t *trak);
91
92 /* Graphics */
93 quicktime_scaletable_t* quicktime_new_scaletable(int input_w, int input_h, int output_w, int output_h);
94
95
96
97 /* chunks always start on 1 */
98 /* samples start on 0 */
99
100 /* update the position pointers in all the tracks after a set_position */
101 int quicktime_update_positions(quicktime_t *file);
102
103
104
105
106
107
108
109 /* AVI section */
110 void quicktime_read_strh(quicktime_t *file, quicktime_atom_t *parent_atom);
111 void quicktime_write_strh(quicktime_t *file, int track);
112
113
114
115
116 /* Create new strl object for reading or writing */
117 quicktime_strl_t* quicktime_new_strl();
118 /* Initialize new strl object for writing */
119 void quicktime_init_strl(quicktime_t *file,
120         quicktime_audio_map_t *atrack,
121         quicktime_video_map_t *vtrack,
122         quicktime_trak_t *trak,
123         quicktime_strl_t *strl);
124 void quicktime_delete_strl(quicktime_strl_t *strl);
125 /* Read strl object */
126 void quicktime_read_strl(quicktime_t *file,
127         quicktime_strl_t *strl,
128         quicktime_atom_t *parent_atom);
129
130
131 void quicktime_delete_indx(quicktime_indx_t *indx);
132 void quicktime_init_indx(quicktime_t *file,
133         quicktime_indx_t *indx,
134         quicktime_strl_t *strl);
135 void quicktime_update_indx(quicktime_t *file,
136         quicktime_indx_t *indx,
137         quicktime_ix_t *ix);
138 void quicktime_finalize_indx(quicktime_t *file);
139 /* Called by quicktime_read_strl */
140 void quicktime_read_indx(quicktime_t *file,
141         quicktime_strl_t *strl,
142         quicktime_atom_t *parent_atom);
143
144
145
146 void quicktime_delete_hdrl(quicktime_t *file, quicktime_hdrl_t *hdrl);
147 void quicktime_read_hdrl(quicktime_t *file,
148         quicktime_hdrl_t *hdrl,
149         quicktime_atom_t *parent_atom);
150 void quicktime_init_hdrl(quicktime_t *file, quicktime_hdrl_t *hdrl);
151 void quicktime_finalize_hdrl(quicktime_t *file, quicktime_hdrl_t *hdrl);
152
153
154 /* Read movi and create objects */
155 void quicktime_delete_movi(quicktime_t *file, quicktime_movi_t *movi);
156 void quicktime_read_movi(quicktime_t *file,
157         quicktime_atom_t *parent_atom,
158         quicktime_movi_t *movi);
159 /* Write preliminary movi data and create objects */
160 void quicktime_init_movi(quicktime_t *file, quicktime_riff_t *riff);
161 void quicktime_finalize_movi(quicktime_t *file, quicktime_movi_t *movi);
162
163
164
165
166
167
168 void quicktime_delete_idx1(quicktime_idx1_t *idx1);
169 void quicktime_read_idx1(quicktime_t *file,
170         quicktime_riff_t *riff,
171         quicktime_atom_t *parent_atom);
172 void quicktime_write_idx1(quicktime_t *file,
173         quicktime_idx1_t *idx1);
174 /* Set the keyframe flag in the right IDX1 entry.  new_keyframes starts on 0 */
175 /* Used by quicktime_insert_keyframe */
176 void quicktime_set_idx1_keyframe(quicktime_t *file,
177         quicktime_trak_t *trak,
178         int new_keyframe);
179 /* Create new IDX1 entry.  Used by quicktime_write_chunk_footer */
180 void quicktime_update_idx1table(quicktime_t *file,
181         quicktime_trak_t *trak,
182         int offset,
183         int size);
184
185
186
187
188 void quicktime_read_odml(quicktime_t *file, quicktime_atom_t *parent_atom);
189 void quicktime_finalize_odml(quicktime_t *file, quicktime_hdrl_t *hdrl);
190 void quicktime_init_odml(quicktime_t *file, quicktime_hdrl_t *hdrl);
191
192
193
194
195
196
197
198
199 /* Create new riff and put on riff table */
200 quicktime_riff_t* quicktime_new_riff(quicktime_t *file);
201 void quicktime_delete_riff(quicktime_t *file, quicktime_riff_t *riff);
202 void quicktime_read_riff(quicktime_t *file,quicktime_atom_t *parent_atom);
203
204 /* Write riff header and initialize structures */
205 /* Only the first riff has a hdrl object */
206 void quicktime_init_riff(quicktime_t *file);
207 void quicktime_finalize_riff(quicktime_t *file, quicktime_riff_t *riff);
208 void quicktime_import_avi(quicktime_t *file);
209
210
211 /* Create ix object for writing only */
212 quicktime_ix_t* quicktime_new_ix(quicktime_t *file,
213         quicktime_trak_t *trak,
214         quicktime_strl_t *strl);
215 void quicktime_delete_ix(quicktime_ix_t *ix);
216 void quicktime_update_ixtable(quicktime_t *file,
217         quicktime_trak_t *trak,
218         int64_t offset,
219         int size);
220 void quicktime_write_ix(quicktime_t *file,
221         quicktime_ix_t *ix,
222         int track);
223 /* Read entire ix atom from current position in file */
224 /* Called by quicktime_read_indx. */
225 void quicktime_read_ix(quicktime_t *file,
226         quicktime_ix_t *ix);
227
228 /* the byte offset from mdat start of the chunk.  Chunk is numbered from 1 */
229 int64_t quicktime_chunk_to_offset(quicktime_t *file, quicktime_trak_t *trak, long chunk);
230
231
232 /* the chunk of any offset from mdat start */
233 long quicktime_offset_to_chunk(int64_t *chunk_offset,
234         quicktime_trak_t *trak, int64_t offset);
235
236 /* Bytes in the chunk.  Chunk is numbered from 1 */
237 /* Only available in AVI. */
238 /* Reads the chunk header to get the size. */
239 /* Stores the chunk offset in chunk_offset. */
240 /* Returns the bytes in the chunk less the 8 byte header size */
241 int quicktime_chunk_bytes(quicktime_t *file,
242         int64_t *chunk_offset, int chunk, quicktime_trak_t *trak);
243
244 /* total bytes between the two samples */
245 int64_t quicktime_sample_range_size(quicktime_trak_t *trak,
246     int64_t chunk_sample, int64_t sample);
247
248 /* converting between mdat offsets to samples */
249 int64_t quicktime_sample_to_offset(quicktime_t *file, quicktime_trak_t *trak, int64_t sample);
250 long quicktime_offset_to_sample(quicktime_trak_t *trak, int64_t offset);
251
252
253 void quicktime_write_chunk_header(quicktime_t *file,
254         quicktime_trak_t *trak, quicktime_atom_t *chunk);
255 void quicktime_write_chunk_footer(quicktime_t *file,
256         quicktime_trak_t *trak, int current_chunk,
257         quicktime_atom_t *chunk, int samples);
258
259 /* Write VBR frame */
260 int quicktime_write_vbr_frame(quicktime_t *file, int track,
261         char *data, int data_size, int samples);
262 /* update all the tables after writing a buffer */
263 /* set sample_size to 0 if no sample size should be set */
264 int quicktime_trak_duration(quicktime_trak_t *trak, long *duration, long *timescale);
265 int quicktime_trak_fix_counts(quicktime_t *file, quicktime_trak_t *trak);
266 int quicktime_sample_size(quicktime_trak_t *trak, int sample);
267
268 /* number of samples in the chunk */
269 long quicktime_chunk_samples(quicktime_trak_t *trak, long chunk);
270 int quicktime_trak_shift_offsets(quicktime_trak_t *trak, int64_t offset);
271
272 int quicktime_get_timescale(double frame_rate);
273 unsigned long quicktime_current_time(void);
274
275
276 // Utility functions for decoding vbr audio codecs
277
278 // init/delete buffers
279 void quicktime_init_vbr(quicktime_vbr_t *vbr,int channels);
280 void quicktime_clear_vbr(quicktime_vbr_t *vbr);
281 // next sample time at end of input/output buffer
282 int64_t quicktime_vbr_input_end(quicktime_vbr_t *vbr);
283 int64_t quicktime_vbr_output_end(quicktime_vbr_t *vbr);
284 // next input byte at input_buffer[inp_ptr]
285 unsigned char *quicktime_vbr_input(quicktime_vbr_t *vbr);
286 // bytes in quicktime_vbr_input data
287 int quicktime_vbr_input_size(quicktime_vbr_t *vbr);
288 // check max xfer size bounds
289 int quicktime_limit_samples(int samples);
290 // seek frame of sample_time, then backup offset frames
291 int quicktime_seek_vbr(quicktime_audio_map_t *atrack, int64_t start_time, int offset);
292 // shift input buffer down inp_ptr bytes
293 int quicktime_align_vbr(quicktime_audio_map_t *atrack, int64_t start_position);
294 // Append the next sample/frame of compressed data to the input buffer
295 int quicktime_read_vbr(quicktime_t *file,quicktime_audio_map_t *atrack);
296 // Shift the input buffer by adjusting inp_ptr += bytes
297 void quicktime_shift_vbr(quicktime_audio_map_t *atrack, int bytes);
298 // Put the frame of sample data in output and advance the counters
299 void quicktime_store_vbr_float(quicktime_audio_map_t *atrack,
300    float *samples, int sample_count);
301 void quicktime_store_vbr_floatp(quicktime_audio_map_t *atrack,
302    float **samples, int sample_count);
303 void quicktime_store_vbr_int16(quicktime_audio_map_t *atrack,
304    int16_t *samples, int sample_count);
305 // get the frame of sample data from output ring buffer
306 void quicktime_copy_vbr_float(quicktime_vbr_t *vbr,
307    int64_t start_position, int sample_count,float *output,int channel);
308 void quicktime_copy_vbr_int16(quicktime_vbr_t *vbr,
309    int64_t start_position, int samples,int16_t *output,int channel);
310
311 // Frame caching for keyframed video.
312 quicktime_cache_t* quicktime_new_cache();
313 void quicktime_cache_max(quicktime_cache_t *ptr, int bytes);
314 void quicktime_delete_cache(quicktime_cache_t *ptr);
315 void quicktime_reset_cache(quicktime_cache_t *ptr);
316 void quicktime_put_frame(quicktime_cache_t *ptr, int64_t frame_number,
317         unsigned char *y, unsigned char *u, unsigned char *v,
318         int y_size, int u_size, int v_size);
319 // Return 1 if the frame was found.
320 int quicktime_get_frame(quicktime_cache_t *ptr, int64_t frame_number,
321         unsigned char **y, unsigned char **u, unsigned char **v);
322 int quicktime_has_frame(quicktime_cache_t *ptr,
323         int64_t frame_number);
324 int64_t quicktime_cache_usage(quicktime_cache_t *ptr);
325
326 /* matrix.c */
327 void quicktime_matrix_init(quicktime_matrix_t *matrix);
328 void quicktime_matrix_delete(quicktime_matrix_t *matrix);
329 void quicktime_read_matrix(quicktime_t *file,quicktime_matrix_t *matrix);
330 void quicktime_matrix_dump(quicktime_matrix_t *matrix);
331 void quicktime_write_matrix(quicktime_t *file,quicktime_matrix_t *matrix);
332
333 /* atom.c */
334 int quicktime_atom_read_header(quicktime_t *file,quicktime_atom_t *atom);
335 int quicktime_atom_write_header64(quicktime_t *file,quicktime_atom_t *atom,
336    char *text);
337 int quicktime_atom_write_header(quicktime_t *file,quicktime_atom_t *atom,
338    char *text);
339 void quicktime_atom_write_footer(quicktime_t *file, quicktime_atom_t *atom);
340 int quicktime_atom_is(quicktime_atom_t *atom, char *type);
341 int quicktime_atom_skip(quicktime_t *file, quicktime_atom_t *atom);
342
343 /* ctab.c */
344 int quicktime_ctab_init(quicktime_ctab_t *ctab);
345 int quicktime_ctab_delete(quicktime_ctab_t *ctab);
346 void quicktime_ctab_dump(quicktime_ctab_t *ctab);
347 int quicktime_read_ctab(quicktime_t *file,quicktime_ctab_t *ctab);
348
349 /* dref.c */
350 void quicktime_dref_table_init(quicktime_dref_table_t *table);
351 void quicktime_dref_table_delete(quicktime_dref_table_t *table);
352 void quicktime_read_dref_table(quicktime_t *file,quicktime_dref_table_t *table);
353 void quicktime_write_dref_table(quicktime_t *file,quicktime_dref_table_t *table);
354 void quicktime_dref_table_dump(quicktime_dref_table_t *table);
355 void quicktime_dref_init(quicktime_dref_t *dref);
356 void quicktime_dref_init_all(quicktime_dref_t *dref);
357 void quicktime_dref_delete(quicktime_dref_t *dref);
358 void quicktime_dref_dump(quicktime_dref_t *dref);
359 void quicktime_read_dref(quicktime_t *file,quicktime_dref_t *dref);
360 void quicktime_write_dref(quicktime_t *file,quicktime_dref_t *dref);
361
362 /* avcc.c */
363 void quicktime_delete_avcc(quicktime_avcc_t *avcc);
364 void quicktime_set_avcc_header(quicktime_avcc_t *avcc,unsigned char *data,int size);
365 void quicktime_write_avcc(quicktime_t *file,quicktime_avcc_t *avcc);
366 int quicktime_read_avcc(quicktime_t *file,quicktime_atom_t *parent_atom,
367    quicktime_avcc_t *avcc);
368 void quicktime_avcc_dump(quicktime_avcc_t *avcc);
369
370 /* esds.c */
371 void quicktime_delete_esds(quicktime_esds_t *esds);
372 /* Get alternative mpeg4 parameters from esds table */
373 void quicktime_esds_samplerate(quicktime_stsd_table_t *table,
374    quicktime_esds_t *esds);
375 void quicktime_read_esds(quicktime_t *file,quicktime_atom_t *parent_atom,
376    quicktime_esds_t *esds);
377 void quicktime_write_esds(quicktime_t *file,quicktime_esds_t *esds,int do_video
378    ,int do_audio);
379 void quicktime_esds_dump(quicktime_esds_t *esds);
380
381 /* frma.c */
382 void quicktime_delete_frma(quicktime_frma_t *frma);
383 int quicktime_read_frma(quicktime_t *file,quicktime_atom_t *parent_atom,
384    quicktime_atom_t *leaf_atom,quicktime_frma_t *frma);
385 void quicktime_frma_dump(quicktime_frma_t *frma);
386
387 /* hdlr.c */
388 void quicktime_hdlr_init(quicktime_hdlr_t *hdlr);
389 void quicktime_hdlr_init_video(quicktime_hdlr_t *hdlr);
390 void quicktime_hdlr_init_audio(quicktime_hdlr_t *hdlr);
391 void quicktime_hdlr_init_data(quicktime_hdlr_t *hdlr);
392 void quicktime_hdlr_delete(quicktime_hdlr_t *hdlr);
393 void quicktime_hdlr_dump(quicktime_hdlr_t *hdlr);
394 void quicktime_read_hdlr(quicktime_t *file,quicktime_hdlr_t *hdlr);
395 void quicktime_write_hdlr(quicktime_t *file,quicktime_hdlr_t *hdlr);
396
397 /* avi_hdrl.c */
398 void quicktime_delete_hdrl(quicktime_t *file,quicktime_hdrl_t *hdrl);
399 void quicktime_read_hdrl(quicktime_t *file,quicktime_hdrl_t *hdrl,
400    quicktime_atom_t *parent_atom);
401 void quicktime_init_hdrl(quicktime_t *file,quicktime_hdrl_t *hdrl);
402 void quicktime_finalize_hdrl(quicktime_t *file,quicktime_hdrl_t *hdrl);
403 /* elst.c */
404 void quicktime_elst_table_init(quicktime_elst_table_t *table);
405 void quicktime_elst_table_delete(quicktime_elst_table_t *table);
406 void quicktime_read_elst_table(quicktime_t *file,quicktime_elst_table_t *table);
407 void quicktime_write_elst_table(quicktime_t *file,quicktime_elst_table_t *table,
408    long duration);
409 void quicktime_elst_table_dump(quicktime_elst_table_t *table);
410 void quicktime_elst_init(quicktime_elst_t *elst);
411 void quicktime_elst_init_all(quicktime_elst_t *elst);
412 void quicktime_elst_delete(quicktime_elst_t *elst);
413 void quicktime_elst_dump(quicktime_elst_t *elst);
414 void quicktime_read_elst(quicktime_t *file,quicktime_elst_t *elst);
415 void quicktime_write_elst(quicktime_t *file,quicktime_elst_t *elst,
416    long duration);
417
418 /* mdhd.c */
419 void quicktime_mdhd_init(quicktime_mdhd_t *mdhd);
420 void quicktime_mdhd_init_video(quicktime_t *file,quicktime_mdhd_t *mdhd,
421    int frame_w,int frame_h,float frame_rate);
422 void quicktime_mdhd_init_audio(quicktime_mdhd_t *mdhd,int sample_rate);
423 void quicktime_mdhd_delete(quicktime_mdhd_t *mdhd);
424 void quicktime_read_mdhd(quicktime_t *file,quicktime_mdhd_t *mdhd);
425 void quicktime_mdhd_dump(quicktime_mdhd_t *mdhd);
426 void quicktime_write_mdhd(quicktime_t *file,quicktime_mdhd_t *mdhd);
427
428 /* minf.c */
429 void quicktime_minf_init(quicktime_minf_t *minf);
430 void quicktime_minf_init_video(quicktime_t *file,quicktime_minf_t *minf,
431    int frame_w,int frame_h,int time_scale,float frame_rate,char *compressor);
432 void quicktime_minf_init_audio(quicktime_t *file,quicktime_minf_t *minf,
433    int channels,int sample_rate,int bits,char *compressor);
434 void quicktime_minf_delete(quicktime_minf_t *minf);
435 void quicktime_minf_dump(quicktime_minf_t *minf);
436 int quicktime_read_minf(quicktime_t *file,quicktime_minf_t *minf,
437    quicktime_atom_t *parent_atom);
438 void quicktime_write_minf(quicktime_t *file,quicktime_minf_t *minf);
439
440 /* stsd.c */
441 void quicktime_stsd_init(quicktime_stsd_t *stsd);
442 void quicktime_stsd_init_table(quicktime_stsd_t *stsd);
443 void quicktime_stsd_init_video(quicktime_t *file,quicktime_stsd_t *stsd,
444    int frame_w,int frame_h,float frame_rate,char *compression);
445 void quicktime_stsd_init_audio(quicktime_t *file,quicktime_stsd_t *stsd,
446    int channels,int sample_rate,int bits,char *compressor);
447 void quicktime_stsd_delete(quicktime_stsd_t *stsd);
448 void quicktime_stsd_dump(void *minf_ptr,quicktime_stsd_t *stsd);
449 void quicktime_read_stsd(quicktime_t *file,quicktime_minf_t *minf,
450    quicktime_stsd_t *stsd);
451 void quicktime_write_stsd(quicktime_t *file,quicktime_minf_t *minf,
452    quicktime_stsd_t *stsd);
453
454 /* stsdtable.c */
455 void quicktime_mjqt_init(quicktime_mjqt_t *mjqt);
456 void quicktime_mjqt_delete(quicktime_mjqt_t *mjqt);
457 void quicktime_mjqt_dump(quicktime_mjqt_t *mjqt);
458 void quicktime_mjht_init(quicktime_mjht_t *mjht);
459 void quicktime_mjht_delete(quicktime_mjht_t *mjht);
460 void quicktime_mjht_dump(quicktime_mjht_t *mjht);
461 void quicktime_set_mpeg4_header(quicktime_stsd_table_t *table,
462    unsigned char *data,int size);
463 void quicktime_read_stsd_audio(quicktime_t *file,quicktime_stsd_table_t *table,
464    quicktime_atom_t *parent_atom);
465 void quicktime_write_stsd_audio(quicktime_t *file,quicktime_stsd_table_t *table);
466 void quicktime_read_stsd_video(quicktime_t *file,quicktime_stsd_table_t *table,
467    quicktime_atom_t *parent_atom);
468 void quicktime_write_stsd_video(quicktime_t *file,quicktime_stsd_table_t *table);
469 void quicktime_read_stsd_table(quicktime_t *file,quicktime_minf_t *minf,
470    quicktime_stsd_table_t *table);
471 void quicktime_stsd_table_init(quicktime_stsd_table_t *table);
472 void quicktime_stsd_table_delete(quicktime_stsd_table_t *table);
473 void quicktime_stsd_video_dump(quicktime_stsd_table_t *table);
474 void quicktime_stsd_audio_dump(quicktime_stsd_table_t *table);
475 void quicktime_stsd_table_dump(void *minf_ptr,quicktime_stsd_table_t *table);
476 void quicktime_write_stsd_table(quicktime_t *file,quicktime_minf_t *minf,
477    quicktime_stsd_table_t *table);
478
479 /* stts.c */
480 void quicktime_stts_init(quicktime_stts_t *stts);
481 void quicktime_stts_init_table(quicktime_stts_t *stts);
482 void quicktime_stts_init_video(quicktime_t *file,quicktime_stts_t *stts,
483    int time_scale,float frame_rate);
484 void quicktime_stts_init_audio(quicktime_t *file,quicktime_stts_t *stts,
485    int sample_rate);
486 void quicktime_stts_append_audio(quicktime_t *file,quicktime_stts_t *stts,
487    int sample_duration);
488 int64_t quicktime_stts_total_samples(quicktime_t *file,quicktime_stts_t *stts);
489 void quicktime_stts_delete(quicktime_stts_t *stts);
490 void quicktime_stts_dump(quicktime_stts_t *stts);
491 void quicktime_read_stts(quicktime_t *file,quicktime_stts_t *stts);
492 void quicktime_write_stts(quicktime_t *file,quicktime_stts_t *stts);
493 int quicktime_time_to_sample(quicktime_stts_t *stts,int64_t *start_time);
494 int64_t quicktime_chunk_to_samples(quicktime_stts_t *stts, long chunk);
495
496 /* stbl.c */
497 void quicktime_stbl_init(quicktime_stbl_t *stbl);
498 void quicktime_stbl_init_video(quicktime_t *file,quicktime_stbl_t *stbl,
499    int frame_w,int frame_h,int time_scale,float frame_rate,char *compressor);
500 void quicktime_stbl_init_audio(quicktime_t *file,quicktime_stbl_t *stbl,
501    int channels,int sample_rate,int bits,char *compressor);
502 void quicktime_stbl_delete(quicktime_stbl_t *stbl);
503 void quicktime_stbl_dump(void *minf_ptr,quicktime_stbl_t *stbl);
504 int quicktime_read_stbl(quicktime_t *file,quicktime_minf_t *minf,
505    quicktime_stbl_t *stbl,quicktime_atom_t *parent_atom);
506 void quicktime_write_stbl(quicktime_t *file,quicktime_minf_t *minf,
507    quicktime_stbl_t *stbl);
508
509 /* tkhd.c */
510 int quicktime_tkhd_init(quicktime_tkhd_t *tkhd);
511 int quicktime_tkhd_delete(quicktime_tkhd_t *tkhd);
512 void quicktime_tkhd_dump(quicktime_tkhd_t *tkhd);
513 void quicktime_read_tkhd(quicktime_t *file,quicktime_tkhd_t *tkhd);
514 void quicktime_write_tkhd(quicktime_t *file,quicktime_tkhd_t *tkhd);
515 void quicktime_tkhd_init_video(quicktime_t *file,quicktime_tkhd_t *tkhd,
516    int frame_w,int frame_h);
517
518 /* stco.c */
519 void quicktime_stco_init(quicktime_stco_t *stco);
520 void quicktime_stco_delete(quicktime_stco_t *stco);
521 void quicktime_stco_init_common(quicktime_t *file,quicktime_stco_t *stco);
522 void quicktime_stco_dump(quicktime_stco_t *stco);
523 void quicktime_read_stco(quicktime_t *file,quicktime_stco_t *stco);
524 void quicktime_read_stco64(quicktime_t *file,quicktime_stco_t *stco);
525 void quicktime_write_stco(quicktime_t *file,quicktime_stco_t *stco);
526 void quicktime_update_stco(quicktime_stco_t *stco, long chunk,int64_t offset);
527
528 /* stsz.c */
529 void quicktime_stsz_init(quicktime_stsz_t *stsz);
530 void quicktime_stsz_init_video(quicktime_t *file,quicktime_stsz_t *stsz);
531 void quicktime_stsz_init_audio(quicktime_t *file,quicktime_stsz_t *stsz,
532    int channels,int bits,char *compressor);
533 void quicktime_stsz_delete(quicktime_stsz_t *stsz);
534 void quicktime_stsz_dump(quicktime_stsz_t *stsz);
535 void quicktime_read_stsz(quicktime_t *file,quicktime_stsz_t *stsz);
536 void quicktime_write_stsz(quicktime_t *file,quicktime_stsz_t *stsz);
537 void quicktime_update_stsz(quicktime_stsz_t *stsz, long sample,long sample_size);
538 int quicktime_sample_size(quicktime_trak_t *trak,int sample);
539
540 /* smhd.c */
541 void quicktime_smhd_init(quicktime_smhd_t *smhd);
542 void quicktime_smhd_delete(quicktime_smhd_t *smhd);
543 void quicktime_smhd_dump(quicktime_smhd_t *smhd);
544 void quicktime_read_smhd(quicktime_t *file,quicktime_smhd_t *smhd);
545 void quicktime_write_smhd(quicktime_t *file,quicktime_smhd_t *smhd);
546
547 /* mdat.c */
548 void quicktime_mdat_delete(quicktime_mdat_t *mdat);
549 void quicktime_read_mdat(quicktime_t *file,quicktime_mdat_t *mdat,
550    quicktime_atom_t *parent_atom);
551
552 /* trak.c */
553 int quicktime_trak_init(quicktime_trak_t *trak);
554 int quicktime_trak_init_video(quicktime_t *file,quicktime_trak_t *trak,
555    int frame_w,int frame_h,float frame_rate,char *compressor);
556 int quicktime_trak_init_audio(quicktime_t *file,quicktime_trak_t *trak,
557    int channels,int sample_rate,int bits,char *compressor);
558 int quicktime_trak_delete(quicktime_trak_t *trak);
559 int quicktime_trak_dump(quicktime_trak_t *trak);
560 quicktime_trak_t *quicktime_add_trak(quicktime_t *file);
561 int quicktime_delete_trak(quicktime_moov_t *moov);
562 int quicktime_read_trak(quicktime_t *file,quicktime_trak_t *trak,
563    quicktime_atom_t *trak_atom);
564 int quicktime_write_trak(quicktime_t *file,quicktime_trak_t *trak,
565    long moov_time_scale);
566 int64_t quicktime_track_end(quicktime_trak_t *trak);
567 long quicktime_track_samples(quicktime_t *file,quicktime_trak_t *trak);
568 long quicktime_sample_of_chunk(quicktime_trak_t *trak,long chunk);
569 int quicktime_avg_chunk_samples(quicktime_t *file, quicktime_trak_t *trak);
570 int quicktime_chunk_of_sample(int64_t *chunk_sample,int64_t *chunk,
571    quicktime_trak_t *trak,int64_t sample);
572
573 /* stsc.c */
574 void quicktime_stsc_init(quicktime_stsc_t *stsc);
575 void quicktime_stsc_init_table(quicktime_t *file,quicktime_stsc_t *stsc);
576 void quicktime_stsc_init_video(quicktime_t *file,quicktime_stsc_t *stsc);
577 void quicktime_stsc_init_audio(quicktime_t *file,quicktime_stsc_t *stsc,
578    int sample_rate);
579 void quicktime_stsc_delete(quicktime_stsc_t *stsc);
580 void quicktime_stsc_dump(quicktime_stsc_t *stsc);
581 void quicktime_read_stsc(quicktime_t *file,quicktime_stsc_t *stsc);
582 void quicktime_write_stsc(quicktime_t *file,quicktime_stsc_t *stsc);
583 int quicktime_update_stsc(quicktime_stsc_t *stsc,long chunk,long samples);
584
585 /* dinf.c */
586 void quicktime_dinf_init(quicktime_dinf_t *dinf);
587 void quicktime_dinf_delete(quicktime_dinf_t *dinf);
588 void quicktime_dinf_init_all(quicktime_dinf_t *dinf);
589 void quicktime_dinf_dump(quicktime_dinf_t *dinf);
590 void quicktime_read_dinf(quicktime_t *file,quicktime_dinf_t *dinf,
591    quicktime_atom_t *dinf_atom);
592 void quicktime_write_dinf(quicktime_t *file,quicktime_dinf_t *dinf);
593
594 /* vmhd.c */
595 void quicktime_vmhd_init(quicktime_vmhd_t *vmhd);
596 void quicktime_vmhd_init_video(quicktime_t *file,quicktime_vmhd_t *vmhd,
597    int frame_w,int frame_h,float frame_rate);
598 void quicktime_vmhd_delete(quicktime_vmhd_t *vmhd);
599 void quicktime_vmhd_dump(quicktime_vmhd_t *vmhd);
600 void quicktime_read_vmhd(quicktime_t *file,quicktime_vmhd_t *vmhd);
601 void quicktime_write_vmhd(quicktime_t *file,quicktime_vmhd_t *vmhd);
602
603 /* mvhd.c */
604 int quicktime_mvhd_init(quicktime_mvhd_t *mvhd);
605 int quicktime_mvhd_delete(quicktime_mvhd_t *mvhd);
606 void quicktime_mvhd_dump(quicktime_mvhd_t *mvhd);
607 void quicktime_read_mvhd(quicktime_t *file,quicktime_mvhd_t *mvhd,
608    quicktime_atom_t *parent_atom);
609 void quicktime_mhvd_init_video(quicktime_t *file,quicktime_mvhd_t *mvhd,
610    double frame_rate);
611 void quicktime_write_mvhd(quicktime_t *file,quicktime_mvhd_t *mvhd);
612
613 /* udta.c */
614 int quicktime_udta_init(quicktime_udta_t *udta);
615 int quicktime_udta_delete(quicktime_udta_t *udta);
616 void quicktime_udta_dump(quicktime_udta_t *udta);
617 int quicktime_read_udta(quicktime_t *file,quicktime_udta_t *udta,
618    quicktime_atom_t *udta_atom);
619 void quicktime_write_udta(quicktime_t *file,quicktime_udta_t *udta);
620 int quicktime_read_udta_string(quicktime_t *file,char **string,int *size);
621 int quicktime_write_udta_string(quicktime_t *file,char *string,int size);
622 int quicktime_set_udta_string(char **string,int *size,char *new_string);
623
624 /* stss.c */
625 void quicktime_stss_init(quicktime_stss_t *stss);
626 void quicktime_stss_delete(quicktime_stss_t *stss);
627 void quicktime_stss_dump(quicktime_stss_t *stss);
628 void quicktime_read_stss(quicktime_t *file,quicktime_stss_t *stss);
629 void quicktime_write_stss(quicktime_t *file,quicktime_stss_t *stss);
630
631 /* mdia.c */
632 void quicktime_mdia_init(quicktime_mdia_t *mdia);
633 void quicktime_mdia_init_video(quicktime_t *file,quicktime_mdia_t *mdia,
634    int frame_w,int frame_h,float frame_rate,char *compressor);
635 void quicktime_mdia_init_audio(quicktime_t *file,quicktime_mdia_t *mdia,
636    int channels,int sample_rate,int bits,char *compressor);
637 void quicktime_mdia_delete(quicktime_mdia_t *mdia);
638 void quicktime_mdia_dump(quicktime_mdia_t *mdia);
639 int quicktime_read_mdia(quicktime_t *file,quicktime_mdia_t *mdia,
640    quicktime_atom_t *trak_atom);
641 void quicktime_write_mdia(quicktime_t *file,quicktime_mdia_t *mdia);
642
643 /* edts.c */
644 void quicktime_edts_init(quicktime_edts_t *edts);
645 void quicktime_edts_delete(quicktime_edts_t *edts);
646 void quicktime_edts_init_table(quicktime_edts_t *edts);
647 void quicktime_read_edts(quicktime_t *file,quicktime_edts_t *edts,
648    quicktime_atom_t *edts_atom);
649 void quicktime_edts_dump(quicktime_edts_t *edts);
650 void quicktime_write_edts(quicktime_t *file,quicktime_edts_t *edts,
651    long duration);
652
653 /* moov.c */
654 int quicktime_moov_init(quicktime_moov_t *moov);
655 int quicktime_moov_delete(quicktime_moov_t *moov);
656 void quicktime_moov_dump(quicktime_moov_t *moov);
657 int quicktime_read_moov(quicktime_t *file,quicktime_moov_t *moov,
658    quicktime_atom_t *parent_atom);
659 void quicktime_write_moov(quicktime_t *file,quicktime_moov_t *moov,int rewind);
660 void quicktime_update_durations(quicktime_moov_t *moov);
661 int quicktime_shift_offsets(quicktime_moov_t *moov,int64_t offset);
662
663 #endif
664