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 
00031 #pragma GCC visibility push(default)
00032 
00033 
00034 #ifdef __cplusplus
00035 extern "C" {
00036 #endif
00037 
00042 typedef struct bgav_edl_s bgav_edl_t;
00043 
00077 typedef struct bgav_s bgav_t;
00078 
00084 bgav_t * bgav_create();
00085 
00116 typedef struct bgav_metadata_s bgav_metadata_t;
00117 
00124 const char * bgav_metadata_get_author(const bgav_metadata_t*metadata);
00125 
00132 const char * bgav_metadata_get_title(const bgav_metadata_t * metadata);
00133 
00140 const char * bgav_metadata_get_comment(const bgav_metadata_t * metadata);
00141 
00148 const char * bgav_metadata_get_copyright(const bgav_metadata_t * metadata);
00149 
00155 const char * bgav_metadata_get_album(const bgav_metadata_t * metadata);
00156 
00162 const char * bgav_metadata_get_artist(const bgav_metadata_t * metadata);
00163 
00170 const char * bgav_metadata_get_genre(const bgav_metadata_t * metadata);
00171 
00178 const char * bgav_metadata_get_date(const bgav_metadata_t * metadata);
00179 
00186 int bgav_metadata_get_track(const bgav_metadata_t * metadata);
00187 
00188 /***************************************************
00189  * Housekeeping Functions
00190  ***************************************************/
00191 
00192 /***************************************************
00193  * Set parameters
00194  ***************************************************/
00195 
00196 
00201 typedef struct bgav_options_s bgav_options_t;
00202 
00212 bgav_options_t * bgav_get_options(bgav_t * bgav);
00213 
00227 bgav_options_t * bgav_options_create();
00228 
00238 void bgav_options_destroy(bgav_options_t * opt);
00239 
00246 void bgav_options_copy(bgav_options_t * dst, const bgav_options_t * src);
00247 
00257 void bgav_options_set_connect_timeout(bgav_options_t * opt, int timeout);
00258 
00268 void bgav_options_set_read_timeout(bgav_options_t * opt, int timeout);
00269 
00284 void bgav_options_set_rtp_port_base(bgav_options_t*b, int p);
00285 
00295 void bgav_options_set_rtp_try_tcp(bgav_options_t*b, int enable);
00296 
00306 void bgav_options_set_network_bandwidth(bgav_options_t * opt, int bandwidth);
00307 
00317 void bgav_options_set_network_buffer_size(bgav_options_t * opt, int size);
00318 
00319 /* HTTP Options */
00320 
00331 void bgav_options_set_http_use_proxy(bgav_options_t* opt, int enable);
00332 
00342 void bgav_options_set_http_proxy_host(bgav_options_t* opt, const char * host);
00343 
00353 void bgav_options_set_http_proxy_port(bgav_options_t* opt, int port);
00354 
00365 void bgav_options_set_http_proxy_auth(bgav_options_t* opt, int enable);
00366 
00375 void bgav_options_set_http_proxy_user(bgav_options_t* opt, const char * user);
00376 
00385 void bgav_options_set_http_proxy_pass(bgav_options_t* opt, const char * pass);
00386 
00395 void bgav_options_set_http_shoutcast_metadata(bgav_options_t* opt, int enable);
00396 
00397 /* Set FTP options */
00398 
00405 void bgav_options_set_ftp_anonymous(bgav_options_t* opt, int enable);
00406 
00415 void bgav_options_set_ftp_anonymous_password(bgav_options_t* opt, const char* pass);
00416 
00428 void bgav_options_set_default_subtitle_encoding(bgav_options_t* opt,
00429                                                 const char* encoding);
00430 
00441 void bgav_options_set_audio_dynrange(bgav_options_t* opt,
00442                                      int audio_dynrange);
00443 
00444 
00460 void bgav_options_set_seamless(bgav_options_t* opt,
00461                                int seamless);
00462 
00474 void bgav_options_set_sample_accurate(bgav_options_t*opt, int enable);
00475 
00487 void bgav_options_set_cache_time(bgav_options_t*opt, int t);
00488 
00498 void bgav_options_set_cache_size(bgav_options_t*opt, int s);
00499 
00515 void bgav_options_set_seek_subtitles(bgav_options_t* opt,
00516                                     int seek_subtitles);
00517 
00524 void bgav_options_set_pp_level(bgav_options_t* opt,
00525                                int pp_level);
00526 
00538 void bgav_options_set_dvb_channels_file(bgav_options_t* opt,
00539                                         const char * file);
00540 
00552 void bgav_options_set_prefer_ffmpeg_demuxers(bgav_options_t* opt,
00553                                              int prefer);
00554 
00561 void bgav_options_set_dv_datetime(bgav_options_t* opt,
00562                                   int datetime);
00563 
00573 void bgav_options_set_shrink(bgav_options_t* opt,
00574                              int factor);
00575 
00576 
00583 typedef enum
00584   {
00585     BGAV_LOG_DEBUG,
00586     BGAV_LOG_WARNING,
00587     BGAV_LOG_ERROR,
00588     BGAV_LOG_INFO
00589   } bgav_log_level_t;
00590 
00599 typedef void (*bgav_log_callback)(void*data, bgav_log_level_t level,
00600                                   const char * log_domain,
00601                                   const char * message);
00602 
00610 void
00611 bgav_options_set_log_callback(bgav_options_t* opt,
00612                               bgav_log_callback callback,
00613                               void * data);
00614 
00615 
00616 /* Set callbacks */
00617 
00627 typedef void (*bgav_name_change_callback)(void*data, const char * name);
00628 
00636 void
00637 bgav_options_set_name_change_callback(bgav_options_t* opt,
00638                                       bgav_name_change_callback callback,
00639                                       void * data);
00640 
00651 typedef void (*bgav_metadata_change_callback)(void*data, const bgav_metadata_t * metadata);
00652 
00660 void
00661 bgav_options_set_metadata_change_callback(bgav_options_t* opt,
00662                                           bgav_metadata_change_callback callback,
00663                                           void * data);
00664 
00675 typedef void (*bgav_track_change_callback)(void*data, int track);
00676 
00684 void
00685 bgav_options_set_track_change_callback(bgav_options_t* opt,
00686                                        bgav_track_change_callback callback,
00687                                        void * data);
00688 
00698 typedef void (*bgav_buffer_callback)(void*data, float percentage);
00699 
00707 void
00708 bgav_options_set_buffer_callback(bgav_options_t* opt,
00709                                  bgav_buffer_callback callback,
00710                                  void * data);
00711 
00723 typedef int (*bgav_user_pass_callback)(void*data, const char * resource,
00724                                        char ** username, char ** password);
00725   
00737 void
00738 bgav_options_set_user_pass_callback(bgav_options_t* opt,
00739                                     bgav_user_pass_callback callback,
00740                                     void * data);
00741 
00752 typedef void (*bgav_aspect_callback)(void*data, int stream,
00753                                      int pixel_width, int pixel_height);
00754 
00755 
00763 void
00764 bgav_options_set_aspect_callback(bgav_options_t* opt,
00765                                  bgav_aspect_callback callback,
00766                                  void * data);
00767 
00775 typedef void (*bgav_index_callback)(void*data, float percentage);
00776 
00784 void
00785 bgav_options_set_index_callback(bgav_options_t* opt,
00786                                 bgav_index_callback callback,
00787                                 void * data);
00788 
00789 
00790 /* Device description */
00791 
00809 typedef struct
00810   {
00811   char * device; 
00812   char * name;   
00813   } bgav_device_info_t;
00814 
00815 /* Scan for devices */
00816 
00824 bgav_device_info_t * bgav_find_devices_vcd();
00825 
00833 int bgav_check_device_vcd(const char * device, char ** name);
00834 
00842 bgav_device_info_t * bgav_find_devices_dvd();
00843 
00851 int bgav_check_device_dvd(const char * device, char ** name);
00852 
00860 bgav_device_info_t * bgav_find_devices_dvb();
00861 
00869 int bgav_check_device_dvb(const char * device, char ** name);
00870 
00877 void bgav_device_info_destroy(bgav_device_info_t * arr);
00878 
00885 int bgav_eject_disc(const char * device);
00886 
00893 const char * bgav_get_disc_name(bgav_t * bgav);
00894 
00895 /******************************************************
00896  * Open
00897  ******************************************************/
00898 
00899 /* Open a file or URL, return 1 on success */
00900 
00908 int bgav_open(bgav_t * bgav, const char * location);
00909 
00917 int bgav_open_vcd(bgav_t * bgav, const char * location);
00918 
00926 int bgav_open_dvd(bgav_t * bgav, const char * location);
00927 
00939 int bgav_open_dvb(bgav_t * bgav, const char * location);
00940 
00941 
00951 int bgav_open_fd(bgav_t * bgav, int fd,
00952                  int64_t total_size,
00953                  const char * mimetype);
00954 
00966 int bgav_open_callbacks(bgav_t * bgav,
00967                         int (*read_callback)(void * priv, uint8_t * data, int len),
00968                         int64_t (*seek_callback)(void * priv, uint64_t pos, int whence),
00969                         void * priv,
00970                         const char * filename, const char * mimetype, int64_t total_bytes);
00971  
00972 
00973 /* Close and destroy everything */
00974 
00980 void bgav_close(bgav_t * bgav);
00981 
01006 typedef struct
01007   {
01008   char * url;   
01009 
01010   int track;        
01011   int stream;       
01012   int timescale;    
01013     
01014   int64_t src_time; 
01015   
01016   /* Time and duration within the destination in destination
01017      timescale */
01018   int64_t dst_time;  
01019   int64_t dst_duration; 
01020 
01021   /*  */
01022   int32_t speed_num; 
01023   int32_t speed_den; 
01024   
01025   } bgav_edl_segment_t;
01026 
01030 typedef struct
01031   {
01032   bgav_edl_segment_t * segments; 
01033   int num_segments;              
01034   int timescale;                 
01035   } bgav_edl_stream_t;
01036 
01040 typedef struct
01041   {
01042   int num_audio_streams;             
01043   bgav_edl_stream_t * audio_streams; 
01044 
01045   int num_video_streams;             
01046   bgav_edl_stream_t * video_streams; 
01047 
01048   int num_subtitle_text_streams;     
01049   bgav_edl_stream_t * subtitle_text_streams; 
01050 
01051   int num_subtitle_overlay_streams;  
01052   bgav_edl_stream_t * subtitle_overlay_streams; 
01053   
01054   } bgav_edl_track_t;
01055 
01059 struct bgav_edl_s
01060   {
01061   int num_tracks;             
01062   bgav_edl_track_t * tracks;  
01063   char * url;                 
01064   };
01065 
01072 bgav_edl_t * bgav_get_edl(bgav_t * bgav);
01073 
01078 void bgav_edl_dump(const bgav_edl_t * e);
01079 
01084 /***************************************************
01085  * Check for redirecting: You MUST check if you opened
01086  * a redirector, because reading data from redirectors
01087  * crashes
01088  * After you read the URLs, close the bgav_t object
01089  * and open a new one with one of the URLs.
01090  ***************************************************/
01091 
01114 int bgav_is_redirector(bgav_t * bgav);
01115 
01122 int bgav_redirector_get_num_urls(bgav_t * bgav);
01123 
01131 const char * bgav_redirector_get_url(bgav_t * bgav, int index);
01132 
01140 const char * bgav_redirector_get_name(bgav_t * bgav, int index);
01141 
01142 /***************************************************
01143  * Get information about the file
01144  ***************************************************/
01145 
01159 int bgav_num_tracks(bgav_t * bgav);
01160 
01167 const char * bgav_get_description(bgav_t * bgav);
01168 
01176 gavl_time_t bgav_get_duration(bgav_t * bgav, int track);
01177 
01178 /* Query stream numbers */
01179 
01187 int bgav_num_audio_streams(bgav_t * bgav, int track);
01188 
01196 int bgav_num_video_streams(bgav_t * bgav, int track);
01197 
01205 int bgav_num_subtitle_streams(bgav_t * bgav, int track);
01206 
01207 
01215 const char * bgav_get_track_name(bgav_t * bgav, int track);
01216 
01224 const bgav_metadata_t * bgav_get_metadata(bgav_t * bgav,int track);
01225 
01237 int bgav_select_track(bgav_t * bgav, int track);
01238 
01251 int bgav_get_num_chapters(bgav_t * bgav, int track, int * timescale);
01252 
01261 const char *
01262 bgav_get_chapter_name(bgav_t * bgav, int track, int chapter);
01263 
01272 int64_t bgav_get_chapter_time(bgav_t * bgav, int track, int chapter);
01273 
01289 const char * bgav_get_audio_language(bgav_t * bgav, int stream);
01290 
01298 const char * bgav_get_subtitle_language(bgav_t * bgav, int stream);
01299 
01307 typedef enum
01308   {
01309     BGAV_STREAM_MUTE = 0,  
01310     BGAV_STREAM_DECODE = 1, 
01311     BGAV_STREAM_PARSE  = 2 
01312   }
01313 bgav_stream_action_t;
01314 
01325 int bgav_set_audio_stream(bgav_t * bgav, int stream, bgav_stream_action_t action);
01326 
01337 int bgav_set_video_stream(bgav_t * bgav, int stream, bgav_stream_action_t action);
01338 
01349 int bgav_set_subtitle_stream(bgav_t * bgav, int stream, bgav_stream_action_t action);
01350 
01351 /***************************************************
01352  * Stream handling functions
01353  ***************************************************/
01354 
01355 /*
01356  *  You MUST these, if you want to decode anything.
01357  *  After bgav_open(), all streams are switched off by
01358  *  default
01359  */
01360 
01361 
01375 int bgav_start(bgav_t * bgav);
01376 
01392 const gavl_audio_format_t * bgav_get_audio_format(bgav_t * bgav, int stream);
01393 
01405 const gavl_video_format_t * bgav_get_video_format(bgav_t * bgav, int stream);
01406 
01422 const gavl_video_format_t *
01423 bgav_get_subtitle_format(bgav_t * bgav, int stream);
01424 
01435 int bgav_subtitle_is_text(bgav_t * bgav, int stream);
01436 
01448 const char * bgav_get_audio_description(bgav_t * bgav, int stream);
01449 
01464 const char * bgav_get_audio_info(bgav_t * bgav, int stream);
01465 
01466 
01478 const char * bgav_get_video_description(bgav_t * bgav, int stream);
01479 
01491 const char * bgav_get_subtitle_description(bgav_t * bgav, int stream);
01492 
01493 
01508 const char * bgav_get_subtitle_info(bgav_t * bgav, int stream);
01509 
01519 int bgav_can_pause(bgav_t * bgav);
01520 
01521 /***************************************************
01522  * Decoding functions
01523  ***************************************************/
01524 
01537 int bgav_read_video(bgav_t * bgav, gavl_video_frame_t * frame, int stream);
01538 
01548 int bgav_read_audio(bgav_t * bgav, gavl_audio_frame_t * frame, int stream,
01549                     int num_samples);
01550 
01562 int bgav_has_subtitle(bgav_t * bgav, int stream);
01563 
01579 int bgav_read_subtitle_overlay(bgav_t * bgav, gavl_overlay_t * ovl, int stream);
01580 
01600 int bgav_read_subtitle_text(bgav_t * bgav, char ** ret, int *ret_alloc,
01601                             int64_t * start_time, int64_t * duration,
01602                             int stream);
01603 
01604 /***************************************************
01605  * Seek to a timestamp. This also resyncs all streams
01606  ***************************************************/
01607 
01644 int bgav_can_seek(bgav_t * bgav);
01645 
01654 void bgav_seek(bgav_t * bgav, gavl_time_t * time);
01655 
01656 
01680 void bgav_seek_scaled(bgav_t * bgav, int64_t * time, int scale);
01681 
01686 #define BGAV_TIMESTAMP_UNDEFINED 0x8000000000000000LL
01687 
01704 int bgav_can_seek_sample(bgav_t * bgav);
01705 
01706 
01719 int64_t bgav_audio_duration(bgav_t * bgav, int stream);
01720 
01732 int64_t bgav_audio_start_time(bgav_t * bgav, int stream);
01733 
01746 int64_t bgav_video_duration(bgav_t * bgav, int stream);
01747 
01759 int64_t bgav_video_start_time(bgav_t * bgav, int stream);
01760 
01761 
01771 int64_t bgav_subtitle_duration(bgav_t * bgav, int stream);
01772 
01786 void bgav_seek_audio(bgav_t * bgav, int stream, int64_t sample);
01787 
01801 void bgav_seek_video(bgav_t * bgav, int stream, int64_t time);
01802 
01818 int64_t bgav_video_keyframe_before(bgav_t * bgav, int stream, int64_t time);
01819 
01835 int64_t bgav_video_keyframe_after(bgav_t * bgav, int stream, int64_t time);
01836 
01837 
01848 void bgav_seek_subtitle(bgav_t * bgav, int stream, int64_t time);
01849 
01850 
01851 /***************************************************
01852  * Debugging functions
01853  ***************************************************/
01854 
01863 void bgav_dump(bgav_t * bgav);
01864 
01865 /* Dump infos about the installed codecs */
01866 
01874 void bgav_codecs_dump();
01875 
01876 /* Dump known media formats */
01877 
01885 void bgav_formats_dump();
01886 
01894 void bgav_inputs_dump();
01895 
01903 void bgav_redirectors_dump();
01904 
01912 void bgav_subreaders_dump();
01913 
01914 
01915 #ifdef __cplusplus
01916 }
01917 #endif
01918 
01919 
01920 #pragma GCC visibility pop

Generated on Tue Mar 10 17:22:30 2009 for gmerlin-avdecoder by  doxygen 1.5.7