#include "recordscopes.h"
#include "recordtransport.h"
#include "recordmonitor.h"
+#include "signalstatus.h"
#include "theme.h"
#include "videodevice.inc"
#include "vframe.h"
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();
}
reverse_interlace = 0;
meters = 0;
canvas = 0;
+ cursor_toggle = 0;
+ big_cursor_toggle = 0;
current_operation = MONITOR_NONE;
signal_status = 0;
}
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();
}
// 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;
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));
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;
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));
}
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;
default:
if(canvas) result = canvas->keypress_event(this);
+#ifdef HAVE_FIREWIRE
if(!result && avc1394_transport)
result = avc1394_transport->keypress_event(get_keypress());
+#endif
break;
}
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;
}
#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,
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);
}
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 )
DeviceDVBInput *dvb_input = record->dvb_device();
if( dvb_input )
dvb_input->set_signal_status(!enable ? 0 : signal_status);
+#endif
}
void RecordMonitorGUI::
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);
case CAPTURE_DVB:
- case VIDEO4LINUX:
case VIDEO4LINUX2:
case VIDEO4LINUX2MPEG:
output_colormodel = record->vdevice->get_best_colormodel(record->default_asset);
//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();
void RecordMonitorThread::render_uncompressed()
{
- output_frame->copy_from(input_frame);
+ output_frame->transfer_from(input_frame);
}
void RecordMonitorThread::show_output_frame()
int RecordMonitorThread::render_frame()
{
switch(mwindow->edl->session->vconfig_in->driver) {
- case CAPTURE_BUZ:
case VIDEO4LINUX2JPEG:
case CAPTURE_JPEG_WEBCAM:
render_jpeg();
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::
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();
frame->get_data(),
frame->get_compressed_size(),
thread->output_frame->get_color_model());
-
+#endif
return 0;
}