X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Frecord.C;h=f42fe9e128497c419cba6a55b53229c59bd80aff;hp=2dd9e2c5e60ae55df8a7936d0509a05847e73262;hb=HEAD;hpb=83c58d6d78f6bf0d1d1fd4cfba8654906fe6ec29 diff --git a/cinelerra-5.1/cinelerra/record.C b/cinelerra-5.1/cinelerra/record.C index 2dd9e2c5..f42fe9e1 100644 --- a/cinelerra-5.1/cinelerra/record.C +++ b/cinelerra-5.1/cinelerra/record.C @@ -46,7 +46,9 @@ #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" @@ -75,6 +77,8 @@ #include "tracks.h" #include "videoconfig.h" #include "videodevice.h" +#include "wintv.h" +#include "x10tv.h" #include #include @@ -160,6 +164,7 @@ Record::Record(MWindow *mwindow, RecordMenuItem *menu_item) cutads_status = new RecordCutAdsStatus(this); blink_status = new RecordBlinkStatus(this); #endif + deinterlace = RECORD_LACE_ODD; } Record::~Record() @@ -212,10 +217,12 @@ int Record::load_defaults() 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); @@ -234,6 +241,7 @@ int Record::load_defaults() 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; iupdate("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; ishow_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 ) { @@ -384,7 +394,8 @@ void Record::run() 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 @@ -401,7 +412,7 @@ void Record::run() 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); @@ -550,7 +561,7 @@ int Record::delete_output_file() 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(); @@ -1519,13 +1530,20 @@ void Record::stop_skimming() {} 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:: @@ -1752,34 +1770,63 @@ void Record::add_key(int ch) 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 ) { @@ -1793,48 +1840,188 @@ int Record::remote_process_key(RemoteControl *remote_control, int key) } 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 @@ -2074,4 +2261,5 @@ run() remote_color(record->status_color); } +// HAVE_COMMERCIAL #endif