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); }
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); }
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; }
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); }