Пример #1
0
void hoa_meter_paint(t_hoa_meter *x, t_object *view)
{
	t_rect rect;
	ebox_get_rect_for_view((t_ebox *)x, &rect);
	
    x->f_center = rect.width * .5;
	x->f_radius = x->f_center * 0.95;
	x->f_radius_center = x->f_radius / 5.;
	
	draw_background(x, view, &rect);
    draw_leds(x, view, &rect);
    draw_vectors(x, view, &rect);
}
Пример #2
0
void draw_line(int x, int y, int cantidad, int vectores [][2])
{
    // Clear the screen before drawing:
    glClear( GL_COLOR_BUFFER_BIT );
    
    // draw the line
    glBegin(GL_LINES);
        
	draw_axis();	
        draw_vectors(cantidad, vectores);
	
	//dibuja lineas
	glVertex3f( SCREEN_WIDTH/2, SCREEN_HEIGHT/2, 0 );
     	glVertex3f( x, y, 0 );
        dibuja_flecha(x,y);

    glEnd();
}
void meter_paint(t_meter *x, t_object *view)
{
    t_rect rect;
    jbox_get_rect_for_view((t_object *)x, view, &rect);
    
    x->f_center = rect.width * 0.5;
    x->f_rayonMax = x->f_center;
    x->f_fontsize = (x->f_rayonMax / 14.) - 1.;
    x->f_rayonCircle = x->f_rayonMax / 32;
    x->f_rayonExt = x->f_rayonMax - 2.5;
    x->f_rayonInt = x->f_rayonExt * (1 - x->f_metersize);
    
    draw_skeleton(x, view, &rect);
    draw_leds(x, view, &rect);
    if (x->f_drawmborder == 2 || x->f_drawmborder == 3)
        draw_separator(x, view, &rect);
    if (x->f_drawvector != VECTOR_NONE)
        draw_vectors(x, view, &rect);
}
Пример #4
0
int InterpolateVideo::process_buffer(VFrame *frame,
	int64_t start_position,
	double frame_rate)
{
	if(get_direction() == PLAY_REVERSE) start_position--;
	load_configuration();

	if(!frames[0])
	{
		for(int i = 0; i < 2; i++)
		{
			frames[i] = new VFrame(0,
				-1,
				frame->get_w(),
				frame->get_h(),
				frame->get_color_model(),
				-1);
		}
	}
//printf("InterpolateVideo::process_buffer 1 %lld %lld\n", range_start, range_end);

// Fraction of lowest frame in output
	int64_t requested_range_start = (int64_t)((double)range_start * 
		frame_rate / active_input_rate);
	int64_t requested_range_end = (int64_t)((double)range_end * 
		frame_rate / active_input_rate);
	if(requested_range_start == requested_range_end)
	{
		read_frame(frame,
			0,
			range_start,
			active_input_rate);
        }
        else
        {

// Fill border frames
		fill_border(frame_rate, start_position);

		float highest_fraction = (float)(start_position - requested_range_start) /
			(requested_range_end - requested_range_start);

// Fraction of highest frame in output
		lowest_fraction = 1.0 - highest_fraction;

		CLAMP(highest_fraction, 0, 1);
		CLAMP(lowest_fraction, 0, 1);

// printf("InterpolateVideo::process_buffer %lld %lld %lld %f %f %lld %lld %f %f\n",
// range_start,
// range_end,
// requested_range_start,
// requested_range_end,
// start_position,
// config.input_rate,
// frame_rate,
// lowest_fraction,
// highest_fraction);

		if(start_position == (int64_t)(range_start * frame_rate / active_input_rate))
		{
//printf("InterpolateVideo::process_buffer %d\n", __LINE__);
			frame->copy_from(frames[0]);
			
			if(config.optic_flow)
			{
				draw_vectors(0);
			}
		}
		else
		if(config.optic_flow)
		{
//printf("InterpolateVideo::process_buffer %d\n", __LINE__);
			optic_flow();
		}
		else
		{
			average();
		}
	}
	return 0;
}
Пример #5
0
void InterpolateVideo::optic_flow()
{

	create_macroblocks();
	int need_motion = 0;

// New engine
	if(!optic_flow_engine)
	{
		optic_flow_engine = new OpticFlow(this,
			PluginClient::get_project_smp() + 1, 
			PluginClient::get_project_smp() + 1);
		need_motion = 1;
	}
	else
// Reuse old vectors
	if(motion_number[0] == frame_number[0] &&
		motion_number[1] == frame_number[1] &&
		last_macroblock_size == config.macroblock_size &&
		last_search_radius == config.search_radius)
	{
		;
	}
	else
// Calculate new vectors
	{
		need_motion = 1;
	}

	if(need_motion)
	{
		optic_flow_engine->set_package_count(MIN(MAX_PACKAGES, total_macroblocks));
		optic_flow_engine->process_packages();

// Fill in failed macroblocks
		invalid_blocks.remove_all();
		for(int i = 0; i < macroblocks.size(); i++)
		{
			if(!macroblocks.get(i)->is_valid 
// debug
//				 && i >= 30 * x_macroblocks)
				)
			{
				invalid_blocks.append(i);
			}
		}

		if(invalid_blocks.size())
		{
			if(!blend_engine)
			{
				blend_engine = new BlendMacroblock(this,
					PluginClient::get_project_smp() + 1, 
					PluginClient::get_project_smp() + 1);
			}

			blend_engine->set_package_count(MIN(PluginClient::get_project_smp() + 1, 
				invalid_blocks.size()));
			blend_engine->process_packages();
		}
	}



// for(int i = 0; i < total_macroblocks; i++)
// {
// 	OpticFlowPackage *pkg = (OpticFlowPackage*)optic_flow_engine->get_package(
// 		i);
// 	if((i / x_macroblocks) % 2)
// 	{
// 		pkg->dx = 0;
// 		pkg->dy = 0;
// 	}
// 	else
// 	{
// 		pkg->dx = -32;
// 		pkg->dy = 0;
// 	}
// }


	if(!warp_engine)
	{
		warp_engine = new Warp(this,
			PluginClient::get_project_smp() + 1, 
			PluginClient::get_project_smp() + 1);
	}
	
	warp_engine->process_packages();

	motion_number[0] = frame_number[0];
	motion_number[1] = frame_number[1];
	last_macroblock_size = config.macroblock_size;
	last_search_radius = config.search_radius;


// Debug
//	get_output()->copy_from(frames[1]);


	draw_vectors(1);
}