#include "keys.h"
#include "language.h"
#include "localsession.h"
+#ifdef HAVE_DV
#include "libdv.h"
+#endif
#include "libmjpeg.h"
#include "libzmpeg3.h"
#include "mainmenu.h"
#include "tracks.h"
#include "videoconfig.h"
#include "videodevice.h"
+#include "wintv.h"
+#include "x10tv.h"
#include <string.h>
#include <sys/types.h>
cutads_status = new RecordCutAdsStatus(this);
blink_status = new RecordBlinkStatus(this);
#endif
+ deinterlace = RECORD_LACE_ODD;
}
Record::~Record()
case VIDEO4LINUX2JPEG:
vcodec = CODEC_TAG_MJPEG;
break;
+#ifdef HAVE_DV
case CAPTURE_FIREWIRE:
case CAPTURE_IEC61883:
vcodec = CODEC_TAG_DVSD;
break;
+#endif
}
if( vcodec )
strcpy(default_asset->vcodec, vcodec);
video_zoom = defaults->get("RECORD_VIDEO_Z", (float)1);
picture->load_defaults();
reverse_interlace = defaults->get("REVERSE_INTERLACE", 0);
+ deinterlace = defaults->get("DEINTERLACE", RECORD_LACE_ODD);
do_cursor = defaults->get("RECORD_CURSOR", 0);
do_big_cursor = defaults->get("RECORD_BIG_CURSOR", 0);
for( int i=0; i<MAXCHANNELS; ++i ) {
defaults->update("RECORD_VIDEO_Z", video_zoom);
picture->save_defaults();
defaults->update("REVERSE_INTERLACE", reverse_interlace);
+ defaults->update("DEINTERLACE", deinterlace);
defaults->update("RECORD_CURSOR", do_cursor);
defaults->update("RECORD_BIG_CURSOR", do_big_cursor);
for( int i=0; i<MAXCHANNELS; ++i ) {
record_gui->show_window();
record_gui->flush();
- if( mwindow->gui->remote_control->deactivate() )
+ if( mwindow->gui->remote_control->deactivate() &&
+ mwindow->gui->record_remote_handler )
mwindow->gui->record_remote_handler->activate();
if( video_window_open ) {
stop(0);
edl->Garbage::remove_user();
- if( mwindow->gui->remote_control->deactivate() )
+ if( mwindow->gui->remote_control->deactivate() &&
+ mwindow->gui->cwindow_remote_handler )
mwindow->gui->cwindow_remote_handler->activate();
// Save everything again
Asset *asset = batch->asset;
if( batch->recorded ) {
EDL *new_edl = new EDL;
- mwindow->remove_asset_from_caches(asset);
+ mwindow->remove_from_caches(asset);
new_edl->create_objects();
new_edl->copy_session(mwindow->edl);
mwindow->asset_to_edl(new_edl, asset, batch->labels);
void Record::delete_index_file(Asset *asset)
{
- IndexFile::delete_index(mwindow->preferences, asset, ".toc");
- IndexFile::delete_index(mwindow->preferences, asset, ".idx");
- IndexFile::delete_index(mwindow->preferences, asset, ".mkr");
+ IndexFile::delete_index_files(mwindow->preferences, asset);
}
void Record::delete_batch()
record_gui->update_batches();
Asset *asset = batch->asset;
remove_file(asset->path);
- mwindow->remove_asset_from_caches(asset);
+ mwindow->remove_from_caches(asset);
delete_index_file(asset);
batch->clear_notice();
record_gui->update_batches();
void Record::update_skimming(int v) {}
#endif
-RecordRemoteHandler::RecordRemoteHandler(RemoteControl *remote_control)
+RecordKeyEvHandler::RecordKeyEvHandler(RemoteControl *remote_control)
: RemoteHandler(remote_control->gui, GREEN)
+{
+ this->remote_control = remote_control;
+}
+
+RecordKeyEvHandler::~RecordKeyEvHandler()
{
}
-RecordRemoteHandler::~RecordRemoteHandler()
+int RecordKeyEvHandler::remote_key(int key)
{
+ Record *record = remote_control->mwindow_gui->record;
+ return record->record_process_key(remote_control, key);
}
void Record::
BIGFONT, WHITE, BLACK, 0, 3., 2.);
}
-int RecordRemoteHandler::remote_process_key(RemoteControl *remote_control, int key)
-{
- Record *record = remote_control->mwindow_gui->record;
- return record->remote_process_key(remote_control, key);
-}
-
-int Record::remote_process_key(RemoteControl *remote_control, int key)
+int Record::record_process_key(RemoteControl *remote_control, int key)
{
int ch = key;
switch( key ) {
case KPENTER:
- if( last_key == KPENTER ) {
- set_channel_name(keybfr);
- clear_keybfr();
- break;
- }
- ch = '.'; // fall through
- case '0': if( last_key == '0' && ch == '0' ) {
+ if( last_key != KPENTER ) break;
+ case KPCC:
+ set_channel_name(keybfr);
clear_keybfr();
break;
- }
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
+ case '0':
+ if( last_key == '0' && ch == '0' ) {
+ clear_keybfr();
+ break;
+ } // fall thru
+ case '1': case '2': case '3':
+ case '4': case '5': case '6':
+ case '7': case '8': case '9':
+ case '.':
add_key(ch);
break;
- //case UP: case DOWN: case LEFT: case RIGHT:
- //case KPPLAY: case KPBACK: case KPFORW:
+ //case UP: case DOWN:
+ //case LEFT: case RIGHT:
+ //case KPPLAY: case KPFWRD:
+ case KPMUTE:
+ case 'a': // toggle mute audio
+ if( !monitor_audio ) { set_mute_gain(1); set_play_gain(1); }
+ set_audio_monitoring(monitor_audio ? 0 : 1);
+ break;
+ case KPBACK: case 'm': // toggle metering audio
+ set_audio_metering(metering_audio ? 0 : 1);
+ break;
+ case 'd': case KPSLASH:
+ display_channel_info();
+ break;
+ case 'e': case KPSTAR:
+ display_channel_schedule();
+ break;
+ case KPCHUP: case KPPLUS:
+ channel_up();
+ break;
+ case KPCHDN: case KPMINUS:
+ channel_down();
+ break;
+ case KPVOLUP: {
+ set_play_gain(play_gain * 1.25);
+ break; }
+ case KPVOLDN: {
+ set_play_gain(play_gain * 0.75);
+ break; }
+ case KPFSCRN:
+ case 'f': {
+ RecordMonitorCanvas *canvas = record_monitor->window->canvas;
+ int on = canvas->get_fullscreen() ? 0 : 1;
+ canvas->Canvas::set_fullscreen(on, 0);
+ break; }
#ifdef HAVE_COMMERCIAL
case KPRECD: case 'c': // start capture, mark endpoint
if( !deletions ) {
}
display_cut_icon(10,20);
break;
- case KPSTOP: case 'd': // end capture, start cutting
+ case KPSTOP: case 's': // end capture, start cutting
remote_control->set_color(YELLOW);
stop_commercial_capture(1);
break;
case KPAUSE: case 'x': // ignore current commercial
mark_commercial_capture(DEL_SKIP);
break;
+ case KPPLAY: case 'z': // ignore previous endpoint
+ mark_commercial_capture(DEL_OOPS);
+ break;
#endif
- case KPBACK: case 'a': // toggle mute audio
- if( !monitor_audio ) { set_mute_gain(1); set_play_gain(1); }
- set_audio_monitoring(monitor_audio ? 0 : 1);
+ default:
+ return -1;
+ }
+
+ last_key = key;
+ return 1;
+}
+
+int Record::wintv_process_code(int code)
+{
+#ifdef HAVE_WINTV
+ switch( code ) {
+ case WTV_OK: break;
+ case WTV_LT: break;
+ case WTV_UP: break;
+ case WTV_RT: break;
+ case WTV_DN: break;
+ case WTV_HOME: {
+ RecordMonitorCanvas *canvas = record_monitor->window->canvas;
+ int on = canvas->get_fullscreen() ? 0 : 1;
+ canvas->Canvas::set_fullscreen(on, 0);
+ break; }
+ case WTV_BACK: // toggle metering audio
+ set_audio_metering(metering_audio ? 0 : 1);
+ break;
+ case WTV_VOLUP: {
+ set_play_gain(play_gain * 1.125);
+ break; }
+ case WTV_VOLDN: {
+ set_play_gain(play_gain * 0.875);
+ break; }
+ case WTV_CH_UP:
+ channel_up();
+ break;
+ case WTV_CH_DN:
+ channel_down();
+ break;
+ case WTV_0: {
+ WinTVRecordHandler *wintv_remote = (WinTVRecordHandler *)
+ mwindow->gui->remote_control->handler;
+ WinTV *wintv = !wintv_remote ? 0 : wintv_remote->wintv;
+ if( !wintv || wintv->last_code == WTV_0 ) {
+ clear_keybfr();
+ break;
+ } } // fall thru
+ case WTV_1: case WTV_2: case WTV_3: case WTV_4:
+ case WTV_5: case WTV_6: case WTV_7: case WTV_8:
+ case WTV_9: {
+ int ch = code - WTV_0 + '0';
+ add_key(ch);
+ break; }
+ case WTV_TEXT: // add decimal point
+ add_key('.');
break;
- case 'm': // toggle metering audio
- set_audio_metering(metering_audio ? 0 : 1);
+ case WTV_CC: // change channel
+ set_channel_name(keybfr);
+ clear_keybfr();
break;
-#ifdef HAVE_COMMERCIAL
- case KPPLAY: case 's': // ignore previous endpoint
- mark_commercial_capture(DEL_OOPS);
+ case WTV_BOX:
+ display_channel_schedule();
break;
+ case WTV_START: break;
+ case WTV_REV: break;
+ case WTV_STOP: break;
+ case WTV_PLAY: break;
+ case WTV_FWD: break;
+ case WTV_END: break;
+ case WTV_MUTE: // toggle mute audio
+ if( !monitor_audio ) {
+ set_mute_gain(1);
+ set_play_gain(play_gain);
+ }
+ set_audio_monitoring(monitor_audio ? 0 : 1);
+ break;
+ case WTV_PREV:
+ display_channel_info();
+ break;
+ default:
+ printf("wintv record: unknown code: %04x\n", code);
+ break;
+ }
#endif
- case KPFWRD: case KPSLASH:
- display_channel_info();
+ return 0;
+}
+
+int Record::x10tv_process_code(int code)
+{
+#ifdef HAVE_X10TV
+ switch( code ) {
+ case X10_A: // toggle metering audio
+ set_audio_metering(metering_audio ? 0 : 1);
+ break;
+ case X10_B: break;
+ case X10_POWER: break;
+ case X10_TV: break;
+ case X10_DVD: break;
+ case X10_WWW: break;
+ case X10_BOOK: break;
+ case X10_EDIT: break;
+ case X10_VOLUP: {
+ set_play_gain(play_gain * 1.125);
+ break; }
+ case X10_VOLDN: {
+ set_play_gain(play_gain * 0.875);
+ break; }
+ case X10_MUTE: // toggle mute audio
+ if( !monitor_audio ) {
+ set_mute_gain(1);
+ set_play_gain(play_gain);
+ }
+ set_audio_monitoring(monitor_audio ? 0 : 1);
break;
- case KPMAXW: case KPSTAR:
- display_channel_schedule();
+ case X10_CH_UP:
+ channel_up();
+ break;
+ case X10_CH_DN:
+ channel_down();
+ break;
+ case X10_0: {
+ X10TVRecordHandler *x10tv_remote = (X10TVRecordHandler *)
+ mwindow->gui->remote_control->handler;
+ X10TV *x10tv = !x10tv_remote ? 0 : x10tv_remote->x10tv;
+ if( x10tv->last_code == X10_0 ) {
+ clear_keybfr();
+ break;
+ } } // fall thru
+ case X10_1: case X10_2: case X10_3: case X10_4:
+ case X10_5: case X10_6: case X10_7: case X10_8:
+ case X10_9: {
+ int ch = code - X10_0 + '0';
+ add_key(ch);
+ break; }
+ case X10_MENU: // add decimal point
+ add_key('.');
break;
- case KPCHUP: case KPPLUS:
- channel_up();
+ case X10_SETUP: // change channel
+ set_channel_name(keybfr);
+ clear_keybfr();
break;
- case KPCHDN: case KPMINUS:
- channel_down();
+ case X10_C:
+ display_channel_schedule();
break;
- case 'f': {
- Canvas *canvas = record_monitor->window->canvas;
- canvas->use_fullscreen(canvas->get_fullscreen() ? 0 : 1);
- break; }
+ case X10_UP: break;
+ case X10_D:
+ display_channel_info();
+ break;
+ case X10_PROPS: break;
+ case X10_LT: break;
+ case X10_OK: break;
+ case X10_RT: break;
+ case X10_SCRN: {
+ RecordMonitorCanvas *canvas = record_monitor->window->canvas;
+ int on = canvas->get_fullscreen() ? 0 : 1;
+ canvas->Canvas::set_fullscreen(on, 0);
+ break; }
+ case X10_E: break;
+ case X10_DN: break;
+ case X10_F: break;
+ case X10_REW: break;
+ case X10_PLAY: break;
+ case X10_FWD: break;
+ case X10_REC: break;
+ case X10_STOP: break;
+ case X10_PAUSE: break;
+
default:
- return -1;
+ printf("x10tv record: unknown code: %04x\n", code);
+ break;
}
-
- last_key = key;
- return 1;
+#endif
+ return 0;
}
#ifdef HAVE_COMMERCIAL
remote_color(record->status_color);
}
+// HAVE_COMMERCIAL
#endif