more build tweaks for bsd
[goodguy/history.git] / cinelerra-5.1 / cinelerra / recordmonitor.C
index aec770a733a14817019e0a7679fd642d325d4120..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"
@@ -41,6 +43,7 @@
 #include "recordscopes.h"
 #include "recordtransport.h"
 #include "recordmonitor.h"
+#include "signalstatus.h"
 #include "theme.h"
 #include "videodevice.inc"
 #include "vframe.h"
@@ -78,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();
 }
@@ -272,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;
 }
@@ -279,22 +265,21 @@ RecordMonitorGUI::RecordMonitorGUI(MWindow *mwindow,
 RecordMonitorGUI::~RecordMonitorGUI()
 {
        lock_window("RecordMonitorGUI::~RecordMonitorGUI");
+#ifdef HAVE_DVB
        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;
-       if( avc1394transport_thread )
 #ifdef HAVE_FIREWIRE
-               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();
 }
 
@@ -303,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;
@@ -344,7 +327,7 @@ void RecordMonitorGUI::create_objects()
                                add_subwindow(avc1394transport_timecode =
                                        new BC_Title(avc1394_transport->x_end,
                                                mwindow->theme->rmonitor_tx_y + 10,
-                                               _("00:00:00:00"),
+                                               "00:00:00:00",
                                                MEDIUM_7SEGMENT,
                                                BLACK));
 
@@ -373,12 +356,14 @@ void RecordMonitorGUI::create_objects()
                canvas->create_objects(0);
                canvas->use_rwindow();
 
+#ifdef HAVE_DVB
                if( driver == CAPTURE_DVB ) {
                        int ssw = SignalStatus::calculate_w(this);
                        signal_status = new SignalStatus(this, get_w()-ssw-3, 0);
                        add_subwindow(signal_status);
                        signal_status->create_objects();
                }
+#endif
 
                int x = mwindow->theme->widget_border;
                int y = mwindow->theme->widget_border;
@@ -390,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));
        }
@@ -468,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;
@@ -528,8 +520,10 @@ int RecordMonitorGUI::keypress_event()
 
        default:
                if(canvas) result = canvas->keypress_event(this);
+#ifdef HAVE_FIREWIRE
                if(!result && avc1394_transport)
                        result = avc1394_transport->keypress_event(get_keypress());
+#endif
                break;
        }
 
@@ -548,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;
@@ -588,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,
@@ -600,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);
        }
 
@@ -665,8 +670,44 @@ 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
        if( !signal_status ) return;
        signal_status->lock_window("RecordMonitorGUI::enable_signal_status");
        if( !enable )
@@ -677,6 +718,7 @@ void RecordMonitorGUI::enable_signal_status(int enable)
        DeviceDVBInput *dvb_input = record->dvb_device();
        if( dvb_input )
                dvb_input->set_signal_status(!enable ? 0 : signal_status);
+#endif
 }
 
 void RecordMonitorGUI::
@@ -910,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);
@@ -937,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);
@@ -965,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();
@@ -1036,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()
@@ -1060,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();
@@ -1081,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::
@@ -1231,18 +1271,23 @@ RecVideoDVThread::~RecVideoDVThread()
 
 int RecVideoDVThread::start_rendering()
 {
+#ifdef HAVE_DV
        dv = dv_new();
+#endif
        return 0;
 }
 
 int RecVideoDVThread::stop_rendering()
 {
+#ifdef HAVE_DV
        if( dv ) { dv_delete(((dv_t*)dv));  dv = 0; }
+#endif
        return 0;
 }
 
 int RecVideoDVThread::render_frame(VFrame *frame, long size)
 {
+#ifdef HAVE_DV
        unsigned char *yuv_planes[3];
        yuv_planes[0] = thread->output_frame->get_y();
        yuv_planes[1] = thread->output_frame->get_u();
@@ -1252,7 +1297,7 @@ int RecVideoDVThread::render_frame(VFrame *frame, long size)
                frame->get_data(),
                frame->get_compressed_size(),
                thread->output_frame->get_color_model());
-
+#endif
        return 0;
 }