//printf("CWindowTool::start_tool 1\n");
if(current_tool != operation)
{
+ int previous_tool = current_tool;
current_tool = operation;
switch(operation)
{
case CWINDOW_RULER:
new_gui = new CWindowRulerGUI(mwindow, this);
break;
+ case CWINDOW_PROTECT:
+ mwindow->edl->session->tool_window = 0;
+ gui->composite_panel->operation[CWINDOW_TOOL_WINDOW]->update(0);
+ // fall thru
default:
result = 1;
stop_tool();
output_lock->lock("CWindowTool::start_tool");
this->tool_gui = new_gui;
tool_gui->create_objects();
-
- if(mwindow->edl->session->tool_window &&
- mwindow->session->show_cwindow) tool_gui->show_window();
- tool_gui->lock_window("CWindowTool::start_tool 1");
- tool_gui->flush();
- tool_gui->unlock_window();
-
+ if( previous_tool == CWINDOW_PROTECT || previous_tool == CWINDOW_NONE ) {
+ mwindow->edl->session->tool_window = 1;
+ gui->composite_panel->operation[CWINDOW_TOOL_WINDOW]->update(1);
+ }
+ update_show_window();
// Signal thread to run next tool GUI
input_lock->unlock();
case KEY_F8:
case KEY_F9:
case KEY_F10:
+ case KEY_F11:
+ case KEY_F12:
resend_event(thread->gui);
result = 1;
}
void CWindowRulerGUI::create_objects()
{
- int x = 10, y = 10;
+ int x = 10, y = 10, x1 = 100;
BC_Title *title;
lock_window("CWindowRulerGUI::create_objects");
add_subwindow(title = new BC_Title(x, y, _("Current:")));
- add_subwindow(current = new BC_Title(x + title->get_w() + 10, y, ""));
+ add_subwindow(current = new BC_TextBox(x1, y, 200, 1, ""));
y += title->get_h() + 5;
-
add_subwindow(title = new BC_Title(x, y, _("Point 1:")));
- add_subwindow(point1 = new BC_Title(x + title->get_w() + 10, y, ""));
+ add_subwindow(point1 = new BC_TextBox(x1, y, 200, 1, ""));
y += title->get_h() + 5;
-
add_subwindow(title = new BC_Title(x, y, _("Point 2:")));
- add_subwindow(point2 = new BC_Title(x + title->get_w() + 10, y, ""));
+ add_subwindow(point2 = new BC_TextBox(x1, y, 200, 1, ""));
+ y += title->get_h() + 5;
+ add_subwindow(title = new BC_Title(x, y, _("Deltas:")));
+ add_subwindow(deltas = new BC_TextBox(x1, y, 200, 1, ""));
y += title->get_h() + 5;
-
add_subwindow(title = new BC_Title(x, y, _("Distance:")));
- add_subwindow(distance = new BC_Title(x + title->get_w() + 10, y, ""));
+ add_subwindow(distance = new BC_TextBox(x1, y, 200, 1, ""));
y += title->get_h() + 5;
add_subwindow(title = new BC_Title(x, y, _("Angle:")));
- add_subwindow(angle = new BC_Title(x + title->get_w() + 10, y, ""));
+ add_subwindow(angle = new BC_TextBox(x1, y, 200, 1, ""));
y += title->get_h() + 10;
char string[BCTEXTLEN];
- sprintf(string, _("Press Ctrl to lock ruler to the\nnearest 45%c angle."), 0xb0);
+ sprintf(string,
+ _("Press Ctrl to lock ruler to the\nnearest 45%c%c angle."),
+ 0xc2, 0xb0); // degrees utf
add_subwindow(title = new BC_Title(x,
y,
string));
void CWindowRulerGUI::update()
{
- double distance_value =
- sqrt(SQR(mwindow->edl->session->ruler_x2 - mwindow->edl->session->ruler_x1) +
- SQR(mwindow->edl->session->ruler_y2 - mwindow->edl->session->ruler_y1));
- double angle_value = atan((mwindow->edl->session->ruler_y2 - mwindow->edl->session->ruler_y1) /
- (mwindow->edl->session->ruler_x2 - mwindow->edl->session->ruler_x1)) *
- 360 /
- 2 /
- M_PI;
-
- if(EQUIV(distance_value, 0.0))
- {
- angle_value = 0.0;
- }
- else
- if(angle_value < 0)
- {
- angle_value *= -1;
- }
-
char string[BCTEXTLEN];
- sprintf(string, "%d, %d",
- mwindow->session->cwindow_output_x,
- mwindow->session->cwindow_output_y);
+ int cx = mwindow->session->cwindow_output_x;
+ int cy = mwindow->session->cwindow_output_y;
+ sprintf(string, "%d, %d", cx, cy);
current->update(string);
- sprintf(string, "%.0f, %.0f",
- mwindow->edl->session->ruler_x1,
- mwindow->edl->session->ruler_y1);
+ double x1 = mwindow->edl->session->ruler_x1;
+ double y1 = mwindow->edl->session->ruler_y1;
+ sprintf(string, "%.0f, %.0f", x1, y1);
point1->update(string);
- sprintf(string, "%.0f, %.0f",
- mwindow->edl->session->ruler_x2,
- mwindow->edl->session->ruler_y2);
+ double x2 = mwindow->edl->session->ruler_x2;
+ double y2 = mwindow->edl->session->ruler_y2;
+ sprintf(string, "%.0f, %.0f", x2, y2);
point2->update(string);
-
- sprintf(string, _("%0.01f pixels"), distance_value);
+ double dx = x2 - x1, dy = y2 - y1;
+ sprintf(string, "%s%.0f, %s%.0f", (dx>=0? "+":""), dx, (dy>=0? "+":""), dy);
+ deltas->update(string);
+ double d = sqrt(dx*dx + dy*dy);
+ sprintf(string, _("%0.01f pixels"), d);
distance->update(string);
- sprintf(string, "%0.02f %c", angle_value, 0xb0);
+ double a = d > 0 ? (atan2(-dy, dx) * 180/M_PI) : 0.;
+ sprintf(string, "%0.02f %c%c", a, 0xc2, 0xb0);
angle->update(string);
}
F_edgedetect: Detects and draws edge.
F_elbg: Apply posterize effect, using the ELBG algorithm.
F_eq: Adjusts brightness, contrast, gamma and saturation.
+F_entropy: Measure video frames entropy.
F_erosion: Applies erosion effect.
F_fade: Fade in/out input video.
F_fftfilt: Apply arbitrary expressions to pixels in frequency domain.
F_field: Extract a field from the input video.
F_fieldorder: Set the field order.
+F_fillborders: Fill borders of the input video.
F_floodfill: Fill area of the same color with another color.
F_framerate: Upsamples or downsamples progressive
source between specified frame rates.
Through the settings you can
select the variables of the noise
(strength, flag and seed).
+F_normalize: Normalize RGB video.
+F_owdenoise: Denoises using wavelets.
F_oscilloscope: 2D video oscilloscope. Useful to measure spatial impulse,
step responses, and chroma delays.
F_owndenoise: Denoises using wavelets.
F_rotate: Rotates the input image.
F_sab: Applies shape adaptive blur.
F_separatefields: Split input video frames into fields.
+F_setrange: Force color range for the output video frame.
F_showinfo: Show textual information for each video frame.
F_shuffleframes: Shuffles video frames.
F_shuffleplanes: Shuffles video planes.
F_vaguedenoiser: Applies a Wavelet based Denoiser.
F_vectorscope: Video vectorscope.
F_vflip: Flips the input video vertically.
+F_vfrdet: Variable frame rate detect filter.
F_vignette: Makes or reverses a vignette effect.
Through the settings you can set the circle center
position on a X-Y axis,choose the angle,
#
F_abench: Benchmark part of a filtergraph.
F_acompressor: Audio compressor.
+F_acontrast: Simple audio dynamic range compression/expansion filter.
F_acrusher: Reduces audio bit resolution.
F_adelay: Delays one or more audio channels.
F_aecho: Adds echoing to the audio.
order to produce more speaker like sound.
F_crystalizer: Simple Expand Audio Dynamic Range filter.
F_dcshift: Applies a DC shift to the audio.
+F_drmeter: Measure audio dynamic range where setting window length in
+ seconds is used to split audio into segments of equal length.
F_dyaudnorm: Dynamic Audio Normalizer. When using this plugin,
be sure to “attach effect” to all audio tracks by dragging
the plugin to the 1st audio track and then right mouse
applied to mono signals it give some directionality and stretches
its stereo image
F_highpass: Applies a high-pass filter with 3dB point frequency.
+F_hilbert: Generate a Hilbert transform FIR coefficients.
F_loudnorm: EBU R128 loudness normalization.
F_lowpass: Applies a low-pass filter with 3dB point frequency.
+F_mcompand: Multiband compress or expand audiodynamic range. The input audio
+ is divided into bands which is like the crossover of a loudspeaker,
+ resulting in flat frequency response when absent compander action.
F_silenceremove: Removes silence.
F_sine: Generate sine wave audio signal.
F_stereotools: Applies various stereo tools. When using this plugin,