fix ruler, cwdw info popup updates, reset camera/projector shortcuts, findobj tweak...
authorGood Guy <good1.2guy@gmail.com>
Thu, 26 Apr 2018 22:23:13 +0000 (16:23 -0600)
committerGood Guy <good1.2guy@gmail.com>
Thu, 26 Apr 2018 22:23:13 +0000 (16:23 -0600)
cinelerra-5.1/cinelerra/canvas.C
cinelerra-5.1/cinelerra/cwindowgui.C
cinelerra-5.1/cinelerra/cwindowtool.C
cinelerra-5.1/cinelerra/cwindowtool.h
cinelerra-5.1/cinelerra/mwindowgui.C
cinelerra-5.1/doc/shortcuts.html
cinelerra-5.1/guicast/bcwindowbase.C
cinelerra-5.1/guicast/keys.h
cinelerra-5.1/info/plugins.txt
cinelerra-5.1/plugins/findobj/findobj.C
cinelerra-5.1/plugins/findobj/findobj.h

index aabe440de3c470bfd47a1865e0dfc732c7893a29..85d4e6f51ce453286e7d2636fbf22d00d021d7ce 100644 (file)
@@ -1169,7 +1169,7 @@ int CanvasPopupSize::handle_event()
 
 
 CanvasPopupResetCamera::CanvasPopupResetCamera(Canvas *canvas)
 
 
 CanvasPopupResetCamera::CanvasPopupResetCamera(Canvas *canvas)
- : BC_MenuItem(_("Reset camera"))
+ : BC_MenuItem(_("Reset camera"), "F11", KEY_F11)
 {
        this->canvas = canvas;
 }
 {
        this->canvas = canvas;
 }
@@ -1182,7 +1182,7 @@ int CanvasPopupResetCamera::handle_event()
 
 
 CanvasPopupResetProjector::CanvasPopupResetProjector(Canvas *canvas)
 
 
 CanvasPopupResetProjector::CanvasPopupResetProjector(Canvas *canvas)
- : BC_MenuItem(_("Reset projector"))
+ : BC_MenuItem(_("Reset projector"), "F12", KEY_F12)
 {
        this->canvas = canvas;
 }
 {
        this->canvas = canvas;
 }
index d7bcf789f5fc79595be3dc7ce376679f9217e0a1..b387bfe19a9e0ec146688b60be2e893f622de4f9 100644 (file)
@@ -571,6 +571,8 @@ int CWindowGUI::keypress_event()
                case KEY_F8:    cwindow_operation = CWINDOW_EYEDROP;    break;
                case KEY_F9:    cwindow_operation = CWINDOW_TOOL_WINDOW; break;
                case KEY_F10:   cwindow_operation = CWINDOW_TITLESAFE;  break;
                case KEY_F8:    cwindow_operation = CWINDOW_EYEDROP;    break;
                case KEY_F9:    cwindow_operation = CWINDOW_TOOL_WINDOW; break;
                case KEY_F10:   cwindow_operation = CWINDOW_TITLESAFE;  break;
+               case KEY_F11:   canvas->reset_camera();                 break;
+               case KEY_F12:   canvas->reset_projector();              break;
        }
 
        if( cwindow_operation >= 0 ) {
        }
 
        if( cwindow_operation >= 0 ) {
index fefe2d4ca28b259e365c4c9489098fbb92c43a5c..e5e6b2adf43f660e843e5e5aa9002d260b8e0ee7 100644 (file)
@@ -83,6 +83,7 @@ void CWindowTool::start_tool(int operation)
 //printf("CWindowTool::start_tool 1\n");
        if(current_tool != operation)
        {
 //printf("CWindowTool::start_tool 1\n");
        if(current_tool != operation)
        {
+               int previous_tool = current_tool;
                current_tool = operation;
                switch(operation)
                {
                current_tool = operation;
                switch(operation)
                {
@@ -104,6 +105,10 @@ void CWindowTool::start_tool(int operation)
                        case CWINDOW_RULER:
                                new_gui = new CWindowRulerGUI(mwindow, this);
                                break;
                        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();
                        default:
                                result = 1;
                                stop_tool();
@@ -120,13 +125,11 @@ void CWindowTool::start_tool(int operation)
                        output_lock->lock("CWindowTool::start_tool");
                        this->tool_gui = new_gui;
                        tool_gui->create_objects();
                        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();
 
 // Signal thread to run next tool GUI
                        input_lock->unlock();
@@ -305,6 +308,8 @@ int CWindowToolGUI::keypress_event()
        case KEY_F8:
        case KEY_F9:
        case KEY_F10:
        case KEY_F8:
        case KEY_F9:
        case KEY_F10:
+       case KEY_F11:
+       case KEY_F12:
                resend_event(thread->gui);
                result = 1;
        }
                resend_event(thread->gui);
                result = 1;
        }
@@ -2305,30 +2310,32 @@ CWindowRulerGUI::~CWindowRulerGUI()
 
 void CWindowRulerGUI::create_objects()
 {
 
 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:")));
        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;
        y += title->get_h() + 5;
-
        add_subwindow(title = new BC_Title(x, y, _("Point 1:")));
        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;
        y += title->get_h() + 5;
-
        add_subwindow(title = new BC_Title(x, y, _("Point 2:")));
        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;
        y += title->get_h() + 5;
-
        add_subwindow(title = new BC_Title(x, y, _("Distance:")));
        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:")));
        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];
        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));
        add_subwindow(title = new BC_Title(x,
                y,
                string));
@@ -2343,42 +2350,27 @@ void CWindowRulerGUI::create_objects()
 
 void CWindowRulerGUI::update()
 {
 
 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];
        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);
        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);
        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);
        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);
        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);
 }
 
        angle->update(string);
 }
 
