libquicktime

lqt.h

Go to the documentation of this file.
00001 /*******************************************************************************
00002  lqt.h
00003 
00004  libquicktime - A library for reading and writing quicktime/avi/mp4 files.
00005  http://libquicktime.sourceforge.net
00006 
00007  Copyright (C) 2002 Heroine Virtual Ltd.
00008  Copyright (C) 2002-2011 Members of the libquicktime project.
00009 
00010  This library is free software; you can redistribute it and/or modify it under
00011  the terms of the GNU Lesser General Public License as published by the Free
00012  Software Foundation; either version 2.1 of the License, or (at your option)
00013  any later version.
00014 
00015  This library is distributed in the hope that it will be useful, but WITHOUT
00016  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00017  FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
00018  details.
00019 
00020  You should have received a copy of the GNU Lesser General Public License along
00021  with this library; if not, write to the Free Software Foundation, Inc., 51
00022  Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
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 /* __cplusplus */
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  * Advanced colormodel handling.
00612  * (defined in lqt_color.c)
00613  ***********************************************/
00614 
00620 #define LQT_COLORMODEL_NONE -1
00621   
00622 /* Colormodel <-> string conversion (used by registry file routines) */
00623 
00630 const char * lqt_colormodel_to_string(int colormodel);
00631 
00638 int lqt_string_to_colormodel(const char * str);
00639 
00640 /* Query information about the colormodel */
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 /* Query supported colormodels */
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  * Set streams for encoding
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  *  Support for "raw" audio en-/decoding: This bypasses all
01278  *  internal sampleformat conversions, and allows access to audio
01279  *  samples in a format, which is closest to the internal representation.
01280  */
01281   
01282 /*
01283  *  Query the internal sample format. Works for decoding (call after quicktime_open)
01284  *  and encoding (call after lqt_add_audio_track, lqt_set_audio or quicktime_set_audio).
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 /* The following return the actual number of en-/decoded frames */
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  *  AVI Specific stuff
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 /* Extended metadata support */
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 /* get track number from track id */
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 /* __cplusplus */
01611 
01612 #pragma GCC visibility pop
01613   
01614 #endif