#ifndef __LIBPIPELINE_H__ #define __LIBPIPELINE_H__ typedef struct pl_pipleline pl_pipeline; typedef void *(*pl_fetch)(void *opaque); typedef void *(*pl_process)(void *element, void *opaque); typedef void (*pl_ready)(void *element, void *opaque); typedef void (*pl_sink)(void *element, void *opaque); struct pl_stage { struct pl_sage *next; int nqueue; pl_process *process; void *opaque; }; struct pl_source { struct pl_sage *next; int nqueue; pl_fetch *fetch; void *opaque; }; struct pl_source *pl_source_alloc(int nqueue, pl_fetch *fetch); struct pl_stage *pl_stage_alloc(int nqueue, pl_process *process); void pl_stage_free(struct pl_stage **stage); void pl_source_and_stages_free(struct pl_source **stage); int pl_stage_append(struct pl_source *source, struct pl_stage *stage); pl_pipeline *pl_create(struct pl_source *source, pl_sink *sink, void *opaque); int pl_start(pl_pipeline *pipeline); int pl_stop(pl_pipeline *pipeline); void pl_free(pl_pipeline **pipeline); int pl_inject(pl_pipeline *pipeline, void *element); void *pl_retrive(pl_pipeline *pipeline, int timeout_ms); #endif //__LIBPIPELINE_H__