-
-// printf("VDeviceX11::overlay 1:\n"
-// "in_x1=%f in_y1=%f in_x2=%f in_y2=%f\n"
-// "out_x1=%f out_y1=%f out_x2=%f out_y2=%f\n",
-// in_x1, in_y1, in_x2, in_y2,
-// out_x1, out_y1, out_x2, out_y2);
-// Convert node coords to canvas coords in here
-
-// If single frame playback or nested EDL, use full sized PBuffer as output.
- if(device->single_frame || is_nested > 0)
- {
- output->mwindow->playback_3d->overlay(output, input,
- in_x1, in_y1, in_x2, in_y2,
- out_x1, out_y1, out_x2, out_y2,
- alpha, mode, interpolation_type,
- output_frame, is_nested);
-// printf("VDeviceX11::overlay 1 %p %d %d %d\n",
-// output_frame,
-// output_frame->get_w(),
-// output_frame->get_h(),
-// output_frame->get_opengl_state());
- }
- else
- {
- output->lock_canvas("VDeviceX11::overlay");
- output->get_canvas()->lock_window("VDeviceX11::overlay");
-
-// This is the transfer from output frame to canvas
- output->get_transfers(edl,
- output_x1, output_y1, output_x2, output_y2,
- canvas_x1, canvas_y1, canvas_x2, canvas_y2,
- -1, -1);
-
- output->get_canvas()->unlock_window();
- output->unlock_canvas();
-
-
-// Get transfer from track to canvas
- float track_xscale = (out_x2 - out_x1) / (in_x2 - in_x1);
- float track_yscale = (out_y2 - out_y1) / (in_y2 - in_y1);
- float canvas_xscale = (float)(canvas_x2 - canvas_x1) / (output_x2 - output_x1);
- float canvas_yscale = (float)(canvas_y2 - canvas_y1) / (output_y2 - output_y1);
-
-
-// Get coordinates of canvas relative to track frame
- float track_x1 = (float)(output_x1 - out_x1) / track_xscale + in_x1;
- float track_y1 = (float)(output_y1 - out_y1) / track_yscale + in_y1;
- float track_x2 = (float)(output_x2 - out_x2) / track_xscale + in_x2;
- float track_y2 = (float)(output_y2 - out_y2) / track_yscale + in_y2;
-
-// Clamp canvas coords to track boundary
- if(track_x1 < 0)
- {
- float difference = -track_x1;
- track_x1 += difference;
- canvas_x1 += difference * track_xscale * canvas_xscale;
- }
- if(track_y1 < 0)
- {
- float difference = -track_y1;
- track_y1 += difference;
- canvas_y1 += difference * track_yscale * canvas_yscale;
- }
-
- if(track_x2 > input->get_w())
- {
- float difference = track_x2 - input->get_w();
- track_x2 -= difference;
- canvas_x2 -= difference * track_xscale * canvas_xscale;
- }
- if(track_y2 > input->get_h())
- {
- float difference = track_y2 - input->get_h();
- track_y2 -= difference;
- canvas_y2 -= difference * track_yscale * canvas_yscale;
- }
-
-// Overlay directly from track buffer to canvas, skipping output buffer
- if(track_x2 > track_x1 && track_y2 > track_y1 &&
- canvas_x2 > canvas_x1 && canvas_y2 > canvas_y1)
- {
- output->mwindow->playback_3d->overlay(output, input,
- track_x1, track_y1, track_x2, track_y2,
- canvas_x1, canvas_y1, canvas_x2, canvas_y2,
- alpha, mode, interpolation_type, 0, is_nested);
- }
- }