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 #ifdef __GNUC__
00035 #pragma GCC visibility push(default)
00036 #endif
00037
00038
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042
00048 void *lqt_bufalloc(size_t size);
00049
00050
00051
00058 void lqt_set_log_callback(lqt_log_callback_t cb, void * data);
00059
00060
00072 int lqt_fileno(quicktime_t *file);
00073
00085 void lqt_set_audio_parameter(quicktime_t *file,int track, const char *key,const void *value);
00086
00098 void lqt_set_video_parameter(quicktime_t *file,int track, const char *key,const void *value);
00099
00110 int lqt_get_pixel_aspect(quicktime_t *file, int track, int * pixel_width,
00111 int * pixel_height);
00112
00123 int lqt_set_pixel_aspect(quicktime_t *file, int track, int pixel_width,
00124 int pixel_height);
00125
00138 lqt_interlace_mode_t lqt_get_interlace_mode(quicktime_t * file, int track);
00139
00152 int lqt_set_interlace_mode(quicktime_t * file, int track,
00153 lqt_interlace_mode_t mode);
00154
00155
00161 const char * lqt_interlace_mode_to_string(lqt_interlace_mode_t mode);
00162
00173 lqt_chroma_placement_t lqt_get_chroma_placement(quicktime_t * file, int track);
00174
00181 const char * lqt_chroma_placement_to_string(lqt_chroma_placement_t chroma_placement);
00182
00193 int lqt_get_codec_api_version();
00194
00201 const char * lqt_channel_to_string(lqt_channel_t ch);
00202
00214 void lqt_set_channel_setup(quicktime_t * file, int track, lqt_channel_t * ch);
00215
00226 const lqt_channel_t * lqt_get_channel_setup(quicktime_t * file, int track);
00227
00228
00261 int lqt_add_text_track(quicktime_t * file, int timescale);
00262
00272 void lqt_set_text_language(quicktime_t * file, int track, const char * language);
00273
00284 void lqt_set_chapter_track(quicktime_t * file, int track);
00285
00295 void lqt_set_text_box(quicktime_t * file, int track,
00296 uint16_t top, uint16_t left,
00297 uint16_t bottom, uint16_t right);
00298
00311 void lqt_set_text_fg_color(quicktime_t * file, int track,
00312 uint16_t r, uint16_t g,
00313 uint16_t b, uint16_t a);
00314
00328 void lqt_set_text_bg_color(quicktime_t * file, int track,
00329 uint16_t r, uint16_t g,
00330 uint16_t b, uint16_t a);
00331
00332
00333
00334
00343 int lqt_write_text(quicktime_t * file, int track, const char * text, int64_t duration);
00344
00362 int lqt_text_tracks(quicktime_t * file);
00363
00374 int lqt_get_text_language(quicktime_t * file, int track, char * language);
00375
00382 int lqt_text_time_scale(quicktime_t * file, int track);
00383
00393 void lqt_get_text_box(quicktime_t * file, int track,
00394 uint16_t * top, uint16_t * left,
00395 uint16_t * bottom, uint16_t * right);
00396
00397
00412 int lqt_read_text(quicktime_t * file, int track, char ** text, int * text_alloc,
00413 int64_t * timestamp, int64_t * duration);
00414
00422 int lqt_is_chapter_track(quicktime_t * file, int track);
00423
00430 int64_t lqt_text_samples(quicktime_t * file, int track);
00431
00438 void lqt_set_text_position(quicktime_t * file, int track, int64_t position);
00439
00450 void lqt_set_text_time(quicktime_t * file, int track, int64_t time);
00451
00463 void lqt_get_text_fg_color(quicktime_t * file, int track,
00464 uint16_t * r, uint16_t * g,
00465 uint16_t * b, uint16_t * a);
00466
00478 void lqt_get_text_bg_color(quicktime_t * file, int track,
00479 uint16_t * r, uint16_t * g,
00480 uint16_t * b, uint16_t * a);
00481
00497 #define LQT_TIMECODE_DROP 0x0001
00498 #define LQT_TIMECODE_24HMAX 0x0002
00499 #define LQT_TIMECODE_NEG_OK 0x0004
00500 #define LQT_TIMECODE_COUNTER 0x0008
00501
00502
00514 void lqt_add_timecode_track(quicktime_t * file, int track,
00515 uint32_t flags, int framerate);
00516
00526 void lqt_write_timecode(quicktime_t * file, int track,
00527 uint32_t timecode);
00528
00539 int lqt_has_timecode_track(quicktime_t * file, int track,
00540 uint32_t * flags, int * framerate);
00541
00556 int lqt_read_timecode(quicktime_t * file, int track,
00557 uint32_t * timecode);
00558
00570 const char * lqt_get_timecode_tape_name(quicktime_t * file, int track);
00571
00582 void lqt_set_timecode_tape_name(quicktime_t * file, int track,
00583 const char * tapename);
00584
00593 int lqt_get_timecode_track_enabled(quicktime_t * file, int track);
00594
00603 void lqt_set_timecode_track_enabled(quicktime_t * file, int track,
00604 int enabled);
00605
00612
00613
00614
00615
00616
00622 #define LQT_COLORMODEL_NONE -1
00623
00624
00625
00632 const char * lqt_colormodel_to_string(int colormodel);
00633
00640 int lqt_string_to_colormodel(const char * str);
00641
00642
00643
00650 int lqt_colormodel_is_planar(int colormodel);
00651
00658 int lqt_colormodel_has_alpha(int colormodel);
00659
00666 int lqt_colormodel_is_rgb(int colormodel);
00667
00674 int lqt_colormodel_is_yuv(int colormodel);
00675
00684 void lqt_colormodel_get_chroma_sub(int colormodel, int * sub_h, int * sub_v);
00685
00692 int lqt_colormodel_is_video_range(int colormodel);
00693
00707 void lqt_get_default_rowspan(int colormodel, int width, int * rowspan, int * rowspan_uv);
00708
00721 int lqt_colormodel_has_conversion(int in_cmodel, int out_cmodel);
00722
00723
00724
00730 int lqt_num_colormodels();
00731
00737 const char * lqt_get_colormodel_string(int index);
00738
00745 int lqt_get_colormodel(int index);
00746
00757 int lqt_get_decoder_colormodel(quicktime_t * file, int track);
00758
00770 int lqt_get_best_source_colormodel(int const* source_options, int target);
00771
00783 int lqt_get_best_target_colormodel(int source, int const* target_options);
00784
00801 int lqt_get_best_colormodel(quicktime_t * file, int track, int * supported);
00802
00813 int lqt_get_cmodel(quicktime_t * file, int track);
00814
00830 uint8_t ** lqt_rows_alloc(int width, int height, int colormodel, int * rowspan, int * rowspan_uv);
00831
00845 void lqt_rows_copy(uint8_t **out_rows, uint8_t **in_rows, int width, int height, int in_rowspan, int in_rowspan_uv,
00846 int out_rowspan, int out_rowspan_uv, int colormodel);
00847
00867 void lqt_rows_copy_sub(uint8_t **out_rows, uint8_t **in_rows,
00868 int width, int height, int in_rowspan,
00869 int in_rowspan_uv, int out_rowspan,
00870 int out_rowspan_uv, int colormodel, int src_x, int src_y, int dst_x, int dst_y);
00871
00888 void lqt_rows_clear(uint8_t **rows,
00889 int width, int height, int rowspan, int rowspan_uv, int colormodel);
00890
00891
00897 void lqt_rows_free(uint8_t ** rows);
00898
00899
00900
00901
00902
00903
00917 int lqt_set_audio(quicktime_t *file, int channels,
00918 long sample_rate, int bits,
00919 lqt_codec_info_t * codec_info);
00920
00921
00939 int lqt_set_video(quicktime_t *file, int tracks,
00940 int frame_w, int frame_h,
00941 int frame_duration, int timescale,
00942 lqt_codec_info_t * codec_info);
00943
00944
00961 int lqt_add_audio_track(quicktime_t *file,
00962 int channels, long sample_rate, int bits,
00963 lqt_codec_info_t * codec_info);
00964
00972 int lqt_set_audio_codec(quicktime_t *file, int track,
00973 lqt_codec_info_t * info);
00974
00975
00986 void lqt_set_audio_language(quicktime_t * file, int track, const char * language);
00987
01006 int lqt_add_video_track(quicktime_t *file,
01007 int frame_w, int frame_h,
01008 int frame_duration, int timescale,
01009 lqt_codec_info_t * codec_info);
01010
01018 int lqt_set_video_codec(quicktime_t *file, int track,
01019 lqt_codec_info_t * info);
01020
01021
01039 int lqt_set_video_pass(quicktime_t *file,
01040 int pass, int total_passes,
01041 const char * stats_file, int track);
01042
01050 int64_t lqt_get_frame_time(quicktime_t * file, int track, int frame);
01051
01062 int64_t lqt_frame_time(quicktime_t * file, int track);
01063
01077 int lqt_decode_video(quicktime_t *file,
01078 unsigned char **row_pointers, int track);
01079
01097 int lqt_read_video_frame(quicktime_t * file,
01098 uint8_t ** buffer, int * buffer_alloc,
01099 int64_t frame, int64_t * time, int track);
01100
01116 int lqt_encode_video(quicktime_t *file,
01117 unsigned char **row_pointers,
01118 int track, int64_t time);
01119
01137 int lqt_encode_video_d(quicktime_t *file,
01138 unsigned char **row_pointers,
01139 int track, int64_t time, int duration);
01140
01149 int lqt_frame_duration(quicktime_t * file, int track, int *constant);
01150
01158 int lqt_video_time_scale(quicktime_t * file, int track);
01159
01169 int64_t lqt_video_duration(quicktime_t * file, int track);
01170
01185 void lqt_set_cmodel(quicktime_t *file, int track, int colormodel);
01186
01193 long lqt_video_edit_list_total_entries(quicktime_t * file, int track);
01194
01202 long lqt_video_edit_duration(quicktime_t * file, int track, int entry_index);
01203
01211 long lqt_video_edit_time(quicktime_t * file, int track, int entry_index);
01212
01220 float lqt_video_edit_rate(quicktime_t * file, int track, int entry_index);
01221
01232 void lqt_set_row_span(quicktime_t *file, int track, int row_span);
01233
01244 void lqt_set_row_span_uv(quicktime_t *file, int track, int row_span_uv);
01245
01270 int lqt_decode_audio(quicktime_t *file,
01271 int16_t **output_i,
01272 float **output_f,
01273 long samples);
01274
01287 int64_t lqt_last_audio_position(quicktime_t * file, int track);
01288
01302 int lqt_encode_audio_track(quicktime_t *file,
01303 int16_t **output_i,
01304 float **output_f,
01305 long samples,
01306 int track);
01307
01325 int lqt_decode_audio_track(quicktime_t *file,
01326 int16_t **output_i,
01327 float **output_f,
01328 long samples,
01329 int track);
01330
01331
01332
01333
01334
01335
01342 const char * lqt_sample_format_to_string(lqt_sample_format_t sampleformat);
01343
01355 lqt_sample_format_t lqt_get_sample_format(quicktime_t * file, int track);
01356
01357
01358
01375 int lqt_decode_audio_raw(quicktime_t *file,
01376 void * output,
01377 long samples,
01378 int track);
01379
01391 int lqt_get_audio_language(quicktime_t * file, int track, char * language);
01392
01393
01407 int lqt_encode_audio_raw(quicktime_t *file,
01408 void * input,
01409 long samples,
01410 int track);
01411
01423 void lqt_seek_video(quicktime_t * file, int track,
01424 int64_t time);
01425
01432 long lqt_audio_edit_list_total_entries(quicktime_t * file, int track);
01433
01441 long lqt_audio_edit_duration(quicktime_t * file, int track, int entry_index);
01442
01450 long lqt_audio_edit_time(quicktime_t * file, int track, int entry_index);
01451
01459 float lqt_audio_edit_rate(quicktime_t * file, int track, int entry_index);
01460
01461
01462
01463
01464
01471 int lqt_is_avi(quicktime_t *file);
01472
01483 int lqt_get_wav_id(quicktime_t *file, int track);
01484
01495 int lqt_total_channels(quicktime_t *file);
01496
01497
01498
01505 void lqt_set_album(quicktime_t *file, char *string);
01506
01513 void lqt_set_artist(quicktime_t *file, char *string);
01514
01521 void lqt_set_genre(quicktime_t *file, char *string);
01522
01530 void lqt_set_track(quicktime_t *file, char *string);
01531
01538 void lqt_set_comment(quicktime_t *file, char *string);
01539
01546 void lqt_set_author(quicktime_t *file, char *string);
01547
01554 void lqt_set_creation_time(quicktime_t *file, unsigned long time);
01555
01556
01563 char * lqt_get_album(quicktime_t * file);
01564
01570 char * lqt_get_artist(quicktime_t * file);
01571
01578 char * lqt_get_genre(quicktime_t * file);
01579
01585 char * lqt_get_track(quicktime_t * file);
01586
01593 char * lqt_get_comment(quicktime_t *file);
01594
01600 char * lqt_get_author(quicktime_t *file);
01601
01607 unsigned long lqt_get_creation_time(quicktime_t * file);
01608
01609
01610 int lqt_track_from_id(quicktime_t *file, int track_id);
01611
01618 const char * lqt_file_type_to_string(lqt_file_type_t type);
01619
01626 lqt_file_type_t lqt_get_file_type(quicktime_t * file);
01627
01628
01636 quicktime_t * lqt_open_read(const char * filename);
01637
01647 quicktime_t * lqt_open_read_with_log(const char * filename, lqt_log_callback_t cb, void * log_data);
01648
01657 quicktime_t * lqt_open_write(const char * filename, lqt_file_type_t type);
01658
01669 quicktime_t * lqt_open_write_with_log(const char * filename, lqt_file_type_t type,
01670 lqt_log_callback_t cb, void * log_data);
01671
01683 void lqt_set_max_riff_size(quicktime_t * file, int size);
01684
01685
01693 void lqt_set_audio_pts_offset(quicktime_t * file, int track, int64_t offset);
01694
01702 int64_t lqt_get_audio_pts_offset(quicktime_t * file, int track);
01703
01711 void lqt_set_video_pts_offset(quicktime_t * file, int track, int64_t offset);
01712
01720 int64_t lqt_get_video_pts_offset(quicktime_t * file, int track);
01721
01729 void lqt_set_text_pts_offset(quicktime_t * file, int track, int64_t offset);
01730
01738 int64_t lqt_get_text_pts_offset(quicktime_t * file, int track);
01739
01740 #ifdef __cplusplus
01741 }
01742 #endif
01743
01744 #ifdef __GNUC__
01745 #pragma GCC visibility pop
01746 #endif
01747
01748 #endif