00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
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
00190
00191
00192
00193
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
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
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
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
00791
00809 typedef struct
00810 {
00811 char * device;
00812 char * name;
00813 } bgav_device_info_t;
00814
00815
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
00897
00898
00899
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
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
01017
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
01086
01087
01088
01089
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
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
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
01353
01354
01355
01356
01357
01358
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
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
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
01853
01854
01863 void bgav_dump(bgav_t * bgav);
01864
01865
01866
01874 void bgav_codecs_dump();
01875
01876
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