4 #include <VP_Api/vp_api.h>
5 #include <VP_Api/vp_api_error.h>
6 #include <VP_Stages/vp_stages_io_file.h>
7 #include <VP_Os/vp_os_print.h>
13 static PIPELINE_HANDLE pipeline_handle;
17 my_transform_open(void *cfg)
23 my_transform_transform(void *cfg, vp_api_io_data_t *in, vp_api_io_data_t *out)
27 vp_os_mutex_lock(&out->lock);
29 if(out->status == VP_API_STATUS_INIT)
32 out->size = in->size; // to be cleaned ...
33 out->buffers = (int8_t **)malloc(sizeof(int8_t *)+out->size*sizeof(int8_t));
34 out->buffers[0] = (int8_t *)(out->buffers+1);
36 // out->lineSize not used
37 out->status = VP_API_STATUS_PROCESSING;
40 if(in->status == VP_API_STATUS_ENDED)
44 else if(in->status == VP_API_STATUS_PROCESSING)
47 for(i = 0 ; i < in->size ; i++)
49 out->buffers[0][i] = toupper(in->buffers[in->indexBuffer][i]);
53 out->status = in->status;
55 vp_os_mutex_unlock(&out->lock);
61 my_transform_close(void *cfg)
67 const vp_api_stage_funcs_t my_transform_funcs =
70 (vp_api_stage_open_t)my_transform_open,
71 (vp_api_stage_transform_t)my_transform_transform,
72 (vp_api_stage_close_t)my_transform_close
77 main(int argc, char **argv)
79 vp_api_io_pipeline_t pipeline;
81 vp_api_io_stage_t stages[NB_STAGES];
83 vp_stages_input_file_config_t ifc;
84 vp_stages_output_file_config_t ofc;
87 ifc.buffer_size = 512;
89 ofc.name = "toto.out";
91 stages[0].type = VP_API_INPUT_FILE;
92 stages[0].cfg = (void *)&ifc;
93 stages[0].funcs = vp_stages_input_file_funcs;
95 stages[1].type = VP_API_FILTER_ENCODER;
97 stages[1].funcs = my_transform_funcs;
99 stages[2].type = VP_API_OUTPUT_FILE;
100 stages[2].cfg = (void *)&ofc;
101 stages[2].funcs = vp_stages_output_file_funcs;
103 pipeline.nb_stages = NB_STAGES;
104 pipeline.stages = &stages[0];
106 vp_api_open(&pipeline, &pipeline_handle);
108 out.status = VP_API_STATUS_PROCESSING;
109 while(SUCCEED(vp_api_run(&pipeline, &out)) && (out.status == VP_API_STATUS_PROCESSING || out.status == VP_API_STATUS_STILL_RUNNING));
113 vp_api_close(&pipeline, &pipeline_handle);