2 * \brief VP Stages. Buffer 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 16/03/2007
8 * \date modification 19/03/2007
11 ///////////////////////////////////////////////
15 #include <VP_Stages/vp_stages_io_buffer.h>
16 #include <VP_Api/vp_api_error.h>
17 #include <VP_Os/vp_os_print.h>
18 #include <VP_Os/vp_os_malloc.h>
19 #include <VP_Os/vp_os_assert.h>
23 vp_stages_input_buffer_stage_open(vp_stages_input_buffer_config_t *cfg)
25 VP_OS_ASSERT(cfg->buffer);
31 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)
33 vp_os_mutex_lock(&out->lock);
35 if(out->status == VP_API_STATUS_INIT)
39 out->buffers = &cfg->buffer;
41 cfg->remaining_size = cfg->total_size;
44 if(cfg->remaining_size != 0)
46 out->status = VP_API_STATUS_PROCESSING;
47 out->buffers[out->indexBuffer] += out->size;
48 out->size = (cfg->remaining_size < cfg->send_size ? cfg->remaining_size : cfg->send_size);
49 cfg->remaining_size -= out->size;
53 out->status = VP_API_STATUS_ENDED;
56 vp_os_mutex_unlock(&out->lock);
58 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);
65 vp_stages_input_buffer_stage_close(vp_stages_input_buffer_config_t *cfg)
72 vp_stages_output_buffer_stage_open(vp_stages_output_buffer_config_t *cfg)
79 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)
81 vp_os_mutex_lock(&out->lock);
83 if(out->status == VP_API_STATUS_INIT)
87 out->buffers = (int8_t **)vp_os_malloc(sizeof(int8_t *)+out->size*sizeof(int8_t));
88 out->buffers[0] = (int8_t *)(out->buffers+1);
90 // out->lineSize not used
91 out->status = VP_API_STATUS_PROCESSING;
95 if(in->status == VP_API_STATUS_PROCESSING)
97 PRINT("One frame.\n");
98 vp_os_memcpy(out->buffers[0], &in->buffers[in->indexBuffer][0], in->size*sizeof(int8_t));
101 if(in->status == VP_API_STATUS_ENDED)
102 vp_os_free(out->buffers);
104 out->status = in->status;
106 vp_os_mutex_unlock(&out->lock);
113 vp_stages_output_buffer_stage_close(vp_stages_output_buffer_config_t *cfg)