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 "compression.h"
00031 #include "lqt_codecinfo.h"
00032 #include "lqt_qtvr.h"
00033
00034 #pragma GCC visibility push(default)
00035
00036
00037 #ifdef __cplusplus
00038 extern "C" {
00039 #endif
00040
00046 void *lqt_bufalloc(size_t size);
00047
00048
00049
00056 void lqt_set_log_callback(lqt_log_callback_t cb, void * data);
00057
00058
00070 int lqt_fileno(quicktime_t *file);
00071
00083 void lqt_set_audio_parameter(quicktime_t *file,int track, const char *key,const void *value);
00084
00096 void lqt_set_video_parameter(quicktime_t *file,int track, const char *key,const void *value);
00097
00108 int lqt_get_pixel_aspect(quicktime_t *file, int track, int * pixel_width,
00109 int * pixel_height);
00110
00121 int lqt_set_pixel_aspect(quicktime_t *file, int track, int pixel_width,
00122 int pixel_height);
00123
00136 lqt_interlace_mode_t lqt_get_interlace_mode(quicktime_t * file, int track);
00137
00150 int lqt_set_interlace_mode(quicktime_t * file, int track,
00151 lqt_interlace_mode_t mode);
00152
00153
00159 const char * lqt_interlace_mode_to_string(lqt_interlace_mode_t mode);
00160
00171 lqt_chroma_placement_t lqt_get_chroma_placement(quicktime_t * file, int track);
00172
00179 const char * lqt_chroma_placement_to_string(lqt_chroma_placement_t chroma_placement);
00180
00191 int lqt_get_codec_api_version();
00192
00199 const char * lqt_channel_to_string(lqt_channel_t ch);
00200
00212 void lqt_set_channel_setup(quicktime_t * file, int track, lqt_channel_t * ch);
00213
00224 const lqt_channel_t * lqt_get_channel_setup(quicktime_t * file, int track);
00225
00226
00259 int lqt_add_text_track(quicktime_t * file, int timescale);
00260
00270 void lqt_set_text_language(quicktime_t * file, int track, const char * language);
00271
00282 void lqt_set_chapter_track(quicktime_t * file, int track);
00283
00293 void lqt_set_text_box(quicktime_t * file, int track,
00294 uint16_t top, uint16_t left,
00295 uint16_t bottom, uint16_t right);
00296
00309 void lqt_set_text_fg_color(quicktime_t * file, int track,
00310 uint16_t r, uint16_t g,
00311 uint16_t b, uint16_t a);
00312
00326 void lqt_set_text_bg_color(quicktime_t * file, int track,
00327 uint16_t r, uint16_t g,
00328 uint16_t b, uint16_t a);
00329
00330
00331
00332
00341 int lqt_write_text(quicktime_t * file, int track, const char * text, int64_t duration);
00342
00360 int lqt_text_tracks(quicktime_t * file);
00361
00372 int lqt_get_text_language(quicktime_t * file, int track, char * language);
00373
00380 int lqt_text_time_scale(quicktime_t * file, int track);
00381
00391 void lqt_get_text_box(quicktime_t * file, int track,
00392 uint16_t * top, uint16_t * left,
00393 uint16_t * bottom, uint16_t * right);
00394
00395
00410 int lqt_read_text(quicktime_t * file, int track, char ** text, int * text_alloc,
00411 int64_t * timestamp, int64_t * duration);
00412
00420 int lqt_is_chapter_track(quicktime_t * file, int track);
00421
00428 int64_t lqt_text_samples(quicktime_t * file, int track);
00429
00436 void lqt_set_text_position(quicktime_t * file, int track, int64_t position);
00437
00448 void lqt_set_text_time(quicktime_t * file, int track, int64_t time);
00449
00461 void lqt_get_text_fg_color(quicktime_t * file, int track,
00462 uint16_t * r, uint16_t * g,
00463 uint16_t * b, uint16_t * a);
00464
00476 void lqt_get_text_bg_color(quicktime_t * file, int track,
00477 uint16_t * r, uint16_t * g,
00478 uint16_t * b, uint16_t * a);
00479
00495 #define LQT_TIMECODE_DROP 0x0001
00496 #define LQT_TIMECODE_24HMAX 0x0002
00497 #define LQT_TIMECODE_NEG_OK 0x0004
00498 #define LQT_TIMECODE_COUNTER 0x0008
00499
00500
00512 void lqt_add_timecode_track(quicktime_t * file, int track,
00513 uint32_t flags, int framerate);
00514
00524 void lqt_write_timecode(quicktime_t * file, int track,
00525 uint32_t timecode);
00526
00537 int lqt_has_timecode_track(quicktime_t * file, int track,
00538 uint32_t * flags, int * framerate);
00539
00554 int lqt_read_timecode(quicktime_t * file, int track,
00555 uint32_t * timecode);
00556
00568 const char * lqt_get_timecode_tape_name(quicktime_t * file, int track);
00569
00580 void lqt_set_timecode_tape_name(quicktime_t * file, int track,
00581 const char * tapename);
00582
00591 int lqt_get_timecode_track_enabled(quicktime_t * file, int track);
00592
00601 void lqt_set_timecode_track_enabled(quicktime_t * file, int track,
00602 int enabled);
00603
00610
00611
00612
00613
00614
00620 #define LQT_COLORMODEL_NONE -1
00621
00622
00623
00630 const char * lqt_colormodel_to_string(int colormodel);
00631
00638 int lqt_string_to_colormodel(const char * str);
00639
00640
00641
00648 int lqt_colormodel_is_planar(int colormodel);
00649
00656 int lqt_colormodel_has_alpha(int colormodel);
00657
00664 int lqt_colormodel_is_rgb(int colormodel);
00665
00672 int lqt_colormodel_is_yuv(int colormodel);
00673
00682 void lqt_colormodel_get_chroma_sub(int colormodel, int * sub_h, int * sub_v);
00683
00697 void lqt_get_default_rowspan(int colormodel, int width, int * rowspan, int * rowspan_uv);
00698
00711 int lqt_colormodel_has_conversion(int in_cmodel, int out_cmodel);
00712
00713
00714
00720 int lqt_num_colormodels();
00721
00727 const char * lqt_get_colormodel_string(int index);
00728
00735 int lqt_get_colormodel(int index);
00736
00747 int lqt_get_decoder_colormodel(quicktime_t * file, int track);
00748
00760 int lqt_get_best_source_colormodel(int const* source_options, int target);
00761
00773 int lqt_get_best_target_colormodel(int source, int const* target_options);
00774
00791 int lqt_get_best_colormodel(quicktime_t * file, int track, int * supported);
00792
00803 int lqt_get_cmodel(quicktime_t * file, int track);
00804
00820 uint8_t ** lqt_rows_alloc(int width, int height, int colormodel, int * rowspan, int * rowspan_uv);
00821
00835 void lqt_rows_copy(uint8_t **out_rows, uint8_t **in_rows, int width, int height, int in_rowspan, int in_rowspan_uv,
00836 int out_rowspan, int out_rowspan_uv, int colormodel);
00837
00857 void lqt_rows_copy_sub(uint8_t **out_rows, uint8_t **in_rows,
00858 int width, int height, int in_rowspan,
00859 int in_rowspan_uv, int out_rowspan,
00860 int out_rowspan_uv, int colormodel, int src_x, int src_y, int dst_x, int dst_y);
00861
00878 void lqt_rows_clear(uint8_t **rows,
00879 int width, int height, int rowspan, int rowspan_uv, int colormodel);
00880
00881
00887 void lqt_rows_free(uint8_t ** rows);
00888
00889
00890
00891
00892
00893
00907 int lqt_set_audio(quicktime_t *file, int channels,
00908 long sample_rate, int bits,
00909 lqt_codec_info_t * codec_info);
00910
00911
00929 int lqt_set_video(quicktime_t *file, int tracks,
00930 int frame_w, int frame_h,
00931 int frame_duration, int timescale,
00932 lqt_codec_info_t * codec_info);
00933
00934
00951 int lqt_add_audio_track(quicktime_t *file,
00952 int channels, long sample_rate, int bits,
00953 lqt_codec_info_t * codec_info);
00954
00962 int lqt_set_audio_codec(quicktime_t *file, int track,
00963 lqt_codec_info_t * info);
00964
00965
00976 void lqt_set_audio_language(quicktime_t * file, int track, const char * language);
00977
00996 int lqt_add_video_track(quicktime_t *file,
00997 int frame_w, int frame_h,
00998 int frame_duration, int timescale,
00999 lqt_codec_info_t * codec_info);
01000
01008 int lqt_set_video_codec(quicktime_t *file, int track,
01009 lqt_codec_info_t * info);
01010
01011
01029 int lqt_set_video_pass(quicktime_t *file,
01030 int pass, int total_passes,
01031 const char * stats_file, int track);
01032
01043 int64_t lqt_frame_time(quicktime_t * file, int track);
01044
01057 int lqt_decode_video(quicktime_t *file,
01058 unsigned char **row_pointers, int track);
01059
01077 int lqt_read_video_frame(quicktime_t * file,
01078 uint8_t ** buffer, int * buffer_alloc,
01079 int64_t frame, int64_t * time, int track);
01080
01096 int lqt_encode_video(quicktime_t *file,
01097 unsigned char **row_pointers,
01098 int track, int64_t time);
01099
01117 int lqt_encode_video_d(quicktime_t *file,
01118 unsigned char **row_pointers,
01119 int track, int64_t time, int duration);
01120
01129 int lqt_frame_duration(quicktime_t * file, int track, int *constant);
01130
01138 int lqt_video_time_scale(quicktime_t * file, int track);
01139
01149 int64_t lqt_video_duration(quicktime_t * file, int track);
01150
01165 void lqt_set_cmodel(quicktime_t *file, int track, int colormodel);
01166
01177 void lqt_set_row_span(quicktime_t *file, int track, int row_span);
01178
01189 void lqt_set_row_span_uv(quicktime_t *file, int track, int row_span_uv);
01190
01215 int lqt_decode_audio(quicktime_t *file,
01216 int16_t **output_i,
01217 float **output_f,
01218 long samples);
01219
01232 int64_t lqt_last_audio_position(quicktime_t * file, int track);
01233
01247 int lqt_encode_audio_track(quicktime_t *file,
01248 int16_t **output_i,
01249 float **output_f,
01250 long samples,
01251 int track);
01252
01270 int lqt_decode_audio_track(quicktime_t *file,
01271 int16_t **output_i,
01272 float **output_f,
01273 long samples,
01274 int track);
01275
01276
01277
01278
01279
01280
01281
01282
01283
01284
01285
01286
01293 const char * lqt_sample_format_to_string(lqt_sample_format_t sampleformat);
01294
01310 lqt_sample_format_t lqt_get_sample_format(quicktime_t * file, int track);
01311
01312
01313
01330 int lqt_decode_audio_raw(quicktime_t *file,
01331 void * output,
01332 long samples,
01333 int track);
01334
01346 int lqt_get_audio_language(quicktime_t * file, int track, char * language);
01347
01348
01362 int lqt_encode_audio_raw(quicktime_t *file,
01363 void * input,
01364 long samples,
01365 int track);
01366
01378 void lqt_seek_video(quicktime_t * file, int track,
01379 int64_t time);
01380
01381
01382
01383
01384
01391 int lqt_is_avi(quicktime_t *file);
01392
01403 int lqt_get_wav_id(quicktime_t *file, int track);
01404
01415 int lqt_total_channels(quicktime_t *file);
01416
01417
01418
01425 void lqt_set_album(quicktime_t *file, char *string);
01426
01433 void lqt_set_artist(quicktime_t *file, char *string);
01434
01441 void lqt_set_genre(quicktime_t *file, char *string);
01442
01450 void lqt_set_track(quicktime_t *file, char *string);
01451
01458 void lqt_set_comment(quicktime_t *file, char *string);
01459
01466 void lqt_set_author(quicktime_t *file, char *string);
01467
01474 void lqt_set_creation_time(quicktime_t *file, unsigned long time);
01475
01476
01483 char * lqt_get_album(quicktime_t * file);
01484
01490 char * lqt_get_artist(quicktime_t * file);
01491
01498 char * lqt_get_genre(quicktime_t * file);
01499
01505 char * lqt_get_track(quicktime_t * file);
01506
01513 char * lqt_get_comment(quicktime_t *file);
01514
01520 char * lqt_get_author(quicktime_t *file);
01521
01527 unsigned long lqt_get_creation_time(quicktime_t * file);
01528
01529
01530 int lqt_track_from_id(quicktime_t *file, int track_id);
01531
01538 const char * lqt_file_type_to_string(lqt_file_type_t type);
01539
01546 lqt_file_type_t lqt_get_file_type(quicktime_t * file);
01547
01548
01556 quicktime_t * lqt_open_read(const char * filename);
01557
01567 quicktime_t * lqt_open_read_with_log(const char * filename, lqt_log_callback_t cb, void * log_data);
01568
01577 quicktime_t * lqt_open_write(const char * filename, lqt_file_type_t type);
01578
01589 quicktime_t * lqt_open_write_with_log(const char * filename, lqt_file_type_t type,
01590 lqt_log_callback_t cb, void * log_data);
01591
01603 void lqt_set_max_riff_size(quicktime_t * file, int size);
01604
01605
01606
01607
01608 #ifdef __cplusplus
01609 }
01610 #endif
01611
01612 #pragma GCC visibility pop
01613
01614 #endif