X-Git-Url: http://git.maemo.org/git/?p=mardrone;a=blobdiff_plain;f=mardrone%2FARDrone_SDK_Version_1_8_20110726%2FARDroneLib%2FVP_SDK%2FVP_Api%2Fvp_api_io_multi_stage.c;fp=mardrone%2FARDrone_SDK_Version_1_8_20110726%2FARDroneLib%2FVP_SDK%2FVP_Api%2Fvp_api_io_multi_stage.c;h=fb0b73633be214f66552b102b6572de1c24b1a89;hp=0000000000000000000000000000000000000000;hb=9ec9bc13b75d30bc45535c54a652934debfcea92;hpb=ae0a3c2dc0898400aca0dd6b439c5db8044db7b2 diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VP_SDK/VP_Api/vp_api_io_multi_stage.c b/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VP_SDK/VP_Api/vp_api_io_multi_stage.c new file mode 100644 index 0000000..fb0b736 --- /dev/null +++ b/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VP_SDK/VP_Api/vp_api_io_multi_stage.c @@ -0,0 +1,70 @@ +/** + * \brief VP Api. Composite Stage Declaration + * \author Sylvain Gaeremynck + * \author Aurelien Morelle + * \author Thomas Landais + * \version 1.0 + * \date first release 21/03/2007 + */ + +#include +#include +#include + +C_RESULT +vp_api_multi_stage_open(vp_api_io_multi_stage_config_t *cfg) +{ + uint32_t i; + + for(i = 0; i < cfg->nb_stages; i++) + { + VP_OS_ASSERT(cfg->stages[i].funcs.open); + VP_OS_ASSERT(cfg->stages[i].funcs.transform); + VP_OS_ASSERT(cfg->stages[i].funcs.close); + + if(VP_FAILED(cfg->stages[i].funcs.open(cfg->stages[i].cfg))) + return (VP_FAILURE); + } + + return (VP_SUCCESS); +} + +C_RESULT +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) +{ + uint32_t i; + C_RESULT res = (VP_FAILURE); + + // if a stage is selected then execute only this one + if(cfg->activ_stage >= 0 && cfg->activ_stage < (int32_t)cfg->nb_stages) + res = cfg->stages[cfg->activ_stage].funcs.transform(cfg->stages[cfg->activ_stage].cfg, in, out); + + // Otherwise if activ_stage == -1 then execute all stages + if(cfg->activ_stage == VP_API_EXECUTE_ALL_STAGES) + { + res = VP_SUCCESS; + for(i = 0; i < cfg->nb_stages && res == VP_SUCCESS; i++) + { + res = cfg->stages[i].funcs.transform(cfg->stages[i].cfg, in, out); + } + } + + if(cfg->activ_stage == VP_API_EXECUTE_NO_STAGE) + res = VP_SUCCESS; + + return res; +} + +C_RESULT +vp_api_multi_stage_close(vp_api_io_multi_stage_config_t *cfg) +{ + uint32_t i; + + for(i = 0; i < cfg->nb_stages; i++) + { + if(VP_FAILED(cfg->stages[i].funcs.close(cfg->stages[i].cfg))) + return (VP_FAILURE); + } + + return (VP_SUCCESS); +}