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);
12 quicktime_trak_t* quicktime_add_track(quicktime_t *file);
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);
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);
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);
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);
71 /* Convert Microsoft audio id to codec */
72 void quicktime_id_to_codec(char *result, int id);
74 int quicktime_find_vcodec(quicktime_video_map_t *vtrack);
75 int quicktime_find_acodec(quicktime_audio_map_t *atrack);
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);
87 char* quicktime_compressor(quicktime_trak_t *trak);
89 /* Get median duration of video frames for calculating frame rate. */
90 int quicktime_sample_duration(quicktime_trak_t *trak);
93 quicktime_scaletable_t* quicktime_new_scaletable(int input_w, int input_h, int output_w, int output_h);
97 /* chunks always start on 1 */
98 /* samples start on 0 */
100 /* update the position pointers in all the tracks after a set_position */
101 int quicktime_update_positions(quicktime_t *file);
110 void quicktime_read_strh(quicktime_t *file, quicktime_atom_t *parent_atom);
111 void quicktime_write_strh(quicktime_t *file, int track);
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);
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,
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);
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);
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);
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,
179 /* Create new IDX1 entry. Used by quicktime_write_chunk_footer */
180 void quicktime_update_idx1table(quicktime_t *file,
181 quicktime_trak_t *trak,
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);
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);
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);
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,
220 void quicktime_write_ix(quicktime_t *file,
223 /* Read entire ix atom from current position in file */
224 /* Called by quicktime_read_indx. */
225 void quicktime_read_ix(quicktime_t *file,
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);
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);
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);
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);
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);
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);
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);
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);
272 int quicktime_get_timescale(double frame_rate);
273 unsigned long quicktime_current_time(void);
276 // Utility functions for decoding vbr audio codecs
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);
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);
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);
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,
337 int quicktime_atom_write_header(quicktime_t *file,quicktime_atom_t *atom,
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);
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);
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);
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);
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
379 void quicktime_esds_dump(quicktime_esds_t *esds);
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);
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);
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);
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,
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,
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);
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);
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);
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);
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,
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);
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);
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);
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);
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);
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);
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);
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);
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,
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);
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);
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);
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,
611 void quicktime_write_mvhd(quicktime_t *file,quicktime_mvhd_t *mvhd);
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);
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);
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);
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,
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);