X-Git-Url: http://git.maemo.org/git/?p=mardrone;a=blobdiff_plain;f=mardrone%2FARDrone_SDK_Version_1_8_20110726%2FARDroneLib%2FVP_SDK%2FExamples%2Felinux%2Fv4l_stage.c;fp=mardrone%2FARDrone_SDK_Version_1_8_20110726%2FARDroneLib%2FVP_SDK%2FExamples%2Felinux%2Fv4l_stage.c;h=18381fcf3c53b74dee06222f473e89592212d1c3;hp=0000000000000000000000000000000000000000;hb=9ec9bc13b75d30bc45535c54a652934debfcea92;hpb=ae0a3c2dc0898400aca0dd6b439c5db8044db7b2 diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VP_SDK/Examples/elinux/v4l_stage.c b/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VP_SDK/Examples/elinux/v4l_stage.c new file mode 100644 index 0000000..18381fc --- /dev/null +++ b/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VP_SDK/Examples/elinux/v4l_stage.c @@ -0,0 +1,256 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "Video/ov7720.h" +#include "Video/cresyn.h" + +#include +#include + + +//#define ACQ_WIDTH 176 +//#define ACQ_HEIGHT 144 + +#define ACQ_WIDTH 640 +#define ACQ_HEIGHT 480 + +#define CRESYN_CAM +//#define OV_CAM +//#define BLOCK_MODE +//#define BUFFER +//#define ENCODE +//#define FILE_OUTPUT +//#define ETHERNET_OUTPUT + + + +#define NB_STAGES_MAX 10 + + +static vp_stages_input_camif_config_t ivc; +static vlib_stage_encoding_config_t vec; +static vp_stages_output_file_config_t ofc; +static vp_stages_output_com_config_t occ; +static blockline_to_buffer_config_t bbc; + +static PIPELINE_HANDLE pipeline_handle; + + +C_RESULT +buffer_to_picture_close(int *cfg) +{ + return (SUCCESS); +} + +const vp_api_stage_funcs_t V4L2_funcs = +{ + (vp_api_stage_handle_msg_t)vp_stages_input_camif_stage_handle_msg, + (vp_api_stage_open_t)vp_stages_input_camif_stage_open, + (vp_api_stage_transform_t)vp_stages_input_camif_stage_transform, + (vp_api_stage_close_t)vp_stages_input_camif_stage_close +}; + +//// COM +vp_com_t* wired_com(void) +{ + static vp_com_t com = { + VP_COM_WIRED, + FALSE, + 0, + { { 0 } }, + NULL, + NULL, + 0, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + }; + + return &com; +} + +vp_com_config_t* wired_config(void) +{ + static vp_com_wired_config_t config = { + "eth0", + "172.20.2.190", + "255.255.255.0", + "172.20.2.255" + }; + return (vp_com_config_t*) &config; +} + +vp_com_connection_t* wired_connection(void) +{ + static vp_com_wired_connection_t connection = { + 0 + }; + + return (vp_com_connection_t*) (void*) &connection; +} + + + + +int main(int argc, char **argv) +{ + vp_api_picture_t video_picture; + vp_api_picture_t buffer_blockline; +#ifdef BLOCK_MODE + vp_api_picture_t video_blockline; +#endif + vp_api_io_pipeline_t pipeline; + vp_api_io_data_t out; + vp_api_io_stage_t stages[NB_STAGES_MAX]; + + vp_os_memset(&ivc,0,sizeof(ivc)); + vp_os_memset(&ofc,0,sizeof(ofc)); + vp_os_memset(&occ,0,sizeof(occ)); + + + // CAMIF config + ivc.camera = "/dev/video1"; + ivc.i2c = "/dev/i2c-0"; +#ifdef OV_CAM + ivc.camera_configure = &camera_configure_ov77xx; +#else +#ifdef CRESYN_CAM + ivc.camera_configure = &camera_configure_cresyn; +#else +#error no cam selected +#endif +#endif + + ivc.resolution = VGA; + ivc.nb_buffers = 8; + ivc.format = V4L2_PIX_FMT_YUV420; + ivc.y_pad = 0; + ivc.c_pad = 0; + ivc.offset_delta = 0; +#ifdef BLOCK_MODE + ivc.vp_api_blockline = &video_blockline; +#endif + ivc.vp_api_picture = &video_picture; + ivc.use_chrominances = 1; + ivc.framerate = 15; + + // BUFFER +#ifdef BLOCK_MODE + bbc.picture = &video_blockline; +#endif + + // ENCODER + vec.width = 320; + vec.height = 240; +#ifdef BLOCK_MODE + vec.block_mode_enable = TRUE; +#else + vec.block_mode_enable = FALSE; +#endif + vec.picture = &video_picture; + + // OUTPUT FILE config + ofc.name = "/tmp/out.yuv"; + + // COM CONFIG + occ.com = wired_com(); + occ.config = wired_config(); + occ.connection = wired_connection(); + occ.socket.type = VP_COM_SERVER; + occ.socket.protocol = VP_COM_TCP; + occ.socket.port = 5555; + occ.buffer_size = 640*480*3/2; + + // build pipeline + pipeline.nb_stages = 0; + + stages[pipeline.nb_stages].type = VP_API_INPUT_CAMIF; + stages[pipeline.nb_stages].cfg = (void *)&ivc; + stages[pipeline.nb_stages++].funcs = V4L2_funcs; + +#ifdef BLOCK_MODE +#ifdef BUFFER + stages[pipeline.nb_stages].type = VP_API_INPUT_CAMIF; + stages[pipeline.nb_stages].cfg = (void *)&bbc; + stages[pipeline.nb_stages++].funcs = blockline_to_buffer_funcs; +#endif +#endif + +#ifdef ENCODE + stages[pipeline.nb_stages].type = VP_API_FILTER_ENCODER; + stages[pipeline.nb_stages].cfg = (void*)&vec; + stages[pipeline.nb_stages++].funcs = vlib_encoding_funcs; +#endif + +#ifdef FILE_OUTPUT + stages[pipeline.nb_stages].type = VP_API_OUTPUT_FILE; + stages[pipeline.nb_stages].cfg = (void *)&ofc; + stages[pipeline.nb_stages++].funcs = vp_stages_output_file_funcs; +#endif + +#ifdef ETHERNET_OUTPUT + stages[pipeline.nb_stages].type = VP_API_OUTPUT_SOCKET; + stages[pipeline.nb_stages].cfg = (void *)&occ; + stages[pipeline.nb_stages++].funcs = vp_stages_output_com_funcs; +#endif + + pipeline.stages = &stages[0]; + + // launch pipelines + vp_api_open(&pipeline, &pipeline_handle); + + out.status = VP_API_STATUS_PROCESSING; + + ///////////////////////////////////////////////////////////////////////////////////////// + + uint16_t i = 0; + + struct timeval time1,time2; + + printf("Pipeline launched....\n"); + gettimeofday(&time1,NULL); + while(SUCCEED(vp_api_run(&pipeline, &out)) && (out.status == VP_API_STATUS_PROCESSING)) + { + i++; + //printf("image %d \n",i); + if (i>50) + break; + //vp_os_delay(20); + } + ///////////////////////////////////////////////////////////////////////////////////////// + + gettimeofday(&time2,NULL); + int seconde = time2.tv_sec-time1.tv_sec; + int ms = time2.tv_usec-time1.tv_usec; + if (ms<0) + { + seconde--; + ms += 1000000; + } + ms = ms/1000; + float fps = ((float)i*1000)/(float)(seconde*1000+ms); + printf("temps ecoule : %d.%d / nombre image : %d average fps : %f\n",seconde,ms,i,fps); + vp_api_close(&pipeline, &pipeline_handle); + + return EXIT_SUCCESS; +} +