index 9361034200c5977c233984da6fe3d38c36049565..92fa72b9e6251fe01c899148a184624e2d9b7906 100644 (file)
@@ -443,11 +443,12 @@ public:
 // Update the gui
        void handle_event();
 
 // Update the gui
        void handle_event();
 
-       BC_Title *current;
-       BC_Title *point1;
-       BC_Title *point2;
-       BC_Title *distance;
-       BC_Title *angle;
+       BC_TextBox *current;
+       BC_TextBox *point1;
+       BC_TextBox *point2;
+       BC_TextBox *deltas;
+       BC_TextBox *distance;
+       BC_TextBox *angle;
 };
 
 
 };
 
 
index 1ac33aafa235c7f2c02a646b9e7d184b5f78c64c..566afd6c27d12f21d96c12c8fee2540b0fe6b7fe 100644 (file)
@@ -1303,6 +1303,8 @@ int MWindowGUI::keypress_event()
        case KEY_F8:
        case KEY_F9:
        case KEY_F10:
        case KEY_F8:
        case KEY_F9:
        case KEY_F10:
+       case KEY_F11:
+       case KEY_F12:
                resend_event(mwindow->cwindow->gui);
                return 1;
        }
                resend_event(mwindow->cwindow->gui);
                return 1;
        }
index 89e8b5164ffdc88bddfb4167346f0540cd5dfa98..38e0120817d0da3f9d380edf264b4813ace51531 100644 (file)
        <tr>
                <td height="26" align="left"><font face="Liberation Serif" size=4><br></font></td>
                <td align="left"><font face="Liberation Serif" size=4>Save Backup</font></td>
        <tr>
                <td height="26" align="left"><font face="Liberation Serif" size=4><br></font></td>
                <td align="left"><font face="Liberation Serif" size=4>Save Backup</font></td>
-               <td align="left"><font face="Liberation Serif" size=4><br></font></td>
+               <td align="left"><font face="Liberation Serif" size=4>'b'</font></td>
                <td align="left"><font face="Liberation Serif" size=4>Save auto-backup file “backup.xml”</font></td>
        </tr>
        <tr>
                <td align="left"><font face="Liberation Serif" size=4>Save auto-backup file “backup.xml”</font></td>
        </tr>
        <tr>
index 5b1331061d321bfb3dec45a55a8bacef288ff9fd..a14c2eef960b4582b9e3836681c9f0b4e2020965 100644 (file)
@@ -1266,6 +1266,8 @@ locking_message = event->xclient.message_type;
                case XK_F8:             key_pressed = KEY_F8;   break;
                case XK_F9:             key_pressed = KEY_F9;   break;
                case XK_F10:            key_pressed = KEY_F10;  break;
                case XK_F8:             key_pressed = KEY_F8;   break;
                case XK_F9:             key_pressed = KEY_F9;   break;
                case XK_F10:            key_pressed = KEY_F10;  break;
+               case XK_F11:            key_pressed = KEY_F11;  break;
+               case XK_F12:            key_pressed = KEY_F12;  break;
 
                case XK_Menu:           key_pressed = KPMENU;   break;  /* menu */
 // remote control
 
                case XK_Menu:           key_pressed = KPMENU;   break;  /* menu */
 // remote control
index c48ee590f066650365de6f2997a29885e5d16daf..e580a84ffb56f842d66e9d0e7ef45f2edaad452d 100644 (file)
 #define KEY_F8              308
 #define KEY_F9              309
 #define KEY_F10             310
 #define KEY_F8              308
 #define KEY_F9              309
 #define KEY_F10             310
+#define KEY_F11             311
+#define KEY_F12             312
 
 #define RETURN              13
 #define NEWLINE             13
 
 #define RETURN              13
 #define NEWLINE             13
index c4de14a159b6998044d73d115cb8848d4fab07fb..e1854c1bf611feb2981bceae030d05347156d1f3 100644 (file)
@@ -270,11 +270,13 @@ F_drawgrid:       Draws a colored grid on the input video.
 F_edgedetect:  Detects and draws edge.
 F_elbg:                Apply posterize effect, using the ELBG algorithm.
 F_eq:          Adjusts brightness, contrast, gamma and saturation.
 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_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.
 F_floodfill:   Fill area of the same color with another color.
 F_framerate:   Upsamples or downsamples progressive
                source between specified frame rates.
