2 * \brief VP Api. Composite Stage Declaration
3 * \author Sylvain Gaeremynck <sylvain.gaeremynck@parrot.fr>
4 * \author Aurelien Morelle <aurelien.morelle@parrot.fr>
5 * \author Thomas Landais <thomas.landais@parrot.fr>
7 * \date first release 21/03/2007
10 #include <VP_Api/vp_api_io_multi_stage.h>
11 #include <VP_Api/vp_api_error.h>
12 #include <VP_Os/vp_os_assert.h>
15 vp_api_multi_stage_open(vp_api_io_multi_stage_config_t *cfg)
19 for(i = 0; i < cfg->nb_stages; i++)
21 VP_OS_ASSERT(cfg->stages[i].funcs.open);
22 VP_OS_ASSERT(cfg->stages[i].funcs.transform);
23 VP_OS_ASSERT(cfg->stages[i].funcs.close);
25 if(VP_FAILED(cfg->stages[i].funcs.open(cfg->stages[i].cfg)))
33 vp_api_multi_stage_transform(vp_api_io_multi_stage_config_t *cfg, vp_api_io_data_t *in, vp_api_io_data_t *out)
36 C_RESULT res = (VP_FAILURE);
38 // if a stage is selected then execute only this one
39 if(cfg->activ_stage >= 0 && cfg->activ_stage < (int32_t)cfg->nb_stages)
40 res = cfg->stages[cfg->activ_stage].funcs.transform(cfg->stages[cfg->activ_stage].cfg, in, out);
42 // Otherwise if activ_stage == -1 then execute all stages
43 if(cfg->activ_stage == VP_API_EXECUTE_ALL_STAGES)
46 for(i = 0; i < cfg->nb_stages && res == VP_SUCCESS; i++)
48 res = cfg->stages[i].funcs.transform(cfg->stages[i].cfg, in, out);
52 if(cfg->activ_stage == VP_API_EXECUTE_NO_STAGE)
59 vp_api_multi_stage_close(vp_api_io_multi_stage_config_t *cfg)
63 for(i = 0; i < cfg->nb_stages; i++)
65 if(VP_FAILED(cfg->stages[i].funcs.close(cfg->stages[i].cfg)))