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-2010 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 00165 #define LQT_CODEC_OBSOLETE (1<<24) 00166 00171 typedef struct lqt_codec_info_s 00172 { 00173 int compatibility_flags; 00175 /* These are set by the plugins */ 00176 00177 char * name; 00178 char * long_name; 00179 char * description; 00181 lqt_codec_type type; 00182 lqt_codec_direction direction; 00184 int num_fourccs; 00185 char ** fourccs; 00187 int num_wav_ids; 00188 int * wav_ids; 00191 int num_encoding_parameters; 00192 lqt_parameter_info_t * encoding_parameters; 00194 int num_decoding_parameters; 00195 lqt_parameter_info_t * decoding_parameters; 00197 /* The following members are set by libquicktime */ 00198 00199 char * module_filename; 00200 int module_index; 00202 uint32_t file_time; 00204 char * gettext_domain; 00205 char * gettext_directory; 00207 int num_encoding_colormodels; 00208 int * encoding_colormodels; 00210 struct lqt_codec_info_s * next; 00211 } lqt_codec_info_t; 00212 00213 00214 /* Global Entry points */ 00215 00223 void lqt_registry_init(); 00224 00233 void lqt_registry_destroy(); 00234 00235 /* \ingroup codec_registry 00236 * 00237 * Save the registry file $HOME/.libquicktime_codecs. 00238 * Under normal circumstances, you never need to call this function 00239 */ 00240 00241 void lqt_registry_write(); 00242 00243 00244 /****************************************************** 00245 * Non thread save functions for querying the 00246 * codec registry. Suitable for single threaded 00247 * applications (might become obsolete) 00248 ******************************************************/ 00249 00257 int lqt_get_num_audio_codecs(); 00258 00266 int lqt_get_num_video_codecs(); 00267 00276 const lqt_codec_info_t * lqt_get_audio_codec_info(int index); 00277 00286 const lqt_codec_info_t * lqt_get_video_codec_info(int index); 00287 00288 /******************************************************************** 00289 * Thread save function for getting codec parameters 00290 * All these functions return a NULL terminated array of local 00291 * copies of the codec data which must be freed using 00292 * lqt_destroy_codec_info(lqt_codec_info_t ** info) declared below 00293 ********************************************************************/ 00294 00307 lqt_codec_info_t ** lqt_query_registry(int audio, int video, 00308 int encode, int decode); 00309 00320 lqt_codec_info_t ** lqt_find_audio_codec(char * fourcc, int encode); 00321 00332 lqt_codec_info_t ** lqt_find_audio_codec_by_wav_id(int wav_id, int encode); 00333 00344 lqt_codec_info_t ** lqt_find_video_codec(char * fourcc, int encode); 00345 00346 00347 00348 00349 00350 00360 lqt_codec_info_t ** lqt_find_audio_codec_by_name(const char * name); 00361 00371 lqt_codec_info_t ** lqt_find_video_codec_by_name(const char * name); 00372 00383 lqt_codec_info_t ** lqt_audio_codec_from_file(quicktime_t * file, int track); 00384 00395 lqt_codec_info_t ** lqt_video_codec_from_file(quicktime_t * file, int track); 00396 00405 void lqt_destroy_codec_info(lqt_codec_info_t ** info); 00406 00418 void lqt_reorder_audio_codecs(lqt_codec_info_t ** codec_info); 00419 00431 void lqt_reorder_video_codecs(lqt_codec_info_t ** codec_info); 00432 00446 void lqt_set_default_parameter(lqt_codec_type type, int encode, 00447 const char * codec_name, 00448 const char * parameter_name, 00449 lqt_parameter_value_t * val); 00450 00461 void lqt_restore_default_parameters(lqt_codec_info_t * codec_info, 00462 int encode, int decode); 00463 00464 00473 void lqt_dump_codec_info(const lqt_codec_info_t * info); 00474 00475 #ifdef __cplusplus 00476 } 00477 #endif /* __cplusplus */ 00478 00479 #pragma GCC visibility pop 00480 00481 #endif /* _LQT_CODEC_INFO_H_ */