summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSakari Bergen <sakari.bergen@beatwaves.net>2012-01-28 18:14:19 +0000
committerSakari Bergen <sakari.bergen@beatwaves.net>2012-01-28 18:14:19 +0000
commitdb384a6f143ee878e70740c65e7c7f699e3fa076 (patch)
treefe633d92fb075f3010e70356255db4e3980b3823
parentab8cea1d7c19fddc6b81a6ba4a303a00e4fdd93c (diff)
Go back to one progress bar with several passes in export.
Don't calculate the progress bar position in the engine, let the UI decide. Work around progress bar bug (not verified, as I could not reproduce). git-svn-id: svn://localhost/ardour2/branches/3.0@11377 d708f5d6-7413-0410-9779-e7cbd77b26cf
-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