r370: Heroine Virutal's official release 1.2.1
[cinelerra_cv/mob.git] / hvirtual / quicktime / funcprotos.h
blobf1acabb4f657518e49bf13952747add05e58b62b
1 #ifndef FUNCPROTOS_H
2 #define FUNCPROTOS_H
4 #include "graphics.h"
5 #include "qtprivate.h"
7 /* atom handling routines */
8 int quicktime_atom_write_header(quicktime_t *file, quicktime_atom_t *atom, char *text);
9 int quicktime_atom_write_header64(quicktime_t *file, quicktime_atom_t *atom, char *text);
10 int64_t quicktime_byte_position(quicktime_t *file);
11 // Used internally to replace ftello values
12 int64_t quicktime_ftell(quicktime_t *file);
14 quicktime_trak_t* quicktime_add_track(quicktime_t *file);
18 int quicktime_file_open(quicktime_t *file, char *path, int rd, int wr);
19 int quicktime_file_close(quicktime_t *file);
20 int64_t quicktime_get_file_length(char *path);
22 /* Initialize audio_map_t and video_map_t objects after loading headers */
23 /* Called by quicktime_read_info */
24 void quicktime_init_maps(quicktime_t *file);
26 int quicktime_read_char(quicktime_t *file);
27 float quicktime_read_fixed32(quicktime_t *file);
28 float quicktime_read_fixed16(quicktime_t *file);
29 int64_t quicktime_read_int64(quicktime_t *file);
30 int64_t quicktime_read_int64_le(quicktime_t *file);
31 unsigned long quicktime_read_uint32(quicktime_t *file);
32 long quicktime_read_int32(quicktime_t *file);
33 long quicktime_read_int32_le(quicktime_t *file);
34 long quicktime_read_int24(quicktime_t *file);
35 int64_t quicktime_position(quicktime_t *file);
36 int quicktime_set_position(quicktime_t *file, int64_t position);
37 int quicktime_write_fixed32(quicktime_t *file, float number);
38 int quicktime_write_char(quicktime_t *file, char x);
39 int quicktime_write_int16(quicktime_t *file, int number);
40 int quicktime_write_int16_le(quicktime_t *file, int number);
41 int quicktime_write_int24(quicktime_t *file, long number);
42 int quicktime_write_int32(quicktime_t *file, long value);
43 int quicktime_write_int32_le(quicktime_t *file, long value);
44 int quicktime_write_int64(quicktime_t *file, int64_t value);
45 int quicktime_write_int64_le(quicktime_t *file, int64_t value);
46 int quicktime_write_char32(quicktime_t *file, char *string);
47 int quicktime_write_fixed16(quicktime_t *file, float number);
49 /* Returns number of bytes written */
50 int quicktime_write_data(quicktime_t *file, char *data, int size);
51 /* Enable or disable presave */
52 void quicktime_set_presave(quicktime_t *file, int value);
53 /* Returns 1 if equal or 0 if different */
54 int quicktime_match_32(char *input, char *output);
55 int quicktime_match_24(char *input, char *output);
56 void quicktime_write_pascal(quicktime_t *file, char *data);
57 int quicktime_read_data(quicktime_t *file, char *data, int64_t size);
59 /* Most codecs don't specify the actual number of bits on disk in the stbl. */
60 /* Convert the samples to the number of bytes for reading depending on the codec. */
61 int64_t quicktime_samples_to_bytes(quicktime_trak_t *track, long samples);
63 /* Convert Microsoft audio id to codec */
64 void quicktime_id_to_codec(char *result, int id);
66 int quicktime_find_vcodec(quicktime_video_map_t *vtrack);
67 int quicktime_find_acodec(quicktime_audio_map_t *atrack);
75 /* Graphics */
76 quicktime_scaletable_t* quicktime_new_scaletable(int input_w, int input_h, int output_w, int output_h);
79 /* chunks always start on 1 */
80 /* samples start on 0 */
82 /* update the position pointers in all the tracks after a set_position */
83 int quicktime_update_positions(quicktime_t *file);
91 /* AVI section */
92 void quicktime_read_strh(quicktime_t *file, quicktime_atom_t *parent_atom);
93 void quicktime_write_strh(quicktime_t *file, int track);
98 /* Create new strl object for reading or writing */
99 quicktime_strl_t* quicktime_new_strl();
100 /* Initialize new strl object for writing */
101 void quicktime_init_strl(quicktime_t *file,
102 quicktime_audio_map_t *atrack,
103 quicktime_video_map_t *vtrack,
104 quicktime_trak_t *trak,
105 quicktime_strl_t *strl);
106 void quicktime_delete_strl(quicktime_strl_t *strl);
107 /* Read strl object */
108 void quicktime_read_strl(quicktime_t *file,
109 quicktime_strl_t *strl,
110 quicktime_atom_t *parent_atom);
113 void quicktime_delete_indx(quicktime_indx_t *indx);
114 void quicktime_init_indx(quicktime_t *file,
115 quicktime_indx_t *indx,
116 quicktime_strl_t *strl);
117 void quicktime_update_indx(quicktime_t *file,
118 quicktime_indx_t *indx,
119 quicktime_ix_t *ix);
120 void quicktime_finalize_indx(quicktime_t *file);
121 /* Called by quicktime_read_strl */
122 void quicktime_read_indx(quicktime_t *file,
123 quicktime_strl_t *strl,
124 quicktime_atom_t *parent_atom);
128 void quicktime_delete_hdrl(quicktime_t *file, quicktime_hdrl_t *hdrl);
129 void quicktime_read_hdrl(quicktime_t *file,
130 quicktime_hdrl_t *hdrl,
131 quicktime_atom_t *parent_atom);
132 void quicktime_init_hdrl(quicktime_t *file, quicktime_hdrl_t *hdrl);
133 void quicktime_finalize_hdrl(quicktime_t *file, quicktime_hdrl_t *hdrl);
134 void quicktime_read_esds(quicktime_t *file,
135 quicktime_atom_t *parent_atom,
136 quicktime_stsd_table_t *table);
137 void quicktime_write_esds(quicktime_t *file,
138 quicktime_stsd_table_t *table,
139 int do_video,
140 int do_audio);
141 // Set esds header to a copy of the argument
142 void quicktime_set_mpeg4_header(quicktime_stsd_table_t *table,
143 unsigned char *data,
144 int size);
151 /* Read movi and create objects */
152 void quicktime_delete_movi(quicktime_t *file, quicktime_movi_t *movi);
153 void quicktime_read_movi(quicktime_t *file,
154 quicktime_atom_t *parent_atom,
155 quicktime_movi_t *movi);
156 /* Write preliminary movi data and create objects */
157 void quicktime_init_movi(quicktime_t *file, quicktime_riff_t *riff);
158 void quicktime_finalize_movi(quicktime_t *file, quicktime_movi_t *movi);
165 void quicktime_delete_idx1(quicktime_idx1_t *idx1);
166 void quicktime_read_idx1(quicktime_t *file,
167 quicktime_riff_t *riff,
168 quicktime_atom_t *parent_atom);
169 void quicktime_write_idx1(quicktime_t *file,
170 quicktime_idx1_t *idx1);
171 /* Set the keyframe flag in the right IDX1 entry. new_keyframes starts on 0 */
172 /* Used by quicktime_insert_keyframe */
173 void quicktime_set_idx1_keyframe(quicktime_t *file,
174 quicktime_trak_t *trak,
175 int new_keyframe);
176 /* Create new IDX1 entry. Used by quicktime_write_chunk_footer */
177 void quicktime_update_idx1table(quicktime_t *file,
178 quicktime_trak_t *trak,
179 int offset,
180 int size);
185 void quicktime_read_odml(quicktime_t *file, quicktime_atom_t *parent_atom);
186 void quicktime_finalize_odml(quicktime_t *file, quicktime_hdrl_t *hdrl);
187 void quicktime_init_odml(quicktime_t *file, quicktime_hdrl_t *hdrl);
196 /* Create new riff and put on riff table */
197 quicktime_riff_t* quicktime_new_riff(quicktime_t *file);
198 void quicktime_delete_riff(quicktime_t *file, quicktime_riff_t *riff);
199 void quicktime_read_riff(quicktime_t *file, quicktime_atom_t *parent_atom);
201 /* Write riff header and initialize structures */
202 /* Only the first riff has a hdrl object */
203 void quicktime_init_riff(quicktime_t *file);
204 void quicktime_finalize_riff(quicktime_t *file, quicktime_riff_t *riff);
207 /* Create ix object for writing only */
208 quicktime_ix_t* quicktime_new_ix(quicktime_t *file,
209 quicktime_trak_t *trak,
210 quicktime_strl_t *strl);
211 void quicktime_delete_ix(quicktime_ix_t *ix);
212 void quicktime_update_ixtable(quicktime_t *file,
213 quicktime_trak_t *trak,
214 int64_t offset,
215 int size);
216 void quicktime_write_ix(quicktime_t *file,
217 quicktime_ix_t *ix,
218 int track);
219 /* Read entire ix atom from current position in file */
220 /* Called by quicktime_read_indx. */
221 void quicktime_read_ix(quicktime_t *file,
222 quicktime_ix_t *ix);
226 /* compression_id is for AVI reading */
227 int quicktime_trak_init_audio(quicktime_t *file,
228 quicktime_trak_t *trak,
229 int channels,
230 int sample_rate,
231 int bits,
232 char *compressor);
233 int quicktime_trak_init_video(quicktime_t *file,
234 quicktime_trak_t *trak,
235 int frame_w,
236 int frame_h,
237 float frame_rate,
238 char *compressor);
239 int quicktime_trak_delete(quicktime_trak_t *trak);
240 int quicktime_trak_dump(quicktime_trak_t *trak);
241 int quicktime_delete_trak(quicktime_moov_t *moov);
242 int quicktime_read_trak(quicktime_t *file, quicktime_trak_t *trak, quicktime_atom_t *trak_atom);
243 int quicktime_write_trak(quicktime_t *file, quicktime_trak_t *trak, long moov_time_scale);
244 int64_t quicktime_track_end(quicktime_trak_t *trak);
247 /* the total number of samples in the track depending on the access mode */
248 long quicktime_track_samples(quicktime_t *file, quicktime_trak_t *trak);
251 /* queries for every atom */
252 /* the starting sample in the given chunk */
253 long quicktime_sample_of_chunk(quicktime_trak_t *trak, long chunk);
256 /* the byte offset from mdat start of the chunk. Chunk is numbered from 1 */
257 int64_t quicktime_chunk_to_offset(quicktime_t *file, quicktime_trak_t *trak, long chunk);
260 /* the chunk of any offset from mdat start */
261 long quicktime_offset_to_chunk(int64_t *chunk_offset,
262 quicktime_trak_t *trak,
263 int64_t offset);
265 /* Bytes in the chunk. Chunk is numbered from 1 */
266 /* Only available in AVI. */
267 /* Reads the chunk header to get the size. */
268 /* Stores the chunk offset in chunk_offset. */
269 /* Returns the bytes in the chunk less the 8 byte header size */
270 int quicktime_chunk_bytes(quicktime_t *file,
271 int64_t *chunk_offset,
272 int chunk,
273 quicktime_trak_t *trak);
276 /* total bytes between the two samples */
277 int64_t quicktime_sample_range_size(quicktime_trak_t *trak, long chunk_sample, long sample);
280 int quicktime_chunk_of_sample(int64_t *chunk_sample,
281 int64_t *chunk,
282 quicktime_trak_t *trak,
283 long sample);
287 /* converting between mdat offsets to samples */
288 int64_t quicktime_sample_to_offset(quicktime_t *file, quicktime_trak_t *trak, long sample);
289 long quicktime_offset_to_sample(quicktime_trak_t *trak, int64_t offset);
290 quicktime_trak_t* quicktime_add_trak(quicktime_t *file);
293 int quicktime_time_to_sample(quicktime_stts_t *stts,
294 int64_t *start_time);
297 void quicktime_write_chunk_header(quicktime_t *file,
298 quicktime_trak_t *trak,
299 quicktime_atom_t *chunk);
300 void quicktime_write_chunk_footer(quicktime_t *file,
301 quicktime_trak_t *trak,
302 int current_chunk,
303 quicktime_atom_t *chunk,
304 int samples);
305 /* update all the tables after writing a buffer */
306 /* set sample_size to 0 if no sample size should be set */
308 * int quicktime_update_tables(quicktime_t *file,
309 * quicktime_trak_t *trak,
310 * int64_t offset,
311 * int64_t chunk,
312 * int64_t sample,
313 * int64_t samples,
314 * int64_t sample_size);
316 void quicktime_update_stco(quicktime_stco_t *stco, long chunk, int64_t offset);
317 void quicktime_update_stsz(quicktime_stsz_t *stsz, long sample, long sample_size);
318 int quicktime_update_stsc(quicktime_stsc_t *stsc, long chunk, long samples);
319 int quicktime_trak_duration(quicktime_trak_t *trak, long *duration, long *timescale);
320 int quicktime_trak_fix_counts(quicktime_t *file, quicktime_trak_t *trak);
321 int quicktime_sample_size(quicktime_trak_t *trak, int sample);
323 /* number of samples in the chunk */
324 long quicktime_chunk_samples(quicktime_trak_t *trak, long chunk);
325 int quicktime_trak_shift_offsets(quicktime_trak_t *trak, int64_t offset);
326 void quicktime_mhvd_init_video(quicktime_t *file,
327 quicktime_mvhd_t *mvhd,
328 double frame_rate);
331 void quicktime_stsd_init_video(quicktime_t *file,
332 quicktime_stsd_t *stsd,
333 int frame_w,
334 int frame_h,
335 float frame_rate,
336 char *compression);
337 void quicktime_stsd_init_audio(quicktime_t *file,
338 quicktime_stsd_t *stsd,
339 int channels,
340 int sample_rate,
341 int bits,
342 char *compressor);
343 void quicktime_stts_init_video(quicktime_t *file,
344 quicktime_stts_t *stts,
345 int time_scale,
346 float frame_rate);
347 void quicktime_stbl_init_video(quicktime_t *file,
348 quicktime_stbl_t *stbl,
349 int frame_w,
350 int frame_h,
351 int time_scale,
352 float frame_rate,
353 char *compressor);
354 void quicktime_stbl_init_audio(quicktime_t *file,
355 quicktime_stbl_t *stbl,
356 int channels,
357 int sample_rate,
358 int bits,
359 char *compressor);
360 void quicktime_minf_init_video(quicktime_t *file,
361 quicktime_minf_t *minf,
362 int frame_w,
363 int frame_h,
364 int time_scale,
365 float frame_rate,
366 char *compressor);
367 void quicktime_mdhd_init_video(quicktime_t *file,
368 quicktime_mdhd_t *mdhd,
369 int frame_w,
370 int frame_h,
371 float frame_rate);
372 void quicktime_mdhd_init_audio(quicktime_mdhd_t *mdhd,
373 int sample_rate);
374 void quicktime_minf_init_audio(quicktime_t *file,
375 quicktime_minf_t *minf,
376 int channels,
377 int sample_rate,
378 int bits,
379 char *compressor);
380 void quicktime_mdia_init_video(quicktime_t *file,
381 quicktime_mdia_t *mdia,
382 int frame_w,
383 int frame_h,
384 float frame_rate,
385 char *compressor);
386 void quicktime_mdia_init_audio(quicktime_t *file,
387 quicktime_mdia_t *mdia,
388 int channels,
389 int sample_rate,
390 int bits,
391 char *compressor);
392 void quicktime_tkhd_init_video(quicktime_t *file,
393 quicktime_tkhd_t *tkhd,
394 int frame_w,
395 int frame_h);
396 int quicktime_get_timescale(double frame_rate);
398 unsigned long quicktime_current_time(void);
404 // Utility functions for vbr audio codecs
406 // Delete buffers from the vbr structure when finished
407 void quicktime_clear_vbr(quicktime_vbr_t *ptr);
408 void quicktime_vbr_set_channels(quicktime_vbr_t *ptr, int channels);
409 void quicktime_init_vbr(quicktime_vbr_t *ptr, int channels);
411 // Shift the output buffer and fix pointers for the given range.
412 // Return 1 if not possible to handle the sample count.
413 int quicktime_align_vbr(quicktime_audio_map_t *atrack,
414 int samples);
415 // The current endpoint of the buffer
416 int64_t quicktime_vbr_end(quicktime_vbr_t *ptr);
417 unsigned char* quicktime_vbr_input(quicktime_vbr_t *ptr);
418 int quicktime_vbr_input_size(quicktime_vbr_t *ptr);
419 // Read the next sample/frame of compressed data and advance the counters.
420 int quicktime_read_vbr(quicktime_t *file,
421 quicktime_audio_map_t *atrack);
422 // Put the next sample/frame of uncompressed data in the buffer and advance the
423 // counters
424 void quicktime_store_vbr_float(quicktime_audio_map_t *atrack,
425 float *samples,
426 int sample_count);
428 void quicktime_copy_vbr_float(quicktime_vbr_t *vbr,
429 int64_t start_position,
430 int samples,
431 float *output,
432 int channel);
435 #endif