X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Frecordmonitor.C;h=aa10ec0d26e045b69f3e9af8b5dfc2b5062054d0;hp=7ea18e1dfb1066acf5e0289b9c30449ef31b1fb9;hb=34dd3a28727fc230ba5abbed50766d671a2b8055;hpb=0b78779e9e75131eee81d2e4689b98df0e91c092 diff --git a/cinelerra-5.1/cinelerra/recordmonitor.C b/cinelerra-5.1/cinelerra/recordmonitor.C index 7ea18e1d..aa10ec0d 100644 --- a/cinelerra-5.1/cinelerra/recordmonitor.C +++ b/cinelerra-5.1/cinelerra/recordmonitor.C @@ -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::