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 //!< Indicates whether the timecode is drop frame
00496 #define LQT_TIMECODE_24HMAX 0x0002 //!< Indicates whether the timecode wraps after 24 hours
00497 #define LQT_TIMECODE_NEG_OK 0x0004 //!< Indicates whether negative time values are allowed
00498 #define LQT_TIMECODE_COUNTER 0x0008 //!< Indicates whether the time value corresponds to a tape counter value
00499
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
01040 int64_t lqt_get_frame_time(quicktime_t * file, int track, int frame);
01041
01052 int64_t lqt_frame_time(quicktime_t * file, int track);
01053
01066 int lqt_decode_video(quicktime_t *file,
01067 unsigned char **row_pointers, int track);
01068
01086 int lqt_read_video_frame(quicktime_t * file,
01087 uint8_t ** buffer, int * buffer_alloc,
01088 int64_t frame, int64_t * time, int track);
01089
01105 int lqt_encode_video(quicktime_t *file,
01106 unsigned char **row_pointers,
01107 int track, int64_t time);
01108
01126 int lqt_encode_video_d(quicktime_t *file,
01127 unsigned char **row_pointers,
01128 int track, int64_t time, int duration);
01129
01138 int lqt_frame_duration(quicktime_t * file, int track, int *constant);
01139
01147 int lqt_video_time_scale(quicktime_t * file, int track);
01148
01158 int64_t lqt_video_duration(quicktime_t * file, int track);
01159
01174 void lqt_set_cmodel(quicktime_t *file, int track, int colormodel);
01175
01182 long lqt_video_edit_list_total_entries(quicktime_t * file, int track);
01183
01191 long lqt_video_edit_duration(quicktime_t * file, int track, int entry_index);
01192
01200 long lqt_video_edit_time(quicktime_t * file, int track, int entry_index);
01201
01209 float lqt_video_edit_rate(quicktime_t * file, int track, int entry_index);
01210
01221 void lqt_set_row_span(quicktime_t *file, int track, int row_span);
01222
01233 void lqt_set_row_span_uv(quicktime_t *file, int track, int row_span_uv);
01234
01259 int lqt_decode_audio(quicktime_t *file,
01260 int16_t **output_i,
01261 float **output_f,
01262 long samples);
01263
01276 int64_t lqt_last_audio_position(quicktime_t * file, int track);
01277
01291 int lqt_encode_audio_track(quicktime_t *file,
01292 int16_t **output_i,
01293 float **output_f,
01294 long samples,
01295 int track);
01296
01314 int lqt_decode_audio_track(quicktime_t *file,
01315 int16_t **output_i,
01316 float **output_f,
01317 long samples,
01318 int track);
01319
01320
01321
01322
01323
01324
01325
01326
01327
01328
01329
01330
01337 const char * lqt_sample_format_to_string(lqt_sample_format_t sampleformat);
01338
01354 lqt_sample_format_t lqt_get_sample_format(quicktime_t * file, int track);
01355
01356
01357
01374 int lqt_decode_audio_raw(quicktime_t *file,
01375 void * output,
01376 long samples,
01377 int track);
01378
01390 int lqt_get_audio_language(quicktime_t * file, int track, char * language);
01391
01392
01406 int lqt_encode_audio_raw(quicktime_t *file,
01407 void * input,
01408 long samples,
01409 int track);
01410
01422 void lqt_seek_video(quicktime_t * file, int track,
01423 int64_t time);
01424
01431 long lqt_audio_edit_list_total_entries(quicktime_t * file, int track);
01432
01440 long lqt_audio_edit_duration(quicktime_t * file, int track, int entry_index);
01441
01449 long lqt_audio_edit_time(quicktime_t * file, int track, int entry_index);
01450
01458 float lqt_audio_edit_rate(quicktime_t * file, int track, int entry_index);
01459
01460
01461
01462
01463
01470 int lqt_is_avi(quicktime_t *file);
01471
01482 int lqt_get_wav_id(quicktime_t *file, int track);
01483
01494 int lqt_total_channels(quicktime_t *file);
01495
01496
01497
01504 void lqt_set_album(quicktime_t *file, char *string);
01505
01512 void lqt_set_artist(quicktime_t *file, char *string);
01513
01520 void lqt_set_genre(quicktime_t *file, char *string);
01521
01529 void lqt_set_track(quicktime_t *file, char *string);
01530
01537 void lqt_set_comment(quicktime_t *file, char *string);
01538
01545 void lqt_set_author(quicktime_t *file, char *string);
01546
01553 void lqt_set_creation_time(quicktime_t *file, unsigned long time);
01554
01555
01562 char * lqt_get_album(quicktime_t * file);
01563
01569 char * lqt_get_artist(quicktime_t * file);
01570
01577 char * lqt_get_genre(quicktime_t * file);
01578
01584 char * lqt_get_track(quicktime_t * file);
01585
01592 char * lqt_get_comment(quicktime_t *file);
01593
01599 char * lqt_get_author(quicktime_t *file);
01600
01606 unsigned long lqt_get_creation_time(quicktime_t * file);
01607
01608
01609 int lqt_track_from_id(quicktime_t *file, int track_id);
01610
01617 const char * lqt_file_type_to_string(lqt_file_type_t type);
01618
01625 lqt_file_type_t lqt_get_file_type(quicktime_t * file);
01626
01627
01635 quicktime_t * lqt_open_read(const char * filename);
01636
01646 quicktime_t * lqt_open_read_with_log(const char * filename, lqt_log_callback_t cb, void * log_data);
01647
01656 quicktime_t * lqt_open_write(const char * filename, lqt_file_type_t type);
01657
01668 quicktime_t * lqt_open_write_with_log(const char * filename, lqt_file_type_t type,
01669 lqt_log_callback_t cb, void * log_data);
01670
01682 void lqt_set_max_riff_size(quicktime_t * file, int size);
01683
01684
01692 void lqt_set_audio_pts_offset(quicktime_t * file, int track, int64_t offset);
01693
01701 int64_t lqt_get_audio_pts_offset(quicktime_t * file, int track);
01702
01710 void lqt_set_video_pts_offset(quicktime_t * file, int track, int64_t offset);
01711
01719 int64_t lqt_get_video_pts_offset(quicktime_t * file, int track);
01720
01728 void lqt_set_text_pts_offset(quicktime_t * file, int track, int64_t offset);
01729
01737 int64_t lqt_get_text_pts_offset(quicktime_t * file, int track);
01738
01739 #ifdef __cplusplus
01740 }
01741 #endif
01742
01743 #pragma GCC visibility pop
01744
01745 #endif