00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _LQT_H_
00026 #define _LQT_H_
00027
00028 #include "quicktime.h"
00029 #include "lqt_atoms.h"
00030 #include "lqt_codecinfo.h"
00031 #include "lqt_qtvr.h"
00032
00033 #pragma GCC visibility push(default)
00034
00035
00036 #ifdef __cplusplus
00037 extern "C" {
00038 #endif
00039
00045 void *lqt_bufalloc(size_t size);
00046
00047
00048
00055 void lqt_set_log_callback(lqt_log_callback_t cb, void * data);
00056
00057
00069 int lqt_fileno(quicktime_t *file);
00070
00082 void lqt_set_audio_parameter(quicktime_t *file,int track, const char *key,const void *value);
00083
00095 void lqt_set_video_parameter(quicktime_t *file,int track, const char *key,const void *value);
00096
00107 int lqt_get_pixel_aspect(quicktime_t *file, int track, int * pixel_width,
00108 int * pixel_height);
00109
00120 int lqt_set_pixel_aspect(quicktime_t *file, int track, int pixel_width,
00121 int pixel_height);
00122
00135 lqt_interlace_mode_t lqt_get_interlace_mode(quicktime_t * file, int track);
00136
00149 int lqt_set_interlace_mode(quicktime_t * file, int track,
00150 lqt_interlace_mode_t mode);
00151
00152
00158 const char * lqt_interlace_mode_to_string(lqt_interlace_mode_t mode);
00159
00170 lqt_chroma_placement_t lqt_get_chroma_placement(quicktime_t * file, int track);
00171
00178 const char * lqt_chroma_placement_to_string(lqt_chroma_placement_t chroma_placement);
00179
00190 int lqt_get_codec_api_version();
00191
00198 const char * lqt_channel_to_string(lqt_channel_t ch);
00199
00211 void lqt_set_channel_setup(quicktime_t * file, int track, lqt_channel_t * ch);
00212
00223 const lqt_channel_t * lqt_get_channel_setup(quicktime_t * file, int track);
00224
00225
00258 int lqt_add_text_track(quicktime_t * file, int timescale);
00259
00269 void lqt_set_text_language(quicktime_t * file, int track, const char * language);
00270
00281 void lqt_set_chapter_track(quicktime_t * file, int track);
00282
00292 void lqt_set_text_box(quicktime_t * file, int track,
00293 uint16_t top, uint16_t left,
00294 uint16_t bottom, uint16_t right);
00295
00308 void lqt_set_text_fg_color(quicktime_t * file, int track,
00309 uint16_t r, uint16_t g,
00310 uint16_t b, uint16_t a);
00311
00325 void lqt_set_text_bg_color(quicktime_t * file, int track,
00326 uint16_t r, uint16_t g,
00327 uint16_t b, uint16_t a);
00328
00329
00330
00331
00340 int lqt_write_text(quicktime_t * file, int track, const char * text, int64_t duration);
00341
00359 int lqt_text_tracks(quicktime_t * file);
00360
00371 int lqt_get_text_language(quicktime_t * file, int track, char * language);
00372
00379 int lqt_text_time_scale(quicktime_t * file, int track);
00380
00390 void lqt_get_text_box(quicktime_t * file, int track,
00391 uint16_t * top, uint16_t * left,
00392 uint16_t * bottom, uint16_t * right);
00393
00394
00409 int lqt_read_text(quicktime_t * file, int track, char ** text, int * text_alloc,
00410 int64_t * timestamp, int64_t * duration);
00411
00419 int lqt_is_chapter_track(quicktime_t * file, int track);
00420
00427 int64_t lqt_text_samples(quicktime_t * file, int track);
00428
00435 void lqt_set_text_position(quicktime_t * file, int track, int64_t position);
00436
00447 void lqt_set_text_time(quicktime_t * file, int track, int64_t time);
00448
00460 void lqt_get_text_fg_color(quicktime_t * file, int track,
00461 uint16_t * r, uint16_t * g,
00462 uint16_t * b, uint16_t * a);
00463
00475 void lqt_get_text_bg_color(quicktime_t * file, int track,
00476 uint16_t * r, uint16_t * g,
00477 uint16_t * b, uint16_t * a);
00478
00494 #define LQT_TIMECODE_DROP 0x0001
00495 #define LQT_TIMECODE_24HMAX 0x0002
00496 #define LQT_TIMECODE_NEG_OK 0x0004
00497 #define LQT_TIMECODE_COUNTER 0x0008
00498
00499
00511 void lqt_add_timecode_track(quicktime_t * file, int track,
00512 uint32_t flags, int framerate);
00513
00523 void lqt_write_timecode(quicktime_t * file, int track,
00524 uint32_t timecode);
00525
00536 int lqt_has_timecode_track(quicktime_t * file, int track,
00537 uint32_t * flags, int * framerate);
00538
00553 int lqt_read_timecode(quicktime_t * file, int track,
00554 uint32_t * timecode);
00555
00567 const char * lqt_get_timecode_tape_name(quicktime_t * file, int track);
00568
00579 void lqt_set_timecode_tape_name(quicktime_t * file, int track,
00580 const char * tapename);
00581
00590 int lqt_get_timecode_track_enabled(quicktime_t * file, int track);
00591
00600 void lqt_set_timecode_track_enabled(quicktime_t * file, int track,
00601 int enabled);
00602
00609
00610
00611
00612
00613
00619 #define LQT_COLORMODEL_NONE -1
00620
00621
00622
00629 const char * lqt_colormodel_to_string(int colormodel);
00630
00637 int lqt_string_to_colormodel(const char * str);
00638
00639
00640
00647 int lqt_colormodel_is_planar(int colormodel);
00648
00655 int lqt_colormodel_has_alpha(int colormodel);
00656
00663 int lqt_colormodel_is_rgb(int colormodel);
00664
00671 int lqt_colormodel_is_yuv(int colormodel);
00672
00681 void lqt_colormodel_get_chroma_sub(int colormodel, int * sub_h, int * sub_v);
00682
00696 void lqt_get_default_rowspan(int colormodel, int width, int * rowspan, int * rowspan_uv);
00697
00710 int lqt_colormodel_has_conversion(int in_cmodel, int out_cmodel);
00711
00712
00713
00719 int lqt_num_colormodels();
00720
00726 const char * lqt_get_colormodel_string(int index);
00727
00734 int lqt_get_colormodel(int index);
00735
00746 int lqt_get_decoder_colormodel(quicktime_t * file, int track);
00747
00764 int lqt_get_best_colormodel(quicktime_t * file, int track, int * supported);
00765
00776 int lqt_get_cmodel(quicktime_t * file, int track);
00777
00793 uint8_t ** lqt_rows_alloc(int width, int height, int colormodel, int * rowspan, int * rowspan_uv);
00794
00808 void lqt_rows_copy(uint8_t **out_rows, uint8_t **in_rows, int width, int height, int in_rowspan, int in_rowspan_uv,
00809 int out_rowspan, int out_rowspan_uv, int colormodel);
00810
00811
00817 void lqt_rows_free(uint8_t ** rows);
00818
00819
00820
00821
00822
00823
00837 int lqt_set_audio(quicktime_t *file, int channels,
00838 long sample_rate, int bits,
00839 lqt_codec_info_t * codec_info);
00840
00841
00859 int lqt_set_video(quicktime_t *file, int tracks,
00860 int frame_w, int frame_h,
00861 int frame_duration, int timescale,
00862 lqt_codec_info_t * codec_info);
00863
00864
00878 int lqt_add_audio_track(quicktime_t *file,
00879 int channels, long sample_rate, int bits,
00880 lqt_codec_info_t * codec_info);
00881
00892 void lqt_set_audio_language(quicktime_t * file, int track, const char * language);
00893
00909 int lqt_add_video_track(quicktime_t *file,
00910 int frame_w, int frame_h,
00911 int frame_duration, int timescale,
00912 lqt_codec_info_t * codec_info);
00913
00931 int lqt_set_video_pass(quicktime_t *file,
00932 int pass, int total_passes,
00933 const char * stats_file, int track);
00934
00945 int64_t lqt_frame_time(quicktime_t * file, int track);
00946
00959 int lqt_decode_video(quicktime_t *file,
00960 unsigned char **row_pointers, int track);
00961
00979 int lqt_read_video_frame(quicktime_t * file,
00980 uint8_t ** buffer, int * buffer_alloc,
00981 int64_t frame, int64_t * time, int track);
00982
00998 int lqt_encode_video(quicktime_t *file,
00999 unsigned char **row_pointers,
01000 int track, int64_t time);
01001
01010 int lqt_frame_duration(quicktime_t * file, int track, int *constant);
01011
01019 int lqt_video_time_scale(quicktime_t * file, int track);
01020
01030 int64_t lqt_video_duration(quicktime_t * file, int track);
01031
01046 void lqt_set_cmodel(quicktime_t *file, int track, int colormodel);
01047
01058 void lqt_set_row_span(quicktime_t *file, int track, int row_span);
01059
01070 void lqt_set_row_span_uv(quicktime_t *file, int track, int row_span_uv);
01071
01096 int lqt_decode_audio(quicktime_t *file,
01097 int16_t **output_i,
01098 float **output_f,
01099 long samples);
01100
01113 int64_t lqt_last_audio_position(quicktime_t * file, int track);
01114
01128 int lqt_encode_audio_track(quicktime_t *file,
01129 int16_t **output_i,
01130 float **output_f,
01131 long samples,
01132 int track);
01133
01151 int lqt_decode_audio_track(quicktime_t *file,
01152 int16_t **output_i,
01153 float **output_f,
01154 long samples,
01155 int track);
01156
01157
01158
01159
01160
01161
01162
01163
01164
01165
01166
01167
01174 const char * lqt_sample_format_to_string(lqt_sample_format_t sampleformat);
01175
01191 lqt_sample_format_t lqt_get_sample_format(quicktime_t * file, int track);
01192
01193
01194
01211 int lqt_decode_audio_raw(quicktime_t *file,
01212 void * output,
01213 long samples,
01214 int track);
01215
01227 int lqt_get_audio_language(quicktime_t * file, int track, char * language);
01228
01229
01243 int lqt_encode_audio_raw(quicktime_t *file,
01244 void * input,
01245 long samples,
01246 int track);
01247
01259 void lqt_seek_video(quicktime_t * file, int track,
01260 int64_t time);
01261
01262
01263
01264
01265
01272 int lqt_is_avi(quicktime_t *file);
01273
01284 int lqt_get_wav_id(quicktime_t *file, int track);
01285
01296 int lqt_total_channels(quicktime_t *file);
01297
01298
01299
01306 void lqt_set_album(quicktime_t *file, char *string);
01307
01314 void lqt_set_artist(quicktime_t *file, char *string);
01315
01322 void lqt_set_genre(quicktime_t *file, char *string);
01323
01331 void lqt_set_track(quicktime_t *file, char *string);
01332
01339 void lqt_set_comment(quicktime_t *file, char *string);
01340
01347 void lqt_set_author(quicktime_t *file, char *string);
01348
01355 void lqt_set_creation_time(quicktime_t *file, unsigned long time);
01356
01357
01364 char * lqt_get_album(quicktime_t * file);
01365
01371 char * lqt_get_artist(quicktime_t * file);
01372
01379 char * lqt_get_genre(quicktime_t * file);
01380
01386 char * lqt_get_track(quicktime_t * file);
01387
01394 char * lqt_get_comment(quicktime_t *file);
01395
01401 char * lqt_get_author(quicktime_t *file);
01402
01408 unsigned long lqt_get_creation_time(quicktime_t * file);
01409
01410
01411 int lqt_track_from_id(quicktime_t *file, int track_id);
01412
01419 const char * lqt_file_type_to_string(lqt_file_type_t type);
01420
01427 lqt_file_type_t lqt_get_file_type(quicktime_t * file);
01428
01429
01437 quicktime_t * lqt_open_read(const char * filename);
01438
01448 quicktime_t * lqt_open_read_with_log(const char * filename, lqt_log_callback_t cb, void * log_data);
01449
01458 quicktime_t * lqt_open_write(const char * filename, lqt_file_type_t type);
01459
01470 quicktime_t * lqt_open_write_with_log(const char * filename, lqt_file_type_t type,
01471 lqt_log_callback_t cb, void * log_data);
01472
01484 void lqt_set_max_riff_size(quicktime_t * file, int size);
01485
01486
01487
01488
01489 #ifdef __cplusplus
01490 }
01491 #endif
01492
01493 #pragma GCC visibility pop
01494
01495 #endif