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_Stages%2Fvp_stages_io_buffer.c;fp=mardrone%2FARDrone_SDK_Version_1_8_20110726%2FARDroneLib%2FVP_SDK%2FVP_Stages%2Fvp_stages_io_buffer.c;h=6d292f401e4e73743de67b29cc9c067e000fc949;hp=0000000000000000000000000000000000000000;hb=9ec9bc13b75d30bc45535c54a652934debfcea92;hpb=ae0a3c2dc0898400aca0dd6b439c5db8044db7b2 diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VP_SDK/VP_Stages/vp_stages_io_buffer.c b/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VP_SDK/VP_Stages/vp_stages_io_buffer.c new file mode 100644 index 0000000..6d292f4 --- /dev/null +++ b/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VP_SDK/VP_Stages/vp_stages_io_buffer.c @@ -0,0 +1,116 @@ +/** + * \brief VP Stages. Buffer stage declaration + * \author Sylvain Gaeremynck + * \author Aurelien Morelle + * \author Thomas Landais + * \version 2.0 + * \date first release 16/03/2007 + * \date modification 19/03/2007 + */ + +/////////////////////////////////////////////// +// INCLUDES + + +#include +#include +#include +#include +#include + + +C_RESULT +vp_stages_input_buffer_stage_open(vp_stages_input_buffer_config_t *cfg) +{ + VP_OS_ASSERT(cfg->buffer); + return (VP_SUCCESS); +} + + +C_RESULT +vp_stages_input_buffer_stage_transform(vp_stages_input_buffer_config_t *cfg, vp_api_io_data_t *in, vp_api_io_data_t *out) +{ + vp_os_mutex_lock(&out->lock); + + if(out->status == VP_API_STATUS_INIT) + { + out->numBuffers = 1; + out->size = 0; + out->buffers = &cfg->buffer; + out->indexBuffer = 0; + cfg->remaining_size = cfg->total_size; + } + + if(cfg->remaining_size != 0) + { + out->status = VP_API_STATUS_PROCESSING; + out->buffers[out->indexBuffer] += out->size; + out->size = (cfg->remaining_size < cfg->send_size ? cfg->remaining_size : cfg->send_size); + cfg->remaining_size -= out->size; + } + else + { + out->status = VP_API_STATUS_ENDED; + } + + vp_os_mutex_unlock(&out->lock); + + DEBUG_PRINT_SDK("vp_stages_input_buffer : size=%d buffer=%08X remaining=%d\n", (int)out->size, (int)out->buffers[out->indexBuffer], (int)cfg->remaining_size); + + return (VP_SUCCESS); +} + + +C_RESULT +vp_stages_input_buffer_stage_close(vp_stages_input_buffer_config_t *cfg) +{ + return (VP_SUCCESS); +} + + +C_RESULT +vp_stages_output_buffer_stage_open(vp_stages_output_buffer_config_t *cfg) +{ + return (VP_SUCCESS); +} + + +C_RESULT +vp_stages_output_buffer_stage_transform(vp_stages_output_buffer_config_t *cfg, vp_api_io_data_t *in, vp_api_io_data_t *out) +{ + vp_os_mutex_lock(&out->lock); + + if(out->status == VP_API_STATUS_INIT) + { + out->numBuffers = 1; + out->size = in->size; + out->buffers = (int8_t **)vp_os_malloc(sizeof(int8_t *)+out->size*sizeof(int8_t)); + out->buffers[0] = (int8_t *)(out->buffers+1); + out->indexBuffer = 0; + // out->lineSize not used + out->status = VP_API_STATUS_PROCESSING; + } + + // \todo test + if(in->status == VP_API_STATUS_PROCESSING) + { + PRINT("One frame.\n"); + vp_os_memcpy(out->buffers[0], &in->buffers[in->indexBuffer][0], in->size*sizeof(int8_t)); + } + + if(in->status == VP_API_STATUS_ENDED) + vp_os_free(out->buffers); + + out->status = in->status; + + vp_os_mutex_unlock(&out->lock); + + return (VP_SUCCESS); +} + + +C_RESULT +vp_stages_output_buffer_stage_close(vp_stages_output_buffer_config_t *cfg) +{ + return (VP_SUCCESS); +}