summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/export_dialog.cc30
-rw-r--r--gtk2_ardour/export_dialog.h6
-rw-r--r--libs/ardour/ardour/export_status.h4
-rw-r--r--libs/ardour/export_handler.cc7
-rw-r--r--libs/ardour/export_status.cc7
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