more build tweaks for bsd
[goodguy/history.git] / cinelerra-5.1 / cinelerra / recordmonitor.C
index 7ea18e1dfb1066acf5e0289b9c30449ef31b1fb9..aa10ec0d26e045b69f3e9af8b5dfc2b5062054d0 100644 (file)
@@ -25,7 +25,9 @@
 #include "condition.h"
 #include "cursors.h"
 #include "devicedvbinput.h"
+#ifdef HAVE_DV
 #include "libdv.h"
+#endif
 #include "edl.h"
 #include "edlsession.h"
 #include "keys.h"
@@ -79,55 +81,36 @@ void RecordMonitor::create_objects()
        mwindow->session->rwindow_fullscreen = 0;
 
        if( !record->default_asset->video_data )
-               min_w = MeterPanel::get_meters_width(
-                       mwindow->theme,
+               min_w = MeterPanel::get_meters_width(mwindow->theme,
                        record->default_asset->channels, 1);
 
-
-
-//SET_TRACE
        window = new RecordMonitorGUI(mwindow, record, this, min_w);
-//SET_TRACE
        window->create_objects();
-//SET_TRACE
 
        if( record->default_asset->video_data ) {
 // Configure the output for record monitoring
                VideoOutConfig config;
-//SET_TRACE
                device = new VideoDevice;
-//SET_TRACE
-
-
 
 // Override default device for X11 drivers
                if(mwindow->edl->session->playback_config->vconfig->driver ==
                        PLAYBACK_X11_XV) config.driver = PLAYBACK_X11_XV;
                config.x11_use_fields = 0;
-
-//SET_TRACE
-
                device->open_output(&config,
                        record->default_asset->frame_rate,
                        record->default_asset->width,
                        record->default_asset->height,
                        window->canvas, 0);
-//SET_TRACE
 
                scope_thread = new RecordScopeThread(mwindow, this);
 
-               if(mwindow->session->record_scope)
-               {
+               if(mwindow->session->record_scope) {
                        scope_thread->start();
                }
 
-
                thread = new RecordMonitorThread(mwindow, record, this);
-//SET_TRACE
                thread->start_playback();
-//SET_TRACE
        }
-//SET_TRACE
 
        Thread::start();
 }
@@ -273,6 +256,8 @@ RecordMonitorGUI::RecordMonitorGUI(MWindow *mwindow,
        reverse_interlace = 0;
        meters = 0;
        canvas = 0;
+       cursor_toggle = 0;
+       big_cursor_toggle = 0;
        current_operation = MONITOR_NONE;
        signal_status = 0;
 }
@@ -284,20 +269,17 @@ RecordMonitorGUI::~RecordMonitorGUI()
        delete signal_status;
 #endif
        delete canvas;
-       if( bitmap ) delete bitmap;
+       delete cursor_toggle;
+       delete big_cursor_toggle;
+       delete bitmap;
        if( channel_picker ) delete channel_picker;
 #ifdef HAVE_FIREWIRE
-       if( avc1394transport_thread )
-               delete avc1394transport_thread;
-       if( avc ) {
-               delete avc;
-       }
-       if( avc1394_transport ) {
-               delete avc1394_transport;
-       }
-       if( avc1394transport_title )
-               delete avc1394transport_title;
+       delete avc1394transport_thread;
+       delete avc;
+       delete avc1394_transport;
+       delete avc1394transport_title;
 #endif
+       delete meters;
        unlock_window();
 }
 
@@ -306,17 +288,15 @@ void RecordMonitorGUI::create_objects()
 // y offset for video canvas if we have the transport controls
        lock_window("RecordMonitorGUI::create_objects");
        int driver = mwindow->edl->session->vconfig_in->driver;
-       int do_channel = (driver == VIDEO4LINUX ||
-                       driver == CAPTURE_BUZ ||
-                       driver == CAPTURE_DVB ||
+       int do_channel = (driver == CAPTURE_DVB ||
                        driver == VIDEO4LINUX2 ||
                        driver == VIDEO4LINUX2JPEG ||
                        driver == VIDEO4LINUX2MPEG ||
                        driver == CAPTURE_JPEG_WEBCAM ||
                        driver == CAPTURE_YUYV_WEBCAM);
+       int do_cursor = driver == SCREENCAPTURE;
        int do_scopes = do_channel || driver == SCREENCAPTURE;
-       int do_interlace = (driver == CAPTURE_BUZ ||
-               driver == VIDEO4LINUX2JPEG);
+       int do_interlace = driver == VIDEO4LINUX2JPEG;
        int background_done = 0;
        int do_audio = record->default_asset->audio_data;
        int do_video = record->default_asset->video_data;
@@ -395,21 +375,30 @@ void RecordMonitorGUI::create_objects()
                        channel_picker->create_objects();
                        x += channel_picker->get_w() + mwindow->theme->widget_border;
                }
