# libtuberia libtuberia: a library to implement a pipeline A pipeline would be: *[Source] -> [queue_1] -> [Stage_1] -> [Queue_2] -> [Stage_2] -> [...] -> [Sink]* Each source, stage, and sink runs in a thread, reads from its imput queue and write to the output queue You can ommit the source and sink, and inject or retrive elements from the pipeline ## Building, Compiling, Installing If you don't have a ./configure file, run: - `autoreconf -fi` When you have the ./configure file, run: - `./configure` - `make` - `make install` You can see some configuration options with: - `./configure --help` ## Quick Guide See the `example/decode_resize_encode.c` and the function `do_tuberia()` Create a source with `tube_source_alloc()`. If you set fetch to something, there will be a thread running fetch to inject elements into the pipeline. If you set fetch to NULL, you have to inject the elements with `tube_inject()`. Create as many stages as you need with `tube_stage_alloc()`, and append them to the source with `tube_stage_append()`. Build the pipeline with `tube_alloc()`. If you set sink to something, there will be a thread running sink to get the elements from the pipeline. If you set sink to NULL, you have to retrieve the elements with `tube_retrieve()`. The `tube_alloc()` function copies the source and all the appended stages, so you can free the source and stages with `tube_source_and_stages_free()`. Or, you can reutilize the same `tube_source` to build more pipelines. Start the pipeline with `tube_start()`. Free the pipeline with `tube_free()`. ### Quick example ```C ```