quicktime.h

Go to the documentation of this file.
00001 /*******************************************************************************
00002  quicktime.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 QUICKTIME_H
00026 #define QUICKTIME_H
00027 
00028 #ifdef __cplusplus
00029 extern "C" {
00030 #endif
00031 
00032 #include <inttypes.h>
00033 #include <stddef.h>
00034 
00035 #pragma GCC visibility push(default)
00036   
00037 /* Some public enums needed by most subsequent headers */
00038 
00039 typedef struct lqt_codec_info_s lqt_codec_info_t;
00040 
00041   
00124 typedef enum
00125   {
00126     LQT_LOG_ERROR   = (1<<0),
00127     LQT_LOG_WARNING = (1<<1),
00128     LQT_LOG_INFO    = (1<<2),
00129     LQT_LOG_DEBUG   = (1<<3),
00130   } lqt_log_level_t;
00131 
00140 typedef void (*lqt_log_callback_t)(lqt_log_level_t level,
00141                                    const char * domain,
00142                                    const char * message,
00143                                    void * data);
00144 
00145   
00152 typedef enum
00153   {
00154     LQT_FILE_NONE = 0,        
00155     LQT_FILE_QT_OLD   = (1<<0), 
00156     LQT_FILE_QT       = (1<<1), 
00157     LQT_FILE_AVI      = (1<<2), 
00158     LQT_FILE_AVI_ODML = (1<<3), 
00159     LQT_FILE_MP4      = (1<<4), 
00160     LQT_FILE_M4A      = (1<<5), 
00161     LQT_FILE_3GP      = (1<<6), 
00162   } lqt_file_type_t;
00163 
00164   
00175 typedef enum 
00176   {
00177     LQT_CHANNEL_UNKNOWN,
00178     LQT_CHANNEL_FRONT_LEFT,
00179     LQT_CHANNEL_FRONT_RIGHT,
00180     LQT_CHANNEL_FRONT_CENTER,
00181     LQT_CHANNEL_FRONT_CENTER_LEFT,
00182     LQT_CHANNEL_FRONT_CENTER_RIGHT,
00183     LQT_CHANNEL_BACK_CENTER,
00184     LQT_CHANNEL_BACK_LEFT,
00185     LQT_CHANNEL_BACK_RIGHT,
00186     LQT_CHANNEL_SIDE_LEFT,
00187     LQT_CHANNEL_SIDE_RIGHT,
00188     LQT_CHANNEL_LFE,
00189   } lqt_channel_t;
00190 
00191   
00255 typedef enum 
00256   {
00257     LQT_INTERLACE_NONE = 0, 
00258     LQT_INTERLACE_TOP_FIRST, 
00259     LQT_INTERLACE_BOTTOM_FIRST  
00260   } lqt_interlace_mode_t;
00261 
00271 typedef enum 
00272   {
00273     LQT_CHROMA_PLACEMENT_DEFAULT = 0, 
00274     LQT_CHROMA_PLACEMENT_MPEG2,       
00275     LQT_CHROMA_PLACEMENT_DVPAL,       
00276   } lqt_chroma_placement_t;
00277 
00287 typedef enum 
00288   {
00289     LQT_SAMPLE_UNDEFINED = 0, 
00290     LQT_SAMPLE_INT8,      
00291     LQT_SAMPLE_UINT8,     
00292     LQT_SAMPLE_INT16,     
00293     LQT_SAMPLE_INT32,     
00294     LQT_SAMPLE_FLOAT,     
00295     LQT_SAMPLE_DOUBLE     
00296   } lqt_sample_format_t;
00297   
00306 typedef struct quicktime_s quicktime_t;
00307   
00308 /* This is the reference for all your library entry points. */
00309 
00310 /* ===== compression formats for which codecs exist ====== */
00311 
00331 #define QUICKTIME_DIVX "DIVX"
00332 
00339 #define QUICKTIME_DIV3 "DIV3"
00340 
00347 #define QUICKTIME_DV "dvc "
00348 /* AVID DV codec can be processed with libdv as well */
00349 
00356 #define QUICKTIME_DV_AVID "AVdv"
00357 
00364 #define QUICKTIME_DV_AVID_A "dvcp"
00365 
00373 /* RGB uncompressed.  Allows alpha */
00374 #define QUICKTIME_RAW  "raw "
00375 
00382 /* Jpeg Photo */
00383 #define QUICKTIME_JPEG "jpeg"
00384 
00385 /* Concatenated png images.  Allows alpha */
00386 
00394 #define QUICKTIME_PNG "png "
00395 
00403 #define QUICKTIME_MJPA "mjpa"
00404 
00411 #define QUICKTIME_YUV2 "yuv2"
00412 
00419 #define QUICKTIME_YUV4 "yuv4"
00420 
00428 #define QUICKTIME_YUV420  "yv12"
00429 
00436 #define QUICKTIME_2VUY "2vuy"
00437 
00444 #define QUICKTIME_YUVS "yuvs"
00445 
00446 
00453 #define QUICKTIME_V308  "v308"
00454 
00461 #define QUICKTIME_V408 "v408"
00462 
00469 #define QUICKTIME_V210 "v210"
00470 
00477 #define QUICKTIME_V410 "v410"
00478 
00479 /* =================== Audio formats ======================= */
00480 
00500 #define QUICKTIME_RAWAUDIO "raw "
00501 
00508 #define QUICKTIME_IMA4 "ima4"
00509 
00516 #define QUICKTIME_TWOS "twos"
00517 
00524 #define QUICKTIME_ULAW "ulaw"
00525 
00534 #define QUICKTIME_VORBIS "OggS"
00535 
00543 #define QUICKTIME_MP3 ".mp3"
00544   
00545 /* =========================== public interface ========================= // */
00546 
00555   /* Get version information */
00556 int quicktime_major();
00557 
00565 int quicktime_minor();
00566 
00575 int quicktime_release();
00576 
00588 int quicktime_check_sig(char *path);
00589 
00600 quicktime_t* quicktime_open(const char *filename, int rd, int wr);
00601 
00614 int quicktime_make_streamable(char *in_path, char *out_path);
00615 
00629 void quicktime_set_copyright(quicktime_t *file, char *string);
00630 
00637 void quicktime_set_name(quicktime_t *file, char *string);
00638 
00645 void quicktime_set_info(quicktime_t *file, char *string);
00646 
00654 char* quicktime_get_copyright(quicktime_t *file);
00655 
00663 char* quicktime_get_name(quicktime_t *file);
00664 
00671 char* quicktime_get_info(quicktime_t *file);
00672 
00673 
00689 int quicktime_set_audio(quicktime_t *file, 
00690         int channels, 
00691         long sample_rate, 
00692         int bits, 
00693         char *compressor);
00694 
00705 void quicktime_set_framerate(quicktime_t *file, double framerate);
00706 
00722 int quicktime_set_video(quicktime_t *file, 
00723         int tracks, 
00724         int frame_w, 
00725         int frame_h, 
00726         double frame_rate, 
00727         char *compressor);
00728 
00742 void quicktime_set_jpeg(quicktime_t *file, int quality, int use_float);
00743 
00758 void quicktime_set_parameter(quicktime_t *file, char *key, void *value);
00759 
00770 void quicktime_set_depth(quicktime_t *file, 
00771         int depth, 
00772         int track);
00773 
00783 void quicktime_set_cmodel(quicktime_t *file, int colormodel);
00784 
00795 void quicktime_set_row_span(quicktime_t *file, int row_span);
00796 
00802 int quicktime_close(quicktime_t *file);
00803 
00804 /* get length information */
00805 /* channel numbers start on 1 for audio and video */
00806 
00815 long quicktime_audio_length(quicktime_t *file, int track);
00816 
00828 long quicktime_video_length(quicktime_t *file, int track);
00829 
00837   /* get position information */
00838 long quicktime_audio_position(quicktime_t *file, int track);
00839 
00849 long quicktime_video_position(quicktime_t *file, int track);
00850 
00857 /* get file information */
00858 int quicktime_video_tracks(quicktime_t *file);
00859 
00866 int quicktime_audio_tracks(quicktime_t *file);
00867 
00874 int quicktime_has_audio(quicktime_t *file);
00875 
00883 long quicktime_sample_rate(quicktime_t *file, int track);
00884 
00899 int quicktime_audio_bits(quicktime_t *file, int track);
00900 
00908 int quicktime_track_channels(quicktime_t *file, int track);
00909 
00922 char* quicktime_audio_compressor(quicktime_t *file, int track);
00923 
00930 int quicktime_has_video(quicktime_t *file);
00931 
00939 int quicktime_video_width(quicktime_t *file, int track);
00940 
00948 int quicktime_video_height(quicktime_t *file, int track);
00949 
00964 int quicktime_video_depth(quicktime_t *file, int track);
00965 
00980 double quicktime_frame_rate(quicktime_t *file, int track);
00981 
00992 char* quicktime_video_compressor(quicktime_t *file, int track);
00993 
00994 /* number of bytes of raw data in this frame */
00995 
01007 long quicktime_frame_size(quicktime_t *file, long frame, int track);
01008 
01018 int quicktime_channel_location(quicktime_t *file, int *quicktime_track, int *quicktime_channel, int channel);
01019 
01020 /* file positioning */
01021 /* Remove these and see what happens :) */
01022 
01023 // int quicktime_seek_end(quicktime_t *file);
01024 
01033 int quicktime_seek_start(quicktime_t *file);
01034 
01035 /* set position of file descriptor relative to a track */
01036 
01045 int quicktime_set_audio_position(quicktime_t *file, int64_t sample, int track);
01046 
01057 int quicktime_set_video_position(quicktime_t *file, int64_t frame, int track);
01058 
01059 /* ========================== Access to raw data follows. */
01060 /* write data for one quicktime track */
01061 /* the user must handle conversion to the channels in this track */
01062 int quicktime_write_audio(quicktime_t *file, uint8_t *audio_buffer, long samples, int track);
01063 
01078 int quicktime_write_frame(quicktime_t *file, uint8_t *video_buffer, int64_t bytes, int track);
01079 
01092 long quicktime_read_frame(quicktime_t *file, unsigned char *video_buffer, int track);
01093 
01094 /* for reading frame using a library that needs a file descriptor */
01095 /* Frame caching doesn't work here. */
01096 int quicktime_read_frame_init(quicktime_t *file, int track);
01097 int quicktime_read_frame_end(quicktime_t *file, int track);
01098 
01099 /* One keyframe table for each track */
01100 long quicktime_get_keyframe_before(quicktime_t *file, long frame, int track);
01101 void quicktime_insert_keyframe(quicktime_t *file, long frame, int track);
01102 /* Track has keyframes */
01103 int quicktime_has_keyframes(quicktime_t *file, int track);
01104 
01105 /* ===================== Access to built in codecs follows. */
01106 
01107 /* If the codec for this track is supported in the library return 1. */
01108 
01116 int quicktime_supported_video(quicktime_t *file, int track);
01117 
01125 int quicktime_supported_audio(quicktime_t *file, int track);
01126 
01138 int quicktime_reads_cmodel(quicktime_t *file, 
01139                 int colormodel, 
01140                 int track);
01141 
01153 int quicktime_writes_cmodel(quicktime_t *file, 
01154                 int colormodel, 
01155                 int track);
01156 
01157 
01158 /* Hacks for temporal codec */
01159 int quicktime_divx_is_key(unsigned char *data, long size);
01160 int quicktime_divx_write_vol(unsigned char *data_start,
01161         int vol_width, 
01162         int vol_height, 
01163         int time_increment_resolution, 
01164         double frame_rate);
01165 int quicktime_divx_has_vol(unsigned char *data);
01166 
01167 int quicktime_div3_is_key(unsigned char *data, long size);
01168 
01179 int quicktime_encode_video(quicktime_t *file, 
01180         unsigned char **row_pointers, 
01181         int track);
01182 
01193 int quicktime_decode_video(quicktime_t *file, 
01194         unsigned char **row_pointers, 
01195         int track);
01196 
01217 long quicktime_decode_scaled(quicktime_t *file, 
01218         int in_x,                    /* Location of input frame to take picture */
01219         int in_y,
01220         int in_w,
01221         int in_h,
01222         int out_w,                   /* Dimensions of output frame */
01223         int out_h,
01224         int color_model,             /* One of the color models defined above */
01225         unsigned char **row_pointers, 
01226         int track);
01227 
01228 /* Decode or encode audio for a single channel into the buffer. */
01229 /* Pass a buffer for the _i or the _f argument if you want int16 or float data. */
01230 /* Notice that encoding requires an array of pointers to each channel. */
01231 
01249 int quicktime_decode_audio(quicktime_t *file, int16_t *output_i, float *output_f, long samples, int channel);
01250 
01263 int quicktime_encode_audio(quicktime_t *file, int16_t **input_i, float **input_f, long samples);
01264 
01272 int quicktime_dump(quicktime_t *file);
01273 
01274 /* Specify the number of cpus to utilize. */
01275 
01286 int quicktime_set_cpus(quicktime_t *file, int cpus);
01287 
01288 /* Specify whether to read contiguously or not. */
01289 /* preload is the number of bytes to read ahead. */
01290 /* This is no longer functional to the end user but is used to accelerate */
01291 /* reading the header internally. */
01292 void quicktime_set_preload(quicktime_t *file, int64_t preload);
01293 
01294 int64_t quicktime_byte_position(quicktime_t *file);
01295 
01304 void quicktime_set_avi(quicktime_t *file, int value);
01305 
01306 #pragma GCC visibility pop
01307 
01308 
01309 #ifdef __cplusplus
01310 }
01311 #endif
01312 
01313 #endif
Generated on Thu Mar 8 22:27:04 2012 for libquicktime by  doxygen 1.6.3