diff options
-rw-r--r-- | gtk2_ardour/export_dialog.cc | 30 | ||||
-rw-r--r-- | gtk2_ardour/export_dialog.h | 6 | ||||
-rw-r--r-- | libs/ardour/ardour/export_status.h | 4 | ||||
-rw-r--r-- | libs/ardour/export_handler.cc | 7 | ||||
-rw-r--r-- | libs/ardour/export_status.cc | 7 |
5 files changed, 29 insertions, 25 deletions
diff --git a/gtk2_ardour/export_dialog.cc b/gtk2_ardour/export_dialog.cc index 61fa64ad20..845a4a3680 100644 --- a/gtk2_ardour/export_dialog.cc +++ b/gtk2_ardour/export_dialog.cc @@ -125,10 +125,6 @@ ExportDialog::init () progress_widget.pack_start (progress_label, false, false, 6); progress_widget.pack_start (progress_bar, false, false, 6); - progress_widget.pack_start (normalizing_widget, false, false, 0); - normalizing_widget.pack_start (normalizing_label, false, false, 6); - normalizing_widget.pack_start (normalizing_bar, false, false, 6); - /* Buttons */ cancel_button = add_button (Gtk::Stock::CANCEL, RESPONSE_CANCEL); @@ -314,7 +310,6 @@ ExportDialog::show_progress () warning_widget.hide_all(); progress_widget.show (); progress_widget.show_all_children (); - normalizing_widget.hide(); progress_connection = Glib::signal_timeout().connect (sigc::mem_fun(*this, &ExportDialog::progress_timeout), 100); gtk_main_iteration (); @@ -334,20 +329,27 @@ ExportDialog::show_progress () gint ExportDialog::progress_timeout () { + std::string status_text; + float progress = 0.0; if (status->normalizing) { - normalizing_widget.show(); - normalizing_label.set_text (string_compose (_("Normalizing timespan %1 of %2"), - status->timespan, status->total_timespans)); - normalizing_bar.set_fraction (status->progress); + status_text = string_compose (_("Normalizing timespan %1 of %2"), + status->timespan, status->total_timespans); + progress = ((float) status->current_normalize_cycle) / status->total_normalize_cycles; } else { - normalizing_bar.set_fraction (0); - normalizing_label.set_text (""); + status_text = string_compose (_("Exporting timespan %1 of %2"), + status->timespan, status->total_timespans); + progress = ((float) status->processed_frames_current_timespan) / status->total_frames_current_timespan; + } + progress_label.set_text (status_text); - progress_label.set_text (string_compose (_("Exporting timespan %1 of %2"), - status->timespan, status->total_timespans)); - progress_bar.set_fraction (status->progress); + if (progress < previous_progress) { + // Work around gtk bug + progress_bar.hide(); + progress_bar.show(); } + previous_progress = progress; + progress_bar.set_fraction (progress); return TRUE; } diff --git a/gtk2_ardour/export_dialog.h b/gtk2_ardour/export_dialog.h index 9b06492cdd..412d030f96 100644 --- a/gtk2_ardour/export_dialog.h +++ b/gtk2_ardour/export_dialog.h @@ -131,11 +131,7 @@ class ExportDialog : public ArdourDialog { Gtk::ProgressBar progress_bar; sigc::connection progress_connection; - /* Normalizing */ - - Gtk::VBox normalizing_widget; - Gtk::Label normalizing_label; - Gtk::ProgressBar normalizing_bar; + float previous_progress; // Needed for gtk bug workaround /* Buttons */ diff --git a/libs/ardour/ardour/export_status.h b/libs/ardour/ardour/export_status.h index 5a50777f94..c85d37156c 100644 --- a/libs/ardour/ardour/export_status.h +++ b/libs/ardour/ardour/export_status.h @@ -52,7 +52,6 @@ struct ExportStatus { /* Progress info */ - volatile float progress; volatile bool normalizing; volatile uint32_t total_timespans; @@ -61,6 +60,9 @@ struct ExportStatus { volatile framecnt_t total_frames; volatile framecnt_t processed_frames; + volatile framecnt_t total_frames_current_timespan; + volatile framecnt_t processed_frames_current_timespan; + volatile uint32_t total_normalize_cycles; volatile uint32_t current_normalize_cycle; diff --git a/libs/ardour/export_handler.cc b/libs/ardour/export_handler.cc index ef9d32474a..d6ade6532c 100644 --- a/libs/ardour/export_handler.cc +++ b/libs/ardour/export_handler.cc @@ -163,6 +163,8 @@ ExportHandler::start_timespan () } current_timespan = config_map.begin()->first; + export_status->total_frames_current_timespan = current_timespan->get_length(); + export_status->processed_frames_current_timespan = 0; /* Register file configurations to graph builder */ @@ -215,8 +217,7 @@ ExportHandler::process_timespan (framecnt_t frames) process_position += frames_to_read; export_status->processed_frames += frames_to_read; - export_status->progress = (float) export_status->processed_frames / - export_status->total_frames; + export_status->processed_frames_current_timespan += frames_to_read; /* Do actual processing */ int ret = graph_builder->process (frames_to_read, last_cycle); @@ -246,8 +247,6 @@ ExportHandler::process_normalize () export_status->normalizing = true; } - export_status->progress = (float) export_status->current_normalize_cycle / - export_status->total_normalize_cycles; export_status->current_normalize_cycle++; return 0; diff --git a/libs/ardour/export_status.cc b/libs/ardour/export_status.cc index dbb96432ee..70ce8dd27e 100644 --- a/libs/ardour/export_status.cc +++ b/libs/ardour/export_status.cc @@ -37,7 +37,6 @@ ExportStatus::init () _finished = false; _errors = false; - progress = 0.0; normalizing = false; total_timespans = 0; @@ -45,6 +44,12 @@ ExportStatus::init () total_frames = 0; processed_frames = 0; + + total_frames_current_timespan = 0; + processed_frames_current_timespan = 0; + + total_normalize_cycles = 0; + current_normalize_cycle = 0; } void |