2 #include <VP_Os/vp_os_malloc.h>
3 #include <VP_Os/vp_os_print.h>
5 #include <ardrone_tool/Video/vlib_stage_decode.h>
7 const vp_api_stage_funcs_t vlib_decoding_funcs = {
8 (vp_api_stage_handle_msg_t) NULL,
9 (vp_api_stage_open_t) vlib_stage_decoding_open,
10 (vp_api_stage_transform_t) vlib_stage_decoding_transform,
11 (vp_api_stage_close_t) vlib_stage_decoding_close
14 C_RESULT vlib_stage_decoding_open(vlib_stage_decoding_config_t *cfg)
16 video_codec_open( &cfg->controller, UVLC_CODEC );
17 video_controller_set_motion_estimation( &cfg->controller, FALSE );
18 video_controller_set_format( &cfg->controller, ACQ_WIDTH, ACQ_HEIGHT );
20 vp_os_free( cfg->controller.in_stream.bytes );
25 C_RESULT vlib_stage_decoding_transform(vlib_stage_decoding_config_t *cfg, vp_api_io_data_t *in, vp_api_io_data_t *out)
29 vp_os_mutex_lock( &out->lock );
31 if(out->status == VP_API_STATUS_INIT)
34 out->buffers = (int8_t**)&cfg->picture;
38 out->status = VP_API_STATUS_PROCESSING;
41 if( in->status == VP_API_STATUS_ENDED ) {
42 out->status = in->status;
45 if(out->status == VP_API_STATUS_PROCESSING )
47 // If out->size == 1 it means picture is ready
50 cfg->controller.in_stream.bytes = (uint32_t*)in->buffers[0];
51 cfg->controller.in_stream.used = in->size;
52 cfg->controller.in_stream.size = in->size;
53 cfg->controller.in_stream.index = 0;
54 cfg->controller.in_stream.length = 32;
55 cfg->controller.in_stream.code = 0;
58 video_decode_blockline( &cfg->controller, cfg->picture, &got_image );
67 for(i = 0; i < cfg->picture->width * cfg->picture->height / 4; i++ )
69 cfg->picture->cr_buf[i] = 0x80;
70 cfg->picture->cb_buf[i] = 0x80;
76 vp_os_mutex_unlock( &out->lock );
81 C_RESULT vlib_stage_decoding_close(vlib_stage_decoding_config_t *cfg)
83 return video_codec_close( &cfg->controller );