libquicktime
|
00001 /******************************************************************************* 00002 lqt_codecinfo.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 /* 00026 * Codec info structure for libquicktime 00027 * (first approximation) 00028 */ 00029 00030 /* Type of a codec parameter */ 00031 00032 #ifndef _LQT_CODEC_INFO_H_ 00033 #define _LQT_CODEC_INFO_H_ 00034 00035 #pragma GCC visibility push(default) 00036 00037 #include <inttypes.h> 00038 00039 00040 00041 #ifdef __cplusplus 00042 extern "C" { 00043 #endif /* __cplusplus */ 00044 00078 typedef enum 00079 { 00080 LQT_PARAMETER_INT, 00081 LQT_PARAMETER_FLOAT, 00082 LQT_PARAMETER_STRING, 00083 LQT_PARAMETER_STRINGLIST, 00084 /* This dummy type is used to separate sections (real_name will be on tab-label) */ 00085 LQT_PARAMETER_SECTION, 00086 } lqt_parameter_type_t; 00087 00094 typedef union 00095 { 00096 int val_int; 00097 char * val_string; 00098 float val_float; 00099 } lqt_parameter_value_t; 00100 00108 typedef struct 00109 { 00110 char * name; 00112 char * real_name; 00114 lqt_parameter_type_t type; 00116 lqt_parameter_value_t val_default; 00118 /* 00119 * Minimum and maximum values: 00120 * These are only valid for numeric types and if val_min < val_max 00121 */ 00122 00123 lqt_parameter_value_t val_min; 00124 lqt_parameter_value_t val_max; 00126 int num_digits; 00128 /* 00129 * Possible options (only valid for LQT_STRINGLIST) 00130 */ 00131 00132 int num_stringlist_options; 00133 char ** stringlist_options; 00134 char ** stringlist_labels; 00136 char * help_string; 00138 } lqt_parameter_info_t; 00139 00144 typedef enum 00145 { 00146 LQT_CODEC_AUDIO, 00147 LQT_CODEC_VIDEO 00148 } lqt_codec_type; 00149 00154 typedef enum 00155 { 00156 LQT_DIRECTION_ENCODE, 00157 LQT_DIRECTION_DECODE, 00158 LQT_DIRECTION_BOTH 00159 } lqt_codec_direction; 00160 00170 typedef struct 00171 { 00172 int width; 00173 int height; 00174 } lqt_image_size_t; 00175 00176 00181 #define LQT_CODEC_OBSOLETE (1<<24) 00182 00187 struct lqt_codec_info_s 00188 { 00189 int compatibility_flags; 00191 /* These are set by the plugins */ 00192 00193 char * name; 00194 char * long_name; 00195 char * description; 00197 lqt_codec_type type; 00198 lqt_codec_direction direction; 00200 int num_fourccs; 00201 char ** fourccs; 00203 int num_wav_ids; 00204 int * wav_ids; 00207 int num_encoding_parameters; 00208 lqt_parameter_info_t * encoding_parameters; 00210 int num_decoding_parameters; 00211 lqt_parameter_info_t * decoding_parameters; 00213 /* The following members are set by libquicktime */ 00214 00215 char * module_filename; 00216 int module_index; 00218 uint32_t file_time; 00220 char * gettext_domain; 00221 char * gettext_directory; 00223 int num_encoding_colormodels; 00224 int * encoding_colormodels; 00226 int num_image_sizes; 00228 lqt_image_size_t * image_sizes; 00230 lqt_compression_id_t compression_id; 00232 struct lqt_codec_info_s * next; 00233 }; 00234 00235 00236 /* Global Entry points */ 00237 00245 void lqt_registry_init(); 00246 00255 void lqt_registry_destroy(); 00256 00257 /* \ingroup codec_registry 00258 * 00259 * Save the registry file $HOME/.libquicktime_codecs. 00260 * Under normal circumstances, you never need to call this function 00261 */ 00262 00263 void lqt_registry_write(); 00264 00265 00266 /****************************************************** 00267 * Non thread save functions for querying the 00268 * codec registry. Suitable for single threaded 00269 * applications (might become obsolete) 00270 ******************************************************/ 00271 00279 int lqt_get_num_audio_codecs(); 00280 00288 int lqt_get_num_video_codecs(); 00289 00298 const lqt_codec_info_t * lqt_get_audio_codec_info(int index); 00299 00308 const lqt_codec_info_t * lqt_get_video_codec_info(int index); 00309 00310 /******************************************************************** 00311 * Thread save function for getting codec parameters 00312 * All these functions return a NULL terminated array of local 00313 * copies of the codec data which must be freed using 00314 * lqt_destroy_codec_info(lqt_codec_info_t ** info) declared below 00315 ********************************************************************/ 00316 00329 lqt_codec_info_t ** lqt_query_registry(int audio, int video, 00330 int encode, int decode); 00331 00342 lqt_codec_info_t ** lqt_find_audio_codec(char * fourcc, int encode); 00343 00354 lqt_codec_info_t ** lqt_find_audio_codec_by_wav_id(int wav_id, int encode); 00355 00366 lqt_codec_info_t ** lqt_find_video_codec(char * fourcc, int encode); 00367 00368 00369 00370 00371 00372 00382 lqt_codec_info_t ** lqt_find_audio_codec_by_name(const char * name); 00383 00393 lqt_codec_info_t ** lqt_find_video_codec_by_name(const char * name); 00394 00405 lqt_codec_info_t ** lqt_audio_codec_from_file(quicktime_t * file, int track); 00406 00417 lqt_codec_info_t ** lqt_video_codec_from_file(quicktime_t * file, int track); 00418 00427 void lqt_destroy_codec_info(lqt_codec_info_t ** info); 00428 00440 void lqt_reorder_audio_codecs(lqt_codec_info_t ** codec_info); 00441 00453 void lqt_reorder_video_codecs(lqt_codec_info_t ** codec_info); 00454 00468 void lqt_set_default_parameter(lqt_codec_type type, int encode, 00469 const char * codec_name, 00470 const char * parameter_name, 00471 lqt_parameter_value_t * val); 00472 00483 void lqt_restore_default_parameters(lqt_codec_info_t * codec_info, 00484 int encode, int decode); 00485 00486 00495 void lqt_dump_codec_info(const lqt_codec_info_t * info); 00496 00497 #ifdef __cplusplus 00498 } 00499 #endif /* __cplusplus */ 00500 00501 #pragma GCC visibility pop 00502 00503 #endif /* _LQT_CODEC_INFO_H_ */