@@ -312,6 +314,8 @@ F_noise:    Adds noise to the video.
                Through the settings you can
                select the variables of the noise
                (strength, flag and seed).
                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_oscilloscope:        2D video oscilloscope.  Useful to measure spatial impulse,
                step responses, and chroma delays.
 F_owndenoise:  Denoises using wavelets.
@@ -338,6 +342,7 @@ F_roberts:  Apply roberts cross operator which performs a simple/quick 2-D
 F_rotate:      Rotates the input image.
 F_sab:         Applies shape adaptive blur.
 F_separatefields: Split input video frames into fields.
 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_showinfo:    Show textual information for each video frame.
 F_shuffleframes: Shuffles video frames.
 F_shuffleplanes: Shuffles video planes.
@@ -360,6 +365,7 @@ F_uspp:             Applies Ultra Simple/Slow Post-processing filter.
 F_vaguedenoiser: Applies a Wavelet based Denoiser.
 F_vectorscope: Video vectorscope.
 F_vflip:       Flips the input video vertically.
 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_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,
@@ -375,6 +381,7 @@ F_zoompan:  Applies Zoom & Pan effect.
 #
 F_abench:      Benchmark part of a filtergraph.
 F_acompressor: Audio compressor.
 #
 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.
 F_acrusher:    Reduces audio bit resolution.
 F_adelay:      Delays one or more audio channels.
 F_aecho:       Adds echoing to the audio.
@@ -405,6 +412,8 @@ F_crossfeed:        Apply headphone crossfeed which blends the left and right
                order to produce more speaker like sound.
 F_crystalizer: Simple Expand Audio Dynamic Range filter.
 F_dcshift:     Applies a DC shift 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
 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
@@ -429,8 +438,12 @@ F_haas:            Apply Haas Stereo Enhancer for a more natural sounding pan effect
                applied to mono signals it give some directionality and stretches
                its stereo image
 F_highpass:    Applies a high-pass filter with 3dB point frequency.
                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_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,
 F_silenceremove: Removes silence.
 F_sine:                Generate sine wave audio signal.
 F_stereotools: Applies various stereo tools.  When using this plugin,
index 737601e2d204198b36bf711311a92ff7837145bd..20f117bffcb9665c965a0966f2a341ebd43d34ec 100644 (file)
@@ -335,6 +335,11 @@ void FindObjMain::draw_quad(VFrame *vframe,
        draw_line(vframe, x2, y2, x3, y3);
        draw_line(vframe, x3, y3, x4, y4);
        draw_line(vframe, x4, y4, x1, y1);
        draw_line(vframe, x2, y2, x3, y3);
        draw_line(vframe, x3, y3, x4, y4);
        draw_line(vframe, x4, y4, x1, y1);
+}
+
+void FindObjMain::draw_point(VFrame *vframe, int x1, int y1)
+{
+       int r = bmin(vframe->get_w(), vframe->get_h()) / 200 + 1;
        for( int i=r; --i>0; )
                draw_circle(vframe, x1, y1, i);
 }
        for( int i=r; --i>0; )
                draw_circle(vframe, x1, y1, i);
 }
@@ -843,6 +848,8 @@ int FindObjMain::process_buffer(VFrame **frame, int64_t start_position, double f
                scene->set_pixel_color(BLUE);
                draw_quad(scene, match_x1, match_y1, match_x2, match_y2,
                                match_x3, match_y3, match_x4, match_y4);
                scene->set_pixel_color(BLUE);
                draw_quad(scene, match_x1, match_y1, match_x2, match_y2,
                                match_x3, match_y3, match_x4, match_y4);
+               scene->set_pixel_color(LTGREEN);
+               draw_point(scene, match_x1, match_y1);
        }
 
        if( gui_open() ) {
        }
 
        if( gui_open() ) {
index 75a80fb262a4ec53009fd2fddec961a6f1df94ae..d27ac056315b361d7bdf7a80aee536c36a33219a 100644 (file)
@@ -168,8 +168,9 @@ public:
        OverlayFrame *overlayer;
        VFrame *object, *scene, *replace;
 
        OverlayFrame *overlayer;
        VFrame *object, *scene, *replace;
 
+       static void draw_point(VFrame *vframe,int x1, int y1);
        static void draw_line(VFrame *vframe, int x1, int y1, int x2, int y2);
        static void draw_line(VFrame *vframe, int x1, int y1, int x2, int y2);
-       void draw_quad(VFrame *vframe,
+       static void draw_quad(VFrame *vframe,
                        int x1, int y1, int x2, int y2,
                        int x3, int y3, int x4, int y4);
        static void draw_rect(VFrame *vframe, int x1, int y1, int x2, int y2);
                        int x1, int y1, int x2, int y2,
                        int x3, int y3, int x4, int y4);
        static void draw_rect(VFrame *vframe, int x1, int y1, int x2, int y2);