libquicktime

- Main Page
- Modules
- Data Structures
- Files

- File List
- Globals

lqt.h
Go to the documentation of this file.
1 /*******************************************************************************
2 lqt.h
3
4 libquicktime - A library for reading and writing quicktime/avi/mp4 files.
5 http://libquicktime.sourceforge.net
6
7 Copyright (C) 2002 Heroine Virtual Ltd.
8 Copyright (C) 2002-2011 Members of the libquicktime project.
9
10 This library is free software; you can redistribute it and/or modify it under
11 the terms of the GNU Lesser General Public License as published by the Free
12 Software Foundation; either version 2.1 of the License, or (at your option)
13 any later version.
14
15 This library is distributed in the hope that it will be useful, but WITHOUT
16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
18 details.
19
20 You should have received a copy of the GNU Lesser General Public License along
21 with this library; if not, write to the Free Software Foundation, Inc., 51
22 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 *******************************************************************************/
24
25 #ifndef _LQT_H_
26 #define _LQT_H_
27
28 #include "quicktime.h"
29 #include "lqt_atoms.h"
30 #include "compression.h"
31 #include "lqt_codecinfo.h"
32 #include "lqt_qtvr.h"
33
34 #pragma GCC visibility push(default)
35
36
37 #ifdef __cplusplus
38 extern "C" {
39 #endif /* __cplusplus */
40
46 void *lqt_bufalloc(size_t size);
47
48
49
56 void lqt_set_log_callback(lqt_log_callback_t cb, void * data);
57
58
70 int lqt_fileno(quicktime_t *file);
71
83 void lqt_set_audio_parameter(quicktime_t *file,int track, const char *key,const void *value);
84
96 void lqt_set_video_parameter(quicktime_t *file,int track, const char *key,const void *value);
97
108 int lqt_get_pixel_aspect(quicktime_t *file, int track, int * pixel_width,
109 int * pixel_height);
110
121 int lqt_set_pixel_aspect(quicktime_t *file, int track, int pixel_width,
122 int pixel_height);
123
136 lqt_interlace_mode_t lqt_get_interlace_mode(quicktime_t * file, int track);
137
150 int lqt_set_interlace_mode(quicktime_t * file, int track,
151 lqt_interlace_mode_t mode);
152
153
159 const char * lqt_interlace_mode_to_string(lqt_interlace_mode_t mode);
160
171 lqt_chroma_placement_t lqt_get_chroma_placement(quicktime_t * file, int track);
172
179 const char * lqt_chroma_placement_to_string(lqt_chroma_placement_t chroma_placement);
180
191 int lqt_get_codec_api_version();
192
199 const char * lqt_channel_to_string(lqt_channel_t ch);
200
212 void lqt_set_channel_setup(quicktime_t * file, int track, lqt_channel_t * ch);
213
224 const lqt_channel_t * lqt_get_channel_setup(quicktime_t * file, int track);
225
226
259 int lqt_add_text_track(quicktime_t * file, int timescale);
260
270 void lqt_set_text_language(quicktime_t * file, int track, const char * language);
271
282 void lqt_set_chapter_track(quicktime_t * file, int track);
283
293 void lqt_set_text_box(quicktime_t * file, int track,
294 uint16_t top, uint16_t left,
295 uint16_t bottom, uint16_t right);
296
309 void lqt_set_text_fg_color(quicktime_t * file, int track,
310 uint16_t r, uint16_t g,
311 uint16_t b, uint16_t a);
312
326 void lqt_set_text_bg_color(quicktime_t * file, int track,
327 uint16_t r, uint16_t g,
328 uint16_t b, uint16_t a);
329
330
331
332
341 int lqt_write_text(quicktime_t * file, int track, const char * text, int64_t duration);
342
360 int lqt_text_tracks(quicktime_t * file);
361
372 int lqt_get_text_language(quicktime_t * file, int track, char * language);
373
380 int lqt_text_time_scale(quicktime_t * file, int track);
381
391 void lqt_get_text_box(quicktime_t * file, int track,
392 uint16_t * top, uint16_t * left,
393 uint16_t * bottom, uint16_t * right);
394
395
410 int lqt_read_text(quicktime_t * file, int track, char ** text, int * text_alloc,
411 int64_t * timestamp, int64_t * duration);
412
420 int lqt_is_chapter_track(quicktime_t * file, int track);
421
428 int64_t lqt_text_samples(quicktime_t * file, int track);
429
436 void lqt_set_text_position(quicktime_t * file, int track, int64_t position);
437
448 void lqt_set_text_time(quicktime_t * file, int track, int64_t time);
449
461 void lqt_get_text_fg_color(quicktime_t * file, int track,
462 uint16_t * r, uint16_t * g,
463 uint16_t * b, uint16_t * a);
464
476 void lqt_get_text_bg_color(quicktime_t * file, int track,
477 uint16_t * r, uint16_t * g,
478 uint16_t * b, uint16_t * a);
479
495 #define LQT_TIMECODE_DROP 0x0001
496 #define LQT_TIMECODE_24HMAX 0x0002
497 #define LQT_TIMECODE_NEG_OK 0x0004
498 #define LQT_TIMECODE_COUNTER 0x0008
499
500
512 void lqt_add_timecode_track(quicktime_t * file, int track,
513 uint32_t flags, int framerate);
514
524 void lqt_write_timecode(quicktime_t * file, int track,
525 uint32_t timecode);
526
537 int lqt_has_timecode_track(quicktime_t * file, int track,
538 uint32_t * flags, int * framerate);
539
554 int lqt_read_timecode(quicktime_t * file, int track,
555 uint32_t * timecode);
556
568 const char * lqt_get_timecode_tape_name(quicktime_t * file, int track);
569
580 void lqt_set_timecode_tape_name(quicktime_t * file, int track,
581 const char * tapename);
582
591 int lqt_get_timecode_track_enabled(quicktime_t * file, int track);
592
601 void lqt_set_timecode_track_enabled(quicktime_t * file, int track,
602 int enabled);
603
610 /***********************************************
611 * Advanced colormodel handling.
612 * (defined in lqt_color.c)
613 ***********************************************/
614
620 #define LQT_COLORMODEL_NONE -1
621
622 /* Colormodel <-> string conversion (used by registry file routines) */
623
630 const char * lqt_colormodel_to_string(int colormodel);
631
638 int lqt_string_to_colormodel(const char * str);
639
640 /* Query information about the colormodel */
641
648 int lqt_colormodel_is_planar(int colormodel);
649
656 int lqt_colormodel_has_alpha(int colormodel);
657
664 int lqt_colormodel_is_rgb(int colormodel);
665
672 int lqt_colormodel_is_yuv(int colormodel);
673
682 void lqt_colormodel_get_chroma_sub(int colormodel, int * sub_h, int * sub_v);
683
697 void lqt_get_default_rowspan(int colormodel, int width, int * rowspan, int * rowspan_uv);
698
711 int lqt_colormodel_has_conversion(int in_cmodel, int out_cmodel);
712
713 /* Query supported colormodels */
714
720 int lqt_num_colormodels();
721
727 const char * lqt_get_colormodel_string(int index);
728
735 int lqt_get_colormodel(int index);
736
747 int lqt_get_decoder_colormodel(quicktime_t * file, int track);
748
760 int lqt_get_best_source_colormodel(int const* source_options, int target);
761
773 int lqt_get_best_target_colormodel(int source, int const* target_options);
774
791 int lqt_get_best_colormodel(quicktime_t * file, int track, int * supported);
792
803 int lqt_get_cmodel(quicktime_t * file, int track);
804
820 uint8_t ** lqt_rows_alloc(int width, int height, int colormodel, int * rowspan, int * rowspan_uv);
821
835 void lqt_rows_copy(uint8_t **out_rows, uint8_t **in_rows, int width, int height, int in_rowspan, int in_rowspan_uv,
836 int out_rowspan, int out_rowspan_uv, int colormodel);
837
857 void lqt_rows_copy_sub(uint8_t **out_rows, uint8_t **in_rows,
858 int width, int height, int in_rowspan,
859 int in_rowspan_uv, int out_rowspan,
860 int out_rowspan_uv, int colormodel, int src_x, int src_y, int dst_x, int dst_y);
861
878 void lqt_rows_clear(uint8_t **rows,
879 int width, int height, int rowspan, int rowspan_uv, int colormodel);
880
881
887 void lqt_rows_free(uint8_t ** rows);
888
889
890 /**************************************
891 * Set streams for encoding
892 **************************************/
893
907 int lqt_set_audio(quicktime_t *file, int channels,
908 long sample_rate, int bits,
909 lqt_codec_info_t * codec_info);
910
911
929 int lqt_set_video(quicktime_t *file, int tracks,
930 int frame_w, int frame_h,
931 int frame_duration, int timescale,
932 lqt_codec_info_t * codec_info);
933
934
951 int lqt_add_audio_track(quicktime_t *file,
952 int channels, long sample_rate, int bits,
953 lqt_codec_info_t * codec_info);
954
962 int lqt_set_audio_codec(quicktime_t *file, int track,
963 lqt_codec_info_t * info);
964
965
976 void lqt_set_audio_language(quicktime_t * file, int track, const char * language);
977
996 int lqt_add_video_track(quicktime_t *file,
997 int frame_w, int frame_h,
998 int frame_duration, int timescale,
999 lqt_codec_info_t * codec_info);
1000
1008 int lqt_set_video_codec(quicktime_t *file, int track,
1009 lqt_codec_info_t * info);
1010
1011
1029 int lqt_set_video_pass(quicktime_t *file,
1030 int pass, int total_passes,
1031 const char * stats_file, int track);
1032
1040 int64_t lqt_get_frame_time(quicktime_t * file, int track, int frame);
1041
1052 int64_t lqt_frame_time(quicktime_t * file, int track);
1053
1066 int lqt_decode_video(quicktime_t *file,
1067 unsigned char **row_pointers, int track);
1068
1086 int lqt_read_video_frame(quicktime_t * file,
1087 uint8_t ** buffer, int * buffer_alloc,
1088 int64_t frame, int64_t * time, int track);
1089
1105 int lqt_encode_video(quicktime_t *file,
1106 unsigned char **row_pointers,
1107 int track, int64_t time);
1108
1126 int lqt_encode_video_d(quicktime_t *file,
1127 unsigned char **row_pointers,
1128 int track, int64_t time, int duration);
1129
1138 int lqt_frame_duration(quicktime_t * file, int track, int *constant);
1139
1147 int lqt_video_time_scale(quicktime_t * file, int track);
1148
1158 int64_t lqt_video_duration(quicktime_t * file, int track);
1159
1174 void lqt_set_cmodel(quicktime_t *file, int track, int colormodel);
1175
1182 long lqt_video_edit_list_total_entries(quicktime_t * file, int track);
1183
1191 long lqt_video_edit_duration(quicktime_t * file, int track, int entry_index);
1192
1200 long lqt_video_edit_time(quicktime_t * file, int track, int entry_index);
1201
1209 float lqt_video_edit_rate(quicktime_t * file, int track, int entry_index);
1210
1221 void lqt_set_row_span(quicktime_t *file, int track, int row_span);
1222
1233 void lqt_set_row_span_uv(quicktime_t *file, int track, int row_span_uv);
1234
1259 int lqt_decode_audio(quicktime_t *file,
1260 int16_t **output_i,
1261 float **output_f,
1262 long samples);
1263
1276 int64_t lqt_last_audio_position(quicktime_t * file, int track);
1277
1291 int lqt_encode_audio_track(quicktime_t *file,
1292 int16_t **output_i,
1293 float **output_f,
1294 long samples,
1295 int track);
1296
1314 int lqt_decode_audio_track(quicktime_t *file,
1315 int16_t **output_i,
1316 float **output_f,
1317 long samples,
1318 int track);
1319
1320 /*
1321 * Support for "raw" audio en-/decoding: This bypasses all
1322 * internal sampleformat conversions, and allows access to audio
1323 * samples in a format, which is closest to the internal representation.
1324 */
1325
1326 /*
1327 * Query the internal sample format. Works for decoding (call after quicktime_open)
1328 * and encoding (call after lqt_add_audio_track, lqt_set_audio or quicktime_set_audio).
1329 */
1330
1337 const char * lqt_sample_format_to_string(lqt_sample_format_t sampleformat);
1338
1354 lqt_sample_format_t lqt_get_sample_format(quicktime_t * file, int track);
1355
1356 /* The following return the actual number of en-/decoded frames */
1357
1374 int lqt_decode_audio_raw(quicktime_t *file,
1375 void * output,
1376 long samples,
1377 int track);
1378
1390 int lqt_get_audio_language(quicktime_t * file, int track, char * language);
1391
1392
1406 int lqt_encode_audio_raw(quicktime_t *file,
1407 void * input,
1408 long samples,
1409 int track);
1410
1422 void lqt_seek_video(quicktime_t * file, int track,
1423 int64_t time);
1424
1431 long lqt_audio_edit_list_total_entries(quicktime_t * file, int track);
1432
1440 long lqt_audio_edit_duration(quicktime_t * file, int track, int entry_index);
1441
1449 long lqt_audio_edit_time(quicktime_t * file, int track, int entry_index);
1450
1458 float lqt_audio_edit_rate(quicktime_t * file, int track, int entry_index);
1459
1460 /*
1461 * AVI Specific stuff
1462 */
1463
1470 int lqt_is_avi(quicktime_t *file);
1471
1482 int lqt_get_wav_id(quicktime_t *file, int track);
1483
1494 int lqt_total_channels(quicktime_t *file);
1495
1496 /* Extended metadata support */
1497
1504 void lqt_set_album(quicktime_t *file, char *string);
1505
1512 void lqt_set_artist(quicktime_t *file, char *string);
1513
1520 void lqt_set_genre(quicktime_t *file, char *string);
1521
1529 void lqt_set_track(quicktime_t *file, char *string);
1530
1537 void lqt_set_comment(quicktime_t *file, char *string);
1538
1545 void lqt_set_author(quicktime_t *file, char *string);
1546
1553 void lqt_set_creation_time(quicktime_t *file, unsigned long time);
1554
1555
1562 char * lqt_get_album(quicktime_t * file);
1563
1569 char * lqt_get_artist(quicktime_t * file);
1570
1577 char * lqt_get_genre(quicktime_t * file);
1578
1584 char * lqt_get_track(quicktime_t * file);
1585
1592 char * lqt_get_comment(quicktime_t *file);
1593
1599 char * lqt_get_author(quicktime_t *file);
1600
1606 unsigned long lqt_get_creation_time(quicktime_t * file);
1607
1608 /* get track number from track id */
1609 int lqt_track_from_id(quicktime_t *file, int track_id);
1610
1617 const char * lqt_file_type_to_string(lqt_file_type_t type);
1618
1625 lqt_file_type_t lqt_get_file_type(quicktime_t * file);
1626
1627
1635 quicktime_t * lqt_open_read(const char * filename);
1636
1646 quicktime_t * lqt_open_read_with_log(const char * filename, lqt_log_callback_t cb, void * log_data);
1647
1656 quicktime_t * lqt_open_write(const char * filename, lqt_file_type_t type);
1657
1668 quicktime_t * lqt_open_write_with_log(const char * filename, lqt_file_type_t type,
1669 lqt_log_callback_t cb, void * log_data);
1670
1682 void lqt_set_max_riff_size(quicktime_t * file, int size);
1683
1684
1692 void lqt_set_audio_pts_offset(quicktime_t * file, int track, int64_t offset);
1693
1701 int64_t lqt_get_audio_pts_offset(quicktime_t * file, int track);
1702
1710 void lqt_set_video_pts_offset(quicktime_t * file, int track, int64_t offset);
1711
1719 int64_t lqt_get_video_pts_offset(quicktime_t * file, int track);
1720
1728 void lqt_set_text_pts_offset(quicktime_t * file, int track, int64_t offset);
1729
1737 int64_t lqt_get_text_pts_offset(quicktime_t * file, int track);
1738
1739 #ifdef __cplusplus
1740 }
1741 #endif /* __cplusplus */
1742
1743 #pragma GCC visibility pop
1744
1745 #endif