From 5c271cdae60c9711fb100a544d2b014a777c3408 Mon Sep 17 00:00:00 2001 From: Nicolas Dato Date: Sat, 19 Jul 2025 22:53:49 -0300 Subject: adding a simple example --- example/Makefile.am | 13 ++++++++++-- example/simple.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 example/simple.c (limited to 'example') diff --git a/example/Makefile.am b/example/Makefile.am index a30c12e..fc520f7 100644 --- a/example/Makefile.am +++ b/example/Makefile.am @@ -1,12 +1,21 @@ if EXAMPLES -noinst_PROGRAMS = decode_resize_encode +noinst_PROGRAMS = simple +simple_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/../src +simple_LDADD = ../src/libtuberia.a +simple_LDFLAGS = -lpthread +simple_SOURCES = simple.c + +if HAS_FFMPEG +noinst_PROGRAMS += decode_resize_encode decode_resize_encode_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/../src decode_resize_encode_LDADD = ../src/libtuberia.a decode_resize_encode_LDFLAGS = -lpthread -lavcodec -lavformat -lavutil -lswscale decode_resize_encode_SOURCES = decode_resize_encode.c endif +endif + exampledir = $(docdir)/example -example_DATA = decode_resize_encode.c +example_DATA = simple.c decode_resize_encode.c diff --git a/example/simple.c b/example/simple.c new file mode 100644 index 0000000..3d4df1a --- /dev/null +++ b/example/simple.c @@ -0,0 +1,57 @@ +/* + * Compile with + * gcc -o simple simple.c -ltuberia -lpthread + * or + * gcc -o simple simple.c `pkg-config --cflags --libs --static tuberia` + */ + +#include +#include +#include + +void *stage_one(void *element, void *opaque) +{ + (void)opaque; + int *i = element; + *i += 5; + return i; +} + +void *stage_two(void *element, void *opaque) +{ + (void)opaque; + int *i = element; + *i *= 10; + return i; +} + +void sink(void *element, void *opaque) +{ + (void)opaque; + int *i = element; + printf("sink: %d\n", *i); + free(i); +} + +int main(void) +{ + tube *ctx; + tube_source *source; + int *element, n; + + source = tube_source_alloc(2, NULL, NULL, free); + tube_stage_append(source, tube_stage_alloc(2, stage_one, NULL, free)); + tube_stage_append(source, tube_stage_alloc(2, stage_two, NULL, free)); + ctx = tube_alloc(source, sink, NULL); + tube_source_and_stages_free(&source); + tube_start(ctx); + while (scanf("%d", &n) == 1) { + element = malloc(sizeof(*element)); + *element = n; + tube_inject(ctx, 1000, element); + } + tube_free(&ctx); + + return 0; +} + -- cgit v1.2.3