Merge branch 'master' of git@git.ardour.org:ardour/ardour
This commit is contained in:
@@ -185,7 +185,8 @@ static const char* translators[] = {
|
||||
\n\tRobert Schwede <schwede@ironshark.com>\
|
||||
\n\tBenjamin Scherrer <realhangman@web.de>\
|
||||
\n\tEdgar Aichinger <edogawa@aon.at>\
|
||||
\n\tRichard Oax <richard@pagliacciempire.de>\n"),
|
||||
\n\tRichard Oax <richard@pagliacciempire.de>\
|
||||
\n\tRobin Gloster <robin@loc-com.de>\n"),
|
||||
N_("Italian:\n\tFilippo Pappalardo <filippo@email.it>\n\tRaffaele Morelli <raffaele.morelli@gmail.com>\n"),
|
||||
N_("Portuguese:\n\tRui Nuno Capela <rncbc@rncbc.org>\n"),
|
||||
N_("Brazilian Portuguese:\n\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\
|
||||
@@ -590,6 +591,11 @@ About::About ()
|
||||
get_action_area()->add (*config_button);
|
||||
get_action_area()->reorder_child (*config_button, 0);
|
||||
config_button->signal_clicked().connect (mem_fun (*this, &About::show_config_info));
|
||||
|
||||
Gtk::Button *btn = static_cast<Gtk::Button*>(get_widget_for_response(Gtk::RESPONSE_CANCEL));
|
||||
if (btn) {
|
||||
btn->signal_clicked().connect(sigc::mem_fun(static_cast<Gtk::Window*>(this), &Gtk::Window::hide));
|
||||
}
|
||||
}
|
||||
|
||||
About::~About ()
|
||||
|
||||
@@ -27,8 +27,6 @@
|
||||
#include <cerrno>
|
||||
#include <fstream>
|
||||
|
||||
#include <boost/locale.hpp>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
@@ -815,13 +813,13 @@ ARDOUR_UI::check_memory_locking ()
|
||||
"runs out of memory. \n\n"
|
||||
"You can view the memory limit with 'ulimit -l', "
|
||||
"and it is normally controlled by %2"),
|
||||
PROGRAM_NAME).c_str(),
|
||||
PROGRAM_NAME,
|
||||
#ifdef __FreeBSD__
|
||||
X_("/etc/login.conf")
|
||||
X_("/etc/login.conf")
|
||||
#else
|
||||
X_(" /etc/security/limits.conf")
|
||||
X_(" /etc/security/limits.conf")
|
||||
#endif
|
||||
);
|
||||
).c_str());
|
||||
|
||||
msg.set_default_response (RESPONSE_OK);
|
||||
|
||||
@@ -3425,9 +3423,23 @@ ARDOUR_UI::start_video_server (Gtk::Window* float_window, bool popup_msg)
|
||||
Config->set_video_advanced_setup(true);
|
||||
}
|
||||
|
||||
if (video_server_process) {
|
||||
delete video_server_process;
|
||||
}
|
||||
|
||||
video_server_process = new SystemExec(icsd_exec, argp);
|
||||
video_server_process->start();
|
||||
sleep(1);
|
||||
if (video_server_process->start()) {
|
||||
warning << _("Cannot launch the video-server") << endmsg;
|
||||
continue;
|
||||
}
|
||||
int timeout = 120; // 6 sec
|
||||
while (!ARDOUR_UI::instance()->video_timeline->check_server()) {
|
||||
usleep (50000);
|
||||
if (--timeout <= 0 || !video_server_process->is_running()) break;
|
||||
}
|
||||
if (timeout <= 0) {
|
||||
warning << _("Video-server was started but does not respond to requests...") << endmsg;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -120,9 +120,7 @@ ExportTimespanSelector::add_range_to_selection (ARDOUR::Location const * loc)
|
||||
ExportTimespanPtr span = _session->get_export_handler()->add_timespan();
|
||||
|
||||
std::string id;
|
||||
if (loc == state->session_range.get()) {
|
||||
id = "session";
|
||||
} else if (loc == state->selection_range.get()) {
|
||||
if (loc == state->selection_range.get()) {
|
||||
id = "selection";
|
||||
} else {
|
||||
id = loc->id().to_s();
|
||||
@@ -367,9 +365,7 @@ ExportTimespanSelectorSingle::fill_range_list ()
|
||||
if (!state) { return; }
|
||||
|
||||
std::string id;
|
||||
if (!range_id.compare (X_("session"))) {
|
||||
id = state->session_range->id().to_s();
|
||||
} else if (!range_id.compare (X_("selection"))) {
|
||||
if (!range_id.compare (X_("selection"))) {
|
||||
id = state->selection_range->id().to_s();
|
||||
} else {
|
||||
id = range_id;
|
||||
@@ -459,9 +455,8 @@ ExportTimespanSelectorMultiple::set_selection_from_state ()
|
||||
for (tree_it = range_list->children().begin(); tree_it != range_list->children().end(); ++tree_it) {
|
||||
Location * loc = tree_it->get_value (range_cols.location);
|
||||
|
||||
if ((!id.compare ("session") && loc == state->session_range.get()) ||
|
||||
(!id.compare ("selection") && loc == state->selection_range.get()) ||
|
||||
(!id.compare (loc->id().to_s()))) {
|
||||
if ((id == "selection" && loc == state->selection_range.get()) ||
|
||||
(id == loc->id().to_s())) {
|
||||
tree_it->set_value (range_cols.selected, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "ardour/dB.h"
|
||||
#include "ardour/utils.h"
|
||||
|
||||
#include <pangomm.h>
|
||||
#include <gtkmm/style.h>
|
||||
#include <gdkmm/color.h>
|
||||
#include <gtkmm2ext/utils.h>
|
||||
@@ -236,7 +237,7 @@ GainMeterBase::setup_gain_adjustment ()
|
||||
|
||||
ignore_toggle = true;
|
||||
|
||||
if (_amp->output_streams().n_midi() == 0) {
|
||||
if (_amp->output_streams().n_midi() <= _amp->output_streams().n_audio()) {
|
||||
_data_type = DataType::AUDIO;
|
||||
gain_adjustment.set_lower (0.0);
|
||||
gain_adjustment.set_upper (1.0);
|
||||
@@ -860,7 +861,7 @@ GainMeter::GainMeter (Session* s, int fader_length)
|
||||
gain_display_box.pack_start (gain_display, true, true);
|
||||
|
||||
meter_metric_area.set_name ("AudioTrackMetrics");
|
||||
set_size_request_to_display_given_text (meter_metric_area, "-127", 0, 0);
|
||||
set_size_request_to_display_given_text (meter_metric_area, "-127", 1, 0);
|
||||
|
||||
gain_automation_style_button.set_name ("mixer strip button");
|
||||
gain_automation_state_button.set_name ("mixer strip button");
|
||||
@@ -952,7 +953,32 @@ GainMeter::render_metrics (Gtk::Widget& w, vector<DataType> types)
|
||||
|
||||
cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
|
||||
cairo_t* cr = cairo_create (surface);
|
||||
PangoLayout* layout = gtk_widget_create_pango_layout (w.gobj(), "");
|
||||
Glib::RefPtr<Pango::Layout> layout = Pango::Layout::create(w.get_pango_context());
|
||||
|
||||
|
||||
Pango::AttrList audio_font_attributes;
|
||||
Pango::AttrList midi_font_attributes;
|
||||
|
||||
Pango::AttrFontDesc* font_attr;
|
||||
Pango::FontDescription font;
|
||||
|
||||
font = Pango::FontDescription (""); // use defaults
|
||||
//font = get_font_for_style("gain-fader");
|
||||
//font = w.get_style()->get_font();
|
||||
|
||||
font.set_weight (Pango::WEIGHT_NORMAL);
|
||||
font.set_size (10.0 * PANGO_SCALE);
|
||||
font_attr = new Pango::AttrFontDesc (Pango::Attribute::create_attr_font_desc (font));
|
||||
audio_font_attributes.change (*font_attr);
|
||||
delete font_attr;
|
||||
|
||||
font.set_weight (Pango::WEIGHT_ULTRALIGHT);
|
||||
font.set_stretch (Pango::STRETCH_ULTRA_CONDENSED);
|
||||
font.set_size (7.5 * PANGO_SCALE);
|
||||
font_attr = new Pango::AttrFontDesc (Pango::Attribute::create_attr_font_desc (font));
|
||||
midi_font_attributes.change (*font_attr);
|
||||
delete font_attr;
|
||||
|
||||
|
||||
cairo_move_to (cr, 0, 0);
|
||||
cairo_rectangle (cr, 0, 0, width, height);
|
||||
@@ -988,6 +1014,7 @@ GainMeter::render_metrics (Gtk::Widget& w, vector<DataType> types)
|
||||
|
||||
switch (*i) {
|
||||
case DataType::AUDIO:
|
||||
layout->set_attributes (audio_font_attributes);
|
||||
points.push_back (-50);
|
||||
points.push_back (-40);
|
||||
points.push_back (-30);
|
||||
@@ -999,6 +1026,7 @@ GainMeter::render_metrics (Gtk::Widget& w, vector<DataType> types)
|
||||
break;
|
||||
|
||||
case DataType::MIDI:
|
||||
layout->set_attributes (midi_font_attributes);
|
||||
points.push_back (0);
|
||||
if (types.size() == 1) {
|
||||
points.push_back (32);
|
||||
@@ -1030,23 +1058,23 @@ GainMeter::render_metrics (Gtk::Widget& w, vector<DataType> types)
|
||||
|
||||
cairo_set_line_width (cr, 1.0);
|
||||
cairo_move_to (cr, 0, pos);
|
||||
cairo_line_to (cr, 4, pos);
|
||||
cairo_line_to (cr, 3.5, pos);
|
||||
cairo_stroke (cr);
|
||||
|
||||
snprintf (buf, sizeof (buf), "%d", abs (*j));
|
||||
pango_layout_set_text (layout, buf, strlen (buf));
|
||||
snprintf (buf, sizeof (buf), "%2d", abs (*j));
|
||||
layout->set_text(buf);
|
||||
|
||||
/* we want logical extents, not ink extents here */
|
||||
|
||||
int tw, th;
|
||||
pango_layout_get_pixel_size (layout, &tw, &th);
|
||||
layout->get_pixel_size(tw, th);
|
||||
|
||||
int p = pos - (th / 2);
|
||||
p = min (p, height - th);
|
||||
p = max (p, 0);
|
||||
|
||||
cairo_move_to (cr, 6, p);
|
||||
pango_cairo_show_layout (cr, layout);
|
||||
cairo_move_to (cr, 5, p);
|
||||
pango_cairo_show_layout (cr, layout->gobj());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1061,7 +1089,6 @@ GainMeter::render_metrics (Gtk::Widget& w, vector<DataType> types)
|
||||
|
||||
cairo_destroy (cr);
|
||||
cairo_surface_destroy (surface);
|
||||
g_object_unref (layout);
|
||||
|
||||
return pattern;
|
||||
}
|
||||
|
||||
@@ -256,6 +256,10 @@ GenericPluginUI::build ()
|
||||
continue;
|
||||
}
|
||||
|
||||
if (plugin->describe_parameter (Evoral::Parameter(PluginAutomation, 0, i)) == X_("hidden")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ControlUI* cui;
|
||||
|
||||
boost::shared_ptr<ARDOUR::AutomationControl> c
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1485,13 +1485,13 @@ MidiTimeAxisView::playback_channel_mode_changed ()
|
||||
{
|
||||
switch (midi_track()->get_playback_channel_mode()) {
|
||||
case AllChannels:
|
||||
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Play"), ("all")));
|
||||
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Play"), _("all")));
|
||||
break;
|
||||
case FilterChannels:
|
||||
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Play"), ("some")));
|
||||
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Play"), _("some")));
|
||||
break;
|
||||
case ForceChannel:
|
||||
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2>%3</i>", _("Play"), ("all"), ffs (midi_track()->get_playback_channel_mask())));
|
||||
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2>%3</i>", _("Play"), _("all"), ffs (midi_track()->get_playback_channel_mask())));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1501,13 +1501,13 @@ MidiTimeAxisView::capture_channel_mode_changed ()
|
||||
{
|
||||
switch (midi_track()->get_capture_channel_mode()) {
|
||||
case AllChannels:
|
||||
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Rec"), ("all")));
|
||||
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Rec"), _("all")));
|
||||
break;
|
||||
case FilterChannels:
|
||||
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Rec"), ("some")));
|
||||
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Rec"), _("some")));
|
||||
break;
|
||||
case ForceChannel:
|
||||
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2>%3</i>", _("Rec"), ("all"), ffs (midi_track()->get_capture_channel_mask())));
|
||||
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2>%3</i>", _("Rec"), _("all"), ffs (midi_track()->get_capture_channel_mask())));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@ msgstr "Armand Klenk"
|
||||
|
||||
#: about.cc:153
|
||||
msgid "Julien de Kozak"
|
||||
msgstr ""
|
||||
msgstr "Julien de Kozak"
|
||||
|
||||
#: about.cc:154
|
||||
msgid "Matt Krai"
|
||||
@@ -269,6 +269,7 @@ msgid ""
|
||||
"\tBenjamin Scherrer <realhangman@web.de>\n"
|
||||
"\tEdgar Aichinger <edogawa@aon.at>\n"
|
||||
"\tRichard Oax <richard@pagliacciempire.de>\n"
|
||||
"\tRobin Gloster <robin@loc-com.de>\n"
|
||||
msgstr ""
|
||||
"Deutsch:\n"
|
||||
"\tKarsten Petersen <kapet@kapet.de>\n"
|
||||
@@ -277,6 +278,7 @@ msgstr ""
|
||||
"\tBenjamin Scherrer <realhangman@web.de>\n"
|
||||
"\tEdgar Aichinger <edogawa@aon.at>\n"
|
||||
"\tRichard Oax <richard@pagliacciempire.de>\n"
|
||||
"\tRobin Gloster <robin@loc-com.de>\n"
|
||||
|
||||
#: about.cc:189
|
||||
msgid ""
|
||||
@@ -380,7 +382,7 @@ msgstr "Copyright (C) 1999-2013 Paul Davis\n"
|
||||
|
||||
#: about.cc:583
|
||||
msgid "http://ardour.org/"
|
||||
msgstr "http://ardour.org"
|
||||
msgstr "http://ardour.org/"
|
||||
|
||||
#: about.cc:584
|
||||
msgid ""
|
||||
@@ -420,7 +422,7 @@ msgstr "Kanaleinstellungen:"
|
||||
|
||||
#: add_route_dialog.cc:57
|
||||
msgid "Track mode:"
|
||||
msgstr "SpurModus"
|
||||
msgstr "Spurmodus"
|
||||
|
||||
#: add_route_dialog.cc:58
|
||||
msgid "Instrument:"
|
||||
@@ -440,7 +442,7 @@ msgstr "Audio+MIDI-Spuren"
|
||||
|
||||
#: add_route_dialog.cc:82
|
||||
msgid "Busses"
|
||||
msgstr "Audio-Busse"
|
||||
msgstr "Audiobusse"
|
||||
|
||||
#: add_route_dialog.cc:104
|
||||
msgid "Add:"
|
||||
@@ -495,7 +497,7 @@ msgid ""
|
||||
"track instead."
|
||||
msgstr ""
|
||||
"Audio+MIDI Spuren sind <b>NUR</b> für den Gebrauch mit Plugins gedacht, die "
|
||||
"sowohl Audio als auch MIDI Eingangsdaten nützen\n"
|
||||
"sowohl Audio als auch MIDI Eingangsdaten benutzen\n"
|
||||
"\n"
|
||||
"Falls Sie nicht vorhaben, so ein Plugin zu benutzen, verwenden Sie "
|
||||
"stattdessen eine normale Audio- oder MIDI-Spur"
|
||||
@@ -563,7 +565,7 @@ msgstr "-keine-"
|
||||
|
||||
#: ambiguous_file_dialog.cc:30
|
||||
msgid "Ambiguous File"
|
||||
msgstr "Mehrdeutige Datei"
|
||||
msgstr "Mehrmals gefundene Datei"
|
||||
|
||||
#: ambiguous_file_dialog.cc:35
|
||||
msgid ""
|
||||
@@ -621,7 +623,7 @@ msgstr "Normalisieren"
|
||||
|
||||
#: analysis_window.cc:59
|
||||
msgid "FFT analysis window"
|
||||
msgstr "FFT - Analysefenster"
|
||||
msgstr "FFT-Analysefenster"
|
||||
|
||||
#: analysis_window.cc:60 editor.cc:1880
|
||||
msgid "Spectral Analysis"
|
||||
@@ -653,11 +655,11 @@ msgstr "Vorhören"
|
||||
|
||||
#: ardour_ui.cc:169
|
||||
msgid "solo"
|
||||
msgstr "solo"
|
||||
msgstr "Solo"
|
||||
|
||||
#: ardour_ui.cc:170
|
||||
msgid "feedback"
|
||||
msgstr "feedback"
|
||||
msgstr "Feedback"
|
||||
|
||||
#: ardour_ui.cc:172
|
||||
msgid "Errors"
|
||||
@@ -684,15 +686,15 @@ msgid ""
|
||||
"controlled by %2"
|
||||
msgstr ""
|
||||
"WARNUNG: Ihr System hat eine Begrenzung für die Reservierung von "
|
||||
"Arbeitsspeicher eingestellt. Dies könnte dazu führen, dass %1 zu schnell der "
|
||||
"Speicher ausgeht.\n"
|
||||
"Arbeitsspeicher eingestellt. Dies könnte dazu führen, dass %1 der "
|
||||
"Speicher ausgeht bevor die Systembegrenzung erreicht ist.\n"
|
||||
"\n"
|
||||
"Sie können die Speicherbegrenzung mit 'ulimit -l' einsehen und normalerweise "
|
||||
"in %2 verändern."
|
||||
|
||||
#: ardour_ui.cc:800
|
||||
msgid "Do not show this window again"
|
||||
msgstr "Diese Meldung nicht wieder anzeigen"
|
||||
msgstr "Diese Meldung nicht erneut anzeigen"
|
||||
|
||||
#: ardour_ui.cc:847
|
||||
msgid "Don't quit"
|
||||
@@ -700,7 +702,7 @@ msgstr "Abbrechen"
|
||||
|
||||
#: ardour_ui.cc:848
|
||||
msgid "Just quit"
|
||||
msgstr "Nur beenden"
|
||||
msgstr "Beenden ohne zu speichern"
|
||||
|
||||
#: ardour_ui.cc:849
|
||||
msgid "Save and quit"
|
||||
@@ -874,7 +876,7 @@ msgid ""
|
||||
"You cannot open or close sessions in this condition"
|
||||
msgstr ""
|
||||
"%1 ist derzeit nicht mit JACK verbunden.\n"
|
||||
"Es ist nicht möglich, Projekte zu öffnen oder zu schließen."
|
||||
"Dadurch können keine Projekte geöffnet oder geschlossen werden."
|
||||
|
||||
#: ardour_ui.cc:1455
|
||||
msgid "Open Session"
|
||||
@@ -883,7 +885,7 @@ msgstr "Projekt öffnen"
|
||||
#: ardour_ui.cc:1473 session_import_dialog.cc:169
|
||||
#: session_metadata_dialog.cc:729 startup.cc:1049
|
||||
msgid "%1 sessions"
|
||||
msgstr "%1projekte"
|
||||
msgstr "%1 Projekte"
|
||||
|
||||
#: ardour_ui.cc:1510
|
||||
msgid "You cannot add a track without a session already loaded."
|
||||
@@ -931,8 +933,8 @@ msgid ""
|
||||
"Please create one or more tracks before trying to record.\n"
|
||||
"You can do this with the \"Add Track or Bus\" option in the Session menu."
|
||||
msgstr ""
|
||||
"Bitte fügen Sie mindestens eine oder mehrere Spur hinzu,\n"
|
||||
"bevor Sie aufnehmen. Die geht über \"Spur/Bus hinzufügen\"\n"
|
||||
"Bitte fügen Sie, bevor Sie aufnehmen, mindestens \n"
|
||||
"eine oder mehrere Spur hinzu. Die geht über \"Spur/Bus hinzufügen\"\n"
|
||||
"im Menüpunkt Projekt."
|
||||
|
||||
#: ardour_ui.cc:2084
|
||||
@@ -984,11 +986,11 @@ msgstr "Bestätige das Überschreiben des Schnappschusses"
|
||||
#: ardour_ui.cc:2230
|
||||
msgid "A snapshot already exists with that name. Do you want to overwrite it?"
|
||||
msgstr ""
|
||||
"Ein Schnappschuss mit diesem existiert bereits. Wollen Sie ihn überschreiben?"
|
||||
"Ein Schnappschuss mit diesem Namen existiert bereits. Wollen Sie ihn überschreiben?"
|
||||
|
||||
#: ardour_ui.cc:2233
|
||||
msgid "Overwrite"
|
||||
msgstr "Überschreibe"
|
||||
msgstr "Überschreiben"
|
||||
|
||||
#: ardour_ui.cc:2267
|
||||
msgid "Rename Session"
|
||||
@@ -1011,7 +1013,7 @@ msgid ""
|
||||
"That name is already in use by another directory/folder. Please try again."
|
||||
msgstr ""
|
||||
"Dieser Name wird schon von einem anderen Verzeichnis/Ordner benutzt. Bitte "
|
||||
"nochmal versuchen."
|
||||
"versuchen Sie einen anderen Namen."
|
||||
|
||||
#: ardour_ui.cc:2299
|
||||
msgid ""
|
||||
@@ -1031,7 +1033,7 @@ msgstr "Name für Vorlage"
|
||||
|
||||
#: ardour_ui.cc:2416
|
||||
msgid "-template"
|
||||
msgstr "Vorlage"
|
||||
msgstr "-Vorlage"
|
||||
|
||||
#: ardour_ui.cc:2454
|
||||
msgid ""
|
||||
@@ -1039,7 +1041,7 @@ msgid ""
|
||||
"%1\n"
|
||||
"already exists. Do you want to open it?"
|
||||
msgstr ""
|
||||
"Das Projekt\n"
|
||||
"Dieses Projekt\n"
|
||||
"%1\n"
|
||||
"existiert bereits. Wollen Sie sie öffnen?"
|
||||
|
||||
@@ -1049,7 +1051,7 @@ msgstr "Vorhandenes Projekt öffnen"
|
||||
|
||||
#: ardour_ui.cc:2702
|
||||
msgid "There is no existing session at \"%1\""
|
||||
msgstr "Es gibt kein Projekt an folgender Stelle: \"%1\""
|
||||
msgstr "Es gibt kein Projekt in: \"%1\""
|
||||
|
||||
#: ardour_ui.cc:2792
|
||||
msgid "Please wait while %1 loads your session"
|
||||
@@ -1146,7 +1148,7 @@ msgid_plural ""
|
||||
"\n"
|
||||
"will release an additional %3 %4bytes of disk space.\n"
|
||||
msgstr[0] ""
|
||||
"Die folgende Datei war unbenutzt\n"
|
||||
"Die folgende Datei wurde nicht benutzt\n"
|
||||
"und wurde verschoben nach: %2\n"
|
||||
"\n"
|
||||
"Nach einem Neustart von %5 kann über\n"
|
||||
@@ -1195,44 +1197,48 @@ msgstr "gelöschte Datei"
|
||||
#: ardour_ui.cc:3346
|
||||
msgid ""
|
||||
"Video-Server was not launched by Ardour. The request to stop it is ignored."
|
||||
msgstr ""
|
||||
msgstr "Der Video-Server wurde nicht von Ardour gestartet, der Befehl ihn anzuhalten wird ignoriert."
|
||||
|
||||
#: ardour_ui.cc:3350
|
||||
msgid "Stop Video-Server"
|
||||
msgstr ""
|
||||
msgstr "Video-Server anhalten"
|
||||
|
||||
#: ardour_ui.cc:3351
|
||||
msgid "Do you really want to stop the Video Server?"
|
||||
msgstr ""
|
||||
msgstr "Wollen Sie den Video-Server wirklich anhalten?"
|
||||
|
||||
#: ardour_ui.cc:3354
|
||||
#, fuzzy
|
||||
msgid "Yes, Stop It"
|
||||
msgstr "Ja, entfernen."
|
||||
msgstr "Ja, anhalten."
|
||||
|
||||
#: ardour_ui.cc:3380
|
||||
msgid "The Video Server is already started."
|
||||
msgstr ""
|
||||
msgstr "Der Video-Server läuft bereits"
|
||||
|
||||
#: ardour_ui.cc:3382
|
||||
msgid ""
|
||||
"An external Video Server is configured and can be reached. Not starting a "
|
||||
"new instance."
|
||||
msgstr ""
|
||||
"Ein externer Video-Server wurde konfiguriert, ist aber nicht erreichbar. Es wird "
|
||||
"keine neue Instanz gestartet."
|
||||
|
||||
#: ardour_ui.cc:3390 ardour_ui.cc:3461
|
||||
msgid ""
|
||||
"Could not connect to the Video Server. Start it or configure its access URL "
|
||||
"in Edit -> Preferences."
|
||||
msgstr ""
|
||||
"Es konnte keine Verbindung zum Video-Server hergestellt werden."
|
||||
"Sie müssen ihn vorher starten oder die Adresse in "
|
||||
"Bearbeiten -> Globale Einstellungen anpassen"
|
||||
|
||||
#: ardour_ui.cc:3414
|
||||
msgid "Specified docroot is not an existing directory."
|
||||
msgstr ""
|
||||
msgstr "Das eingestellte Dokumentenverzeichnis existiert nicht."
|
||||
|
||||
#: ardour_ui.cc:3419
|
||||
msgid "Given Video Server is not an executable file."
|
||||
msgstr ""
|
||||
msgstr "Der eingestellte Video-Server ist keine ausführbare Datei."
|
||||
|
||||
#: ardour_ui.cc:3485 editor_audio_import.cc:629
|
||||
msgid "could not open %1"
|
||||
@@ -1240,7 +1246,7 @@ msgstr "Konnte \"%s\" nicht öffnen."
|
||||
|
||||
#: ardour_ui.cc:3489
|
||||
msgid "no video-file selected"
|
||||
msgstr ""
|
||||
msgstr "Es wurde keine Video-Datei ausgewählt."
|
||||
|
||||
#: ardour_ui.cc:3650
|
||||
msgid "Recording was stopped because your system could not keep up."
|
||||
@@ -1277,7 +1283,7 @@ msgstr ""
|
||||
|
||||
#: ardour_ui.cc:3738
|
||||
msgid "Crash Recovery"
|
||||
msgstr "Wiederherstellung"
|
||||
msgstr "Absturz-Wiederherstellung"
|
||||
|
||||
#: ardour_ui.cc:3739
|
||||
msgid ""
|
||||
@@ -1338,11 +1344,11 @@ msgstr "Konnte nicht erneut zu JACK verbinden"
|
||||
|
||||
#: ardour_ui.cc:3902
|
||||
msgid "Check the website for more..."
|
||||
msgstr ""
|
||||
msgstr "Informieren Sie sich auf der Webseite weiter..."
|
||||
|
||||
#: ardour_ui.cc:3915
|
||||
msgid "Click to open the program website in your web browser"
|
||||
msgstr ""
|
||||
msgstr "Klicken Sie, um die Webseite in Ihrem Web-Browse zu öffnen"
|
||||
|
||||
#: ardour_ui.cc:4152
|
||||
msgid ""
|
||||
@@ -1453,7 +1459,6 @@ msgid "When active, there is a feedback loop."
|
||||
msgstr "Wenn aktiv, gibt es eine Rückkopplungsschleife."
|
||||
|
||||
#: ardour_ui2.cc:142
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"<b>Primary Clock</b> right-click to set display mode. Click to edit, click"
|
||||
"+drag a digit or mouse-over+scroll wheel to modify.\n"
|
||||
@@ -1470,7 +1475,6 @@ msgstr ""
|
||||
"Einzelheiten."
|
||||
|
||||
#: ardour_ui2.cc:143
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"<b>Secondary Clock</b> right-click to set display mode. Click to edit, click"
|
||||
"+drag a digit or mouse-over+scroll wheel to modify.\n"
|
||||
@@ -1841,7 +1845,7 @@ msgstr "Start/Stopp"
|
||||
|
||||
#: ardour_ui_ed.cc:308
|
||||
msgid "Stop and Forget Capture"
|
||||
msgstr "Stop + Aufnahme verwerfen"
|
||||
msgstr "Stopp + Aufnahme verwerfen"
|
||||
|
||||
#: ardour_ui_ed.cc:318
|
||||
msgid "Transition To Roll"
|
||||
@@ -1857,7 +1861,7 @@ msgstr "Schleife wiedergeben"
|
||||
|
||||
#: ardour_ui_ed.cc:329
|
||||
msgid "Play Selected Range"
|
||||
msgstr "Gewählten Bereich abspielen"
|
||||
msgstr "Gewählten Bereich wiedergeben"
|
||||
|
||||
#: ardour_ui_ed.cc:332
|
||||
msgid "Play Selection w/Preroll"
|
||||
@@ -2610,7 +2614,7 @@ msgstr "Arbeitspunkt"
|
||||
|
||||
#: editor.cc:200
|
||||
msgid "Mushy"
|
||||
msgstr "Breiig/Matschig"
|
||||
msgstr "Matschig"
|
||||
|
||||
#: editor.cc:201
|
||||
msgid "Smooth"
|
||||
@@ -2658,7 +2662,7 @@ msgstr "CD-Marker"
|
||||
|
||||
#: editor.cc:250
|
||||
msgid "Video Timeline"
|
||||
msgstr ""
|
||||
msgstr "Video Zeitleiste"
|
||||
|
||||
#: editor.cc:266
|
||||
msgid "mode"
|
||||
@@ -3105,7 +3109,7 @@ msgstr "Wiedergabeliste löschen"
|
||||
|
||||
#: editor.cc:3902
|
||||
msgid "Keep Playlist"
|
||||
msgstr "Wiedergabeliste beibehalten"
|
||||
msgstr "Wiedergabeliste behalten"
|
||||
|
||||
#: editor.cc:3903 editor_audio_import.cc:579 editor_ops.cc:5860
|
||||
#: processor_box.cc:1953 processor_box.cc:1978
|
||||
|
||||
4657
gtk2_ardour/po/fr.po
4657
gtk2_ardour/po/fr.po
File diff suppressed because it is too large
Load Diff
@@ -113,7 +113,7 @@ ProcessorEntry::ProcessorEntry (ProcessorBox* parent, boost::shared_ptr<Processo
|
||||
|
||||
_button.set_active (_processor->active());
|
||||
_button.show ();
|
||||
|
||||
|
||||
_processor->ActiveChanged.connect (active_connection, invalidator (*this), boost::bind (&ProcessorEntry::processor_active_changed, this), gui_context());
|
||||
_processor->PropertyChanged.connect (name_connection, invalidator (*this), boost::bind (&ProcessorEntry::processor_property_changed, this, _1), gui_context());
|
||||
|
||||
@@ -247,7 +247,20 @@ ProcessorEntry::processor_property_changed (const PropertyChange& what_changed)
|
||||
void
|
||||
ProcessorEntry::setup_tooltip ()
|
||||
{
|
||||
ARDOUR_UI::instance()->set_tip (_button, name (Wide));
|
||||
if (_processor) {
|
||||
boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (_processor);
|
||||
if (pi) {
|
||||
if (pi->plugin()->has_editor()) {
|
||||
ARDOUR_UI::instance()->set_tip (_button,
|
||||
string_compose (_("<b>%1</b>\nDouble-click to show GUI.\nAlt+double-click to show generic GUI."), name (Wide)));
|
||||
} else {
|
||||
ARDOUR_UI::instance()->set_tip (_button,
|
||||
string_compose (_("<b>%1</b>\nDouble-click to show generic GUI."), name (Wide)));
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
ARDOUR_UI::instance()->set_tip (_button, string_compose ("<b>%1</b>", name (Wide)));
|
||||
}
|
||||
|
||||
string
|
||||
@@ -918,6 +931,7 @@ ProcessorBox::show_processor_menu (int arg)
|
||||
const bool sensitive = !processor_display.selection().empty();
|
||||
ActionManager::set_sensitive (ActionManager::plugin_selection_sensitive_actions, sensitive);
|
||||
edit_action->set_sensitive (one_processor_can_be_edited ());
|
||||
edit_generic_action->set_sensitive (one_processor_can_be_edited ());
|
||||
|
||||
boost::shared_ptr<PluginInsert> pi;
|
||||
if (single_selection) {
|
||||
@@ -925,7 +939,7 @@ ProcessorBox::show_processor_menu (int arg)
|
||||
}
|
||||
|
||||
/* allow editing with an Ardour-generated UI for plugin inserts with editors */
|
||||
edit_generic_action->set_sensitive (pi && pi->plugin()->has_editor ());
|
||||
edit_action->set_sensitive (pi && pi->plugin()->has_editor ());
|
||||
|
||||
/* disallow rename for multiple selections, for plugin inserts and for the fader */
|
||||
rename_action->set_sensitive (single_selection && !pi && !boost::dynamic_pointer_cast<Amp> (single_selection->processor ()));
|
||||
@@ -1050,13 +1064,14 @@ ProcessorBox::processor_button_press_event (GdkEventButton *ev, ProcessorEntry*
|
||||
if (processor && (Keyboard::is_edit_event (ev) || (ev->button == 1 && ev->type == GDK_2BUTTON_PRESS))) {
|
||||
|
||||
if (_session->engine().connected()) {
|
||||
|
||||
/* XXX giving an error message here is hard, because we may be in the midst of a button press */
|
||||
|
||||
if (Config->get_use_plugin_own_gui ()) {
|
||||
edit_processor (processor);
|
||||
} else {
|
||||
if (!one_processor_can_be_edited ()) return true;
|
||||
|
||||
if (Keyboard::modifier_state_equals (ev->state, Keyboard::SecondaryModifier)) {
|
||||
generic_edit_processor (processor);
|
||||
} else {
|
||||
edit_processor (processor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2040,7 +2055,7 @@ ProcessorBox::one_processor_can_be_edited ()
|
||||
}
|
||||
|
||||
Gtk::Window*
|
||||
ProcessorBox::get_editor_window (boost::shared_ptr<Processor> processor)
|
||||
ProcessorBox::get_editor_window (boost::shared_ptr<Processor> processor, bool use_custom)
|
||||
{
|
||||
boost::shared_ptr<Send> send;
|
||||
boost::shared_ptr<InternalSend> internal_send;
|
||||
@@ -2069,10 +2084,12 @@ ProcessorBox::get_editor_window (boost::shared_ptr<Processor> processor)
|
||||
}
|
||||
|
||||
if (boost::dynamic_pointer_cast<InternalSend> (processor) == 0) {
|
||||
SendUIWindow* w = new SendUIWindow (send, _session);
|
||||
w->show ();
|
||||
|
||||
gidget = new SendUIWindow (send, _session);
|
||||
|
||||
} else {
|
||||
/* assign internal send to main fader */
|
||||
|
||||
if (_parent_strip) {
|
||||
if (_parent_strip->current_delivery() == send) {
|
||||
_parent_strip->revert_to_default_display ();
|
||||
@@ -2119,8 +2136,7 @@ ProcessorBox::get_editor_window (boost::shared_ptr<Processor> processor)
|
||||
Window* w = get_processor_ui (plugin_insert);
|
||||
|
||||
if (w == 0) {
|
||||
|
||||
plugin_ui = new PluginUIWindow (plugin_insert, false, Config->get_use_plugin_own_gui());
|
||||
plugin_ui = new PluginUIWindow (plugin_insert, false, use_custom);
|
||||
plugin_ui->set_title (generate_processor_title (plugin_insert));
|
||||
set_processor_ui (plugin_insert, plugin_ui);
|
||||
|
||||
@@ -2236,7 +2252,7 @@ ProcessorBox::register_actions ()
|
||||
sigc::ptr_fun (ProcessorBox::rb_edit));
|
||||
|
||||
edit_generic_action = ActionManager::register_action (
|
||||
popup_act_grp, X_("edit-generic"), _("Edit with basic controls..."),
|
||||
popup_act_grp, X_("edit-generic"), _("Edit with generic controls..."),
|
||||
sigc::ptr_fun (ProcessorBox::rb_edit_generic));
|
||||
|
||||
ActionManager::add_action_group (popup_act_grp);
|
||||
@@ -2438,6 +2454,7 @@ ProcessorBox::edit_processor (boost::shared_ptr<Processor> processor)
|
||||
ProcessorWindowProxy* proxy = find_window_proxy (processor);
|
||||
|
||||
if (proxy) {
|
||||
proxy->set_custom_ui_mode (true);
|
||||
proxy->toggle ();
|
||||
}
|
||||
}
|
||||
@@ -2452,6 +2469,7 @@ ProcessorBox::generic_edit_processor (boost::shared_ptr<Processor> processor)
|
||||
ProcessorWindowProxy* proxy = find_window_proxy (processor);
|
||||
|
||||
if (proxy) {
|
||||
proxy->set_custom_ui_mode (false);
|
||||
proxy->toggle ();
|
||||
}
|
||||
}
|
||||
@@ -2629,6 +2647,7 @@ ProcessorWindowProxy::ProcessorWindowProxy (string const & name, ProcessorBox* b
|
||||
, _processor_box (box)
|
||||
, _processor (processor)
|
||||
, is_custom (false)
|
||||
, want_custom (false)
|
||||
{
|
||||
|
||||
}
|
||||
@@ -2640,6 +2659,38 @@ ProcessorWindowProxy::session_handle()
|
||||
return 0;
|
||||
}
|
||||
|
||||
XMLNode&
|
||||
ProcessorWindowProxy::get_state () const
|
||||
{
|
||||
XMLNode *node;
|
||||
node = &ProxyBase::get_state();
|
||||
node->add_property (X_("custom-ui"), is_custom? X_("yes") : X_("no"));
|
||||
return *node;
|
||||
}
|
||||
|
||||
void
|
||||
ProcessorWindowProxy::set_state (const XMLNode& node)
|
||||
{
|
||||
XMLNodeList children = node.children ();
|
||||
XMLNodeList::const_iterator i = children.begin ();
|
||||
while (i != children.end()) {
|
||||
XMLProperty* prop = (*i)->property (X_("name"));
|
||||
if ((*i)->name() == X_("Window") && prop && prop->value() == _name) {
|
||||
break;
|
||||
}
|
||||
++i;
|
||||
}
|
||||
|
||||
if (i != children.end()) {
|
||||
XMLProperty* prop;
|
||||
if ((prop = (*i)->property (X_("custom-ui"))) != 0) {
|
||||
want_custom = PBD::string_is_affirmative (prop->value ());
|
||||
}
|
||||
}
|
||||
|
||||
ProxyBase::set_state(node);
|
||||
}
|
||||
|
||||
Gtk::Window*
|
||||
ProcessorWindowProxy::get (bool create)
|
||||
{
|
||||
@@ -2648,8 +2699,7 @@ ProcessorWindowProxy::get (bool create)
|
||||
if (!p) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (_window && (is_custom != Config->get_use_plugin_own_gui ())) {
|
||||
if (_window && (is_custom != want_custom)) {
|
||||
/* drop existing window - wrong type */
|
||||
drop_window ();
|
||||
}
|
||||
@@ -2659,8 +2709,8 @@ ProcessorWindowProxy::get (bool create)
|
||||
return 0;
|
||||
}
|
||||
|
||||
_window = _processor_box->get_editor_window (p);
|
||||
is_custom = Config->get_use_plugin_own_gui();
|
||||
is_custom = want_custom;
|
||||
_window = _processor_box->get_editor_window (p, is_custom);
|
||||
|
||||
if (_window) {
|
||||
setup ();
|
||||
@@ -2673,10 +2723,11 @@ ProcessorWindowProxy::get (bool create)
|
||||
void
|
||||
ProcessorWindowProxy::toggle ()
|
||||
{
|
||||
if (_window && (is_custom != Config->get_use_plugin_own_gui ())) {
|
||||
if (_window && (is_custom != want_custom)) {
|
||||
/* drop existing window - wrong type */
|
||||
drop_window ();
|
||||
}
|
||||
is_custom = want_custom;
|
||||
|
||||
WM::ProxyBase::toggle ();
|
||||
}
|
||||
|
||||
@@ -88,13 +88,18 @@ class ProcessorWindowProxy : public WM::ProxyBase
|
||||
|
||||
ARDOUR::SessionHandlePtr* session_handle();
|
||||
void toggle();
|
||||
void set_custom_ui_mode(bool use_custom) { want_custom = use_custom; }
|
||||
|
||||
bool marked;
|
||||
|
||||
void set_state (const XMLNode&);
|
||||
XMLNode& get_state () const;
|
||||
|
||||
private:
|
||||
ProcessorBox* _processor_box;
|
||||
boost::weak_ptr<ARDOUR::Processor> _processor;
|
||||
bool is_custom;
|
||||
bool want_custom;
|
||||
};
|
||||
|
||||
class ProcessorEntry : public Gtkmm2ext::DnDVBoxChild, public sigc::trackable
|
||||
@@ -257,7 +262,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD
|
||||
Gtk::Window* get_processor_ui (boost::shared_ptr<ARDOUR::Processor>) const;
|
||||
|
||||
/* a WindowProxy object can use this */
|
||||
Gtk::Window* get_editor_window (boost::shared_ptr<ARDOUR::Processor>);
|
||||
Gtk::Window* get_editor_window (boost::shared_ptr<ARDOUR::Processor>, bool);
|
||||
Gtk::Window* get_generic_editor_window (boost::shared_ptr<ARDOUR::Processor>);
|
||||
|
||||
void edit_processor (boost::shared_ptr<ARDOUR::Processor>);
|
||||
|
||||
@@ -653,7 +653,7 @@ public:
|
||||
{
|
||||
_store = ListStore::create (_model);
|
||||
_view.set_model (_store);
|
||||
_view.append_column (_("Name"), _model.name);
|
||||
_view.append_column (_("Control Surface Protocol"), _model.name);
|
||||
_view.get_column(0)->set_resizable (true);
|
||||
_view.get_column(0)->set_expand (true);
|
||||
_view.append_column_editable (_("Enabled"), _model.enabled);
|
||||
@@ -1813,9 +1813,9 @@ RCOptionEditor::RCOptionEditor ()
|
||||
|
||||
add_option (_("User interaction"), new KeyboardOptions);
|
||||
|
||||
add_option (_("User interaction"), new OptionEditorHeading (_("Control surfaces")));
|
||||
/* Control Surfaces */
|
||||
|
||||
add_option (_("User interaction"), new ControlSurfacesOptions (*this));
|
||||
add_option (_("Control Surfaces"), new ControlSurfacesOptions (*this));
|
||||
|
||||
ComboOption<RemoteModel>* rm = new ComboOption<RemoteModel> (
|
||||
"remote-model",
|
||||
@@ -1828,14 +1828,14 @@ RCOptionEditor::RCOptionEditor ()
|
||||
rm->add (MixerOrdered, _("follows order of mixer"));
|
||||
rm->add (EditorOrdered, _("follows order of editor"));
|
||||
|
||||
add_option (_("User interaction"), rm);
|
||||
add_option (_("Control Surfaces"), rm);
|
||||
|
||||
/* VIDEO Timeline */
|
||||
add_option (_("Video"), new VideoTimelineOptions (_rc_config));
|
||||
|
||||
/* INTERFACE */
|
||||
|
||||
add_option (S_("GUI"),
|
||||
add_option (S_("Preferences|GUI"),
|
||||
new BoolOption (
|
||||
"widget-prelight",
|
||||
_("Graphically indicate mouse pointer hovering over various widgets"),
|
||||
@@ -1843,7 +1843,7 @@ RCOptionEditor::RCOptionEditor ()
|
||||
sigc::mem_fun (*_rc_config, &RCConfiguration::set_widget_prelight)
|
||||
));
|
||||
|
||||
add_option (S_("GUI"),
|
||||
add_option (S_("Preferences|GUI"),
|
||||
new BoolOption (
|
||||
"use-tooltips",
|
||||
_("Show tooltips if mouse hovers over a control"),
|
||||
@@ -1853,15 +1853,8 @@ RCOptionEditor::RCOptionEditor ()
|
||||
|
||||
#ifndef GTKOSX
|
||||
/* font scaling does nothing with GDK/Quartz */
|
||||
add_option (S_("GUI"), new FontScalingOptions (_rc_config));
|
||||
add_option (S_("Preferences|GUI"), new FontScalingOptions (_rc_config));
|
||||
#endif
|
||||
add_option (S_("GUI"),
|
||||
new BoolOption (
|
||||
"use-own-plugin-gui",
|
||||
string_compose (_("Use plugins' own interfaces instead of %1's"), PROGRAM_NAME),
|
||||
sigc::mem_fun (*_rc_config, &RCConfiguration::get_use_plugin_own_gui),
|
||||
sigc::mem_fun (*_rc_config, &RCConfiguration::set_use_plugin_own_gui)
|
||||
));
|
||||
|
||||
add_option (S_("GUI"),
|
||||
new BoolOption (
|
||||
@@ -1881,7 +1874,7 @@ RCOptionEditor::RCOptionEditor ()
|
||||
_mixer_strip_visibility.add (0, X_("MeterPoint"), _("Meter Point"));
|
||||
|
||||
add_option (
|
||||
S_("GUI"),
|
||||
S_("Preferences|GUI"),
|
||||
new VisibilityOption (
|
||||
_("Mixer Strip"),
|
||||
&_mixer_strip_visibility,
|
||||
@@ -1890,7 +1883,7 @@ RCOptionEditor::RCOptionEditor ()
|
||||
)
|
||||
);
|
||||
|
||||
add_option (S_("GUI"),
|
||||
add_option (S_("Preferences|GUI"),
|
||||
new BoolOption (
|
||||
"default-narrow_ms",
|
||||
_("Use narrow strips in the mixer by default"),
|
||||
@@ -1898,7 +1891,7 @@ RCOptionEditor::RCOptionEditor ()
|
||||
sigc::mem_fun (*_rc_config, &RCConfiguration::set_default_narrow_ms)
|
||||
));
|
||||
|
||||
add_option (S_("GUI"), new OptionEditorHeading (_("Metering")));
|
||||
add_option (S_("Preferences|GUI"), new OptionEditorHeading (_("Metering")));
|
||||
|
||||
ComboOption<float>* mht = new ComboOption<float> (
|
||||
"meter-hold",
|
||||
@@ -1912,7 +1905,7 @@ RCOptionEditor::RCOptionEditor ()
|
||||
mht->add (MeterHoldMedium, _("medium"));
|
||||
mht->add (MeterHoldLong, _("long"));
|
||||
|
||||
add_option (S_("GUI"), mht);
|
||||
add_option (S_("Preferences|GUI"), mht);
|
||||
|
||||
ComboOption<float>* mfo = new ComboOption<float> (
|
||||
"meter-falloff",
|
||||
@@ -1929,7 +1922,7 @@ RCOptionEditor::RCOptionEditor ()
|
||||
mfo->add (METER_FALLOFF_FASTER, _("faster"));
|
||||
mfo->add (METER_FALLOFF_FASTEST, _("fastest"));
|
||||
|
||||
add_option (S_("GUI"), mfo);
|
||||
add_option (S_("Preferences|GUI"), mfo);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -999,7 +999,7 @@ RouteTimeAxisView::resolve_new_group_playlist_name(std::string &basename, vector
|
||||
tmp = tmp.substr(idx + group_string.length());
|
||||
|
||||
// and find the largest current number
|
||||
int x = atoi(tmp.c_str());
|
||||
int x = atoi(tmp);
|
||||
if (x > maxnumber) {
|
||||
maxnumber = x;
|
||||
}
|
||||
|
||||
@@ -949,7 +949,7 @@ SoundFileBrowser::freesound_search()
|
||||
XMLNode *res = root->child("num_pages");
|
||||
if (res) {
|
||||
string result = res->child("text")->content();
|
||||
freesound_n_pages = atoi(result.c_str());
|
||||
freesound_n_pages = atoi(result);
|
||||
}
|
||||
|
||||
int more_pages = freesound_n_pages - freesound_page;
|
||||
@@ -1010,7 +1010,7 @@ SoundFileBrowser::freesound_search()
|
||||
std::string r;
|
||||
// cerr << "id=" << id << ",uri=" << uri << ",ofn=" << ofn << ",dur=" << dur << endl;
|
||||
|
||||
double duration_seconds = atof(dur.c_str());
|
||||
double duration_seconds = atof(dur);
|
||||
double h, m, s;
|
||||
char duration_hhmmss[16];
|
||||
if (duration_seconds >= 99 * 60 * 60) {
|
||||
@@ -1023,7 +1023,7 @@ SoundFileBrowser::freesound_search()
|
||||
);
|
||||
}
|
||||
|
||||
double size_bytes = atof(siz.c_str());
|
||||
double size_bytes = atof(siz);
|
||||
char bsize[32];
|
||||
if (size_bytes < 1000) {
|
||||
sprintf(bsize, "%.0f %s", size_bytes, _("B"));
|
||||
|
||||
@@ -255,7 +255,9 @@ StepEditor::step_add_note (uint8_t channel, uint8_t pitch, uint8_t velocity, Evo
|
||||
assert (step_edit_region);
|
||||
assert (step_edit_region_view);
|
||||
|
||||
if (beat_duration == 0.0) {
|
||||
if (beat_duration == 0.0 && step_editor) {
|
||||
beat_duration = step_editor->note_length();
|
||||
} else if (beat_duration == 0.0) {
|
||||
bool success;
|
||||
beat_duration = _editor.get_grid_type_as_beats (success, step_edit_insert_position);
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
Copyright (C) 2010 Paul Davis
|
||||
Copyright 2005-2008 Lennart Poettering
|
||||
Author: Robin Gareus <robin@gareus.org>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@@ -23,6 +24,9 @@
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <dirent.h>
|
||||
|
||||
#ifdef __WIN32__
|
||||
#include <windows.h>
|
||||
#else
|
||||
@@ -31,14 +35,115 @@
|
||||
#include <sys/wait.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#endif
|
||||
|
||||
|
||||
#include "system_exec.h"
|
||||
|
||||
using namespace std;
|
||||
void * interposer_thread (void *arg);
|
||||
|
||||
static void close_fd (int* fd) { if (!fd) return; if (*fd >= 0) ::close (*fd); *fd = -1; }
|
||||
static void close_fd (int& fd) { if (fd >= 0) ::close (fd); fd = -1; }
|
||||
|
||||
#ifndef __WIN32__
|
||||
/*
|
||||
* This function was part of libasyncns.
|
||||
* LGPL v2.1
|
||||
* Copyright 2005-2008 Lennart Poettering
|
||||
*/
|
||||
static int close_allv(const int except_fds[]) {
|
||||
struct rlimit rl;
|
||||
int fd;
|
||||
|
||||
#ifdef __linux__
|
||||
|
||||
DIR *d;
|
||||
|
||||
assert(except_fds);
|
||||
|
||||
if ((d = opendir("/proc/self/fd"))) {
|
||||
struct dirent *de;
|
||||
|
||||
while ((de = readdir(d))) {
|
||||
int found;
|
||||
long l;
|
||||
char *e = NULL;
|
||||
int i;
|
||||
|
||||
if (de->d_name[0] == '.')
|
||||
continue;
|
||||
|
||||
errno = 0;
|
||||
l = strtol(de->d_name, &e, 10);
|
||||
if (errno != 0 || !e || *e) {
|
||||
closedir(d);
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
fd = (int) l;
|
||||
|
||||
if ((long) fd != l) {
|
||||
closedir(d);
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (fd < 3)
|
||||
continue;
|
||||
|
||||
if (fd == dirfd(d))
|
||||
continue;
|
||||
|
||||
found = 0;
|
||||
for (i = 0; except_fds[i] >= 0; i++)
|
||||
if (except_fds[i] == fd) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (found) continue;
|
||||
|
||||
if (close(fd) < 0) {
|
||||
int saved_errno;
|
||||
|
||||
saved_errno = errno;
|
||||
closedir(d);
|
||||
errno = saved_errno;
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
closedir(d);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
if (getrlimit(RLIMIT_NOFILE, &rl) < 0)
|
||||
return -1;
|
||||
|
||||
for (fd = 0; fd < (int) rl.rlim_max; fd++) {
|
||||
int i;
|
||||
|
||||
if (fd <= 3)
|
||||
continue;
|
||||
|
||||
for (i = 0; except_fds[i] >= 0; i++)
|
||||
if (except_fds[i] == fd)
|
||||
continue;
|
||||
|
||||
if (close(fd) < 0 && errno != EBADF)
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* not on windows */
|
||||
|
||||
|
||||
SystemExec::SystemExec (std::string c, std::string a)
|
||||
: cmd(c)
|
||||
@@ -414,19 +519,33 @@ void
|
||||
SystemExec::terminate ()
|
||||
{
|
||||
::pthread_mutex_lock(&write_lock);
|
||||
|
||||
/* close stdin in an attempt to get the child to exit cleanly.
|
||||
*/
|
||||
|
||||
close_stdin();
|
||||
|
||||
if (pid) {
|
||||
::usleep(50000);
|
||||
sched_yield();
|
||||
wait(WNOHANG);
|
||||
}
|
||||
|
||||
/* if pid is non-zero, the child task is still executing (i.e. it did
|
||||
* not exit in response to stdin being closed). try to kill it.
|
||||
*/
|
||||
|
||||
if (pid) {
|
||||
::kill(pid, SIGTERM);
|
||||
::usleep(50000);
|
||||
sched_yield();
|
||||
wait(WNOHANG);
|
||||
}
|
||||
|
||||
/* if pid is non-zero, the child task is STILL executing after being
|
||||
* sent SIGTERM. Act tough ... send SIGKILL
|
||||
*/
|
||||
|
||||
if (pid) {
|
||||
::fprintf(stderr, "Process is still running! trying SIGKILL\n");
|
||||
::kill(pid, SIGKILL);
|
||||
@@ -442,12 +561,23 @@ int
|
||||
SystemExec::wait (int options)
|
||||
{
|
||||
int status=0;
|
||||
int ret;
|
||||
|
||||
if (pid==0) return -1;
|
||||
if (pid==::waitpid(pid, &status, options)) {
|
||||
pid=0;
|
||||
}
|
||||
if (errno == ECHILD) {
|
||||
pid=0;
|
||||
|
||||
ret = waitpid (pid, &status, options);
|
||||
|
||||
if (ret == pid) {
|
||||
if (WEXITSTATUS(status) || WIFSIGNALED(status)) {
|
||||
pid=0;
|
||||
}
|
||||
} else {
|
||||
if (ret != 0) {
|
||||
if (errno == ECHILD) {
|
||||
/* no currently running children, reset pid */
|
||||
pid=0;
|
||||
}
|
||||
} /* else the process is still running */
|
||||
}
|
||||
return status;
|
||||
}
|
||||
@@ -485,18 +615,18 @@ SystemExec::start (int stderr_mode)
|
||||
pid=r;
|
||||
|
||||
/* check if execve was successful. */
|
||||
close_fd(&pok[1]);
|
||||
close_fd(pok[1]);
|
||||
char buf;
|
||||
for ( ;; ) {
|
||||
ssize_t n = ::read(pok[0], &buf, 1 );
|
||||
if ( n==1 ) {
|
||||
/* child process returned from execve */
|
||||
pid=0;
|
||||
close_fd(&pok[0]);
|
||||
close_fd(&pin[1]);
|
||||
close_fd(&pin[0]);
|
||||
close_fd(&pout[1]);
|
||||
close_fd(&pout[0]);
|
||||
close_fd(pok[0]);
|
||||
close_fd(pin[1]);
|
||||
close_fd(pin[0]);
|
||||
close_fd(pout[1]);
|
||||
close_fd(pout[0]);
|
||||
pin[1] = -1;
|
||||
return -3;
|
||||
} else if ( n==-1 ) {
|
||||
@@ -505,7 +635,7 @@ SystemExec::start (int stderr_mode)
|
||||
}
|
||||
break;
|
||||
}
|
||||
close_fd(&pok[0]);
|
||||
close_fd(pok[0]);
|
||||
/* child started successfully */
|
||||
|
||||
#if 0
|
||||
@@ -521,17 +651,17 @@ SystemExec::start (int stderr_mode)
|
||||
}
|
||||
if (r == 0) {
|
||||
/* 2nd child process - catch stdout */
|
||||
close_fd(&pin[1]);
|
||||
close_fd(&pout[1]);
|
||||
close_fd(pin[1]);
|
||||
close_fd(pout[1]);
|
||||
output_interposer();
|
||||
exit(0);
|
||||
}
|
||||
close_fd(&pout[1]);
|
||||
close_fd(&pin[0]);
|
||||
close_fd(&pout[0]);
|
||||
close_fd(pout[1]);
|
||||
close_fd(pin[0]);
|
||||
close_fd(pout[0]);
|
||||
#else /* use pthread */
|
||||
close_fd(&pout[1]);
|
||||
close_fd(&pin[0]);
|
||||
close_fd(pout[1]);
|
||||
close_fd(pin[0]);
|
||||
int rv = pthread_create(&thread_id_tt, NULL, interposer_thread, this);
|
||||
|
||||
thread_active=true;
|
||||
@@ -545,15 +675,15 @@ SystemExec::start (int stderr_mode)
|
||||
}
|
||||
|
||||
/* child process - exec external process */
|
||||
close_fd(&pok[0]);
|
||||
close_fd(pok[0]);
|
||||
::fcntl(pok[1], F_SETFD, FD_CLOEXEC);
|
||||
|
||||
close_fd(&pin[1]);
|
||||
close_fd(pin[1]);
|
||||
if (pin[0] != STDIN_FILENO) {
|
||||
::dup2(pin[0], STDIN_FILENO);
|
||||
}
|
||||
close_fd(&pin[0]);
|
||||
close_fd(&pout[0]);
|
||||
close_fd(pin[0]);
|
||||
close_fd(pout[0]);
|
||||
if (pout[1] != STDOUT_FILENO) {
|
||||
::dup2(pout[1], STDOUT_FILENO);
|
||||
}
|
||||
@@ -571,7 +701,7 @@ SystemExec::start (int stderr_mode)
|
||||
}
|
||||
|
||||
if (pout[1] != STDOUT_FILENO && pout[1] != STDERR_FILENO) {
|
||||
close_fd(&pout[1]);
|
||||
close_fd(pout[1]);
|
||||
}
|
||||
|
||||
if (nicelevel !=0) {
|
||||
@@ -594,11 +724,16 @@ SystemExec::start (int stderr_mode)
|
||||
signal(SIGPIPE, SIG_DFL);
|
||||
#endif
|
||||
|
||||
#ifndef __WIN32__
|
||||
int good_fds[1] = { 0 };
|
||||
close_allv(good_fds);
|
||||
#endif
|
||||
|
||||
::execve(argp[0], argp, envp);
|
||||
/* if we reach here something went wrong.. */
|
||||
char buf = 0;
|
||||
(void) ::write(pok[1], &buf, 1 );
|
||||
close_fd(&pok[1]);
|
||||
close_fd(pok[1]);
|
||||
exit(-1);
|
||||
return -1;
|
||||
}
|
||||
@@ -611,7 +746,7 @@ SystemExec::output_interposer()
|
||||
ssize_t r;
|
||||
unsigned long l = 1;
|
||||
|
||||
ioctl(rfd, FIONBIO, &l); // set non-blocking I/O
|
||||
ioctl(rfd, FIONBIO, &l); // set non-blocking I/O
|
||||
|
||||
for (;fcntl(rfd, F_GETFL)!=-1;) {
|
||||
r = read(rfd, buf, sizeof(buf));
|
||||
@@ -633,17 +768,18 @@ void
|
||||
SystemExec::close_stdin()
|
||||
{
|
||||
if (pin[1]<0) return;
|
||||
close_fd(&pin[0]);
|
||||
close_fd(&pin[1]);
|
||||
close_fd(&pout[0]);
|
||||
close_fd(&pout[1]);
|
||||
close_fd(pin[0]);
|
||||
close_fd(pin[1]);
|
||||
close_fd(pout[0]);
|
||||
close_fd(pout[1]);
|
||||
}
|
||||
|
||||
int
|
||||
SystemExec::write_to_stdin(std::string d, size_t len)
|
||||
{
|
||||
const char *data;
|
||||
size_t r,c;
|
||||
ssize_t r;
|
||||
size_t c;
|
||||
::pthread_mutex_lock(&write_lock);
|
||||
|
||||
data=d.c_str();
|
||||
@@ -658,7 +794,7 @@ SystemExec::write_to_stdin(std::string d, size_t len)
|
||||
sleep(1);
|
||||
continue;
|
||||
}
|
||||
if (r != (len-c)) {
|
||||
if ((size_t) r != (len-c)) {
|
||||
::pthread_mutex_unlock(&write_lock);
|
||||
return c;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "pbd/error.h"
|
||||
#include "pbd/file_utils.h"
|
||||
#include "pbd/convert.h"
|
||||
#include "pbd/file_utils.h"
|
||||
#include "gui_thread.h"
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
|
||||
#include "i18n.h"
|
||||
|
||||
using namespace PBD;
|
||||
|
||||
TranscodeFfmpeg::TranscodeFfmpeg (std::string f)
|
||||
: infile(f)
|
||||
{
|
||||
@@ -48,7 +50,7 @@ TranscodeFfmpeg::TranscodeFfmpeg (std::string f)
|
||||
#endif
|
||||
|
||||
std::string ff_file_path;
|
||||
if (find_file_in_search_path (PBD::SearchPath(Glib::getenv("PATH")), X_("ffmpeg_harvid"), ff_file_path)) { ffmpeg_exe = ff_file_path; }
|
||||
if (find_file_in_search_path (SearchPath(Glib::getenv("PATH")), X_("ffmpeg_harvid"), ff_file_path)) { ffmpeg_exe = ff_file_path; }
|
||||
else if (Glib::file_test(X_("C:\\Program Files\\harvid\\ffmpeg.exe"), Glib::FILE_TEST_EXISTS)) {
|
||||
ffmpeg_exe = X_("C:\\Program Files\\ffmpeg\\ffmpeg.exe");
|
||||
}
|
||||
@@ -56,7 +58,7 @@ TranscodeFfmpeg::TranscodeFfmpeg (std::string f)
|
||||
ffmpeg_exe = X_("C:\\Program Files\\ffmpeg\\ffmpeg.exe");
|
||||
}
|
||||
|
||||
if (find_file_in_search_path (PBD::SearchPath(Glib::getenv("PATH")), X_("ffprobe_harvid"), ff_file_path)) { ffprobe_exe = ff_file_path; }
|
||||
if (find_file_in_search_path (SearchPath(Glib::getenv("PATH")), X_("ffprobe_harvid"), ff_file_path)) { ffprobe_exe = ff_file_path; }
|
||||
else if (Glib::file_test(X_("C:\\Program Files\\harvid\\ffprobe.exe"), Glib::FILE_TEST_EXISTS)) {
|
||||
ffprobe_exe = X_("C:\\Program Files\\ffmpeg\\ffprobe.exe");
|
||||
}
|
||||
@@ -65,7 +67,7 @@ TranscodeFfmpeg::TranscodeFfmpeg (std::string f)
|
||||
}
|
||||
|
||||
if (ffmpeg_exe.empty() || ffprobe_exe.empty()) {
|
||||
PBD::warning << _(
|
||||
warning << _(
|
||||
"No ffprobe or ffmpeg executables could be found on this system.\n"
|
||||
"Video import and export is not possible until you install those tools.\n"
|
||||
"Ardour requires ffmpeg and ffprobe from ffmpeg.org - version 1.1 or newer.\n"
|
||||
@@ -128,10 +130,10 @@ TranscodeFfmpeg::probe ()
|
||||
#define PARSE_FRACTIONAL_FPS(VAR) \
|
||||
{ \
|
||||
std::string::size_type pos; \
|
||||
VAR = atof(value.c_str()); \
|
||||
VAR = atof(value); \
|
||||
pos = value.find_first_of('/'); \
|
||||
if (pos != std::string::npos) { \
|
||||
VAR = atof(value.substr(0, pos).c_str()) / atof(value.substr(pos+1).c_str()); \
|
||||
VAR = atof(value.substr(0, pos)) / atof(value.substr(pos+1)); \
|
||||
} \
|
||||
}
|
||||
|
||||
@@ -149,11 +151,11 @@ TranscodeFfmpeg::probe ()
|
||||
std::string value = kv->substr(kvsep + 1);
|
||||
|
||||
if (key == X_("index")) {
|
||||
m_videoidx = atoi(value.c_str());
|
||||
m_videoidx = atoi(value);
|
||||
} else if (key == X_("width")) {
|
||||
m_width = atoi(value.c_str());
|
||||
m_width = atoi(value);
|
||||
} else if (key == X_("height")) {
|
||||
m_height = atoi(value.c_str());
|
||||
m_height = atoi(value);
|
||||
} else if (key == X_("codec_name")) {
|
||||
if (!m_codec.empty()) m_codec += " ";
|
||||
m_codec += value;
|
||||
@@ -180,14 +182,14 @@ TranscodeFfmpeg::probe ()
|
||||
));
|
||||
}
|
||||
} else if (key == X_("duration_ts") && m_fps == 0 && timebase !=0 ) {
|
||||
m_duration = atof(value.c_str()) * m_fps * timebase;
|
||||
m_duration = atof(value) * m_fps * timebase;
|
||||
} else if (key == X_("duration") && m_fps != 0 && m_duration == 0) {
|
||||
m_duration = atof(value.c_str()) * m_fps;
|
||||
m_duration = atof(value) * m_fps;
|
||||
} else if (key == X_("display_aspect_ratio")) {
|
||||
std::string::size_type pos;
|
||||
pos = value.find_first_of(':');
|
||||
if (pos != std::string::npos && atof(value.substr(pos+1).c_str()) != 0) {
|
||||
m_aspect = atof(value.substr(0, pos).c_str()) / atof(value.substr(pos+1).c_str());
|
||||
if (pos != std::string::npos && atof(value.substr(pos+1)) != 0) {
|
||||
m_aspect = atof(value.substr(0, pos)) / atof(value.substr(pos+1));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -205,7 +207,7 @@ TranscodeFfmpeg::probe ()
|
||||
std::string value = kv->substr(kvsep + 1);
|
||||
|
||||
if (key == X_("channels")) {
|
||||
as.channels = atoi(value.c_str());
|
||||
as.channels = atoi(value);
|
||||
} else if (key == X_("index")) {
|
||||
as.stream_id = value;
|
||||
} else if (key == X_("codec_long_name")) {
|
||||
@@ -542,7 +544,7 @@ void
|
||||
TranscodeFfmpeg::ffmpegparse_v (std::string d, size_t /* s */)
|
||||
{
|
||||
if (strstr(d.c_str(), "ERROR") || strstr(d.c_str(), "Error") || strstr(d.c_str(), "error")) {
|
||||
PBD::warning << "ffmpeg-error: " << d << endmsg;
|
||||
warning << "ffmpeg-error: " << d << endmsg;
|
||||
}
|
||||
if (strncmp(d.c_str(), "frame=",6)) {
|
||||
#if 1 /* DEBUG */
|
||||
@@ -554,7 +556,7 @@ TranscodeFfmpeg::ffmpegparse_v (std::string d, size_t /* s */)
|
||||
Progress(0, 0); /* EMIT SIGNAL */
|
||||
return;
|
||||
}
|
||||
ARDOUR::framecnt_t f = atol(d.substr(6).c_str());
|
||||
ARDOUR::framecnt_t f = atol(d.substr(6));
|
||||
if (f == 0) {
|
||||
Progress(0, 0); /* EMIT SIGNAL */
|
||||
} else {
|
||||
|
||||
@@ -388,7 +388,7 @@ TranscodeVideoDialog::launch_transcode ()
|
||||
if (scale_combo.get_active_row_number() == 0 ) {
|
||||
scale_width =0;
|
||||
} else {
|
||||
scale_width = atoi(scale_combo.get_active_text().c_str());
|
||||
scale_width = atoi(scale_combo.get_active_text());
|
||||
}
|
||||
if (!aspect_checkbox.get_active()) {
|
||||
scale_height = 0;
|
||||
@@ -443,7 +443,7 @@ TranscodeVideoDialog::scale_combo_changed ()
|
||||
if (scale_combo.get_active_row_number() == 0 ) {
|
||||
h = transcoder->get_height();
|
||||
} else {
|
||||
h = floor(atof(scale_combo.get_active_text().c_str()) / m_aspect);
|
||||
h = floor(atof(scale_combo.get_active_text()) / m_aspect);
|
||||
}
|
||||
height_spinner.set_value(h);
|
||||
}
|
||||
@@ -477,7 +477,7 @@ TranscodeVideoDialog::update_bitrate ()
|
||||
if (scale_combo.get_active_row_number() == 0 ) {
|
||||
br *= transcoder->get_width();
|
||||
} else {
|
||||
br *= atof(scale_combo.get_active_text().c_str());
|
||||
br *= atof(scale_combo.get_active_text());
|
||||
}
|
||||
if (br != 0) {
|
||||
bitrate_spinner.set_value(floor(br/10000.0)*10);
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
*/
|
||||
#include "pbd/file_utils.h"
|
||||
#include "pbd/convert.h"
|
||||
#include "gui_thread.h"
|
||||
#include "ardour_ui.h"
|
||||
|
||||
@@ -28,6 +29,7 @@
|
||||
#include "i18n.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace PBD;
|
||||
|
||||
VideoMonitor::VideoMonitor (PublicEditor *ed, std::string xjadeo_bin_path)
|
||||
: editor (ed)
|
||||
@@ -248,7 +250,7 @@ VideoMonitor::parse_output (std::string d, size_t /*s*/)
|
||||
printf("xjadeo: '%s'\n", line.c_str());
|
||||
}
|
||||
#endif
|
||||
int status = atoi(line.substr(1,3).c_str());
|
||||
int status = atoi(line.substr(1,3));
|
||||
switch(status / 100) {
|
||||
case 4: /* errors */
|
||||
if (status == 403) {
|
||||
@@ -295,7 +297,7 @@ VideoMonitor::parse_output (std::string d, size_t /*s*/)
|
||||
knownstate |= 2;
|
||||
if (starting || xjadeo_settings["window ontop"] != value) {
|
||||
if (!starting && _session) _session->set_dirty ();
|
||||
if (atoi(value.c_str())) { UiState("xjadeo-window-ontop-on"); }
|
||||
if (atoi(value)) { UiState("xjadeo-window-ontop-on"); }
|
||||
else { UiState("xjadeo-window-ontop-off"); }
|
||||
starting &= ~2;
|
||||
}
|
||||
@@ -304,7 +306,7 @@ VideoMonitor::parse_output (std::string d, size_t /*s*/)
|
||||
knownstate |= 4;
|
||||
if (starting || xjadeo_settings["window zoom"] != value) {
|
||||
if (!starting && _session) _session->set_dirty ();
|
||||
if (atoi(value.c_str())) { UiState("xjadeo-window-fullscreen-on"); }
|
||||
if (atoi(value)) { UiState("xjadeo-window-fullscreen-on"); }
|
||||
else { UiState("xjadeo-window-fullscreen-off"); }
|
||||
starting &= ~4;
|
||||
}
|
||||
@@ -313,15 +315,15 @@ VideoMonitor::parse_output (std::string d, size_t /*s*/)
|
||||
knownstate |= 8;
|
||||
if (starting || xjadeo_settings["window letterbox"] != value) {
|
||||
if (!starting && _session) _session->set_dirty ();
|
||||
if (atoi(value.c_str())) { UiState("xjadeo-window-letterbox-on"); }
|
||||
if (atoi(value)) { UiState("xjadeo-window-letterbox-on"); }
|
||||
else { UiState("xjadeo-window-letterbox-off"); }
|
||||
starting &= ~8;
|
||||
}
|
||||
xjadeo_settings["window letterbox"] = value;
|
||||
} else if(key == "osdmode") {
|
||||
knownstate |= 1;
|
||||
osdmode = atoi(value.c_str());
|
||||
if (starting || atoi(xjadeo_settings["osd mode"].c_str()) != osdmode) {
|
||||
osdmode = atoi(value);
|
||||
if (starting || atoi(xjadeo_settings["osd mode"]) != osdmode) {
|
||||
if (!starting && _session) _session->set_dirty ();
|
||||
if ((osdmode & 1) == 1) { UiState("xjadeo-window-osd-frame-on"); }
|
||||
if ((osdmode & 1) == 0) { UiState("xjadeo-window-osd-frame-off"); }
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "ardour/tempo.h"
|
||||
|
||||
#include "pbd/file_utils.h"
|
||||
#include "pbd/convert.h"
|
||||
#include "ardour/session_directory.h"
|
||||
|
||||
#include "ardour_ui.h"
|
||||
@@ -150,44 +151,41 @@ VideoTimeLine::set_session (ARDOUR::Session *s)
|
||||
return;
|
||||
}
|
||||
|
||||
if (node) {
|
||||
ARDOUR_UI::instance()->start_video_server((Gtk::Window*)0, false);
|
||||
ARDOUR_UI::instance()->start_video_server((Gtk::Window*)0, false);
|
||||
|
||||
set_id(*node);
|
||||
set_id(*node);
|
||||
|
||||
const XMLProperty* proph = node->property (X_("Height"));
|
||||
if (proph) {
|
||||
editor->set_video_timeline_height(atoi(proph->value().c_str()));
|
||||
}
|
||||
const XMLProperty* proph = node->property (X_("Height"));
|
||||
if (proph) {
|
||||
editor->set_video_timeline_height(atoi(proph->value()));
|
||||
}
|
||||
#if 0 /* TODO THINK: set FPS first time only ?! */
|
||||
const XMLProperty* propasfps = node->property (X_("AutoFPS"));
|
||||
if (propasfps) {
|
||||
auto_set_session_fps = atoi(propasfps->value().c_str())?true:false;
|
||||
}
|
||||
const XMLProperty* propasfps = node->property (X_("AutoFPS"));
|
||||
if (propasfps) {
|
||||
auto_set_session_fps = atoi(propasfps->value())?true:false;
|
||||
}
|
||||
#endif
|
||||
|
||||
const XMLProperty* propoffset = node->property (X_("VideoOffset"));
|
||||
if (propoffset) {
|
||||
video_offset = atoll(propoffset->value().c_str());
|
||||
video_offset_p = video_offset;
|
||||
}
|
||||
|
||||
const XMLProperty* proplock = node->property (X_("VideoOffsetLock"));
|
||||
if (proplock) {
|
||||
video_offset_lock = atoi(proplock->value().c_str())?true:false;
|
||||
}
|
||||
|
||||
const XMLProperty* localfile = node->property (X_("LocalFile"));
|
||||
if (localfile) {
|
||||
local_file = atoi(localfile->value().c_str())?true:false;
|
||||
}
|
||||
|
||||
const XMLProperty* propf = node->property (X_("Filename"));
|
||||
video_file_info(propf->value(), local_file);
|
||||
const XMLProperty* propoffset = node->property (X_("VideoOffset"));
|
||||
if (propoffset) {
|
||||
video_offset = atoll(propoffset->value());
|
||||
video_offset_p = video_offset;
|
||||
}
|
||||
|
||||
node = _session->extra_xml (X_("Videomonitor"));
|
||||
if (node) {
|
||||
const XMLProperty* proplock = node->property (X_("VideoOffsetLock"));
|
||||
if (proplock) {
|
||||
video_offset_lock = atoi(proplock->value())?true:false;
|
||||
}
|
||||
|
||||
const XMLProperty* localfile = node->property (X_("LocalFile"));
|
||||
if (localfile) {
|
||||
local_file = atoi(localfile->value())?true:false;
|
||||
}
|
||||
|
||||
const XMLProperty* propf = node->property (X_("Filename"));
|
||||
video_file_info(propf->value(), local_file);
|
||||
|
||||
if ((node = _session->extra_xml (X_("Videomonitor")))) {
|
||||
const XMLProperty* prop = node->property (X_("active"));
|
||||
if (prop && prop->value() == "yes" && found_xjadeo() && !video_filename.empty() && local_file) {
|
||||
open_video_monitor();
|
||||
@@ -229,7 +227,7 @@ VideoTimeLine::set_state (const XMLNode& node, int /*version*/)
|
||||
LocaleGuard lg (X_("POSIX"));
|
||||
const XMLProperty* propoffset = node.property (X_("VideoOffset"));
|
||||
if (propoffset) {
|
||||
video_offset = atoll(propoffset->value().c_str());
|
||||
video_offset = atoll(propoffset->value());
|
||||
}
|
||||
ARDOUR_UI::instance()->flush_videotimeline_cache(true);
|
||||
return 0;
|
||||
@@ -507,7 +505,7 @@ VideoTimeLine::video_file_info (std::string filename, bool local)
|
||||
}
|
||||
_session->config.set_video_pullup(0); /* TODO only set if set_timecode_format() was successful ?!*/
|
||||
}
|
||||
if (video_file_fps != _session->timecode_frames_per_second()) {
|
||||
if (floor(video_file_fps*100) != floor(_session->timecode_frames_per_second()*100)) {
|
||||
warning << _("Video file's framerate is not equal to Ardour session timecode's framerate: ")
|
||||
<< video_file_fps << _(" vs ") << _session->timecode_frames_per_second() << endmsg;
|
||||
}
|
||||
@@ -717,7 +715,7 @@ VideoTimeLine::open_video_monitor() {
|
||||
if (node) {
|
||||
const XMLProperty* prop = node->property (X_("mask"));
|
||||
if (prop) {
|
||||
xj_settings_mask = atoi(prop->value().c_str());
|
||||
xj_settings_mask = atoi(prop->value());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,11 +28,13 @@
|
||||
#include "ardour_dialog.h"
|
||||
#include "ardour_window.h"
|
||||
#include "window_manager.h"
|
||||
#include "processor_box.h"
|
||||
|
||||
#include "i18n.h"
|
||||
|
||||
using std::string;
|
||||
using namespace WM;
|
||||
using namespace PBD;
|
||||
|
||||
Manager* Manager::_instance = 0;
|
||||
|
||||
@@ -106,7 +108,12 @@ Manager::add_state (XMLNode& root) const
|
||||
if (dynamic_cast<ProxyTemporary*> (*i)) {
|
||||
continue;
|
||||
}
|
||||
root.add_child_nocopy ((*i)->get_state());
|
||||
if (dynamic_cast<ProcessorWindowProxy*> (*i)) {
|
||||
ProcessorWindowProxy *pi = dynamic_cast<ProcessorWindowProxy*> (*i);
|
||||
root.add_child_nocopy (pi->get_state());
|
||||
} else {
|
||||
root.add_child_nocopy ((*i)->get_state());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,12 +131,19 @@ Manager::set_session (ARDOUR::Session* s)
|
||||
void
|
||||
Manager::set_transient_for (Gtk::Window* parent)
|
||||
{
|
||||
/* OS X has a richer concept of window layering than X does (or
|
||||
* certainly, than any accepted conventions on X), and so the use of
|
||||
* Manager::set_transient_for() is not necessary on that platform.
|
||||
*
|
||||
* On OS X this is mostly taken care of by using the window type rather
|
||||
* than explicit 1:1 transient-for relationships.
|
||||
*/
|
||||
|
||||
#ifndef __APPLE__
|
||||
if (parent) {
|
||||
for (Windows::const_iterator i = _windows.begin(); i != _windows.end(); ++i) {
|
||||
Gtk::Window* win = (*i)->get();
|
||||
if (win) {
|
||||
std::cerr << "marked " << win->get_title() << " as transient of " << parent->get_title() << std::endl;
|
||||
win->set_transient_for (*parent);
|
||||
}
|
||||
}
|
||||
@@ -205,16 +219,16 @@ ProxyBase::set_state (const XMLNode& node)
|
||||
}
|
||||
|
||||
if ((prop = (*i)->property (X_("x-off"))) != 0) {
|
||||
_x_off = atoi (prop->value().c_str());
|
||||
_x_off = atoi (prop->value());
|
||||
}
|
||||
if ((prop = (*i)->property (X_("y-off"))) != 0) {
|
||||
_y_off = atoi (prop->value().c_str());
|
||||
_y_off = atoi (prop->value());
|
||||
}
|
||||
if ((prop = (*i)->property (X_("x-size"))) != 0) {
|
||||
_width = atoi (prop->value().c_str());
|
||||
_width = atoi (prop->value());
|
||||
}
|
||||
if ((prop = (*i)->property (X_("y-size"))) != 0) {
|
||||
_height = atoi (prop->value().c_str());
|
||||
_height = atoi (prop->value());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -120,8 +120,14 @@ public:
|
||||
*/
|
||||
LV2_Evbuf* get_lv2_midi(bool input, size_t i, bool old_api);
|
||||
|
||||
/** ensure minimum size of LV2 Atom port buffer */
|
||||
void ensure_lv2_bufsize(bool input, size_t i, size_t buffer_capacity);
|
||||
|
||||
/** Flush modified LV2 event output buffers back to Ardour buffers */
|
||||
void flush_lv2_midi(bool input, size_t i);
|
||||
|
||||
/** Forward plugin MIDI output to to Ardour buffers */
|
||||
void forward_lv2_midi(LV2_Evbuf*, size_t, bool purge_ardour_buffer = true);
|
||||
#endif
|
||||
|
||||
#if defined VST_SUPPORT || defined LXVST_SUPPORT
|
||||
|
||||
@@ -122,16 +122,13 @@ class ExportProfileManager
|
||||
TimespanListPtr timespans;
|
||||
TimeFormat time_format;
|
||||
|
||||
boost::shared_ptr<Location> session_range;
|
||||
boost::shared_ptr<Location> selection_range;
|
||||
boost::shared_ptr<LocationList> ranges;
|
||||
|
||||
TimespanState (boost::shared_ptr<Location> session_range,
|
||||
boost::shared_ptr<Location> selection_range,
|
||||
TimespanState (boost::shared_ptr<Location> selection_range,
|
||||
boost::shared_ptr<LocationList> ranges)
|
||||
: timespans (new TimespanList ())
|
||||
, time_format (Timecode)
|
||||
, session_range (session_range)
|
||||
, selection_range (selection_range)
|
||||
, ranges (ranges)
|
||||
{}
|
||||
@@ -157,7 +154,6 @@ class ExportProfileManager
|
||||
|
||||
void update_ranges ();
|
||||
|
||||
boost::shared_ptr<Location> session_range;
|
||||
boost::shared_ptr<Location> selection_range;
|
||||
boost::shared_ptr<LocationList> ranges;
|
||||
|
||||
|
||||
@@ -202,6 +202,7 @@ class LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
|
||||
typedef unsigned PortFlags;
|
||||
|
||||
std::vector<PortFlags> _port_flags;
|
||||
std::vector<size_t> _port_minimumSize;
|
||||
std::map<std::string,uint32_t> _port_indices;
|
||||
|
||||
/// Message send to/from UI via ports
|
||||
|
||||
@@ -252,6 +252,25 @@ BufferSet::get(DataType type, size_t i) const
|
||||
|
||||
#ifdef LV2_SUPPORT
|
||||
|
||||
void
|
||||
BufferSet::ensure_lv2_bufsize(bool input, size_t i, size_t buffer_capacity)
|
||||
{
|
||||
assert(count().get(DataType::MIDI) > i);
|
||||
|
||||
LV2Buffers::value_type b = _lv2_buffers.at(i * 2 + (input ? 0 : 1));
|
||||
LV2_Evbuf* evbuf = b.second;
|
||||
|
||||
if (lv2_evbuf_get_capacity(evbuf) >= buffer_capacity) return;
|
||||
|
||||
lv2_evbuf_free(b.second);
|
||||
_lv2_buffers.at(i * 2 + (input ? 0 : 1)) =
|
||||
std::make_pair(false, lv2_evbuf_new(
|
||||
buffer_capacity,
|
||||
LV2_EVBUF_EVENT,
|
||||
LV2Plugin::urids.atom_Chunk,
|
||||
LV2Plugin::urids.atom_Sequence));
|
||||
}
|
||||
|
||||
LV2_Evbuf*
|
||||
BufferSet::get_lv2_midi(bool input, size_t i, bool old_api)
|
||||
{
|
||||
@@ -265,6 +284,25 @@ BufferSet::get_lv2_midi(bool input, size_t i, bool old_api)
|
||||
return evbuf;
|
||||
}
|
||||
|
||||
void
|
||||
BufferSet::forward_lv2_midi(LV2_Evbuf* buf, size_t i, bool purge_ardour_buffer)
|
||||
{
|
||||
MidiBuffer& mbuf = get_midi(i);
|
||||
if (purge_ardour_buffer) {
|
||||
mbuf.silence(0, 0);
|
||||
}
|
||||
for (LV2_Evbuf_Iterator i = lv2_evbuf_begin(buf);
|
||||
lv2_evbuf_is_valid(i);
|
||||
i = lv2_evbuf_next(i)) {
|
||||
uint32_t frames, subframes, type, size;
|
||||
uint8_t* data;
|
||||
lv2_evbuf_get(i, &frames, &subframes, &type, &size, &data);
|
||||
if (type == LV2Plugin::urids.midi_MidiEvent) {
|
||||
mbuf.push_back(frames, size, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
BufferSet::flush_lv2_midi(bool input, size_t i)
|
||||
{
|
||||
|
||||
@@ -61,7 +61,6 @@ ExportProfileManager::ExportProfileManager (Session & s, ExportType type)
|
||||
, handler (s.get_export_handler())
|
||||
, session (s)
|
||||
|
||||
, session_range (new Location (s))
|
||||
, ranges (new LocationList ())
|
||||
, single_range_mode (false)
|
||||
|
||||
@@ -385,13 +384,16 @@ ExportProfileManager::init_timespans (XMLNodeList nodes)
|
||||
}
|
||||
|
||||
if (timespans.empty()) {
|
||||
TimespanStatePtr state (new TimespanState (session_range, selection_range, ranges));
|
||||
TimespanStatePtr state (new TimespanState (selection_range, ranges));
|
||||
timespans.push_back (state);
|
||||
|
||||
// Add session as default selection
|
||||
Location * session_range = session.locations()->session_range_location();
|
||||
if (!session_range) { return false; }
|
||||
|
||||
ExportTimespanPtr timespan = handler->add_timespan();
|
||||
timespan->set_name (session_range->name());
|
||||
timespan->set_range_id ("session");
|
||||
timespan->set_range_id (session_range->id().to_s());
|
||||
timespan->set_range (session_range->start(), session_range->end());
|
||||
state->timespans->push_back (timespan);
|
||||
return false;
|
||||
@@ -403,7 +405,7 @@ ExportProfileManager::init_timespans (XMLNodeList nodes)
|
||||
ExportProfileManager::TimespanStatePtr
|
||||
ExportProfileManager::deserialize_timespan (XMLNode & root)
|
||||
{
|
||||
TimespanStatePtr state (new TimespanState (session_range, selection_range, ranges));
|
||||
TimespanStatePtr state (new TimespanState (selection_range, ranges));
|
||||
XMLProperty const * prop;
|
||||
|
||||
XMLNodeList spans = root.children ("Range");
|
||||
@@ -413,23 +415,32 @@ ExportProfileManager::deserialize_timespan (XMLNode & root)
|
||||
if (!prop) { continue; }
|
||||
string id = prop->value();
|
||||
|
||||
Location * location = 0;
|
||||
for (LocationList::iterator it = ranges->begin(); it != ranges->end(); ++it) {
|
||||
if ((!id.compare ("session") && *it == session_range.get()) ||
|
||||
(!id.compare ("selection") && *it == selection_range.get()) ||
|
||||
(!id.compare ((*it)->id().to_s()))) {
|
||||
ExportTimespanPtr timespan = handler->add_timespan();
|
||||
timespan->set_name ((*it)->name());
|
||||
timespan->set_range_id (id);
|
||||
timespan->set_range ((*it)->start(), (*it)->end());
|
||||
state->timespans->push_back (timespan);
|
||||
if ((id == "selection" && *it == selection_range.get()) ||
|
||||
(id == (*it)->id().to_s())) {
|
||||
location = *it;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!location) { continue; }
|
||||
|
||||
ExportTimespanPtr timespan = handler->add_timespan();
|
||||
timespan->set_name (location->name());
|
||||
timespan->set_range_id (location->id().to_s());
|
||||
timespan->set_range (location->start(), location->end());
|
||||
state->timespans->push_back (timespan);
|
||||
}
|
||||
|
||||
if ((prop = root.property ("format"))) {
|
||||
state->time_format = (TimeFormat) string_2_enum (prop->value(), TimeFormat);
|
||||
}
|
||||
|
||||
if (state->timespans->empty()) {
|
||||
return TimespanStatePtr();
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
@@ -440,7 +451,6 @@ ExportProfileManager::serialize_timespan (TimespanStatePtr state)
|
||||
XMLNode * span;
|
||||
|
||||
update_ranges ();
|
||||
|
||||
for (TimespanList::iterator it = state->timespans->begin(); it != state->timespans->end(); ++it) {
|
||||
if ((span = root.add_child ("Range"))) {
|
||||
span->add_property ("id", (*it)->range_id());
|
||||
@@ -463,9 +473,10 @@ ExportProfileManager::update_ranges () {
|
||||
|
||||
/* Session */
|
||||
|
||||
session_range->set_name (_("Session"));
|
||||
session_range->set (session.current_start_frame(), session.current_end_frame());
|
||||
ranges->push_back (session_range.get());
|
||||
Location * session_range = session.locations()->session_range_location();
|
||||
if (session_range) {
|
||||
ranges->push_back (session_range);
|
||||
}
|
||||
|
||||
/* Selection */
|
||||
|
||||
|
||||
@@ -169,7 +169,7 @@ vstfx_infofile_path (char* dllpath, int personal)
|
||||
}
|
||||
|
||||
} else {
|
||||
dir = Glib::path_get_dirname (dllpath);
|
||||
dir = Glib::path_get_dirname (std::string(dllpath));
|
||||
}
|
||||
|
||||
stringstream s;
|
||||
@@ -214,6 +214,7 @@ vstfx_infofile_for_read (char* dllpath)
|
||||
{
|
||||
struct stat own_statbuf;
|
||||
struct stat sys_statbuf;
|
||||
FILE *rv = NULL;
|
||||
|
||||
char* own_info = vstfx_infofile_stat (dllpath, &own_statbuf, 1);
|
||||
char* sys_info = vstfx_infofile_stat (dllpath, &sys_statbuf, 0);
|
||||
@@ -222,14 +223,16 @@ vstfx_infofile_for_read (char* dllpath)
|
||||
if (sys_info) {
|
||||
if (own_statbuf.st_mtime <= sys_statbuf.st_mtime) {
|
||||
/* system info file is newer, use it */
|
||||
return g_fopen (sys_info, "rb");
|
||||
rv = g_fopen (sys_info, "rb");
|
||||
}
|
||||
} else {
|
||||
return g_fopen (own_info, "rb");
|
||||
rv = g_fopen (own_info, "rb");
|
||||
}
|
||||
}
|
||||
free(own_info);
|
||||
free(sys_info);
|
||||
|
||||
return 0;
|
||||
return rv;
|
||||
}
|
||||
|
||||
static FILE *
|
||||
@@ -416,6 +419,8 @@ vstfx_free_info (VSTInfo *info)
|
||||
free (info->name);
|
||||
free (info->creator);
|
||||
free (info->Category);
|
||||
free (info->ParamNames);
|
||||
free (info->ParamLabels);
|
||||
free (info);
|
||||
}
|
||||
|
||||
|
||||
@@ -379,6 +379,7 @@ void vstfx_close (VSTState* vstfx)
|
||||
dlclose(vstfx->handle->dll); //dlclose keeps its own reference count
|
||||
vstfx->handle->dll = 0;
|
||||
}
|
||||
free(vstfx);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -115,6 +115,12 @@ lv2_evbuf_get_size(LV2_Evbuf* evbuf)
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
lv2_evbuf_get_capacity(LV2_Evbuf* evbuf)
|
||||
{
|
||||
return evbuf->capacity;
|
||||
}
|
||||
|
||||
void*
|
||||
lv2_evbuf_get_buffer(LV2_Evbuf* evbuf)
|
||||
{
|
||||
|
||||
@@ -92,6 +92,12 @@ lv2_evbuf_reset(LV2_Evbuf* evbuf, bool input);
|
||||
uint32_t
|
||||
lv2_evbuf_get_size(LV2_Evbuf* evbuf);
|
||||
|
||||
/**
|
||||
Return the available capacity of the buffer
|
||||
*/
|
||||
uint32_t
|
||||
lv2_evbuf_get_capacity(LV2_Evbuf* evbuf);
|
||||
|
||||
/**
|
||||
Return the actual buffer implementation.
|
||||
The format of the buffer returned depends on the buffer type.
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
#include "lv2/lv2plug.in/ns/ext/state/state.h"
|
||||
#include "lv2/lv2plug.in/ns/ext/time/time.h"
|
||||
#include "lv2/lv2plug.in/ns/ext/worker/worker.h"
|
||||
#include "lv2/lv2plug.in/ns/ext/resize-port/resize-port.h"
|
||||
#include "lv2/lv2plug.in/ns/extensions/ui/ui.h"
|
||||
#ifdef HAVE_NEW_LV2
|
||||
#include "lv2/lv2plug.in/ns/ext/buf-size/buf-size.h"
|
||||
@@ -119,6 +120,7 @@ public:
|
||||
LilvNode* atom_supports;
|
||||
LilvNode* ev_EventPort;
|
||||
LilvNode* ext_logarithmic;
|
||||
LilvNode* ext_notOnGUI;
|
||||
LilvNode* lv2_AudioPort;
|
||||
LilvNode* lv2_ControlPort;
|
||||
LilvNode* lv2_InputPort;
|
||||
@@ -126,10 +128,12 @@ public:
|
||||
LilvNode* lv2_enumeration;
|
||||
LilvNode* lv2_inPlaceBroken;
|
||||
LilvNode* lv2_integer;
|
||||
LilvNode* lv2_reportsLatency;
|
||||
LilvNode* lv2_sampleRate;
|
||||
LilvNode* lv2_toggled;
|
||||
LilvNode* midi_MidiEvent;
|
||||
LilvNode* rdfs_comment;
|
||||
LilvNode* rsz_minimumSize;
|
||||
LilvNode* time_Position;
|
||||
LilvNode* ui_GtkUI;
|
||||
LilvNode* ui_external;
|
||||
@@ -406,6 +410,7 @@ LV2Plugin::init(const void* c_plugin, framecnt_t rate)
|
||||
for (uint32_t i = 0; i < num_ports; ++i) {
|
||||
const LilvPort* port = lilv_plugin_get_port_by_index(_impl->plugin, i);
|
||||
PortFlags flags = 0;
|
||||
size_t minimumSize = 0;
|
||||
|
||||
if (lilv_port_is_a(_impl->plugin, port, _world.lv2_OutputPort)) {
|
||||
flags |= PORT_OUTPUT;
|
||||
@@ -440,6 +445,12 @@ LV2Plugin::init(const void* c_plugin, framecnt_t rate)
|
||||
flags |= PORT_POSITION;
|
||||
}
|
||||
}
|
||||
LilvNodes* min_size_v = lilv_port_get_value(_impl->plugin, port, _world.rsz_minimumSize);
|
||||
LilvNode* min_size = min_size_v ? lilv_nodes_get_first(min_size_v) : NULL;
|
||||
if (min_size && lilv_node_is_int(min_size)) {
|
||||
minimumSize = lilv_node_as_int(min_size);
|
||||
}
|
||||
lilv_nodes_free(min_size_v);
|
||||
lilv_nodes_free(buffer_types);
|
||||
lilv_nodes_free(atom_supports);
|
||||
} else {
|
||||
@@ -450,6 +461,7 @@ LV2Plugin::init(const void* c_plugin, framecnt_t rate)
|
||||
}
|
||||
|
||||
_port_flags.push_back(flags);
|
||||
_port_minimumSize.push_back(minimumSize);
|
||||
}
|
||||
|
||||
_control_data = new float[num_ports];
|
||||
@@ -1319,6 +1331,16 @@ string
|
||||
LV2Plugin::describe_parameter(Evoral::Parameter which)
|
||||
{
|
||||
if (( which.type() == PluginAutomation) && ( which.id() < parameter_count()) ) {
|
||||
|
||||
if (lilv_port_has_property(_impl->plugin,
|
||||
lilv_plugin_get_port_by_index(_impl->plugin, which.id()), _world.ext_notOnGUI)) {
|
||||
return X_("hidden");
|
||||
}
|
||||
if (lilv_port_has_property(_impl->plugin,
|
||||
lilv_plugin_get_port_by_index(_impl->plugin, which.id()), _world.lv2_reportsLatency)) {
|
||||
return X_("latency");
|
||||
}
|
||||
|
||||
LilvNode* name = lilv_port_get_name(_impl->plugin,
|
||||
lilv_plugin_get_port_by_index(_impl->plugin, which.id()));
|
||||
string ret(lilv_node_as_string(name));
|
||||
@@ -1397,6 +1419,7 @@ LV2Plugin::allocate_atom_event_buffers()
|
||||
*/
|
||||
int count_atom_out = 0;
|
||||
int count_atom_in = 0;
|
||||
int minimumSize = 32768; // TODO use a per-port minimum-size
|
||||
for (uint32_t i = 0; i < lilv_plugin_get_num_ports(p); ++i) {
|
||||
const LilvPort* port = lilv_plugin_get_port_by_index(p, i);
|
||||
if (lilv_port_is_a(p, port, _world.atom_AtomPort)) {
|
||||
@@ -1413,6 +1436,12 @@ LV2Plugin::allocate_atom_event_buffers()
|
||||
if (lilv_port_is_a(p, port, _world.lv2_OutputPort)) {
|
||||
count_atom_out++;
|
||||
}
|
||||
LilvNodes* min_size_v = lilv_port_get_value(_impl->plugin, port, _world.rsz_minimumSize);
|
||||
LilvNode* min_size = min_size_v ? lilv_nodes_get_first(min_size_v) : NULL;
|
||||
if (min_size && lilv_node_is_int(min_size)) {
|
||||
minimumSize = std::max(minimumSize, lilv_node_as_int(min_size));
|
||||
}
|
||||
lilv_nodes_free(min_size_v);
|
||||
}
|
||||
lilv_nodes_free(buffer_types);
|
||||
lilv_nodes_free(atom_supports);
|
||||
@@ -1430,7 +1459,7 @@ LV2Plugin::allocate_atom_event_buffers()
|
||||
DEBUG_TRACE(DEBUG::LV2, string_compose("allocate %1 atom_ev_buffers\n", total_atom_buffers));
|
||||
_atom_ev_buffers = (LV2_Evbuf**) malloc((total_atom_buffers + 1) * sizeof(LV2_Evbuf*));
|
||||
for (int i = 0; i < total_atom_buffers; ++i ) {
|
||||
_atom_ev_buffers[i] = lv2_evbuf_new(32768, LV2_EVBUF_ATOM,
|
||||
_atom_ev_buffers[i] = lv2_evbuf_new(minimumSize, LV2_EVBUF_ATOM,
|
||||
LV2Plugin::urids.atom_Chunk, LV2Plugin::urids.atom_Sequence);
|
||||
}
|
||||
_atom_ev_buffers[total_atom_buffers] = 0;
|
||||
@@ -1539,6 +1568,12 @@ LV2Plugin::connect_and_run(BufferSet& bufs,
|
||||
index = out_map.get(DataType::MIDI, midi_out_index++, &valid);
|
||||
}
|
||||
if (valid && bufs.count().n_midi() > index) {
|
||||
/* Note, ensure_lv2_bufsize() is not RT safe!
|
||||
* However free()/alloc() is only called if a
|
||||
* plugin requires a rsz:minimumSize buffersize
|
||||
* and the existing buffer if smaller.
|
||||
*/
|
||||
bufs.ensure_lv2_bufsize((flags & PORT_INPUT), index, _port_minimumSize[port_index]);
|
||||
_ev_buffers[port_index] = bufs.get_lv2_midi(
|
||||
(flags & PORT_INPUT), index, (flags & PORT_EVENT));
|
||||
}
|
||||
@@ -1640,8 +1675,28 @@ LV2Plugin::connect_and_run(BufferSet& bufs,
|
||||
PortFlags flags = _port_flags[port_index];
|
||||
bool valid = false;
|
||||
|
||||
// Flush MIDI (write back to Ardour MIDI buffers)
|
||||
if ((flags & PORT_OUTPUT) && (flags & (PORT_EVENT|PORT_SEQUENCE))) {
|
||||
/* TODO ask drobilla about comment
|
||||
* "Make Ardour event buffers generic so plugins can communicate"
|
||||
* in libs/ardour/buffer_set.cc:310
|
||||
*
|
||||
* ideally the user could choose which of the following two modes
|
||||
* to use (e.g. instrument/effect chains MIDI OUT vs MIDI TRHU).
|
||||
*
|
||||
* This implementation follows the discussion on IRC Mar 16 2013 16:47 UTC
|
||||
* 16:51 < drobilla> rgareus: [..] i.e always replace with MIDI output [of LV2 plugin] if it's there
|
||||
* 16:52 < drobilla> rgareus: That would probably be good enough [..] to make users not complain
|
||||
* for quite a while at least ;)
|
||||
*/
|
||||
// copy output of LV2 plugin's MIDI port to Ardour MIDI buffers -- MIDI OUT
|
||||
if ((flags & PORT_OUTPUT) && (flags & (PORT_EVENT|PORT_SEQUENCE|PORT_MIDI))) {
|
||||
const uint32_t buf_index = out_map.get(
|
||||
DataType::MIDI, midi_out_index++, &valid);
|
||||
if (valid) {
|
||||
bufs.forward_lv2_midi(_ev_buffers[port_index], buf_index);
|
||||
}
|
||||
}
|
||||
// Flush MIDI (write back to Ardour MIDI buffers) -- MIDI THRU
|
||||
else if ((flags & PORT_OUTPUT) && (flags & (PORT_EVENT|PORT_SEQUENCE))) {
|
||||
const uint32_t buf_index = out_map.get(
|
||||
DataType::MIDI, midi_out_index++, &valid);
|
||||
if (valid) {
|
||||
@@ -1836,17 +1891,20 @@ LV2World::LV2World()
|
||||
atom_eventTransfer = lilv_new_uri(world, LV2_ATOM__eventTransfer);
|
||||
ev_EventPort = lilv_new_uri(world, LILV_URI_EVENT_PORT);
|
||||
ext_logarithmic = lilv_new_uri(world, LV2_PORT_PROPS__logarithmic);
|
||||
ext_notOnGUI = lilv_new_uri(world, LV2_PORT_PROPS__notOnGUI);
|
||||
lv2_AudioPort = lilv_new_uri(world, LILV_URI_AUDIO_PORT);
|
||||
lv2_ControlPort = lilv_new_uri(world, LILV_URI_CONTROL_PORT);
|
||||
lv2_InputPort = lilv_new_uri(world, LILV_URI_INPUT_PORT);
|
||||
lv2_OutputPort = lilv_new_uri(world, LILV_URI_OUTPUT_PORT);
|
||||
lv2_inPlaceBroken = lilv_new_uri(world, LV2_CORE__inPlaceBroken);
|
||||
lv2_integer = lilv_new_uri(world, LV2_CORE__integer);
|
||||
lv2_reportsLatency = lilv_new_uri(world, LV2_CORE__reportsLatency);
|
||||
lv2_sampleRate = lilv_new_uri(world, LV2_CORE__sampleRate);
|
||||
lv2_toggled = lilv_new_uri(world, LV2_CORE__toggled);
|
||||
lv2_enumeration = lilv_new_uri(world, LV2_CORE__enumeration);
|
||||
midi_MidiEvent = lilv_new_uri(world, LILV_URI_MIDI_EVENT);
|
||||
rdfs_comment = lilv_new_uri(world, LILV_NS_RDFS "comment");
|
||||
rsz_minimumSize = lilv_new_uri(world, LV2_RESIZE_PORT__minimumSize);
|
||||
time_Position = lilv_new_uri(world, LV2_TIME__Position);
|
||||
ui_GtkUI = lilv_new_uri(world, LV2_UI__GtkUI);
|
||||
ui_external = lilv_new_uri(world, "http://lv2plug.in/ns/extensions/ui#external");
|
||||
@@ -1856,17 +1914,24 @@ LV2World::~LV2World()
|
||||
{
|
||||
lilv_node_free(ui_external);
|
||||
lilv_node_free(ui_GtkUI);
|
||||
lilv_node_free(time_Position);
|
||||
lilv_node_free(rsz_minimumSize);
|
||||
lilv_node_free(rdfs_comment);
|
||||
lilv_node_free(midi_MidiEvent);
|
||||
lilv_node_free(lv2_enumeration);
|
||||
lilv_node_free(lv2_toggled);
|
||||
lilv_node_free(lv2_sampleRate);
|
||||
lilv_node_free(lv2_reportsLatency);
|
||||
lilv_node_free(lv2_integer);
|
||||
lilv_node_free(lv2_inPlaceBroken);
|
||||
lilv_node_free(lv2_OutputPort);
|
||||
lilv_node_free(lv2_InputPort);
|
||||
lilv_node_free(lv2_ControlPort);
|
||||
lilv_node_free(lv2_AudioPort);
|
||||
lilv_node_free(ext_notOnGUI);
|
||||
lilv_node_free(ext_logarithmic);
|
||||
lilv_node_free(ev_EventPort);
|
||||
lilv_node_free(atom_supports);
|
||||
lilv_node_free(atom_eventTransfer);
|
||||
lilv_node_free(atom_bufferType);
|
||||
lilv_node_free(atom_Sequence);
|
||||
|
||||
@@ -140,6 +140,7 @@ Session::Session (AudioEngine &eng,
|
||||
, _butler (new Butler (*this))
|
||||
, _post_transport_work (0)
|
||||
, _send_timecode_update (false)
|
||||
, ltc_enc_buf(0)
|
||||
, _all_route_group (new RouteGroup (*this, "all"))
|
||||
, routes (new RouteList)
|
||||
, _total_free_4k_blocks (0)
|
||||
|
||||
@@ -93,7 +93,8 @@ void
|
||||
Session::ltc_tx_cleanup()
|
||||
{
|
||||
DEBUG_TRACE (DEBUG::LTC, "LTC TX cleanup\n");
|
||||
if (ltc_enc_buf) free(ltc_enc_buf);
|
||||
free(ltc_enc_buf);
|
||||
ltc_enc_buf = NULL;
|
||||
ltc_encoder_free(ltc_encoder);
|
||||
ltc_encoder = NULL;
|
||||
}
|
||||
|
||||
@@ -694,7 +694,7 @@ Session::remove_state (string snapshot_name)
|
||||
void
|
||||
Session::jack_session_event (jack_session_event_t * event)
|
||||
{
|
||||
char timebuf[128];
|
||||
char timebuf[128], *tmp;
|
||||
time_t n;
|
||||
struct tm local_time;
|
||||
|
||||
@@ -702,6 +702,8 @@ Session::jack_session_event (jack_session_event_t * event)
|
||||
localtime_r (&n, &local_time);
|
||||
strftime (timebuf, sizeof(timebuf), "JS_%FT%T", &local_time);
|
||||
|
||||
while ((tmp = strchr(timebuf, ':'))) { *tmp = '.'; }
|
||||
|
||||
if (event->type == JackSessionSaveTemplate)
|
||||
{
|
||||
if (save_template( timebuf )) {
|
||||
|
||||
@@ -104,10 +104,11 @@ ControllableDescriptor::set (const std::string& str)
|
||||
}
|
||||
} else if (path[1] == "send") {
|
||||
|
||||
if (path.size() == 3 && rest.size() == 2) {
|
||||
if (path.size() == 3 && rest.size() == 3) {
|
||||
if (path[2] == "gain") {
|
||||
_subtype = SendGain;
|
||||
_target.push_back (atoi (rest[1]));
|
||||
_target.push_back (atoi (rest[2]));
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <gtkmm/spinbutton.h>
|
||||
#include <gtkmm/table.h>
|
||||
|
||||
#include "gtkmm2ext/gtk_ui.h"
|
||||
#include "gtkmm2ext/utils.h"
|
||||
|
||||
#include "generic_midi_control_protocol.h"
|
||||
@@ -147,7 +148,10 @@ GMCPGUI::GMCPGUI (GenericMidiControlProtocol& p)
|
||||
|
||||
threshold_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &GMCPGUI::threshold_changed));
|
||||
|
||||
label = manage (new Label (_("Threshold:")));
|
||||
Gtkmm2ext::UI::instance()->set_tip (threshold_spinner,
|
||||
string_compose (_("Controls how %1 behaves if the MIDI controller sends discontinuous values"), PROGRAM_NAME));
|
||||
|
||||
label = manage (new Label (_("Smoothing:")));
|
||||
label->set_alignment (0, 0.5);
|
||||
table->attach (*label, 0, 1, n, n + 1);
|
||||
table->attach (threshold_spinner, 1, 2, n, n + 1);
|
||||
|
||||
@@ -38,6 +38,9 @@ def build(bld):
|
||||
obj.use = 'libardour libardour_cp libgtkmm2ext libpbd'
|
||||
obj.vnum = LIBARDOUR_GENERIC_MIDI_LIB_VERSION
|
||||
obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3', 'surfaces')
|
||||
obj.defines = [
|
||||
'PROGRAM_NAME="' + bld.env['PROGRAM_NAME'] + '"'
|
||||
]
|
||||
|
||||
def shutdown():
|
||||
autowaf.shutdown()
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#include <pbd/file_utils.h>
|
||||
#include <pbd/failed_constructor.h>
|
||||
|
||||
#include "ardour/amp.h"
|
||||
#include "ardour/session.h"
|
||||
#include "ardour/route.h"
|
||||
#include "ardour/audio_track.h"
|
||||
@@ -42,6 +43,7 @@
|
||||
#include "ardour/filesystem_paths.h"
|
||||
#include "ardour/panner.h"
|
||||
#include "ardour/plugin.h"
|
||||
#include "ardour/send.h"
|
||||
|
||||
#include "osc.h"
|
||||
#include "osc_controllable.h"
|
||||
@@ -164,6 +166,10 @@ OSC::start ()
|
||||
_port++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!_osc_server) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef ARDOUR_OSC_UNIX_SERVER
|
||||
|
||||
@@ -356,8 +362,8 @@ OSC::register_callbacks()
|
||||
REGISTER_CALLBACK (serv, "/ardour/routes/pan_stereo_width", "if", route_set_pan_stereo_width);
|
||||
REGISTER_CALLBACK (serv, "/ardour/routes/plugin/parameter", "iiif", route_plugin_parameter);
|
||||
REGISTER_CALLBACK (serv, "/ardour/routes/plugin/parameter/print", "iii", route_plugin_parameter_print);
|
||||
|
||||
|
||||
REGISTER_CALLBACK (serv, "/ardour/routes/send/gainabs", "iif", route_set_send_gain_abs);
|
||||
REGISTER_CALLBACK (serv, "/ardour/routes/send/gaindB", "iif", route_set_send_gain_dB);
|
||||
|
||||
/* still not-really-standardized query interface */
|
||||
//REGISTER_CALLBACK (serv, "/ardour/*/#current_value", "", current_value);
|
||||
@@ -891,6 +897,70 @@ OSC::route_set_pan_stereo_width (int rid, float pos)
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
OSC::route_set_send_gain_abs (int rid, int sid, float val)
|
||||
{
|
||||
if (!session) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
boost::shared_ptr<Route> r = session->route_by_remote_id (rid);
|
||||
|
||||
if (!r) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* revert to zero-based counting */
|
||||
|
||||
if (sid > 0) {
|
||||
--sid;
|
||||
}
|
||||
|
||||
boost::shared_ptr<Processor> p = r->nth_send (sid);
|
||||
|
||||
if (p) {
|
||||
boost::shared_ptr<Send> s = boost::dynamic_pointer_cast<Send>(p);
|
||||
boost::shared_ptr<Amp> a = s->amp();
|
||||
|
||||
if (a) {
|
||||
a->set_gain (val, this);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
OSC::route_set_send_gain_dB (int rid, int sid, float val)
|
||||
{
|
||||
if (!session) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
boost::shared_ptr<Route> r = session->route_by_remote_id (rid);
|
||||
|
||||
if (!r) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* revert to zero-based counting */
|
||||
|
||||
if (sid > 0) {
|
||||
--sid;
|
||||
}
|
||||
|
||||
boost::shared_ptr<Processor> p = r->nth_send (sid);
|
||||
|
||||
if (p) {
|
||||
boost::shared_ptr<Send> s = boost::dynamic_pointer_cast<Send>(p);
|
||||
boost::shared_ptr<Amp> a = s->amp();
|
||||
|
||||
if (a) {
|
||||
a->set_gain (dB_to_coefficient (val), this);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
OSC::route_plugin_parameter (int rid, int piid, int par, float val)
|
||||
{
|
||||
|
||||
@@ -214,6 +214,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
||||
PATH_CALLBACK2(route_set_gain_dB,i,f);
|
||||
PATH_CALLBACK2(route_set_pan_stereo_position,i,f);
|
||||
PATH_CALLBACK2(route_set_pan_stereo_width,i,f);
|
||||
PATH_CALLBACK3(route_set_send_gain_abs,i,i,f);
|
||||
PATH_CALLBACK3(route_set_send_gain_dB,i,i,f);
|
||||
PATH_CALLBACK4(route_plugin_parameter,i,i,i,f);
|
||||
PATH_CALLBACK3(route_plugin_parameter_print,i,i,i);
|
||||
|
||||
@@ -224,6 +226,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
||||
int route_set_gain_dB (int rid, float dB);
|
||||
int route_set_pan_stereo_position (int rid, float left_right_fraction);
|
||||
int route_set_pan_stereo_width (int rid, float percent);
|
||||
int route_set_send_gain_abs (int rid, int sid, float val);
|
||||
int route_set_send_gain_dB (int rid, int sid, float val);
|
||||
int route_plugin_parameter (int rid, int piid,int par, float val);
|
||||
int route_plugin_parameter_print (int rid, int piid,int par);
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ fi
|
||||
|
||||
cd $BASE || exit 1
|
||||
git pull || exit 1
|
||||
./waf configure $* --strict --noconfirm --also-libdir=$HOME/a3/inst/lib --also-include=$HOME/gtk/inst/include || exit 1
|
||||
./waf configure $* --strict --backtrace --noconfirm --also-libdir=$HOME/a3/inst/lib --also-include=$HOME/gtk/inst/include || exit 1
|
||||
./waf || exit 1
|
||||
cd tools/linux_packaging || exit 1
|
||||
./build --public --strip some || exit 1
|
||||
|
||||
@@ -595,13 +595,13 @@ then
|
||||
else
|
||||
echo ""
|
||||
echo "!!! WARNING !!! - The version of Jack on this system is too old!"
|
||||
echo "Using an old version of Jack is not recommened. Please update"
|
||||
echo "Using an old version of Jack is not recommended. Please update"
|
||||
echo "Jack for best results."
|
||||
echo ""
|
||||
echo "System Jack version:"
|
||||
echo " ${JACK_VER_STRING}"
|
||||
echo ""
|
||||
echo "Recommened minimum versions:"
|
||||
echo "Recommended minimum versions:"
|
||||
echo " Jack1 - 0.121.3"
|
||||
echo " Jack2 - 1.9.8"
|
||||
echo ""
|
||||
|
||||
@@ -8,6 +8,7 @@ BUILD_ROOT=../../build
|
||||
|
||||
SAE=
|
||||
MIXBUS=
|
||||
WITH_HARVID=
|
||||
WITH_LADSPA=1
|
||||
STRIP=1
|
||||
PRINT_SYSDEPS=
|
||||
@@ -55,6 +56,7 @@ while [ $# -gt 0 ] ; do
|
||||
# specific build flags
|
||||
#
|
||||
|
||||
--harvid) WITH_HARVID=1 ; shift ;;
|
||||
--noladspa) WITH_LADSPA= ; shift ;;
|
||||
--nostrip) STRIP= ; shift ;;
|
||||
--sysdeps) PRINT_SYSDEPS=1; shift ;;
|
||||
@@ -472,6 +474,8 @@ done
|
||||
rm -rf $PRODUCT_PKG_DIR
|
||||
mkdir $PRODUCT_PKG_DIR
|
||||
|
||||
DMGWINBOTTOM=440
|
||||
|
||||
if [ x$SAE != x ] ; then
|
||||
|
||||
# SAE packaging
|
||||
@@ -489,7 +493,8 @@ elif [ x$MIXBUS != x ] ; then
|
||||
echo "Creating Mixbus packaging directory"
|
||||
mv $APPDIR $PRODUCT_PKG_DIR/
|
||||
cp MixBus_Install_QuickStart.pdf "$PRODUCT_PKG_DIR/Mixbus Install & Quick Start Guide.pdf"
|
||||
|
||||
DMGWINBOTTOM=$[ $DMGWINBOTTOM + 100 ]
|
||||
MIXBUSPOS="set position of item \"MixBus_Install_QuickStart.pdf\" of container window to {90, 180}"
|
||||
else
|
||||
|
||||
echo "Creating $APPNAME packaging directory"
|
||||
@@ -497,6 +502,20 @@ else
|
||||
|
||||
fi
|
||||
|
||||
if test x$WITH_HARVID != x ; then
|
||||
echo "installing video tools.."
|
||||
# TODO move files to http://ardour.org/files/ - symlink 'latest'
|
||||
HARVID_VERSION=$(curl http://ardour.org/files/video-tools/harvid_version.txt)
|
||||
XJADEO_VERSION=$(curl http://ardour.org/files/video-tools/xjadeo_version.txt)
|
||||
echo "copying harvid and xjadeo ..."
|
||||
curl -L -o "$PRODUCT_PKG_DIR/harvid-${HARVID_VERSION}.pkg" "http://x42.github.io/harvid/releases/harvid-${HARVID_VERSION}.pkg"
|
||||
curl -L -o "$PRODUCT_PKG_DIR/xjadeo-${XJADEO_VERSION:1}.dmg" "http://sourceforge.net/projects/xjadeo/files/xjadeo/${XJADEO_VERSION}/jadeo-${XJADEO_VERSION:1}.dmg/download"
|
||||
DMGWINBOTTOM=$[ $DMGWINBOTTOM + 140 ]
|
||||
YPOS=$[ $DMGWINBOTTOM - 300 ]
|
||||
HARVIDPOS="set position of item \"harvid-${HARVID_VERSION}.pkg\" of container window to {90, ${YPOS}}"
|
||||
XJADEOPOS="set position of item \"xjadeo-${XJADEO_VERSION:1}.dmg\" of container window to {310, ${YPOS}}"
|
||||
fi
|
||||
|
||||
echo "Building DMG ..."
|
||||
|
||||
# UC_DMG=$APPNAME-${release_version}-${revision}-UC.dmg
|
||||
@@ -525,7 +544,7 @@ DiskDevice=$(hdid -nomount "$TMPDMG" | grep Apple_HFS | cut -f 1 -d ' ')
|
||||
newfs_hfs -v "${VOLNAME}" "${DiskDevice}"
|
||||
mount -t hfs "${DiskDevice}" "${MNTPATH}"
|
||||
|
||||
cp -r ${PRODUCT_PKG_DIR}/${APPDIR} "${MNTPATH}" || exit
|
||||
cp -r ${PRODUCT_PKG_DIR}/* "${MNTPATH}" || exit
|
||||
mkdir "${MNTPATH}/.background"
|
||||
cp -vi dmgbg.png "${MNTPATH}/.background/dmgbg.png"
|
||||
|
||||
@@ -538,7 +557,7 @@ echo '
|
||||
set current view of container window to icon view
|
||||
set toolbar visible of container window to false
|
||||
set statusbar visible of container window to false
|
||||
set the bounds of container window to {400, 200, 800, 440}
|
||||
set the bounds of container window to {400, 200, 800, '${DMGWINBOTTOM}'}
|
||||
set theViewOptions to the icon view options of container window
|
||||
set arrangement of theViewOptions to not arranged
|
||||
set icon size of theViewOptions to 64
|
||||
@@ -546,6 +565,9 @@ echo '
|
||||
make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
|
||||
set position of item "'${APPDIR}'" of container window to {90, 100}
|
||||
set position of item "Applications" of container window to {310, 100}
|
||||
'${MIXBUSPOS}'
|
||||
'${HARVIDPOS}'
|
||||
'${XJADEOPOS}'
|
||||
close
|
||||
open
|
||||
update without registering applications
|
||||
|
||||
9
wscript
9
wscript
@@ -106,12 +106,14 @@ def set_compiler_flags (conf,opt):
|
||||
platform = u[0].lower()
|
||||
version = u[2]
|
||||
|
||||
# waf adds -O0 -g itself. thanks waf!
|
||||
is_clang = conf.env['CXX'][0].endswith('clang++')
|
||||
if opt.gprofile:
|
||||
debug_flags = [ '-pg' ]
|
||||
else:
|
||||
|
||||
if opt.backtrace:
|
||||
if platform != 'darwin' and not is_clang:
|
||||
debug_flags = [ '-rdynamic' ] # waf adds -O0 -g itself. thanks waf!
|
||||
debug_flags = [ '-rdynamic' ]
|
||||
|
||||
# Autodetect
|
||||
if opt.dist_target == 'auto':
|
||||
@@ -377,6 +379,8 @@ def options(opt):
|
||||
help='The user-visible name of the program being built')
|
||||
opt.add_option('--arch', type='string', action='store', dest='arch',
|
||||
help='Architecture-specific compiler flags')
|
||||
opt.add_option('--backtrace', action='store_true', default=False, dest='backtrace',
|
||||
help='Compile with -rdynamic -- allow obtaining backtraces from within Ardour')
|
||||
opt.add_option('--no-carbon', action='store_true', default=False, dest='nocarbon',
|
||||
help='Compile without support for AU Plugins with only CARBON UI (needed for 64bit)')
|
||||
opt.add_option('--boost-sp-debug', action='store_true', default=False, dest='boost_sp_debug',
|
||||
@@ -668,6 +672,7 @@ const char* const ardour_config_info = "\\n\\
|
||||
|
||||
write_config_text('Build documentation', conf.env['DOCS'])
|
||||
write_config_text('Debuggable build', conf.env['DEBUG'])
|
||||
write_config_text('Export all symbols (backtrace)', opts.backtrace)
|
||||
write_config_text('Install prefix', conf.env['PREFIX'])
|
||||
write_config_text('Strict compiler flags', conf.env['STRICT'])
|
||||
write_config_text('Internal Shared Libraries', conf.is_defined('INTERNAL_SHARED_LIBS'))
|
||||
|
||||
Reference in New Issue
Block a user