gavl
connectors.h
1/*****************************************************************
2 * gavl - a general purpose audio/video processing library
3 *
4 * Copyright (c) 2001 - 2012 Members of the Gmerlin project
5 * gmerlin-general@lists.sourceforge.net
6 * http://gmerlin.sourceforge.net
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 * *****************************************************************/
21
26
27#ifndef GAVL_CONNECTORS_H_INCLUDED
28#define GAVL_CONNECTORS_H_INCLUDED
29
30#include <gavl/gavl.h>
31#include <gavl/compression.h>
32
33#ifdef __cplusplus
34extern "C" {
35#endif
36
45
52
53
54typedef void (*gavl_connector_lock_func_t)(void * priv);
55
56
82
84
91
99
101(*gavl_audio_source_func_t)(void * priv, gavl_audio_frame_t ** frame);
102
110
112(*gavl_video_source_func_t)(void * priv, gavl_video_frame_t ** frame);
113
121
123(*gavl_packet_source_func_t)(void * priv, gavl_packet_t ** p);
124
125
128
129#define GAVL_SOURCE_SRC_ALLOC (1<<0)
130
131
135
136#define GAVL_SOURCE_SRC_FRAMESIZE_MAX (1<<2)
137
141
142#define GAVL_SOURCE_SRC_DISCONTINUOUS (1<<3)
143
144
145/* Called by the source */
146
154
155GAVL_PUBLIC
158 void * priv, int src_flags,
159 const gavl_video_format_t * src_format);
160
171
172GAVL_PUBLIC
175 void * priv, int src_flags,
176 gavl_video_source_t * src);
177
184
185GAVL_PUBLIC void
187 gavl_connector_lock_func_t lock_func,
188 gavl_connector_lock_func_t unlock_func,
189 void * priv);
190
191
196
197
198GAVL_PUBLIC
200
206
207GAVL_PUBLIC
209
216
217GAVL_PUBLIC
219
220/* Called by the destination */
221
226
227GAVL_PUBLIC
230
235
236GAVL_PUBLIC
239
254
255GAVL_PUBLIC
256void
258 const gavl_video_format_t * dst_format);
259
268
269
270GAVL_PUBLIC
273
274/* Called by source */
275
283
284GAVL_PUBLIC
287 void * priv, int src_flags,
288 const gavl_audio_format_t * src_format);
289
300
301GAVL_PUBLIC
304 void * priv, int src_flags,
305 gavl_audio_source_t * src);
306
307
314
315GAVL_PUBLIC void
317 gavl_connector_lock_func_t lock_func,
318 gavl_connector_lock_func_t unlock_func,
319 void * priv);
320
321
326
327GAVL_PUBLIC
330
335
336GAVL_PUBLIC
339
355
356GAVL_PUBLIC
357void
359 const gavl_audio_format_t * dst_format);
360
374
375GAVL_PUBLIC
378
387
388GAVL_PUBLIC
389void
391
400
401GAVL_PUBLIC
403 int num_samples);
404
409
410GAVL_PUBLIC
412
418
419GAVL_PUBLIC
421
428
429GAVL_PUBLIC
431
432
433/* Packet source */
434
442
443GAVL_PUBLIC
446 void * priv, int src_flags,
447 const gavl_compression_info_t * ci,
448 const gavl_audio_format_t * afmt);
449
457
458GAVL_PUBLIC
461 void * priv, int src_flags,
462 const gavl_compression_info_t * ci,
463 const gavl_video_format_t * vfmt);
464
471
472GAVL_PUBLIC
475 void * priv, int src_flags, int timescale);
476
483
484GAVL_PUBLIC
487 void * priv, int src_flags,
489
490
497
498GAVL_PUBLIC void
500 gavl_connector_lock_func_t lock_func,
501 gavl_connector_lock_func_t unlock_func,
502 void * priv);
503
504
509
510GAVL_PUBLIC const gavl_compression_info_t *
512
517
518GAVL_PUBLIC const gavl_audio_format_t *
520
525
526GAVL_PUBLIC const gavl_video_format_t *
528
533
534GAVL_PUBLIC int
536
541
542GAVL_PUBLIC gavl_source_status_t
544
548
549GAVL_PUBLIC void
551
555
569
572
578
579
587
589(*gavl_audio_sink_get_func)(void * priv);
590
596
599
607
608GAVL_PUBLIC gavl_audio_sink_t *
611 void * priv,
612 const gavl_audio_format_t * format);
613
620
621GAVL_PUBLIC void
623 gavl_connector_lock_func_t lock_func,
624 gavl_connector_lock_func_t unlock_func,
625 void * priv);
626
627
632
633GAVL_PUBLIC const gavl_audio_format_t *
635
644
645GAVL_PUBLIC gavl_audio_frame_t *
647
656
657GAVL_PUBLIC gavl_sink_status_t
659
663
664GAVL_PUBLIC void
666
667
668
676
678(*gavl_video_sink_get_func)(void * priv);
679
685
688
696
697GAVL_PUBLIC gavl_video_sink_t *
700 void * priv,
701 const gavl_video_format_t * format);
702
709
710GAVL_PUBLIC void
712 gavl_connector_lock_func_t lock_func,
713 gavl_connector_lock_func_t unlock_func,
714 void * priv);
715
720
721GAVL_PUBLIC const gavl_video_format_t *
723
732
733GAVL_PUBLIC gavl_video_frame_t *
735
744
745GAVL_PUBLIC gavl_sink_status_t
747
751
752GAVL_PUBLIC void
754
755
756
764
766(*gavl_packet_sink_get_func)(void * priv);
767
773
775(*gavl_packet_sink_put_func)(void * priv, gavl_packet_t * p);
776
783
784GAVL_PUBLIC gavl_packet_sink_t *
787 void * priv);
788
795
796GAVL_PUBLIC void
798 gavl_connector_lock_func_t lock_func,
799 gavl_connector_lock_func_t unlock_func,
800 void * priv);
801
802
811
812GAVL_PUBLIC gavl_packet_t *
814
823
824GAVL_PUBLIC gavl_sink_status_t
826
830
831GAVL_PUBLIC void
833
834
838
839
848
853
854typedef struct gavl_audio_connector_s gavl_audio_connector_t;
855
860
861typedef struct gavl_video_connector_s gavl_video_connector_t;
862
867
868typedef struct gavl_packet_connector_s gavl_packet_connector_t;
869
880
881typedef void
883 gavl_audio_frame_t * frame);
884
895
896typedef void
898 gavl_video_frame_t * frame);
899
907
908typedef void
910 gavl_packet_t * p);
911
916
917GAVL_PUBLIC gavl_audio_connector_t *
919
926
927GAVL_PUBLIC gavl_audio_options_t *
929
933
934GAVL_PUBLIC void
936
941
942GAVL_PUBLIC void
944 gavl_audio_sink_t * sink);
945
951
952GAVL_PUBLIC void
955 void * priv);
956
963
964GAVL_PUBLIC void
966
971
972GAVL_PUBLIC const gavl_audio_format_t *
974
983
984GAVL_PUBLIC int
986
992
993GAVL_PUBLIC
995
1000
1001GAVL_PUBLIC gavl_source_status_t
1003
1004
1005/* */
1006
1011
1012GAVL_PUBLIC gavl_video_connector_t *
1014
1021
1022GAVL_PUBLIC gavl_video_options_t *
1024
1028
1029GAVL_PUBLIC void
1031
1036
1037GAVL_PUBLIC void
1039 gavl_video_sink_t * sink);
1040
1046
1047GAVL_PUBLIC void
1050 void * priv);
1051
1058
1059GAVL_PUBLIC void
1061
1066
1067GAVL_PUBLIC const gavl_video_format_t *
1069
1078
1079GAVL_PUBLIC int
1081
1087
1088GAVL_PUBLIC
1090
1095
1096GAVL_PUBLIC gavl_source_status_t
1098
1099/* */
1100
1105
1106GAVL_PUBLIC gavl_packet_connector_t *
1108
1112
1113GAVL_PUBLIC void
1115
1120
1121GAVL_PUBLIC void
1123 gavl_packet_sink_t * sink);
1124
1130
1131GAVL_PUBLIC void
1134 void * priv);
1135
1142
1143GAVL_PUBLIC int
1145
1150
1151GAVL_PUBLIC gavl_source_status_t
1153
1154
1155
1159
1160#ifdef __cplusplus
1161}
1162#endif
1163
1164#endif // GAVL_CONNECTORS_H_INCLUDED
struct gavl_audio_options_s gavl_audio_options_t
Opaque container for audio conversion options.
Definition gavl.h:945
GAVL_PUBLIC gavl_video_connector_t * gavl_video_connector_create(gavl_video_source_t *src)
Create a video connector.
struct gavl_audio_connector_s gavl_audio_connector_t
Opaque structure for the audio connector.
Definition connectors.h:854
void(* gavl_packet_connector_process_func)(void *priv, gavl_packet_t *p)
Callback for processing a packet.
Definition connectors.h:909
GAVL_PUBLIC gavl_packet_connector_t * gavl_packet_connector_create(gavl_packet_source_t *src)
Create a packet connector.
GAVL_PUBLIC gavl_source_status_t gavl_packet_connector_get_source_status(gavl_packet_connector_t *c)
Get the status of the last read call.
struct gavl_packet_connector_s gavl_packet_connector_t
Opaque structure for the packet connector.
Definition connectors.h:868
GAVL_PUBLIC gavl_video_options_t * gavl_video_connector_get_options(gavl_video_connector_t *c)
Get conversion options.
void(* gavl_audio_connector_process_func)(void *priv, gavl_audio_frame_t *frame)
Callback for processing an audio frame.
Definition connectors.h:882
GAVL_PUBLIC const gavl_video_format_t * gavl_video_connector_get_process_format(gavl_video_connector_t *c)
Get process format.
GAVL_PUBLIC void gavl_audio_connector_reset(gavl_audio_connector_t *c)
Reset an audio connector.
GAVL_PUBLIC int gavl_video_connector_process(gavl_video_connector_t *c)
Process one frame.
GAVL_PUBLIC const gavl_audio_format_t * gavl_audio_connector_get_process_format(gavl_audio_connector_t *c)
Get process format.
GAVL_PUBLIC void gavl_audio_connector_start(gavl_audio_connector_t *c)
Start an audio connector.
GAVL_PUBLIC void gavl_video_connector_connect(gavl_video_connector_t *c, gavl_video_sink_t *sink)
Connect a sink.
GAVL_PUBLIC gavl_audio_connector_t * gavl_audio_connector_create(gavl_audio_source_t *src)
Create an audio connector.
GAVL_PUBLIC void gavl_audio_connector_set_process_func(gavl_audio_connector_t *c, gavl_audio_connector_process_func func, void *priv)
Set process callback.
GAVL_PUBLIC void gavl_packet_connector_connect(gavl_packet_connector_t *c, gavl_packet_sink_t *sink)
Connect a sink.
struct gavl_video_connector_s gavl_video_connector_t
Opaque structure for the audio connector.
Definition connectors.h:861
GAVL_PUBLIC void gavl_video_connector_start(gavl_video_connector_t *c)
Start a video connector.
void(* gavl_video_connector_process_func)(void *priv, gavl_video_frame_t *frame)
Callback for processing a video frame.
Definition connectors.h:897
GAVL_PUBLIC int gavl_audio_connector_process(gavl_audio_connector_t *c)
Process one frame.
GAVL_PUBLIC gavl_audio_options_t * gavl_audio_connector_get_options(gavl_audio_connector_t *c)
Get conversion options.
GAVL_PUBLIC void gavl_packet_connector_set_process_func(gavl_packet_connector_t *c, gavl_packet_connector_process_func func, void *priv)
Set process callback.
GAVL_PUBLIC void gavl_video_connector_destroy(gavl_video_connector_t *c)
Destroy a video connector.
GAVL_PUBLIC void gavl_audio_connector_connect(gavl_audio_connector_t *c, gavl_audio_sink_t *sink)
Connect a sink.
GAVL_PUBLIC gavl_source_status_t gavl_video_connector_get_source_status(gavl_video_connector_t *c)
Get the status of the last read call.
GAVL_PUBLIC gavl_source_status_t gavl_audio_connector_get_source_status(gavl_audio_connector_t *c)
Get the status of the last read call.
GAVL_PUBLIC void gavl_packet_connector_destroy(gavl_packet_connector_t *c)
Destroy a packet connector.
GAVL_PUBLIC void gavl_video_connector_reset(gavl_video_connector_t *c)
Reset a video connector.
GAVL_PUBLIC void gavl_audio_connector_destroy(gavl_audio_connector_t *c)
Destroy an audio connector.
GAVL_PUBLIC int gavl_packet_connector_process(gavl_packet_connector_t *c)
Process one packet.
GAVL_PUBLIC void gavl_video_connector_set_process_func(gavl_video_connector_t *c, gavl_video_connector_process_func func, void *priv)
Set process callback.
struct gavl_video_sink_s gavl_video_sink_t
Video sink.
Definition gavl.h:81
GAVL_PUBLIC gavl_audio_sink_t * gavl_audio_sink_create(gavl_audio_sink_get_func get_func, gavl_audio_sink_put_func put_func, void *priv, const gavl_audio_format_t *format)
Create an audio sink.
GAVL_PUBLIC void gavl_video_sink_set_lock_funcs(gavl_video_sink_t *sink, gavl_connector_lock_func_t lock_func, gavl_connector_lock_func_t unlock_func, void *priv)
Set lock functions.
gavl_sink_status_t(* gavl_packet_sink_put_func)(void *priv, gavl_packet_t *p)
Prototype for putting a frame.
Definition connectors.h:775
GAVL_PUBLIC void gavl_video_sink_destroy(gavl_video_sink_t *s)
Destroy a video sink.
gavl_sink_status_t
Return status of the sink functions.
Definition connectors.h:574
struct gavl_audio_sink_s gavl_audio_sink_t
Audio sink.
Definition gavl.h:72
struct gavl_packet_sink_s gavl_packet_sink_t
Packet sink.
Definition gavl.h:90
GAVL_PUBLIC gavl_video_sink_t * gavl_video_sink_create(gavl_video_sink_get_func get_func, gavl_video_sink_put_func put_func, void *priv, const gavl_video_format_t *format)
Create a video sink.
gavl_sink_status_t(* gavl_audio_sink_put_func)(void *priv, gavl_audio_frame_t *f)
Prototype for putting a frame.
Definition connectors.h:598
gavl_audio_frame_t *(* gavl_audio_sink_get_func)(void *priv)
Prototype for getting a frame buffer.
Definition connectors.h:589
GAVL_PUBLIC gavl_packet_t * gavl_packet_sink_get_packet(gavl_packet_sink_t *s)
Get a buffer for a packet.
GAVL_PUBLIC void gavl_audio_sink_destroy(gavl_audio_sink_t *s)
Destroy an audio sink.
GAVL_PUBLIC gavl_sink_status_t gavl_video_sink_put_frame(gavl_video_sink_t *s, gavl_video_frame_t *f)
Output a frame.
gavl_video_frame_t *(* gavl_video_sink_get_func)(void *priv)
Prototype for getting a frame buffer.
Definition connectors.h:678
GAVL_PUBLIC gavl_sink_status_t gavl_packet_sink_put_packet(gavl_packet_sink_t *s, gavl_packet_t *p)
Output a frame.
GAVL_PUBLIC gavl_video_frame_t * gavl_video_sink_get_frame(gavl_video_sink_t *s)
Get a buffer for a frame.
GAVL_PUBLIC gavl_packet_sink_t * gavl_packet_sink_create(gavl_packet_sink_get_func get_func, gavl_packet_sink_put_func put_func, void *priv)
Create a packet sink.
gavl_packet_t *(* gavl_packet_sink_get_func)(void *priv)
Prototype for getting a packet buffer.
Definition connectors.h:766
gavl_sink_status_t(* gavl_video_sink_put_func)(void *priv, gavl_video_frame_t *f)
Prototype for putting a frame.
Definition connectors.h:687
GAVL_PUBLIC void gavl_audio_sink_set_lock_funcs(gavl_audio_sink_t *sink, gavl_connector_lock_func_t lock_func, gavl_connector_lock_func_t unlock_func, void *priv)
Set lock functions.
GAVL_PUBLIC void gavl_packet_sink_set_lock_funcs(gavl_packet_sink_t *sink, gavl_connector_lock_func_t lock_func, gavl_connector_lock_func_t unlock_func, void *priv)
Set lock functions.
GAVL_PUBLIC gavl_sink_status_t gavl_audio_sink_put_frame(gavl_audio_sink_t *s, gavl_audio_frame_t *f)
Output a frame.
GAVL_PUBLIC gavl_audio_frame_t * gavl_audio_sink_get_frame(gavl_audio_sink_t *s)
Get a buffer for a frame.
GAVL_PUBLIC const gavl_audio_format_t * gavl_audio_sink_get_format(gavl_audio_sink_t *s)
Get the format.
GAVL_PUBLIC void gavl_packet_sink_destroy(gavl_packet_sink_t *s)
Destroy a packet sink.
GAVL_PUBLIC const gavl_video_format_t * gavl_video_sink_get_format(gavl_video_sink_t *s)
Get the format.
@ GAVL_SINK_OK
Frame was successfully processed.
Definition connectors.h:576
@ GAVL_SINK_ERROR
Something went wrong.
Definition connectors.h:575
GAVL_PUBLIC gavl_source_status_t gavl_packet_source_read_packet(void *s, gavl_packet_t **p)
Read one packet.
gavl_source_status_t(* gavl_packet_source_func_t)(void *priv, gavl_packet_t **p)
Prototype for obtaining one packet.
Definition connectors.h:123
GAVL_PUBLIC gavl_video_source_t * gavl_video_source_create_source(gavl_video_source_func_t func, void *priv, int src_flags, gavl_video_source_t *src)
Create a video source from another source.
GAVL_PUBLIC gavl_packet_source_t * gavl_packet_source_create_text(gavl_packet_source_func_t func, void *priv, int src_flags, int timescale)
Create a text packet source.
GAVL_PUBLIC gavl_video_source_t * gavl_video_source_create(gavl_video_source_func_t func, void *priv, int src_flags, const gavl_video_format_t *src_format)
Create a video source.
GAVL_PUBLIC gavl_source_status_t gavl_audio_source_read_frame(void *s, gavl_audio_frame_t **frame)
Read an audio frame.
GAVL_PUBLIC const gavl_audio_format_t * gavl_audio_source_get_dst_format(gavl_audio_source_t *s)
Get the output format.
GAVL_PUBLIC void gavl_audio_source_set_dst(gavl_audio_source_t *s, int dst_flags, const gavl_audio_format_t *dst_format)
Set the destination mode.
GAVL_PUBLIC void gavl_video_source_set_dst(gavl_video_source_t *s, int dst_flags, const gavl_video_format_t *dst_format)
Set the destination mode.
GAVL_PUBLIC gavl_audio_source_t * gavl_audio_source_create(gavl_audio_source_func_t func, void *priv, int src_flags, const gavl_audio_format_t *src_format)
Create an audio source.
struct gavl_video_source_s gavl_video_source_t
Forward declaration of the video source.
Definition gavl.h:48
GAVL_PUBLIC gavl_audio_source_t * gavl_audio_source_create_source(gavl_audio_source_func_t func, void *priv, int src_flags, gavl_audio_source_t *src)
Create an audio source from another source.
gavl_source_status_t
Return value of the source function.
Definition connectors.h:86
GAVL_PUBLIC const gavl_video_format_t * gavl_video_source_get_src_format(gavl_video_source_t *s)
Get the native format.
GAVL_PUBLIC void gavl_audio_source_reset(gavl_audio_source_t *s)
Reset an audio source.
GAVL_PUBLIC gavl_source_status_t gavl_video_source_read_frame(void *s, gavl_video_frame_t **frame)
Read a video frame.
GAVL_PUBLIC void gavl_video_source_set_lock_funcs(gavl_video_source_t *src, gavl_connector_lock_func_t lock_func, gavl_connector_lock_func_t unlock_func, void *priv)
Set lock functions.
GAVL_PUBLIC int gavl_audio_source_read_samples(void *s, gavl_audio_frame_t *frame, int num_samples)
Read audio samples.
GAVL_PUBLIC gavl_video_options_t * gavl_video_source_get_options(gavl_video_source_t *s)
Get coversion options of a video source.
GAVL_PUBLIC gavl_packet_source_t * gavl_packet_source_create_source(gavl_packet_source_func_t func, void *priv, int src_flags, gavl_packet_source_t *src)
Create a packet source from another packet source.
struct gavl_audio_source_s gavl_audio_source_t
Forward declaration of the audio source.
Definition gavl.h:56
GAVL_PUBLIC const gavl_audio_format_t * gavl_packet_source_get_audio_format(gavl_packet_source_t *s)
Get the audio format.
GAVL_PUBLIC const gavl_compression_info_t * gavl_packet_source_get_ci(gavl_packet_source_t *s)
Get the compression info.
GAVL_PUBLIC gavl_audio_options_t * gavl_audio_source_get_options(gavl_audio_source_t *s)
Get coversion options of an audio source.
gavl_source_status_t(* gavl_video_source_func_t)(void *priv, gavl_video_frame_t **frame)
Prototype for obtaining one video frame.
Definition connectors.h:112
gavl_source_status_t(* gavl_audio_source_func_t)(void *priv, gavl_audio_frame_t **frame)
Prototype for obtaining one audio frame.
Definition connectors.h:101
GAVL_PUBLIC void gavl_packet_source_destroy(gavl_packet_source_t *s)
Destroy a packet source.
GAVL_PUBLIC gavl_packet_source_t * gavl_packet_source_create_video(gavl_packet_source_func_t func, void *priv, int src_flags, const gavl_compression_info_t *ci, const gavl_video_format_t *vfmt)
Create a video packet source.
struct gavl_packet_source_s gavl_packet_source_t
Forward declaration of the packet source.
Definition gavl.h:64
GAVL_PUBLIC gavl_packet_source_t * gavl_packet_source_create_audio(gavl_packet_source_func_t func, void *priv, int src_flags, const gavl_compression_info_t *ci, const gavl_audio_format_t *afmt)
Create an audio packet source.
GAVL_PUBLIC const gavl_video_format_t * gavl_video_source_get_dst_format(gavl_video_source_t *s)
Get the output format.
GAVL_PUBLIC int gavl_packet_source_get_timescale(gavl_packet_source_t *s)
Get the time scale.
GAVL_PUBLIC void gavl_audio_source_set_lock_funcs(gavl_audio_source_t *src, gavl_connector_lock_func_t lock_func, gavl_connector_lock_func_t unlock_func, void *priv)
Set lock functions.
GAVL_PUBLIC const gavl_video_format_t * gavl_packet_source_get_video_format(gavl_packet_source_t *s)
Get the video format.
GAVL_PUBLIC void gavl_audio_source_destroy(gavl_audio_source_t *s)
Destroy an audio source.
GAVL_PUBLIC void gavl_packet_source_set_lock_funcs(gavl_packet_source_t *src, gavl_connector_lock_func_t lock_func, gavl_connector_lock_func_t unlock_func, void *priv)
Set lock functions.
GAVL_PUBLIC void gavl_audio_source_skip_src(gavl_audio_source_t *s, int num_samples)
Skip audio samples at the input.
GAVL_PUBLIC void gavl_video_source_reset(gavl_video_source_t *s)
Reset a video source.
GAVL_PUBLIC void gavl_video_source_destroy(gavl_video_source_t *s)
Destroy a video source.
GAVL_PUBLIC const gavl_audio_format_t * gavl_audio_source_get_src_format(gavl_audio_source_t *s)
Get the native format.
@ GAVL_SOURCE_OK
Frame available.
Definition connectors.h:88
@ GAVL_SOURCE_EOF
End of file, no more frames available.
Definition connectors.h:87
@ GAVL_SOURCE_AGAIN
No frame available right now, might try later.
Definition connectors.h:89
struct gavl_video_format_s gavl_video_format_t
Video format.
Definition gavl.h:153
struct gavl_video_frame_s gavl_video_frame_t
struct gavl_video_options_s gavl_video_options_t
Definition gavl.h:2988
Audio Format.
Definition gavl.h:312
Generic container for audio samples.
Definition gavl.h:595
Compression format.
Definition compression.h:120
Packet structure.
Definition compression.h:340