X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fexport_range_markers_dialog.cc;h=4b991629743ca4a598e0fe7c953e7d13cffbcfb3;hb=5932b7903a7c43cc3b5cfd043e64d577e0125799;hp=b6bd25a60d2993152041964e0a1137dcba1a43b4;hpb=62c4e8188457c8e0da9eb98202a5bc2a07c9250b;p=ardour.git diff --git a/gtk2_ardour/export_range_markers_dialog.cc b/gtk2_ardour/export_range_markers_dialog.cc index b6bd25a60d..4b99162974 100644 --- a/gtk2_ardour/export_range_markers_dialog.cc +++ b/gtk2_ardour/export_range_markers_dialog.cc @@ -22,8 +22,8 @@ #include -#include -#include +#include "ardour/audioengine.h" +#include "ardour/sndfile_helpers.h" #include "ardour_ui.h" #include "export_range_markers_dialog.h" @@ -35,14 +35,14 @@ using namespace ARDOUR; using namespace PBD; using namespace std; -ExportRangeMarkersDialog::ExportRangeMarkersDialog (PublicEditor& editor) +ExportRangeMarkersDialog::ExportRangeMarkersDialog (PublicEditor& editor) : ExportDialog(editor) -{ - set_title (_("ardour: export ranges")); +{ + set_title (_("Export Ranges")); file_frame.set_label (_("Export to Directory")); do_not_allow_export_cd_markers(); - + total_duration = 0; current_range_marker_index = 0; } @@ -52,9 +52,9 @@ ExportRangeMarkersDialog::browse_action () const { return Gtk::FILE_CHOOSER_ACTION_CREATE_FOLDER; } - -void -ExportRangeMarkersDialog::export_audio_data () + +void +ExportRangeMarkersDialog::export_data () { getSession().locations()->apply(*this, &ExportRangeMarkersDialog::process_range_markers_export); } @@ -65,7 +65,7 @@ ExportRangeMarkersDialog::process_range_markers_export(Locations::LocationList& Locations::LocationList::iterator locationIter; current_range_marker_index = 0; init_progress_computing(locations); - + for (locationIter = locations.begin(); locationIter != locations.end(); ++locationIter) { Location *currentLocation = (*locationIter); @@ -74,34 +74,35 @@ ExportRangeMarkersDialog::process_range_markers_export(Locations::LocationList& string filepath = get_target_filepath( get_selected_file_name(), currentLocation->name(), - sndfile_file_ending_from_string(get_selected_header_format())); - + get_selected_header_format()); + initSpec(filepath); - + spec.start_frame = currentLocation->start(); spec.end_frame = currentLocation->end(); - getSession().request_locate(spec.start_frame, false); - - if (getSession().start_audio_export(spec)){ - // if export fails + if (getSession().start_export(spec)){ + // if export fails return; } // wait until export of this range finished gtk_main_iteration(); - while(spec.running){ + + while (spec.running){ if(gtk_events_pending()){ gtk_main_iteration(); }else { usleep(10000); } } - + current_range_marker_index++; + + getSession().stop_export (spec); } } - + spec.running = false; } @@ -116,27 +117,26 @@ ExportRangeMarkersDialog::get_target_filepath(string path, string filename, stri string target_filepath = target_path + filename + postfix; struct stat statbuf; - + for(int counter=1; (stat (target_filepath.c_str(), &statbuf) == 0); counter++){ - // while file exists + // while file exists ostringstream scounter; scounter.flush(); scounter << counter; - - target_filepath = + + target_filepath = target_path + filename + "_" + scounter.str() + postfix; } - + return target_filepath; } - bool ExportRangeMarkersDialog::is_filepath_valid(string &filepath) { // sanity check file name first struct stat statbuf; - + if (filepath.empty()) { // warning dialog string txt = _("Please enter a valid target directory."); @@ -144,51 +144,50 @@ ExportRangeMarkersDialog::is_filepath_valid(string &filepath) msg.run(); return false; } - - if ( (stat (filepath.c_str(), &statbuf) != 0) || + + if ( (stat (filepath.c_str(), &statbuf) != 0) || (!S_ISDIR (statbuf.st_mode)) ) { - string txt = _("Please select an existing target directory. Files are not allowed!"); - MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true); - msg.run(); - return false; + string txt = _("Please select an existing target directory. Files are not allowed!"); + MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true); + msg.run(); + return false; } - + // directory needs to exist and be writable string dirpath = Glib::path_get_dirname (filepath); - if (::access (dirpath.c_str(), W_OK) != 0) { + if (!exists_and_writable (dirpath)) { string txt = _("Cannot write file in: ") + dirpath; MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true); msg.run(); return false; } - + return true; } - void ExportRangeMarkersDialog::init_progress_computing(Locations::LocationList& locations) { // flush vector range_markers_durations_aggregated.resize(0); - - nframes_t duration_before_current_location = 0; + + framecnt_t duration_before_current_location = 0; Locations::LocationList::iterator locationIter; - + for (locationIter = locations.begin(); locationIter != locations.end(); ++locationIter) { Location *currentLocation = (*locationIter); - + if(currentLocation->is_range_marker()){ range_markers_durations_aggregated.push_back (duration_before_current_location); - - nframes_t duration = currentLocation->end() - currentLocation->start(); - + + framecnt_t duration = currentLocation->end() - currentLocation->start(); + range_markers_durations.push_back (duration); - duration_before_current_location += duration; + duration_before_current_location += duration; } } - total_duration = duration_before_current_location; + total_duration = duration_before_current_location; } @@ -197,12 +196,6 @@ ExportRangeMarkersDialog::progress_timeout () { double progress = 0.0; - cerr << "Progress timeout, total = " << total_duration << " index = " << current_range_marker_index - << " current = " << range_markers_durations[current_range_marker_index] - << " agg = " << range_markers_durations_aggregated[current_range_marker_index] - << " prog = " << spec.progress - << endl; - if (current_range_marker_index >= range_markers_durations.size()){ progress = 1.0; } else{ @@ -210,7 +203,7 @@ ExportRangeMarkersDialog::progress_timeout () (spec.progress * (double) range_markers_durations[current_range_marker_index])) / (double) total_duration; } - + set_progress_fraction( progress ); return TRUE; }