2 * \brief VP Stages. File 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 ///////////////////////////////////////////////
14 #include <VP_Stages/vp_stages_io_file.h>
15 #include <VP_Api/vp_api_error.h>
16 #include <VP_Os/vp_os_assert.h>
17 #include <VP_Os/vp_os_print.h>
18 #include <VP_Os/vp_os_delay.h>
19 #include <VP_Os/vp_os_malloc.h>
22 vp_stages_input_file_stage_open(vp_stages_input_file_config_t *cfg)
24 cfg->f = fopen(cfg->name, "rb");
28 PRINT("Missing input file\n");
35 vp_stages_input_file_stage_transform(vp_stages_input_file_config_t *cfg, vp_api_io_data_t *in, vp_api_io_data_t *out)
37 vp_os_mutex_lock(&out->lock);
40 uint32_t y_size, c_size;
41 if( out->status == VP_API_STATUS_INIT )
44 out->size = cfg->buffer_size;
45 out->buffers = (int8_t **) vp_os_malloc (sizeof(int8_t *)+out->size*sizeof(int8_t));
46 out->buffers[0] = (int8_t *)(out->buffers+1);
48 // out->lineSize not used
49 out->status = VP_API_STATUS_PROCESSING;
52 // work and update status
53 if(out->size < (int32_t)cfg->buffer_size || feof(cfg->f))
61 //vp_os_free(out->buffers);
62 out->status = VP_API_STATUS_ENDED;
67 if(out->status == VP_API_STATUS_PROCESSING)
68 out->size = fread(out->buffers[0], sizeof(int8_t), cfg->buffer_size*sizeof(int8_t), cfg->f);
75 out->size = fread(out->buffers[0], sizeof(int8_t), cfg->buffer_size*sizeof(int8_t), cfg->f);
79 vp_os_free(out->buffers);
80 out->status = VP_API_STATUS_ENDED;
87 out->status = VP_API_STATUS_ERROR;
91 vp_os_mutex_unlock(&out->lock);
97 vp_stages_input_file_stage_close(vp_stages_input_file_config_t *cfg)
104 vp_stages_output_file_stage_open(vp_stages_output_file_config_t *cfg)
106 VP_OS_ASSERT(cfg->flush_every_nb >= 0);
107 cfg->f = fopen(cfg->name, "wb");
114 vp_stages_output_file_stage_transform(vp_stages_output_file_config_t *cfg, vp_api_io_data_t *in, vp_api_io_data_t *out)
116 static int total_size = 0;
118 vp_os_mutex_lock(&out->lock);
120 if(in->status == VP_API_STATUS_PROCESSING && in->size > 0)
121 fwrite(in->buffers[in->indexBuffer], sizeof(int8_t), in->size*sizeof(int8_t), cfg->f);
124 total_size += in->size;
125 out->status = in->status;
126 vp_os_mutex_unlock(&out->lock);
132 vp_stages_output_file_stage_close(vp_stages_output_file_config_t *cfg)