-               if( driver == CAPTURE_BUZ ||
-                       driver == VIDEO4LINUX2JPEG ) {
+               if( driver == VIDEO4LINUX2JPEG ) {
                        add_subwindow(reverse_interlace = new ReverseInterlace(record,
                                mwindow->theme->rmonitor_interlace_x,
                                mwindow->theme->rmonitor_interlace_y));
                        x += reverse_interlace->get_w() + mwindow->theme->widget_border;
                }
 
-               if(do_scopes)
-               {
+               if( do_scopes ) {
                        scope_toggle = new ScopeEnable(mwindow, thread, x, y);
                        add_subwindow(scope_toggle);
                        x += scope_toggle->get_w() + mwindow->theme->widget_border;
                }
 
+               if( do_cursor ) {
+                       add_subwindow(cursor_toggle = new DoCursor(record,
+                               x, 
+                               y));
+                       x += cursor_toggle->get_w() + mwindow->theme->widget_border;
+                       add_subwindow(big_cursor_toggle = new DoBigCursor(record,
+                               x, 
+                               y));
+                       x += big_cursor_toggle->get_w() + mwindow->theme->widget_border;
+               }
+
                add_subwindow(monitor_menu = new BC_PopupMenu(0, 0, 0, "", 0));
                monitor_menu->add_item(new RecordMonitorFullsize(mwindow, this));
        }
@@ -437,6 +426,16 @@ int RecordMonitorGUI::button_press_event()
 {
        if(mwindow->session->rwindow_fullscreen && canvas && canvas->get_canvas())
                return canvas->button_press_event_base(canvas->get_canvas());
+
+       if( get_buttonpress() == 2 ) {
+               return 0;
+       }
+       else
+// Right button
+       if( get_buttonpress() == 3 ) {
+               monitor_menu->activate_menu();
+               return 1;
+       }
        return 0;
 }
 
@@ -456,10 +455,6 @@ int RecordMonitorGUI::cursor_enter_event()
 
 int RecordMonitorGUI::button_release_event()
 {
-       if( get_buttonpress() == 3 && cursor_inside() ) {
-               monitor_menu->activate_menu();
-               return 1;
-       }
        if( canvas && canvas->get_canvas() )
                return canvas->button_release_event();
        return 0;
@@ -467,10 +462,8 @@ int RecordMonitorGUI::button_release_event()
 
 int RecordMonitorGUI::cursor_motion_event()
 {
-//SET_TRACE
        if( canvas && canvas->get_canvas() ) {
                canvas->get_canvas()->unhide_cursor();
-//SET_TRACE
                return canvas->cursor_motion_event();
        }
        return 0;
@@ -549,17 +542,14 @@ int RecordMonitorGUI::translation_event()
 int RecordMonitorGUI::resize_event(int w, int h)
 {
        int driver = mwindow->edl->session->vconfig_in->driver;
-       int do_channel = (driver == VIDEO4LINUX ||
-                       driver == CAPTURE_BUZ ||
-                       driver == CAPTURE_DVB ||
+       int do_channel = (driver == CAPTURE_DVB ||
                        driver == VIDEO4LINUX2 ||
                        driver == VIDEO4LINUX2JPEG ||
                        driver == VIDEO4LINUX2MPEG ||
                        driver == CAPTURE_JPEG_WEBCAM ||
                        driver == CAPTURE_YUYV_WEBCAM);
        int do_scopes = do_channel || driver == SCREENCAPTURE;
-       int do_interlace = (driver == CAPTURE_BUZ ||
-               driver == VIDEO4LINUX2JPEG);
+       int do_interlace = (driver == VIDEO4LINUX2JPEG);
        int do_avc = 0;
 #ifdef HAVE_FIREWIRE
        do_avc = avc1394_transport ? 1 : 0;
@@ -589,11 +579,25 @@ int RecordMonitorGUI::resize_event(int w, int h)
        }
 #endif
 
-       if(channel_picker) channel_picker->reposition();
-       if(reverse_interlace) reverse_interlace->reposition_window(reverse_interlace->get_x(),
-               reverse_interlace->get_y());
-       if(canvas && do_video)
-       {
+       
+       if( channel_picker ) {
+               channel_picker->reposition();
+       }
+       if( reverse_interlace ) {
+               reverse_interlace->reposition_window(
+                       reverse_interlace->get_x(),
+                       reverse_interlace->get_y());
+       }
+       if( cursor_toggle ) {
+               cursor_toggle->reposition_window(
+                       cursor_toggle->get_x(),
+                       cursor_toggle->get_y());
+               big_cursor_toggle->reposition_window(
+                       big_cursor_toggle->get_x(),
+                       big_cursor_toggle->get_y());
+       }
+
+       if( canvas && do_video ) {
                canvas->reposition_window(0,
                        mwindow->theme->rmonitor_canvas_x,
                        mwindow->theme->rmonitor_canvas_y,
@@ -601,14 +605,14 @@ int RecordMonitorGUI::resize_event(int w, int h)
                        mwindow->theme->rmonitor_canvas_h);
        }
 
-       if(do_meters) {
+       if( do_meters ) {
                meters->reposition_window(mwindow->theme->rmonitor_meter_x,
                        mwindow->theme->rmonitor_meter_y,
                        do_video ? -1 : mwindow->theme->rmonitor_meter_w,
                        mwindow->theme->rmonitor_meter_h);
                meters->set_meters(record->default_asset->channels,1);
        }
-       else if(meters) {
+       else if( meters ) {
                meters->set_meters(0,0);
        }
 
@@ -666,6 +670,41 @@ int RecordMonitorGUI::create_bitmap()
        return 0;
 }
 
+
+DoCursor::DoCursor(Record *record, int x, int y)
+ : BC_CheckBox(x, y, record->do_cursor, _("Record cursor"))
+{
+       this->record = record;
+}
+
+DoCursor::~DoCursor()
+{
+}
+
+int DoCursor::handle_event()
+{
+       record->do_cursor = get_value();
+       return 0;
+}
+
+
+DoBigCursor::DoBigCursor(Record *record, int x, int y)
+ : BC_CheckBox(x, y, record->do_big_cursor, _("Big cursor"))
+{
+       this->record = record;
+}
+
+DoBigCursor::~DoBigCursor()
+{
+}
+
+int DoBigCursor::handle_event()
+{
+       record->do_big_cursor = get_value();
+       return 0;
+}
+
+
 void RecordMonitorGUI::enable_signal_status(int enable)
 {
 #ifdef HAVE_DVB
@@ -856,9 +895,6 @@ RecordMonitorFullsize::RecordMonitorFullsize(MWindow *mwindow,
 }
 int RecordMonitorFullsize::handle_event()
 {
-       Record *record = window->record;
-       record->video_zoom = 1.0;
-       record->record_gui->set_translation(record->video_x, record->video_y, record->video_zoom);
        return 1;
 }
 
@@ -916,7 +952,6 @@ void RecordMonitorThread::init_output_format()
                output_colormodel = record->vdevice->get_best_colormodel(record->default_asset);
                break;
 
-       case CAPTURE_BUZ:
        case VIDEO4LINUX2JPEG:
                jpeg_engine = new RecVideoMJPGThread(record, this,
                        mwindow->edl->session->vconfig_in->v4l2jpeg_in_fields);
@@ -943,7 +978,6 @@ void RecordMonitorThread::init_output_format()
 
 
        case CAPTURE_DVB:
-       case VIDEO4LINUX:
        case VIDEO4LINUX2:
        case VIDEO4LINUX2MPEG:
                output_colormodel = record->vdevice->get_best_colormodel(record->default_asset);
@@ -971,7 +1005,6 @@ int RecordMonitorThread::stop_playback()
 //printf("RecordMonitorThread::stop_playback 1\n");
 
        switch(mwindow->edl->session->vconfig_in->driver) {
-       case CAPTURE_BUZ:
        case VIDEO4LINUX2JPEG:
                if( jpeg_engine ) {
                        jpeg_engine->stop_rendering();
@@ -1042,7 +1075,7 @@ int RecordMonitorThread::render_dv()
 
 void RecordMonitorThread::render_uncompressed()
 {
-       output_frame->copy_from(input_frame);
+       output_frame->transfer_from(input_frame);
 }
 
 void RecordMonitorThread::show_output_frame()
@@ -1066,7 +1099,6 @@ void RecordMonitorThread::lock_input()
 int RecordMonitorThread::render_frame()
 {
        switch(mwindow->edl->session->vconfig_in->driver) {
-       case CAPTURE_BUZ:
        case VIDEO4LINUX2JPEG:
        case CAPTURE_JPEG_WEBCAM:
                render_jpeg();
@@ -1087,7 +1119,9 @@ int RecordMonitorThread::render_frame()
 
 void RecordMonitorThread::new_output_frame()
 {
-       record_monitor->device->new_output_buffer(&output_frame, output_colormodel);
+       record_monitor->device->new_output_buffer(&output_frame, 
+               output_colormodel,
+               record->edl);
 }
 
 void RecordMonitorThread::