00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00027 #ifndef GAVL_CONNECTORS_H_INCLUDED
00028 #define GAVL_CONNECTORS_H_INCLUDED
00029
00030 #include <gavl/gavl.h>
00031 #include <gavl/compression.h>
00032
00033 #ifdef __cplusplus
00034 extern "C" {
00035 #endif
00036
00054 typedef void (*gavl_connector_lock_func_t)(void * priv);
00055
00056
00085 typedef enum
00086 {
00087 GAVL_SOURCE_EOF = 0,
00088 GAVL_SOURCE_OK = 1,
00089 GAVL_SOURCE_AGAIN = 2,
00090 } gavl_source_status_t;
00091
00100 typedef gavl_source_status_t
00101 (*gavl_audio_source_func_t)(void * priv, gavl_audio_frame_t ** frame);
00102
00111 typedef gavl_source_status_t
00112 (*gavl_video_source_func_t)(void * priv, gavl_video_frame_t ** frame);
00113
00122 typedef gavl_source_status_t
00123 (*gavl_packet_source_func_t)(void * priv, gavl_packet_t ** p);
00124
00125
00129 #define GAVL_SOURCE_SRC_ALLOC (1<<0)
00130
00131
00136 #define GAVL_SOURCE_SRC_FRAMESIZE_MAX (1<<2)
00137
00142 #define GAVL_SOURCE_SRC_DISCONTINUOUS (1<<3)
00143
00144
00145
00146
00155 GAVL_PUBLIC
00156 gavl_video_source_t *
00157 gavl_video_source_create(gavl_video_source_func_t func,
00158 void * priv, int src_flags,
00159 const gavl_video_format_t * src_format);
00160
00172 GAVL_PUBLIC
00173 gavl_video_source_t *
00174 gavl_video_source_create_source(gavl_video_source_func_t func,
00175 void * priv, int src_flags,
00176 gavl_video_source_t * src);
00177
00185 GAVL_PUBLIC void
00186 gavl_video_source_set_lock_funcs(gavl_video_source_t * src,
00187 gavl_connector_lock_func_t lock_func,
00188 gavl_connector_lock_func_t unlock_func,
00189 void * priv);
00190
00191
00198 GAVL_PUBLIC
00199 gavl_video_options_t * gavl_video_source_get_options(gavl_video_source_t * s);
00200
00207 GAVL_PUBLIC
00208 void gavl_video_source_reset(gavl_video_source_t * s);
00209
00217 GAVL_PUBLIC
00218 void gavl_video_source_destroy(gavl_video_source_t * s);
00219
00220
00221
00227 GAVL_PUBLIC
00228 const gavl_video_format_t *
00229 gavl_video_source_get_src_format(gavl_video_source_t * s);
00230
00236 GAVL_PUBLIC
00237 const gavl_video_format_t *
00238 gavl_video_source_get_dst_format(gavl_video_source_t * s);
00239
00255 GAVL_PUBLIC
00256 void
00257 gavl_video_source_set_dst(gavl_video_source_t * s, int dst_flags,
00258 const gavl_video_format_t * dst_format);
00259
00270 GAVL_PUBLIC
00271 gavl_source_status_t
00272 gavl_video_source_read_frame(void * s, gavl_video_frame_t ** frame);
00273
00274
00275
00284 GAVL_PUBLIC
00285 gavl_audio_source_t *
00286 gavl_audio_source_create(gavl_audio_source_func_t func,
00287 void * priv, int src_flags,
00288 const gavl_audio_format_t * src_format);
00289
00301 GAVL_PUBLIC
00302 gavl_audio_source_t *
00303 gavl_audio_source_create_source(gavl_audio_source_func_t func,
00304 void * priv, int src_flags,
00305 gavl_audio_source_t * src);
00306
00307
00315 GAVL_PUBLIC void
00316 gavl_audio_source_set_lock_funcs(gavl_audio_source_t * src,
00317 gavl_connector_lock_func_t lock_func,
00318 gavl_connector_lock_func_t unlock_func,
00319 void * priv);
00320
00321
00327 GAVL_PUBLIC
00328 const gavl_audio_format_t *
00329 gavl_audio_source_get_src_format(gavl_audio_source_t * s);
00330
00336 GAVL_PUBLIC
00337 const gavl_audio_format_t *
00338 gavl_audio_source_get_dst_format(gavl_audio_source_t * s);
00339
00356 GAVL_PUBLIC
00357 void
00358 gavl_audio_source_set_dst(gavl_audio_source_t * s, int dst_flags,
00359 const gavl_audio_format_t * dst_format);
00360
00375 GAVL_PUBLIC
00376 gavl_source_status_t
00377 gavl_audio_source_read_frame(void*s, gavl_audio_frame_t ** frame);
00378
00388 GAVL_PUBLIC
00389 void
00390 gavl_audio_source_skip_src(gavl_audio_source_t * s, int num_samples);
00391
00401 GAVL_PUBLIC
00402 int gavl_audio_source_read_samples(void*s, gavl_audio_frame_t * frame,
00403 int num_samples);
00404
00410 GAVL_PUBLIC
00411 gavl_audio_options_t * gavl_audio_source_get_options(gavl_audio_source_t * s);
00412
00419 GAVL_PUBLIC
00420 void gavl_audio_source_reset(gavl_audio_source_t * s);
00421
00429 GAVL_PUBLIC
00430 void gavl_audio_source_destroy(gavl_audio_source_t * s);
00431
00432
00433
00434
00443 GAVL_PUBLIC
00444 gavl_packet_source_t *
00445 gavl_packet_source_create_audio(gavl_packet_source_func_t func,
00446 void * priv, int src_flags,
00447 const gavl_compression_info_t * ci,
00448 const gavl_audio_format_t * afmt);
00449
00458 GAVL_PUBLIC
00459 gavl_packet_source_t *
00460 gavl_packet_source_create_video(gavl_packet_source_func_t func,
00461 void * priv, int src_flags,
00462 const gavl_compression_info_t * ci,
00463 const gavl_video_format_t * vfmt);
00464
00472 GAVL_PUBLIC
00473 gavl_packet_source_t *
00474 gavl_packet_source_create_text(gavl_packet_source_func_t func,
00475 void * priv, int src_flags, int timescale);
00476
00484 GAVL_PUBLIC
00485 gavl_packet_source_t *
00486 gavl_packet_source_create_source(gavl_packet_source_func_t func,
00487 void * priv, int src_flags,
00488 gavl_packet_source_t * src);
00489
00490
00498 GAVL_PUBLIC void
00499 gavl_packet_source_set_lock_funcs(gavl_packet_source_t * src,
00500 gavl_connector_lock_func_t lock_func,
00501 gavl_connector_lock_func_t unlock_func,
00502 void * priv);
00503
00504
00510 GAVL_PUBLIC const gavl_compression_info_t *
00511 gavl_packet_source_get_ci(gavl_packet_source_t * s);
00512
00518 GAVL_PUBLIC const gavl_audio_format_t *
00519 gavl_packet_source_get_audio_format(gavl_packet_source_t * s);
00520
00526 GAVL_PUBLIC const gavl_video_format_t *
00527 gavl_packet_source_get_video_format(gavl_packet_source_t * s);
00528
00534 GAVL_PUBLIC int
00535 gavl_packet_source_get_timescale(gavl_packet_source_t * s);
00536
00542 GAVL_PUBLIC gavl_source_status_t
00543 gavl_packet_source_read_packet(void*s, gavl_packet_t ** p);
00544
00549 GAVL_PUBLIC void
00550 gavl_packet_source_destroy(gavl_packet_source_t * s);
00551
00573 typedef enum
00574 {
00575 GAVL_SINK_ERROR,
00576 GAVL_SINK_OK,
00577 } gavl_sink_status_t;
00578
00579
00588 typedef gavl_audio_frame_t *
00589 (*gavl_audio_sink_get_func)(void * priv);
00590
00597 typedef gavl_sink_status_t
00598 (*gavl_audio_sink_put_func)(void * priv, gavl_audio_frame_t * f);
00599
00608 GAVL_PUBLIC gavl_audio_sink_t *
00609 gavl_audio_sink_create(gavl_audio_sink_get_func get_func,
00610 gavl_audio_sink_put_func put_func,
00611 void * priv,
00612 const gavl_audio_format_t * format);
00613
00621 GAVL_PUBLIC void
00622 gavl_audio_sink_set_lock_funcs(gavl_audio_sink_t * sink,
00623 gavl_connector_lock_func_t lock_func,
00624 gavl_connector_lock_func_t unlock_func,
00625 void * priv);
00626
00627
00633 GAVL_PUBLIC const gavl_audio_format_t *
00634 gavl_audio_sink_get_format(gavl_audio_sink_t * s);
00635
00645 GAVL_PUBLIC gavl_audio_frame_t *
00646 gavl_audio_sink_get_frame(gavl_audio_sink_t * s);
00647
00657 GAVL_PUBLIC gavl_sink_status_t
00658 gavl_audio_sink_put_frame(gavl_audio_sink_t * s, gavl_audio_frame_t * f);
00659
00664 GAVL_PUBLIC void
00665 gavl_audio_sink_destroy(gavl_audio_sink_t * s);
00666
00667
00668
00677 typedef gavl_video_frame_t *
00678 (*gavl_video_sink_get_func)(void * priv);
00679
00686 typedef gavl_sink_status_t
00687 (*gavl_video_sink_put_func)(void * priv, gavl_video_frame_t * f);
00688
00697 GAVL_PUBLIC gavl_video_sink_t *
00698 gavl_video_sink_create(gavl_video_sink_get_func get_func,
00699 gavl_video_sink_put_func put_func,
00700 void * priv,
00701 const gavl_video_format_t * format);
00702
00710 GAVL_PUBLIC void
00711 gavl_video_sink_set_lock_funcs(gavl_video_sink_t * sink,
00712 gavl_connector_lock_func_t lock_func,
00713 gavl_connector_lock_func_t unlock_func,
00714 void * priv);
00715
00721 GAVL_PUBLIC const gavl_video_format_t *
00722 gavl_video_sink_get_format(gavl_video_sink_t * s);
00723
00733 GAVL_PUBLIC gavl_video_frame_t *
00734 gavl_video_sink_get_frame(gavl_video_sink_t * s);
00735
00745 GAVL_PUBLIC gavl_sink_status_t
00746 gavl_video_sink_put_frame(gavl_video_sink_t * s, gavl_video_frame_t * f);
00747
00752 GAVL_PUBLIC void
00753 gavl_video_sink_destroy(gavl_video_sink_t * s);
00754
00755
00756
00765 typedef gavl_packet_t *
00766 (*gavl_packet_sink_get_func)(void * priv);
00767
00774 typedef gavl_sink_status_t
00775 (*gavl_packet_sink_put_func)(void * priv, gavl_packet_t * p);
00776
00784 GAVL_PUBLIC gavl_packet_sink_t *
00785 gavl_packet_sink_create(gavl_packet_sink_get_func get_func,
00786 gavl_packet_sink_put_func put_func,
00787 void * priv);
00788
00796 GAVL_PUBLIC void
00797 gavl_packet_sink_set_lock_funcs(gavl_packet_sink_t * sink,
00798 gavl_connector_lock_func_t lock_func,
00799 gavl_connector_lock_func_t unlock_func,
00800 void * priv);
00801
00802
00812 GAVL_PUBLIC gavl_packet_t *
00813 gavl_packet_sink_get_packet(gavl_packet_sink_t * s);
00814
00824 GAVL_PUBLIC gavl_sink_status_t
00825 gavl_packet_sink_put_packet(gavl_packet_sink_t * s, gavl_packet_t * p);
00826
00831 GAVL_PUBLIC void
00832 gavl_packet_sink_destroy(gavl_packet_sink_t * s);
00833
00834
00854 typedef struct gavl_audio_connector_s gavl_audio_connector_t;
00855
00861 typedef struct gavl_video_connector_s gavl_video_connector_t;
00862
00868 typedef struct gavl_packet_connector_s gavl_packet_connector_t;
00869
00881 typedef void
00882 (*gavl_audio_connector_process_func)(void * priv,
00883 gavl_audio_frame_t * frame);
00884
00896 typedef void
00897 (*gavl_video_connector_process_func)(void * priv,
00898 gavl_video_frame_t * frame);
00899
00908 typedef void
00909 (*gavl_packet_connector_process_func)(void * priv,
00910 gavl_packet_t * p);
00911
00917 GAVL_PUBLIC gavl_audio_connector_t *
00918 gavl_audio_connector_create(gavl_audio_source_t * src);
00919
00927 GAVL_PUBLIC gavl_audio_options_t *
00928 gavl_audio_connector_get_options(gavl_audio_connector_t * c);
00929
00934 GAVL_PUBLIC void
00935 gavl_audio_connector_destroy(gavl_audio_connector_t * c);
00936
00942 GAVL_PUBLIC void
00943 gavl_audio_connector_connect(gavl_audio_connector_t * c,
00944 gavl_audio_sink_t * sink);
00945
00952 GAVL_PUBLIC void
00953 gavl_audio_connector_set_process_func(gavl_audio_connector_t * c,
00954 gavl_audio_connector_process_func func,
00955 void * priv);
00956
00964 GAVL_PUBLIC void
00965 gavl_audio_connector_start(gavl_audio_connector_t * c);
00966
00972 GAVL_PUBLIC const gavl_audio_format_t *
00973 gavl_audio_connector_get_process_format(gavl_audio_connector_t * c);
00974
00984 GAVL_PUBLIC int
00985 gavl_audio_connector_process(gavl_audio_connector_t * c);
00986
00993 GAVL_PUBLIC
00994 void gavl_audio_connector_reset(gavl_audio_connector_t * c);
00995
01001 GAVL_PUBLIC gavl_source_status_t
01002 gavl_audio_connector_get_source_status(gavl_audio_connector_t * c);
01003
01004
01005
01006
01012 GAVL_PUBLIC gavl_video_connector_t *
01013 gavl_video_connector_create(gavl_video_source_t * src);
01014
01022 GAVL_PUBLIC gavl_video_options_t *
01023 gavl_video_connector_get_options(gavl_video_connector_t * c);
01024
01029 GAVL_PUBLIC void
01030 gavl_video_connector_destroy(gavl_video_connector_t * c);
01031
01037 GAVL_PUBLIC void
01038 gavl_video_connector_connect(gavl_video_connector_t * c,
01039 gavl_video_sink_t * sink);
01040
01047 GAVL_PUBLIC void
01048 gavl_video_connector_set_process_func(gavl_video_connector_t * c,
01049 gavl_video_connector_process_func func,
01050 void * priv);
01051
01059 GAVL_PUBLIC void
01060 gavl_video_connector_start(gavl_video_connector_t * c);
01061
01067 GAVL_PUBLIC const gavl_video_format_t *
01068 gavl_video_connector_get_process_format(gavl_video_connector_t * c);
01069
01079 GAVL_PUBLIC int
01080 gavl_video_connector_process(gavl_video_connector_t * c);
01081
01088 GAVL_PUBLIC
01089 void gavl_video_connector_reset(gavl_video_connector_t * c);
01090
01096 GAVL_PUBLIC gavl_source_status_t
01097 gavl_video_connector_get_source_status(gavl_video_connector_t * c);
01098
01099
01100
01106 GAVL_PUBLIC gavl_packet_connector_t *
01107 gavl_packet_connector_create(gavl_packet_source_t * src);
01108
01113 GAVL_PUBLIC void
01114 gavl_packet_connector_destroy(gavl_packet_connector_t * c);
01115
01121 GAVL_PUBLIC void
01122 gavl_packet_connector_connect(gavl_packet_connector_t * c,
01123 gavl_packet_sink_t * sink);
01124
01131 GAVL_PUBLIC void
01132 gavl_packet_connector_set_process_func(gavl_packet_connector_t * c,
01133 gavl_packet_connector_process_func func,
01134 void * priv);
01135
01143 GAVL_PUBLIC int
01144 gavl_packet_connector_process(gavl_packet_connector_t * c);
01145
01151 GAVL_PUBLIC gavl_source_status_t
01152 gavl_packet_connector_get_source_status(gavl_packet_connector_t * c);
01153
01154
01155
01160 #ifdef __cplusplus
01161 }
01162 #endif
01163
01164 #endif // GAVL_CONNECTORS_H_INCLUDED