X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Frecordmonitor.C;h=b04587a7cb348a953a4f68879d9a09855a39b0ec;hb=38cb4182e11e57fc426bede3825e825e9d61433b;hp=aec770a733a14817019e0a7679fd642d325d4120;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/recordmonitor.C b/cinelerra-5.1/cinelerra/recordmonitor.C index aec770a7..b04587a7 100644 --- a/cinelerra-5.1/cinelerra/recordmonitor.C +++ b/cinelerra-5.1/cinelerra/recordmonitor.C @@ -41,6 +41,7 @@ #include "recordscopes.h" #include "recordtransport.h" #include "recordmonitor.h" +#include "signalstatus.h" #include "theme.h" #include "videodevice.inc" #include "vframe.h" @@ -78,55 +79,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 +254,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,21 +263,19 @@ 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 unlock_window(); } @@ -303,17 +285,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 +324,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 +353,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 +372,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 +459,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 +517,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 +539,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 +576,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 +602,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 +667,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 +715,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 +949,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 +975,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 +1002,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 +1072,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 +1096,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 +1116,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 +1268,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 +1294,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; }