X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Frecord.C;h=50cfb74136e5107ec9f8604838e85b4890bb05ce;hp=bf2c32df2048fd321d3d09aec88d54c481dc2e2b;hb=a4de4732339bf38b5b225c533be1bdf60748f04a;hpb=49f85559268fc040fe7ba5611cc0520793cf728b diff --git a/cinelerra-5.1/cinelerra/record.C b/cinelerra-5.1/cinelerra/record.C index bf2c32df..50cfb741 100644 --- a/cinelerra-5.1/cinelerra/record.C +++ b/cinelerra-5.1/cinelerra/record.C @@ -1,21 +1,21 @@ /* * CINELERRA * Copyright (C) 2009-2013 Adam Williams - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ #include "asset.h" @@ -163,7 +163,7 @@ Record::Record(MWindow *mwindow, RecordMenuItem *menu_item) Record::~Record() { mwindow->gui->record = 0; - stop(); join(); + stop(); delete blink_status; delete cutads_status; stop_skimming(); @@ -369,7 +369,7 @@ void Record::run() if( channel ) video_stream = channel->video_stream; } - stop(); + stop(0); edl->Garbage::remove_user(); if( mwindow->gui->remote_control->deactivate() ) @@ -433,9 +433,12 @@ void Record::run() default_asset->Garbage::remove_user(); } -void Record::stop() +void Record::stop(int wait) { stop_operation(); + if( wait && running() ) + record_gui->set_done(1); + join(); window_lock->lock("Record::stop"); delete record_thread; record_thread = 0; delete record_monitor; record_monitor = 0; @@ -588,7 +591,6 @@ void Record::start() window_lock->unlock(); } else { - stop(); join(); init_lock->reset(); Thread::start(); } @@ -738,8 +740,8 @@ Channel *Record::get_editing_channel() return batch ? batch->channel : 0; } -ArrayList* Record::get_video_inputs() -{ +ArrayList* Record::get_video_inputs() +{ return default_asset->video_data && vdevice ? vdevice->get_inputs() : 0; } @@ -965,11 +967,11 @@ void Record::open_audio_input() if( adevice ) { int sw_pos = SESSION->record_positioning == RECORD_POS_SOFTWARE; adevice->set_software_positioning(sw_pos); - adevice->open_input(SESSION->aconfig_in, SESSION->vconfig_in, + adevice->open_input(SESSION->aconfig_in, SESSION->vconfig_in, default_asset->sample_rate, get_fragment_samples(), default_asset->channels, SESSION->real_time_record); adevice->start_recording(); - adevice->open_monitor(SESSION->playback_config->aconfig,monitor_audio); + adevice->open_monitor(SESSION->playback_config->aconfig,monitor_audio); adevice->set_vdevice(vdevice); if( vdevice ) vdevice->set_adevice(adevice); } @@ -1068,7 +1070,7 @@ int Record::start_toc() Asset *asset = batch->asset; char source_filename[BCTEXTLEN], toc_path[BCTEXTLEN]; IndexFile::get_index_filename(source_filename, - mwindow->preferences->index_directory, + mwindow->preferences->index_directory, toc_path, asset->path,".toc"); if( default_asset->video_data ) return vdevice->start_toc(asset->path, toc_path); @@ -1524,7 +1526,7 @@ display_cut_icon(int x, int y) #ifdef HAVE_DVB DeviceDVBInput *Record:: dvb_device() -{ +{ DeviceDVBInput *dvb_dev = !vdevice ? 0 : (DeviceDVBInput *)vdevice->mpeg_device(); if( !dvb_dev ) dvb_dev = !adevice ? 0 :