avdec.h

Go to the documentation of this file.
00001 /*****************************************************************
00002  * gmerlin-avdecoder - a general purpose multimedia decoding library
00003  *
00004  * Copyright (c) 2001 - 2008 Members of the Gmerlin project
00005  * gmerlin-general@lists.sourceforge.net
00006  * http://gmerlin.sourceforge.net
00007  *
00008  * This program is free software: you can redistribute it and/or modify
00009  * it under the terms of the GNU General Public License as published by
00010  * the Free Software Foundation, either version 2 of the License, or
00011  * (at your option) any later version.
00012  *
00013  * This program is distributed in the hope that it will be useful,
00014  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  * GNU General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU General Public License
00019  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
00020  * *****************************************************************/
00021 
00022 /* Public entry points */
00023 
00029 #include <gavl/gavl.h>
00030 
00064 typedef struct bgav_s bgav_t;
00065 
00071 bgav_t * bgav_create();
00072 
00103 typedef struct bgav_metadata_s bgav_metadata_t;
00104 
00111 const char * bgav_metadata_get_author(const bgav_metadata_t*metadata);
00112 
00119 const char * bgav_metadata_get_title(const bgav_metadata_t * metadata);
00120 
00127 const char * bgav_metadata_get_comment(const bgav_metadata_t * metadata);
00128 
00135 const char * bgav_metadata_get_copyright(const bgav_metadata_t * metadata);
00136 
00142 const char * bgav_metadata_get_album(const bgav_metadata_t * metadata);
00143 
00149 const char * bgav_metadata_get_artist(const bgav_metadata_t * metadata);
00150 
00157 const char * bgav_metadata_get_genre(const bgav_metadata_t * metadata);
00158 
00165 const char * bgav_metadata_get_date(const bgav_metadata_t * metadata);
00166 
00173 int bgav_metadata_get_track(const bgav_metadata_t * metadata);
00174 
00175 /***************************************************
00176  * Housekeeping Functions
00177  ***************************************************/
00178 
00179 /***************************************************
00180  * Set parameters
00181  ***************************************************/
00182 
00183 
00188 typedef struct bgav_options_s bgav_options_t;
00189 
00199 bgav_options_t * bgav_get_options(bgav_t * bgav);
00200 
00214 bgav_options_t * bgav_options_create();
00215 
00225 void bgav_options_destroy(bgav_options_t * opt);
00226 
00233 void bgav_options_copy(bgav_options_t * dst, const bgav_options_t * src);
00234 
00244 void bgav_options_set_connect_timeout(bgav_options_t * opt, int timeout);
00245 
00255 void bgav_options_set_read_timeout(bgav_options_t * opt, int timeout);
00256 
00266 void bgav_options_set_network_bandwidth(bgav_options_t * opt, int bandwidth);
00267 
00277 void bgav_options_set_network_buffer_size(bgav_options_t * opt, int size);
00278 
00279 /* HTTP Options */
00280 
00291 void bgav_options_set_http_use_proxy(bgav_options_t* opt, int enable);
00292 
00302 void bgav_options_set_http_proxy_host(bgav_options_t* opt, const char * host);
00303 
00313 void bgav_options_set_http_proxy_port(bgav_options_t* opt, int port);
00314 
00325 void bgav_options_set_http_proxy_auth(bgav_options_t* opt, int enable);
00326 
00335 void bgav_options_set_http_proxy_user(bgav_options_t* opt, const char * user);
00336 
00345 void bgav_options_set_http_proxy_pass(bgav_options_t* opt, const char * pass);
00346 
00355 void bgav_options_set_http_shoutcast_metadata(bgav_options_t* opt, int enable);
00356 
00357 /* Set FTP options */
00358 
00365 void bgav_options_set_ftp_anonymous(bgav_options_t* opt, int enable);
00366 
00375 void bgav_options_set_ftp_anonymous_password(bgav_options_t* opt, const char* pass);
00376 
00388 void bgav_options_set_default_subtitle_encoding(bgav_options_t* opt,
00389                                                 const char* encoding);
00390 
00397 void bgav_options_set_dvd_chapters_as_tracks(bgav_options_t* opt,
00398                                              int chapters_as_tracks);
00399 
00410 void bgav_options_set_audio_dynrange(bgav_options_t* opt,
00411                                      int audio_dynrange);
00412 
00413 
00429 void bgav_options_set_seamless(bgav_options_t* opt,
00430                                int seamless);
00431 
00447 void bgav_options_set_seek_subtitles(bgav_options_t* opt,
00448                                     int seek_subtitles);
00449 
00456 void bgav_options_set_pp_level(bgav_options_t* opt,
00457                                int pp_level);
00458 
00470 void bgav_options_set_dvb_channels_file(bgav_options_t* opt,
00471                                         const char * file);
00472 
00484 void bgav_options_set_prefer_ffmpeg_demuxers(bgav_options_t* opt,
00485                                              int prefer);
00486 
00487 
00494 typedef enum
00495   {
00496     BGAV_LOG_DEBUG,
00497     BGAV_LOG_WARNING,
00498     BGAV_LOG_ERROR,
00499     BGAV_LOG_INFO
00500   } bgav_log_level_t;
00501 
00510 typedef void (*bgav_log_callback)(void*data, bgav_log_level_t level,
00511                                   const char * log_domain,
00512                                   const char * message);
00513 
00521 void
00522 bgav_options_set_log_callback(bgav_options_t* opt,
00523                               bgav_log_callback callback,
00524                               void * data);
00525 
00526 
00527 /* Set callbacks */
00528 
00538 typedef void (*bgav_name_change_callback)(void*data, const char * name);
00539 
00547 void
00548 bgav_options_set_name_change_callback(bgav_options_t* opt,
00549                                       bgav_name_change_callback callback,
00550                                       void * data);
00551 
00562 typedef void (*bgav_metadata_change_callback)(void*data, const bgav_metadata_t * metadata);
00563 
00571 void
00572 bgav_options_set_metadata_change_callback(bgav_options_t* opt,
00573                                           bgav_metadata_change_callback callback,
00574                                           void * data);
00575 
00586 typedef void (*bgav_track_change_callback)(void*data, int track);
00587 
00595 void
00596 bgav_options_set_track_change_callback(bgav_options_t* opt,
00597                                        bgav_track_change_callback callback,
00598                                        void * data);
00599 
00609 typedef void (*bgav_buffer_callback)(void*data, float percentage);
00610 
00618 void
00619 bgav_options_set_buffer_callback(bgav_options_t* opt,
00620                                  bgav_buffer_callback callback,
00621                                  void * data);
00622 
00634 typedef int (*bgav_user_pass_callback)(void*data, const char * resource,
00635                                        char ** username, char ** password);
00636   
00648 void
00649 bgav_options_set_user_pass_callback(bgav_options_t* opt,
00650                                     bgav_user_pass_callback callback,
00651                                     void * data);
00652 
00663 typedef void (*bgav_aspect_callback)(void*data, int stream,
00664                                      int pixel_width, int pixel_height);
00665 
00666 
00674 void
00675 bgav_options_set_aspect_callback(bgav_options_t* opt,
00676                                  bgav_aspect_callback callback,
00677                                  void * data);
00678 
00679 
00680 /* Device description */
00681 
00699 typedef struct
00700   {
00701   char * device; 
00702   char * name;   
00703   } bgav_device_info_t;
00704 
00705 /* Scan for devices */
00706 
00714 bgav_device_info_t * bgav_find_devices_vcd();
00715 
00723 int bgav_check_device_vcd(const char * device, char ** name);
00724 
00732 bgav_device_info_t * bgav_find_devices_dvd();
00733 
00741 int bgav_check_device_dvd(const char * device, char ** name);
00742 
00750 bgav_device_info_t * bgav_find_devices_dvb();
00751 
00759 int bgav_check_device_dvb(const char * device, char ** name);
00760 
00767 void bgav_device_info_destroy(bgav_device_info_t * arr);
00768 
00775 int bgav_eject_disc(const char * device);
00776 
00783 const char * bgav_get_disc_name(bgav_t * bgav);
00784 
00785 /******************************************************
00786  * Open
00787  ******************************************************/
00788 
00789 /* Open a file or URL, return 1 on success */
00790 
00798 int bgav_open(bgav_t * bgav, const char * location);
00799 
00807 int bgav_open_vcd(bgav_t * bgav, const char * location);
00808 
00816 int bgav_open_dvd(bgav_t * bgav, const char * location);
00817 
00829 int bgav_open_dvb(bgav_t * bgav, const char * location);
00830 
00831 
00841 int bgav_open_fd(bgav_t * bgav, int fd,
00842                  int64_t total_size,
00843                  const char * mimetype);
00844 
00845 /* Close and destroy everything */
00846 
00852 void bgav_close(bgav_t * bgav);
00853 
00854 /***************************************************
00855  * Check for redirecting: You MUST check if you opened
00856  * a redirector, because reading data from redirectors
00857  * crashes
00858  * After you read the URLs, close the bgav_t object
00859  * and open a new one with one of the URLs.
00860  ***************************************************/
00861 
00884 int bgav_is_redirector(bgav_t * bgav);
00885 
00892 int bgav_redirector_get_num_urls(bgav_t * bgav);
00893 
00901 const char * bgav_redirector_get_url(bgav_t * bgav, int index);
00902 
00910 const char * bgav_redirector_get_name(bgav_t * bgav, int index);
00911 
00912 /***************************************************
00913  * Get information about the file
00914  ***************************************************/
00915 
00929 int bgav_num_tracks(bgav_t * bgav);
00930 
00937 const char * bgav_get_description(bgav_t * bgav);
00938 
00946 gavl_time_t bgav_get_duration(bgav_t * bgav, int track);
00947 
00948 /* Query stream numbers */
00949 
00957 int bgav_num_audio_streams(bgav_t * bgav, int track);
00958 
00966 int bgav_num_video_streams(bgav_t * bgav, int track);
00967 
00975 int bgav_num_subtitle_streams(bgav_t * bgav, int track);
00976 
00977 
00985 const char * bgav_get_track_name(bgav_t * bgav, int track);
00986 
00994 const bgav_metadata_t * bgav_get_metadata(bgav_t * bgav,int track);
00995 
01007 int bgav_select_track(bgav_t * bgav, int track);
01008 
01021 int bgav_get_num_chapters(bgav_t * bgav, int track, int * timescale);
01022 
01031 const char *
01032 bgav_get_chapter_name(bgav_t * bgav, int track, int chapter);
01033 
01042 int64_t bgav_get_chapter_time(bgav_t * bgav, int track, int chapter);
01043 
01059 const char * bgav_get_audio_language(bgav_t * bgav, int stream);
01060 
01068 const char * bgav_get_subtitle_language(bgav_t * bgav, int stream);
01069 
01077 typedef enum
01078   {
01079     BGAV_STREAM_MUTE = 0,  
01080     BGAV_STREAM_DECODE = 1 
01081   }
01082 bgav_stream_action_t;
01083 
01094 int bgav_set_audio_stream(bgav_t * bgav, int stream, bgav_stream_action_t action);
01095 
01106 int bgav_set_video_stream(bgav_t * bgav, int stream, bgav_stream_action_t action);
01107 
01118 int bgav_set_subtitle_stream(bgav_t * bgav, int stream, bgav_stream_action_t action);
01119 
01120 /***************************************************
01121  * Stream handling functions
01122  ***************************************************/
01123 
01124 /*
01125  *  You MUST these, if you want to decode anything.
01126  *  After bgav_open(), all streams are switched off by
01127  *  default
01128  */
01129 
01130 
01144 int bgav_start(bgav_t * bgav);
01145 
01161 const gavl_audio_format_t * bgav_get_audio_format(bgav_t * bgav, int stream);
01162 
01174 const gavl_video_format_t * bgav_get_video_format(bgav_t * bgav, int stream);
01175 
01188 const gavl_video_format_t * bgav_get_subtitle_format(bgav_t * bgav, int stream);
01189 
01200 int bgav_subtitle_is_text(bgav_t * bgav, int stream);
01201 
01213 const char * bgav_get_audio_description(bgav_t * bgav, int stream);
01214 
01229 const char * bgav_get_audio_info(bgav_t * bgav, int stream);
01230 
01231 
01243 const char * bgav_get_video_description(bgav_t * bgav, int stream);
01244 
01256 const char * bgav_get_subtitle_description(bgav_t * bgav, int stream);
01257 
01258 
01273 const char * bgav_get_subtitle_info(bgav_t * bgav, int stream);
01274 
01275 
01276 
01277 /***************************************************
01278  * Decoding functions
01279  ***************************************************/
01280 
01293 int bgav_read_video(bgav_t * bgav, gavl_video_frame_t * frame, int stream);
01294 
01304 int bgav_read_audio(bgav_t * bgav, gavl_audio_frame_t * frame, int stream,
01305                     int num_samples);
01306 
01318 int bgav_has_subtitle(bgav_t * bgav, int stream);
01319 
01335 int bgav_read_subtitle_overlay(bgav_t * bgav, gavl_overlay_t * ovl, int stream);
01336 
01354 int bgav_read_subtitle_text(bgav_t * bgav, char ** ret, int *ret_alloc,
01355                             gavl_time_t * start_time, gavl_time_t * duration, int stream);
01356 
01357 /***************************************************
01358  * Seek to a timestamp. This also resyncs all streams
01359  ***************************************************/
01360 
01371 int bgav_can_seek(bgav_t * bgav);
01372 
01381 void bgav_seek(bgav_t * bgav, gavl_time_t * time);
01382 
01403 void bgav_seek_scaled(bgav_t * bgav, gavl_time_t * time, int scale);
01404 
01405 
01406 /***************************************************
01407  * Debugging functions
01408  ***************************************************/
01409 
01418 void bgav_dump(bgav_t * bgav);
01419 
01420 /* Dump infos about the installed codecs */
01421 
01429 void bgav_codecs_dump();
01430 
01431 /* Dump known media formats */
01432 
01440 void bgav_formats_dump();
01441 
01449 void bgav_inputs_dump();
01450 
01458 void bgav_redirectors_dump();
01459 
01467 void bgav_subreaders_dump();

Generated on Wed Jan 9 19:33:09 2008 for gmerlin_avdecoder by  doxygen 1.5.3