mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-09 16:24:57 +01:00
pulling trunk
git-svn-id: svn://localhost/ardour2/branches/undo@586 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
3038d8ce4a
commit
eb3f77df57
237 changed files with 68673 additions and 4051 deletions
38
SConstruct
38
SConstruct
|
|
@ -36,8 +36,10 @@ opts.AddOptions(
|
|||
BoolOption('FPU_OPTIMIZATION', 'Build runtime checked assembler code', 1),
|
||||
BoolOption('FFT_ANALYSIS', 'Include FFT analysis window', 0),
|
||||
BoolOption('SURFACES', 'Build support for control surfaces', 0),
|
||||
BoolOption('DMALLOC', 'Compile and link using the dmalloc library', 0)
|
||||
)
|
||||
BoolOption('DMALLOC', 'Compile and link using the dmalloc library', 0),
|
||||
BoolOption('LIBLO', 'Compile with support for liblo library', 1),
|
||||
BoolOption('COREAUDIO', 'Compile with Apple\'s CoreAudio library -- UNSTABLE', 0)
|
||||
)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# a handy helper that provides a way to merge compile/link information
|
||||
|
|
@ -351,8 +353,8 @@ libraries = { }
|
|||
|
||||
libraries['core'] = LibraryInfo (CCFLAGS = '-Ilibs')
|
||||
|
||||
libraries['sndfile'] = LibraryInfo()
|
||||
libraries['sndfile'].ParseConfig('pkg-config --cflags --libs sndfile')
|
||||
#libraries['sndfile'] = LibraryInfo(CCFLAGS = '-Ilibs/libsndfile/src')
|
||||
#libraries['sndfile'].ParseConfig('pkg-config --cflags --libs sndfile')
|
||||
|
||||
libraries['lrdf'] = LibraryInfo()
|
||||
libraries['lrdf'].ParseConfig('pkg-config --cflags --libs lrdf')
|
||||
|
|
@ -380,6 +382,7 @@ libraries['glib2'] = LibraryInfo()
|
|||
libraries['glib2'].ParseConfig ('pkg-config --cflags --libs glib-2.0')
|
||||
libraries['glib2'].ParseConfig ('pkg-config --cflags --libs gobject-2.0')
|
||||
libraries['glib2'].ParseConfig ('pkg-config --cflags --libs gmodule-2.0')
|
||||
libraries['glib2'].ParseConfig ('pkg-config --cflags --libs gthread-2.0')
|
||||
|
||||
libraries['gtk2'] = LibraryInfo()
|
||||
libraries['gtk2'].ParseConfig ('pkg-config --cflags --libs gtk+-2.0')
|
||||
|
|
@ -425,14 +428,15 @@ libraries['usb'] = conf.Finish ()
|
|||
#
|
||||
# Check for liblo
|
||||
|
||||
libraries['lo'] = LibraryInfo ()
|
||||
if env['LIBLO']:
|
||||
libraries['lo'] = LibraryInfo ()
|
||||
|
||||
conf = Configure (libraries['lo'])
|
||||
if conf.CheckLib ('lo', 'lo_server_new') == False:
|
||||
conf = Configure (libraries['lo'])
|
||||
if conf.CheckLib ('lo', 'lo_server_new') == False:
|
||||
print "liblo does not appear to be installed."
|
||||
exit (0)
|
||||
sys.exit (1)
|
||||
|
||||
libraries['lo'] = conf.Finish ()
|
||||
libraries['lo'] = conf.Finish ()
|
||||
|
||||
#
|
||||
# Check for dmalloc
|
||||
|
|
@ -470,6 +474,9 @@ elif conf.CheckCHeader('/System/Library/Frameworks/CoreMIDI.framework/Headers/Co
|
|||
env['SYSMIDI'] = 'CoreMIDI'
|
||||
subst_dict['%MIDITAG%'] = "ardour"
|
||||
subst_dict['%MIDITYPE%'] = "coremidi"
|
||||
else:
|
||||
print "It appears you don't have the required MIDI libraries installed."
|
||||
sys.exit (1)
|
||||
|
||||
env = conf.Finish()
|
||||
|
||||
|
|
@ -539,6 +546,9 @@ else:
|
|||
libraries['soundtouch'] = LibraryInfo(LIBS='soundtouch',
|
||||
LIBPATH='#libs/soundtouch',
|
||||
CPPPATH=['#libs', '#libs/soundtouch'])
|
||||
libraries['sndfile'] = LibraryInfo(LIBS='libsndfile',
|
||||
LIBPATH='#libs/libsndfile',
|
||||
CPPPATH='#libs/libsndfile')
|
||||
# libraries['libglademm'] = LibraryInfo(LIBS='libglademm',
|
||||
# LIBPATH='#libs/libglademm',
|
||||
# CPPPATH='#libs/libglademm')
|
||||
|
|
@ -551,6 +561,7 @@ else:
|
|||
subdirs = [
|
||||
# 'libs/cassowary',
|
||||
'libs/sigc++2',
|
||||
'libs/libsndfile',
|
||||
'libs/pbd3',
|
||||
'libs/midi++2',
|
||||
'libs/ardour'
|
||||
|
|
@ -729,6 +740,12 @@ if env['FPU_OPTIMIZATION']:
|
|||
print "\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)"
|
||||
# end optimization section
|
||||
|
||||
#
|
||||
# save off guessed arch element in an env
|
||||
#
|
||||
env.Append(CONFIG_ARCH=config[config_arch])
|
||||
|
||||
|
||||
#
|
||||
# ARCH="..." overrides all
|
||||
#
|
||||
|
|
@ -757,6 +774,9 @@ env.Append(CCFLAGS="-Wall")
|
|||
if env['VST']:
|
||||
env.Append(CCFLAGS="-DVST_SUPPORT")
|
||||
|
||||
if env['LIBLO']:
|
||||
env.Append(CCFLAGS="-DHAVE_LIBLO")
|
||||
|
||||
#
|
||||
# everybody needs this
|
||||
#
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ AnalysisWindow::analyze_data (Gtk::Button *button)
|
|||
{
|
||||
track_list_ready = false;
|
||||
{
|
||||
LockMonitor lm (track_list_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (track_list_lock);
|
||||
|
||||
// Empty track list & free old graphs
|
||||
clear_tracklist();
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
#include <gtkmm2ext/dndtreeview.h>
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
|
||||
#include "ardour_dialog.h"
|
||||
|
|
@ -106,7 +106,7 @@ class AnalysisWindow : public ArdourDialog
|
|||
FFTGraph fft_graph;
|
||||
|
||||
bool track_list_ready;
|
||||
PBD::Lock track_list_lock;
|
||||
Glib::Mutex track_list_lock;
|
||||
|
||||
friend class FFTGraph;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@
|
|||
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/compose.h>
|
||||
#include <pbd/basename.h>
|
||||
#include <pbd/pathscanner.h>
|
||||
#include <pbd/failed_constructor.h>
|
||||
#include <gtkmm2ext/gtk_ui.h>
|
||||
|
|
@ -210,22 +209,6 @@ ARDOUR_UI::set_engine (AudioEngine& e)
|
|||
|
||||
keyboard = new Keyboard;
|
||||
|
||||
string meter_path;
|
||||
|
||||
meter_path = ARDOUR::find_data_file("v_meter_strip.xpm", "pixmaps");
|
||||
if (meter_path.empty()) {
|
||||
error << _("no vertical meter strip image found") << endmsg;
|
||||
exit (1);
|
||||
}
|
||||
FastMeter::set_vertical_xpm (meter_path);
|
||||
|
||||
meter_path = ARDOUR::find_data_file("h_meter_strip.xpm", "pixmaps");
|
||||
if (meter_path.empty()) {
|
||||
error << _("no horizontal meter strip image found") << endmsg;
|
||||
exit (1);
|
||||
}
|
||||
FastMeter::set_horizontal_xpm (meter_path);
|
||||
|
||||
if (setup_windows ()) {
|
||||
throw failed_constructor ();
|
||||
}
|
||||
|
|
@ -717,7 +700,7 @@ ARDOUR_UI::redisplay_recent_sessions ()
|
|||
|
||||
TreeModel::Row row = *(recent_session_model->append());
|
||||
|
||||
row[recent_session_columns.visible_name] = PBD::basename (fullpath);
|
||||
row[recent_session_columns.visible_name] = Glib::path_get_basename (fullpath);
|
||||
row[recent_session_columns.fullpath] = fullpath;
|
||||
|
||||
if (states->size() > 1) {
|
||||
|
|
@ -824,9 +807,11 @@ ARDOUR_UI::filter_ardour_session_dirs (const FileFilter::Info& info)
|
|||
return false;
|
||||
}
|
||||
|
||||
// XXX Portability
|
||||
|
||||
string session_file = info.filename;
|
||||
session_file += '/';
|
||||
session_file += PBD::basename (info.filename);
|
||||
session_file += Glib::path_get_basename (info.filename);
|
||||
session_file += ".ardour";
|
||||
|
||||
if (stat (session_file.c_str(), &statbuf) != 0) {
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ using namespace sigc;
|
|||
using namespace Gtk;
|
||||
|
||||
using PBD::atoi;
|
||||
using PBD::atof;
|
||||
|
||||
const uint32_t AudioClock::field_length[(int) AudioClock::AudioFrames+1] = {
|
||||
2, /* SMPTE_Hours */
|
||||
|
|
|
|||
|
|
@ -490,7 +490,7 @@ ConnectionEditor::display_ports ()
|
|||
void
|
||||
ConnectionEditor::display_connection_state (bool for_input)
|
||||
{
|
||||
LockMonitor lm (port_display_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (port_display_lock);
|
||||
uint32_t limit;
|
||||
|
||||
if (session == 0 || current_connection == 0) {
|
||||
|
|
@ -601,7 +601,7 @@ ConnectionEditor::add_port ()
|
|||
void
|
||||
ConnectionEditor::connection_port_button_press_event (GdkEventButton* ev, TreeView* tview)
|
||||
{
|
||||
LockMonitor lm (port_display_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (port_display_lock);
|
||||
|
||||
int which_port = reinterpret_cast<intptr_t> (treeview->get_data ("port"));
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ using __gnu_cxx::slist;
|
|||
|
||||
#include "ardour_dialog.h"
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
namespace ARDOUR {
|
||||
class Session;
|
||||
|
|
@ -116,7 +116,7 @@ class ConnectionEditor : public ArdourDialog {
|
|||
Gtk::Button clear_button;
|
||||
Gtk::Button add_port_button;
|
||||
|
||||
PBD::Lock port_display_lock;
|
||||
Glib::Mutex port_display_lock;
|
||||
slist<Gtk::ScrolledWindow *> port_displays;
|
||||
|
||||
Gtk::Button ok_button;
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@ using namespace Gtkmm2ext;
|
|||
using namespace Editing;
|
||||
|
||||
using PBD::internationalize;
|
||||
using PBD::atoi;
|
||||
|
||||
const double Editor::timebar_height = 15.0;
|
||||
|
||||
|
|
@ -2191,7 +2192,7 @@ Editor::set_state (const XMLNode& node)
|
|||
}
|
||||
|
||||
if ((prop = node.property ("zoom"))) {
|
||||
set_frames_per_unit (atof (prop->value()));
|
||||
set_frames_per_unit (PBD::atof (prop->value()));
|
||||
}
|
||||
|
||||
if ((prop = node.property ("snap-to"))) {
|
||||
|
|
@ -2899,7 +2900,7 @@ Editor::convert_drop_to_paths (vector<ustring>& paths,
|
|||
for (vector<ustring>::iterator i = uris.begin(); i != uris.end(); ++i) {
|
||||
if ((*i).substr (0,7) == "file://") {
|
||||
string p = *i;
|
||||
url_decode (p);
|
||||
PBD::url_decode (p);
|
||||
paths.push_back (p.substr (7));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -203,7 +203,7 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool
|
|||
/* lets see if we can link it into the session */
|
||||
|
||||
linked_path = session->sound_dir();
|
||||
linked_path += PBD::basename (path);
|
||||
linked_path += Glib::path_get_basename (path);
|
||||
|
||||
if (link (path.c_str(), linked_path.c_str()) == 0) {
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@
|
|||
#include <samplerate.h>
|
||||
|
||||
#include <pbd/convert.h>
|
||||
#include <pbd/dirname.h>
|
||||
#include <pbd/xml++.h>
|
||||
|
||||
#include <gtkmm2ext/utils.h>
|
||||
|
|
@ -1154,7 +1153,7 @@ ExportDialog::is_filepath_valid(string &filepath)
|
|||
|
||||
// directory needs to exist and be writable
|
||||
|
||||
string dirpath = PBD::dirname (filepath);
|
||||
string dirpath = Glib::path_get_dirname (filepath);
|
||||
if (::access (dirpath.c_str(), W_OK) != 0) {
|
||||
string txt = _("Cannot write file in: ") + dirpath;
|
||||
MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true);
|
||||
|
|
|
|||
|
|
@ -25,8 +25,6 @@
|
|||
#include <ardour/audioengine.h>
|
||||
#include <ardour/sndfile_helpers.h>
|
||||
|
||||
#include <pbd/dirname.h>
|
||||
|
||||
#include "ardour_ui.h"
|
||||
#include "export_range_markers_dialog.h"
|
||||
|
||||
|
|
@ -149,7 +147,7 @@ ExportRangeMarkersDialog::is_filepath_valid(string &filepath)
|
|||
}
|
||||
|
||||
// directory needs to exist and be writable
|
||||
string dirpath = PBD::dirname (filepath);
|
||||
string dirpath = Glib::path_get_dirname (filepath);
|
||||
if (::access (dirpath.c_str(), W_OK) != 0) {
|
||||
string txt = _("Cannot write file in: ") + dirpath;
|
||||
MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true);
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ void
|
|||
FFTGraph::setWindowSize(int windowSize)
|
||||
{
|
||||
if (_a_window) {
|
||||
LockMonitor lm (_a_window->track_list_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_a_window->track_list_lock);
|
||||
setWindowSize_internal(windowSize);
|
||||
} else {
|
||||
setWindowSize_internal(windowSize);
|
||||
|
|
@ -261,7 +261,7 @@ FFTGraph::draw_scales(Glib::RefPtr<Gdk::Window> window)
|
|||
void
|
||||
FFTGraph::redraw()
|
||||
{
|
||||
LockMonitor lm (_a_window->track_list_lock, __LINE__, __FILE__ );
|
||||
Glib::Mutex::Lock lm (_a_window->track_list_lock);
|
||||
|
||||
draw_scales(get_window());
|
||||
|
||||
|
|
|
|||
|
|
@ -133,7 +133,6 @@ gtk_custom_hruler_draw_ticks (GtkCustomRuler * ruler)
|
|||
{
|
||||
GtkWidget *widget;
|
||||
GdkGC *gc, *bg_gc;
|
||||
GdkFont *font;
|
||||
gint i;
|
||||
GtkCustomRulerMark *marks;
|
||||
gint xthickness;
|
||||
|
|
@ -154,7 +153,6 @@ gtk_custom_hruler_draw_ticks (GtkCustomRuler * ruler)
|
|||
|
||||
gc = widget->style->fg_gc[GTK_STATE_NORMAL];
|
||||
bg_gc = widget->style->bg_gc[GTK_STATE_NORMAL];
|
||||
font = gtk_style_get_font(widget->style);
|
||||
|
||||
layout = gtk_widget_create_pango_layout (widget, "012456789");
|
||||
pango_layout_get_extents (layout, &ink_rect, &logical_rect);
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
#include <gtkmm/messagedialog.h>
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <ardour/io.h>
|
||||
#include <ardour/route.h>
|
||||
|
|
@ -368,7 +368,7 @@ IOSelector::display_ports ()
|
|||
TreeView *selected_port_tview = 0;
|
||||
|
||||
{
|
||||
LockMonitor lm (port_display_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (port_display_lock);
|
||||
Port *port;
|
||||
uint32_t limit;
|
||||
|
||||
|
|
@ -670,7 +670,7 @@ IOSelector::port_column_button_release (GdkEventButton* event, TreeView* treevie
|
|||
if (Keyboard::is_delete_event (event)) {
|
||||
Port* port;
|
||||
{
|
||||
LockMonitor lm (port_display_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (port_display_lock);
|
||||
|
||||
port = static_cast<Port *> (treeview->get_data (_("port")));
|
||||
|
||||
|
|
@ -724,7 +724,7 @@ IOSelector::select_treeview (TreeView* tview)
|
|||
switch.
|
||||
*/
|
||||
|
||||
LockMonitor lm (port_display_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (port_display_lock);
|
||||
Port* port = reinterpret_cast<Port *> (tview->get_data (_("port")));
|
||||
|
||||
if (port != selected_port) {
|
||||
|
|
|
|||
|
|
@ -29,6 +29,9 @@ using __gnu_cxx::slist;
|
|||
#endif
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <gtkmm/box.h>
|
||||
#include <gtkmm/frame.h>
|
||||
#include <gtkmm/button.h>
|
||||
|
|
@ -39,6 +42,7 @@ using __gnu_cxx::slist;
|
|||
|
||||
#include <ardour_dialog.h>
|
||||
|
||||
|
||||
namespace ARDOUR {
|
||||
class IO;
|
||||
class Session;
|
||||
|
|
@ -105,7 +109,7 @@ class IOSelector : public Gtk::VBox {
|
|||
Gtk::Button clear_connections_button;
|
||||
Gtk::ScrolledWindow port_display_scroller;
|
||||
|
||||
PBD::Lock port_display_lock;
|
||||
Glib::Mutex port_display_lock;
|
||||
slist<Gtk::TreeView *> port_displays;
|
||||
void display_ports ();
|
||||
|
||||
|
|
|
|||
|
|
@ -367,6 +367,9 @@ main (int argc, char *argv[])
|
|||
ARDOUR::AudioEngine *engine;
|
||||
vector<Glib::ustring> null_file_list;
|
||||
|
||||
// needs a better home.
|
||||
Glib::thread_init();
|
||||
|
||||
gtk_set_locale ();
|
||||
|
||||
(void) bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
#include <gtkmm/accelmap.h>
|
||||
|
||||
#include <pbd/convert.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <gtkmm2ext/gtk_ui.h>
|
||||
#include <gtkmm2ext/utils.h>
|
||||
|
|
|
|||
|
|
@ -24,8 +24,6 @@
|
|||
#include <ardour/recent_sessions.h>
|
||||
#include <ardour/session.h>
|
||||
|
||||
#include <pbd/basename.h>
|
||||
|
||||
#include <gtkmm/entry.h>
|
||||
#include <gtkmm/filechooserbutton.h>
|
||||
#include <gtkmm/spinbutton.h>
|
||||
|
|
@ -659,7 +657,7 @@ NewSessionDialog::reset_recent()
|
|||
|
||||
Gtk::TreeModel::Row row = *(recent_model->append());
|
||||
|
||||
row[recent_columns.visible_name] = PBD::basename (fullpath);
|
||||
row[recent_columns.visible_name] = Glib::path_get_basename (fullpath);
|
||||
row[recent_columns.fullpath] = fullpath;
|
||||
|
||||
if (states->size() > 1) {
|
||||
|
|
|
|||
|
|
@ -1,195 +0,0 @@
|
|||
/* XPM */
|
||||
static const gchar *h_meter_strip_xpm[] = {
|
||||
"186 5 187 2",
|
||||
" c None",
|
||||
". c #2BFE00",
|
||||
"+ c #2DFE00",
|
||||
"@ c #2FFE01",
|
||||
"# c #32FE01",
|
||||
"$ c #34FE02",
|
||||
"% c #36FE02",
|
||||
"& c #38FE03",
|
||||
"* c #3BFE03",
|
||||
"= c #3DFD04",
|
||||
"- c #3FFD04",
|
||||
"; c #41FD05",
|
||||
"> c #44FD05",
|
||||
", c #46FD06",
|
||||
"' c #48FD06",
|
||||
") c #4AFD07",
|
||||
"! c #4DFD07",
|
||||
"~ c #4FFD08",
|
||||
"{ c #51FC08",
|
||||
"] c #53FC09",
|
||||
"^ c #56FC09",
|
||||
"/ c #58FC09",
|
||||
"( c #5AFC0A",
|
||||
"_ c #5CFC0A",
|
||||
": c #5FFC0B",
|
||||
"< c #61FC0B",
|
||||
"[ c #63FB0C",
|
||||
"} c #65FB0C",
|
||||
"| c #68FB0D",
|
||||
"1 c #6AFB0D",
|
||||
"2 c #6CFB0E",
|
||||
"3 c #6EFB0E",
|
||||
"4 c #71FB0F",
|
||||
"5 c #73FB0F",
|
||||
"6 c #75FB10",
|
||||
"7 c #77FA10",
|
||||
"8 c #7AFA11",
|
||||
"9 c #7CFA11",
|
||||
"0 c #7EFA12",
|
||||
"a c #80FA12",
|
||||
"b c #83FA12",
|
||||
"c c #85FA13",
|
||||
"d c #87FA13",
|
||||
"e c #89FA14",
|
||||
"f c #8CF914",
|
||||
"g c #8EF915",
|
||||
"h c #90F915",
|
||||
"i c #92F916",
|
||||
"j c #95F916",
|
||||
"k c #97F917",
|
||||
"l c #99F917",
|
||||
"m c #9BF918",
|
||||
"n c #9EF818",
|
||||
"o c #A0F819",
|
||||
"p c #A2F819",
|
||||
"q c #A4F81A",
|
||||
"r c #A7F81A",
|
||||
"s c #A9F81A",
|
||||
"t c #ABF81B",
|
||||
"u c #ADF81B",
|
||||
"v c #B0F81C",
|
||||
"w c #B2F71C",
|
||||
"x c #B4F71D",
|
||||
"y c #B6F71D",
|
||||
"z c #B9F71E",
|
||||
"A c #BBF71E",
|
||||
"B c #BDF71F",
|
||||
"C c #BFF71F",
|
||||
"D c #C2F720",
|
||||
"E c #C4F720",
|
||||
"F c #C6F621",
|
||||
"G c #C8F621",
|
||||
"H c #CBF622",
|
||||
"I c #CDF622",
|
||||
"J c #CFF623",
|
||||
"K c #D1F623",
|
||||
"L c #D4F624",
|
||||
"M c #D6F624",
|
||||
"N c #D8F524",
|
||||
"O c #DAF525",
|
||||
"P c #DDF525",
|
||||
"Q c #DFF526",
|
||||
"R c #E1F526",
|
||||
"S c #E3F527",
|
||||
"T c #E6F527",
|
||||
"U c #E8F528",
|
||||
"V c #EAF528",
|
||||
"W c #ECF429",
|
||||
"X c #EFF429",
|
||||
"Y c #F1F42A",
|
||||
"Z c #F3F42A",
|
||||
"` c #F5F42B",
|
||||
" . c #F8F42B",
|
||||
".. c #FAF42C",
|
||||
"+. c #FCF42C",
|
||||
"@. c #FFF42D",
|
||||
"#. c #FFF22C",
|
||||
"$. c #FFF12B",
|
||||
"%. c #FFF02A",
|
||||
"&. c #FFEF2A",
|
||||
"*. c #FFEE29",
|
||||
"=. c #FFED28",
|
||||
"-. c #FFEC28",
|
||||
";. c #FFEB27",
|
||||
">. c #FFE926",
|
||||
",. c #FFE826",
|
||||
"'. c #FFE725",
|
||||
"). c #FFE624",
|
||||
"!. c #FFE524",
|
||||
"~. c #FFE423",
|
||||
"{. c #FFE322",
|
||||
"]. c #FFE222",
|
||||
"^. c #FFE021",
|
||||
"/. c #FFDF20",
|
||||
"(. c #FFDE20",
|
||||
"_. c #FFDD1F",
|
||||
":. c #FFDC1E",
|
||||
"<. c #FFDB1E",
|
||||
"[. c #FFDA1D",
|
||||
"}. c #FFD91C",
|
||||
"|. c #FFD71B",
|
||||
"1. c #FFD61B",
|
||||
"2. c #FFD51A",
|
||||
"3. c #FFD419",
|
||||
"4. c #FFD319",
|
||||
"5. c #FFD218",
|
||||
"6. c #FFD117",
|
||||
"7. c #FFD017",
|
||||
"8. c #FFCF16",
|
||||
"9. c #FFCD15",
|
||||
"0. c #FFCC15",
|
||||
"a. c #FFCB14",
|
||||
"b. c #FFCA13",
|
||||
"c. c #FFC913",
|
||||
"d. c #FFC812",
|
||||
"e. c #FFC711",
|
||||
"f. c #FFC611",
|
||||
"g. c #FFC410",
|
||||
"h. c #FFC30F",
|
||||
"i. c #FFC20F",
|
||||
"j. c #FFC10E",
|
||||
"k. c #FFC00D",
|
||||
"l. c #FFBF0C",
|
||||
"m. c #FFBE0C",
|
||||
"n. c #FFBD0B",
|
||||
"o. c #FFBB0A",
|
||||
"p. c #FFBA0A",
|
||||
"q. c #FFB909",
|
||||
"r. c #FFB808",
|
||||
"s. c #FFB708",
|
||||
"t. c #FFB607",
|
||||
"u. c #FFB506",
|
||||
"v. c #FFB406",
|
||||
"w. c #FFB205",
|
||||
"x. c #FFB104",
|
||||
"y. c #FFB004",
|
||||
"z. c #FFAF03",
|
||||
"A. c #FFAE02",
|
||||
"B. c #FFAD02",
|
||||
"C. c #FFAC01",
|
||||
"D. c #FFAB00",
|
||||
"E. c #FFA900",
|
||||
"F. c #F11F00",
|
||||
"G. c #F21E00",
|
||||
"H. c #F21C00",
|
||||
"I. c #F31B00",
|
||||
"J. c #F31A00",
|
||||
"K. c #F41800",
|
||||
"L. c #F41700",
|
||||
"M. c #F51600",
|
||||
"N. c #F61400",
|
||||
"O. c #F61300",
|
||||
"P. c #F71100",
|
||||
"Q. c #F71000",
|
||||
"R. c #F80F00",
|
||||
"S. c #F90D00",
|
||||
"T. c #F90C00",
|
||||
"U. c #FA0B00",
|
||||
"V. c #FA0900",
|
||||
"W. c #FB0800",
|
||||
"X. c #FC0600",
|
||||
"Y. c #FC0500",
|
||||
"Z. c #FD0400",
|
||||
"`. c #FD0200",
|
||||
" + c #FE0100",
|
||||
".+ c #FE0000",
|
||||
"++ c #FF0000",
|
||||
". + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ` ...+.@.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+",
|
||||
". + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ` ...+.@.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+",
|
||||
". + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ` ...+.@.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +++",
|
||||
". + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ` ...+.@.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +++",
|
||||
". + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ` ...+.@.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +++"};
|
||||
|
|
@ -1,483 +0,0 @@
|
|||
/* XPM */
|
||||
static const gchar * v_meter_strip_xpm[] = {
|
||||
"5 250 230 2",
|
||||
" c None",
|
||||
". c #FE0000",
|
||||
"+ c #FF0000",
|
||||
"@ c #FE0100",
|
||||
"# c #FD0200",
|
||||
"$ c #FD0300",
|
||||
"% c #FD0400",
|
||||
"& c #FC0500",
|
||||
"* c #FC0600",
|
||||
"= c #FC0700",
|
||||
"- c #FB0800",
|
||||
"; c #FA0900",
|
||||
"> c #FA0A00",
|
||||
", c #FA0B00",
|
||||
"' c #F90C00",
|
||||
") c #F90D00",
|
||||
"! c #F80E00",
|
||||
"~ c #F80F00",
|
||||
"{ c #F71000",
|
||||
"] c #F71100",
|
||||
"^ c #F61200",
|
||||
"/ c #F61300",
|
||||
"( c #F61400",
|
||||
"_ c #F51600",
|
||||
": c #F41700",
|
||||
"< c #F41800",
|
||||
"[ c #F31A00",
|
||||
"} c #F31B00",
|
||||
"| c #F21C00",
|
||||
"1 c #F21E00",
|
||||
"2 c #F11F00",
|
||||
"3 c #F54A00",
|
||||
"4 c #FFA900",
|
||||
"5 c #FFAB00",
|
||||
"6 c #FFAC01",
|
||||
"7 c #FFAD02",
|
||||
"8 c #FFAE02",
|
||||
"9 c #FFAF03",
|
||||
"0 c #FFB004",
|
||||
"a c #FFB104",
|
||||
"b c #FFB205",
|
||||
"c c #FFB406",
|
||||
"d c #FFB506",
|
||||
"e c #FFB607",
|
||||
"f c #FFB708",
|
||||
"g c #FFB808",
|
||||
"h c #FFB909",
|
||||
"i c #FFBA0A",
|
||||
"j c #FFBB0A",
|
||||
"k c #FFBC0A",
|
||||
"l c #FFBD0B",
|
||||
"m c #FFBE0C",
|
||||
"n c #FFBF0C",
|
||||
"o c #FFC00D",
|
||||
"p c #FFC10E",
|
||||
"q c #FFC20F",
|
||||
"r c #FFC30F",
|
||||
"s c #FFC410",
|
||||
"t c #FFC511",
|
||||
"u c #FFC611",
|
||||
"v c #FFC711",
|
||||
"w c #FFC812",
|
||||
"x c #FFC913",
|
||||
"y c #FFCA13",
|
||||
"z c #FFCB14",
|
||||
"A c #FFCC15",
|
||||
"B c #FFCD15",
|
||||
"C c #FFCF16",
|
||||
"D c #FFD017",
|
||||
"E c #FFD117",
|
||||
"F c #FFD218",
|
||||
"G c #FFD319",
|
||||
"H c #FFD419",
|
||||
"I c #FFD51A",
|
||||
"J c #FFD61B",
|
||||
"K c #FFD71B",
|
||||
"L c #FFD81C",
|
||||
"M c #FFD91C",
|
||||
"N c #FFDA1D",
|
||||
"O c #FFDB1E",
|
||||
"P c #FFDC1E",
|
||||
"Q c #FFDD1F",
|
||||
"R c #FFDE20",
|
||||
"S c #FFDF20",
|
||||
"T c #FFE021",
|
||||
"U c #FFE222",
|
||||
"V c #FFE322",
|
||||
"W c #FFE423",
|
||||
"X c #FFE524",
|
||||
"Y c #FFE624",
|
||||
"Z c #FFE725",
|
||||
"` c #FFE826",
|
||||
" . c #FFE926",
|
||||
".. c #FFEA26",
|
||||
"+. c #FFEB27",
|
||||
"@. c #FFEC28",
|
||||
"#. c #FFED28",
|
||||
"$. c #FFEE29",
|
||||
"%. c #FFEF2A",
|
||||
"&. c #FFF02A",
|
||||
"*. c #FFF12B",
|
||||
"=. c #FFF22C",
|
||||
"-. c #FFF32D",
|
||||
";. c #FFF42D",
|
||||
">. c #FDF42C",
|
||||
",. c #FBF42C",
|
||||
"'. c #FAF42C",
|
||||
"). c #F8F42B",
|
||||
"!. c #F6F42B",
|
||||
"~. c #F4F42B",
|
||||
"{. c #F3F42A",
|
||||
"]. c #F1F42A",
|
||||
"^. c #F0F429",
|
||||
"/. c #EEF429",
|
||||
"(. c #ECF429",
|
||||
"_. c #EAF528",
|
||||
":. c #E9F528",
|
||||
"<. c #E7F528",
|
||||
"[. c #E5F527",
|
||||
"}. c #E3F527",
|
||||
"|. c #E2F526",
|
||||
"1. c #E0F526",
|
||||
"2. c #DFF526",
|
||||
"3. c #DDF525",
|
||||
"4. c #DBF525",
|
||||
"5. c #D9F525",
|
||||
"6. c #D8F524",
|
||||
"7. c #D6F624",
|
||||
"8. c #D5F624",
|
||||
"9. c #D3F624",
|
||||
"0. c #D1F623",
|
||||
"a. c #CFF623",
|
||||
"b. c #CEF622",
|
||||
"c. c #CCF622",
|
||||
"d. c #CBF622",
|
||||
"e. c #C9F621",
|
||||
"f. c #C7F621",
|
||||
"g. c #C5F621",
|
||||
"h. c #C4F720",
|
||||
"i. c #C2F720",
|
||||
"j. c #C0F71F",
|
||||
"k. c #BEF71F",
|
||||
"l. c #BDF71F",
|
||||
"m. c #BBF71E",
|
||||
"n. c #BAF71E",
|
||||
"o. c #B8F71E",
|
||||
"p. c #B6F71D",
|
||||
"q. c #B5F71D",
|
||||
"r. c #B3F71D",
|
||||
"s. c #B2F71C",
|
||||
"t. c #B0F81C",
|
||||
"u. c #AEF81B",
|
||||
"v. c #ACF81B",
|
||||
"w. c #ABF81B",
|
||||
"x. c #A9F81A",
|
||||
"y. c #A8F81A",
|
||||
"z. c #A6F81A",
|
||||
"A. c #A4F81A",
|
||||
"B. c #A2F819",
|
||||
"C. c #A1F819",
|
||||
"D. c #9FF819",
|
||||
"E. c #9EF818",
|
||||
"F. c #9BF918",
|
||||
"G. c #9AF917",
|
||||
"H. c #98F917",
|
||||
"I. c #97F917",
|
||||
"J. c #95F916",
|
||||
"K. c #93F916",
|
||||
"L. c #91F916",
|
||||
"M. c #90F915",
|
||||
"N. c #8EF915",
|
||||
"O. c #8DF914",
|
||||
"P. c #8BF914",
|
||||
"Q. c #89FA14",
|
||||
"R. c #87FA13",
|
||||
"S. c #86FA13",
|
||||
"T. c #84FA13",
|
||||
"U. c #83FA12",
|
||||
"V. c #81FA12",
|
||||
"W. c #7FFA12",
|
||||
"X. c #7DFA12",
|
||||
"Y. c #7CFA11",
|
||||
"Z. c #7AFA11",
|
||||
"`. c #78FA10",
|
||||
" + c #76FA10",
|
||||
".+ c #75FB10",
|
||||
"++ c #73FB0F",
|
||||
"@+ c #72FB0F",
|
||||
"#+ c #70FB0F",
|
||||
"$+ c #6EFB0E",
|
||||
"%+ c #6DFB0E",
|
||||
"&+ c #6BFB0E",
|
||||
"*+ c #6AFB0D",
|
||||
"=+ c #68FB0D",
|
||||
"-+ c #66FB0C",
|
||||
";+ c #64FB0C",
|
||||
">+ c #63FB0C",
|
||||
",+ c #61FC0B",
|
||||
"'+ c #60FC0B",
|
||||
")+ c #5EFC0B",
|
||||
"!+ c #5CFC0A",
|
||||
"~+ c #5AFC0A",
|
||||
"{+ c #59FC09",
|
||||
"]+ c #57FC09",
|
||||
"^+ c #56FC09",
|
||||
"/+ c #53FC09",
|
||||
"(+ c #52FC08",
|
||||
"_+ c #50FC08",
|
||||
":+ c #4FFD08",
|
||||
"<+ c #4DFD07",
|
||||
"[+ c #4BFD07",
|
||||
"}+ c #49FD07",
|
||||
"|+ c #48FD06",
|
||||
"1+ c #46FD06",
|
||||
"2+ c #45FD05",
|
||||
"3+ c #43FD05",
|
||||
"4+ c #41FD05",
|
||||
"5+ c #3FFD04",
|
||||
"6+ c #3EFD04",
|
||||
"7+ c #3CFD04",
|
||||
"8+ c #3BFE03",
|
||||
"9+ c #39FE03",
|
||||
"0+ c #37FE02",
|
||||
"a+ c #35FE02",
|
||||
"b+ c #34FE02",
|
||||
"c+ c #32FE01",
|
||||
"d+ c #30FE01",
|
||||
"e+ c #2EFE01",
|
||||
"f+ c #2DFE00",
|
||||
"g+ c #2BFE00",
|
||||
". . + + + ",
|
||||
". . + + + ",
|
||||
"@ @ @ @ @ ",
|
||||
"# # # # # ",
|
||||
"$ $ $ $ $ ",
|
||||
"% % % % % ",
|
||||
"& & & & & ",
|
||||
"* * * * * ",
|
||||
"= = = = = ",
|
||||
"- - - - - ",
|
||||
"; ; ; ; ; ",
|
||||
"> > > > > ",
|
||||
", , , , , ",
|
||||
"' ' ' ' ' ",
|
||||
") ) ) ) ) ",
|
||||
"! ! ! ! ! ",
|
||||
"~ ~ ~ ~ ~ ",
|
||||
"{ { { { { ",
|
||||
"] ] ] ] ] ",
|
||||
"^ ^ ^ ^ ^ ",
|
||||
"/ / / / / ",
|
||||
"( ( ( ( ( ",
|
||||
"_ _ _ _ _ ",
|
||||
": : : : : ",
|
||||
": : : : : ",
|
||||
"< < < < < ",
|
||||
"[ [ [ [ [ ",
|
||||
"} } } } } ",
|
||||
"} } } } } ",
|
||||
"| | | | | ",
|
||||
"1 1 1 1 1 ",
|
||||
"2 2 2 2 2 ",
|
||||
"3 3 3 3 3 ",
|
||||
"4 4 4 4 4 ",
|
||||
"5 5 5 5 5 ",
|
||||
"6 6 6 6 6 ",
|
||||
"6 6 6 6 6 ",
|
||||
"7 7 7 7 7 ",
|
||||
"8 8 8 8 8 ",
|
||||
"9 9 9 9 9 ",
|
||||
"9 9 9 9 9 ",
|
||||
"0 0 0 0 0 ",
|
||||
"a a a a a ",
|
||||
"a a a a a ",
|
||||
"b b b b b ",
|
||||
"c c c c c ",
|
||||
"d d d d d ",
|
||||
"d d d d d ",
|
||||
"e e e e e ",
|
||||
"f f f f f ",
|
||||
"g g g g g ",
|
||||
"g g g g g ",
|
||||
"h h h h h ",
|
||||
"i i i i i ",
|
||||
"j j j j j ",
|
||||
"k k k k k ",
|
||||
"l l l l l ",
|
||||
"m m m m m ",
|
||||
"n n n n n ",
|
||||
"n n n n n ",
|
||||
"o o o o o ",
|
||||
"p p p p p ",
|
||||
"q q q q q ",
|
||||
"q q q q q ",
|
||||
"r r r r r ",
|
||||
"s s s s s ",
|
||||
"t t t t t ",
|
||||
"u u u u u ",
|
||||
"v v v v v ",
|
||||
"w w w w w ",
|
||||
"x x x x x ",
|
||||
"x x x x x ",
|
||||
"y y y y y ",
|
||||
"z z z z z ",
|
||||
"A A A A A ",
|
||||
"A A A A A ",
|
||||
"B B B B B ",
|
||||
"C C C C C ",
|
||||
"D D D D D ",
|
||||
"D D D D D ",
|
||||
"E E E E E ",
|
||||
"F F F F F ",
|
||||
"G G G G G ",
|
||||
"G G G G G ",
|
||||
"H H H H H ",
|
||||
"I I I I I ",
|
||||
"I I I I I ",
|
||||
"J J J J J ",
|
||||
"K K K K K ",
|
||||
"L L L L L ",
|
||||
"M M M M M ",
|
||||
"N N N N N ",
|
||||
"O O O O O ",
|
||||
"P P P P P ",
|
||||
"P P P P P ",
|
||||
"Q Q Q Q Q ",
|
||||
"R R R R R ",
|
||||
"S S S S S ",
|
||||
"S S S S S ",
|
||||
"T T T T T ",
|
||||
"U U U U U ",
|
||||
"V V V V V ",
|
||||
"V V V V V ",
|
||||
"W W W W W ",
|
||||
"X X X X X ",
|
||||
"Y Y Y Y Y ",
|
||||
"Y Y Y Y Y ",
|
||||
"Z Z Z Z Z ",
|
||||
"` ` ` ` ` ",
|
||||
" . . . . .",
|
||||
"..........",
|
||||
"+.+.+.+.+.",
|
||||
"@.@.@.@.@.",
|
||||
"#.#.#.#.#.",
|
||||
"#.#.#.#.#.",
|
||||
"$.$.$.$.$.",
|
||||
"%.%.%.%.%.",
|
||||
"&.&.&.&.&.",
|
||||
"&.&.&.&.&.",
|
||||
"*.*.*.*.*.",
|
||||
"=.=.=.=.=.",
|
||||
"-.-.-.-.-.",
|
||||
";.;.;.;.;.",
|
||||
";.;.;.;.;.",
|
||||
">.>.>.>.>.",
|
||||
",.,.,.,.,.",
|
||||
"'.'.'.'.'.",
|
||||
").).).).).",
|
||||
"!.!.!.!.!.",
|
||||
"~.~.~.~.~.",
|
||||
"{.{.{.{.{.",
|
||||
"].].].].].",
|
||||
"^.^.^.^.^.",
|
||||
"/././././.",
|
||||
"(.(.(.(.(.",
|
||||
"_._._._._.",
|
||||
":.:.:.:.:.",
|
||||
"<.<.<.<.<.",
|
||||
"[.[.[.[.[.",
|
||||
"}.}.}.}.}.",
|
||||
"|.|.|.|.|.",
|
||||
"1.1.1.1.1.",
|
||||
"2.2.2.2.2.",
|
||||
"3.3.3.3.3.",
|
||||
"4.4.4.4.4.",
|
||||
"5.5.5.5.5.",
|
||||
"6.6.6.6.6.",
|
||||
"7.7.7.7.7.",
|
||||
"8.8.8.8.8.",
|
||||
"9.9.9.9.9.",
|
||||
"0.0.0.0.0.",
|
||||
"a.a.a.a.a.",
|
||||
"b.b.b.b.b.",
|
||||
"c.c.c.c.c.",
|
||||
"d.d.d.d.d.",
|
||||
"e.e.e.e.e.",
|
||||
"f.f.f.f.f.",
|
||||
"g.g.g.g.g.",
|
||||
"h.h.h.h.h.",
|
||||
"i.i.i.i.i.",
|
||||
"j.j.j.j.j.",
|
||||
"k.k.k.k.k.",
|
||||
"l.l.l.l.l.",
|
||||
"m.m.m.m.m.",
|
||||
"n.n.n.n.n.",
|
||||
"o.o.o.o.o.",
|
||||
"p.p.p.p.p.",
|
||||
"q.q.q.q.q.",
|
||||
"r.r.r.r.r.",
|
||||
"s.s.s.s.s.",
|
||||
"t.t.t.t.t.",
|
||||
"u.u.u.u.u.",
|
||||
"v.v.v.v.v.",
|
||||
"w.w.w.w.w.",
|
||||
"x.x.x.x.x.",
|
||||
"y.y.y.y.y.",
|
||||
"z.z.z.z.z.",
|
||||
"A.A.A.A.A.",
|
||||
"B.B.B.B.B.",
|
||||
"C.C.C.C.C.",
|
||||
"D.D.D.D.D.",
|
||||
"E.E.E.E.E.",
|
||||
"F.F.F.F.F.",
|
||||
"G.G.G.G.G.",
|
||||
"H.H.H.H.H.",
|
||||
"I.I.I.I.I.",
|
||||
"J.J.J.J.J.",
|
||||
"K.K.K.K.K.",
|
||||
"L.L.L.L.L.",
|
||||
"M.M.M.M.M.",
|
||||
"N.N.N.N.N.",
|
||||
"O.O.O.O.O.",
|
||||
"P.P.P.P.P.",
|
||||
"Q.Q.Q.Q.Q.",
|
||||
"R.R.R.R.R.",
|
||||
"S.S.S.S.S.",
|
||||
"T.T.T.T.T.",
|
||||
"U.U.U.U.U.",
|
||||
"V.V.V.V.V.",
|
||||
"W.W.W.W.W.",
|
||||
"X.X.X.X.X.",
|
||||
"Y.Y.Y.Y.Y.",
|
||||
"Z.Z.Z.Z.Z.",
|
||||
"`.`.`.`.`.",
|
||||
" + + + + +",
|
||||
".+.+.+.+.+",
|
||||
"++++++++++",
|
||||
"@+@+@+@+@+",
|
||||
"#+#+#+#+#+",
|
||||
"$+$+$+$+$+",
|
||||
"%+%+%+%+%+",
|
||||
"&+&+&+&+&+",
|
||||
"*+*+*+*+*+",
|
||||
"=+=+=+=+=+",
|
||||
"-+-+-+-+-+",
|
||||
";+;+;+;+;+",
|
||||
">+>+>+>+>+",
|
||||
",+,+,+,+,+",
|
||||
"'+'+'+'+'+",
|
||||
")+)+)+)+)+",
|
||||
"!+!+!+!+!+",
|
||||
"~+~+~+~+~+",
|
||||
"{+{+{+{+{+",
|
||||
"]+]+]+]+]+",
|
||||
"^+^+^+^+^+",
|
||||
"/+/+/+/+/+",
|
||||
"(+(+(+(+(+",
|
||||
"_+_+_+_+_+",
|
||||
":+:+:+:+:+",
|
||||
"<+<+<+<+<+",
|
||||
"[+[+[+[+[+",
|
||||
"}+}+}+}+}+",
|
||||
"|+|+|+|+|+",
|
||||
"1+1+1+1+1+",
|
||||
"2+2+2+2+2+",
|
||||
"3+3+3+3+3+",
|
||||
"4+4+4+4+4+",
|
||||
"5+5+5+5+5+",
|
||||
"6+6+6+6+6+",
|
||||
"7+7+7+7+7+",
|
||||
"8+8+8+8+8+",
|
||||
"9+9+9+9+9+",
|
||||
"0+0+0+0+0+",
|
||||
"a+a+a+a+a+",
|
||||
"b+b+b+b+b+",
|
||||
"c+c+c+c+c+",
|
||||
"d+d+d+d+d+",
|
||||
"e+e+e+e+e+",
|
||||
"f+f+f+f+f+",
|
||||
"g+g+g+g+g+"};
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
#include <algorithm>
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
#include <gtkmm2ext/utils.h>
|
||||
#include <gtkmm2ext/stop_signal.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
#include <gtkmm/box.h>
|
||||
#include <gtkmm/stock.h>
|
||||
|
||||
#include <pbd/basename.h>
|
||||
#include <pbd/convert.h>
|
||||
|
||||
#include <gtkmm2ext/utils.h>
|
||||
|
|
@ -206,7 +205,7 @@ SoundFileBox::play_btn_clicked ()
|
|||
}
|
||||
|
||||
string result;
|
||||
_session->region_name (result, PBD::basename(srclist[0]->name()), false);
|
||||
_session->region_name (result, Glib::path_get_basename(srclist[0]->name()), false);
|
||||
AudioRegion* a_region = new AudioRegion(srclist, 0, srclist[0]->length(), result, 0, Region::DefaultFlags, false);
|
||||
region_cache[path] = a_region;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@ ladspa_plugin.cc
|
|||
location.cc
|
||||
mtc_slave.cc
|
||||
named_selection.cc
|
||||
osc.cc
|
||||
panner.cc
|
||||
pcm_utils.cc
|
||||
playlist.cc
|
||||
|
|
@ -97,6 +96,7 @@ mix.cc
|
|||
|
||||
arch_specific_objects = [ ]
|
||||
|
||||
osc_files = [ 'osc.cc' ]
|
||||
vst_files = [ 'vst_plugin.cc', 'session_vst.cc' ]
|
||||
coreaudio_files = [ 'coreaudio_source.cc' ]
|
||||
extra_sources = [ ]
|
||||
|
|
@ -104,6 +104,9 @@ extra_sources = [ ]
|
|||
if ardour['VST']:
|
||||
extra_sources += vst_files
|
||||
|
||||
if ardour['LIBLO']:
|
||||
extra_sources += osc_files
|
||||
|
||||
ardour.Append(CCFLAGS="-D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE")
|
||||
ardour.Append(CXXFLAGS="-DDATA_DIR=\\\""+final_prefix+"/share\\\"")
|
||||
ardour.Append(CXXFLAGS="-DMODULE_DIR=\\\""+final_prefix+"/lib\\\"")
|
||||
|
|
@ -172,13 +175,16 @@ if conf.CheckCHeader('sys/vfs.h'):
|
|||
if conf.CheckCHeader('/System/Library/Frameworks/CoreMIDI.framework/Headers/CoreMIDI.h'):
|
||||
ardour.Append(LINKFLAGS="-framework CoreMIDI")
|
||||
|
||||
if conf.CheckCHeader('/System/Library/Frameworks/AudioToolbox.framework/Headers/ExtendedAudioFile.h'):
|
||||
if conf.CheckCHeader('/System/Library/Frameworks/AudioToolbox.framework/Headers/ExtendedAudioFile.h') and ardour['COREAUDIO'] == 1:
|
||||
ardour.Append(CXXFLAGS="-DHAVE_COREAUDIO")
|
||||
ardour.Append(LINKFLAGS="-framework AudioToolbox")
|
||||
#
|
||||
|
||||
|
||||
if env['CONFIG_ARCH'] == 'apple':
|
||||
# this next line avoids issues with circular dependencies between libardour and libardour_cp.
|
||||
# it is based on the (entirely reasonable) assumption that a system with CoreAudio is OS X
|
||||
#
|
||||
print 'APPLE CONFIG'
|
||||
ardour.Append(LINKFLAGS='-undefined suppress -flat_namespace')
|
||||
extra_sources += coreaudio_files
|
||||
|
||||
|
|
@ -188,15 +194,19 @@ ardour.Merge ([
|
|||
libraries['core'],
|
||||
libraries['xml'],
|
||||
libraries['sndfile'],
|
||||
libraries['raptor'],
|
||||
libraries['lrdf'],
|
||||
libraries['samplerate'],
|
||||
libraries['sigc2'],
|
||||
libraries['pbd3'],
|
||||
libraries['soundtouch'],
|
||||
libraries['midi++2'],
|
||||
libraries['lo'],
|
||||
libraries['glib2'],
|
||||
libraries['glibmm2']
|
||||
])
|
||||
|
||||
if ardour['LIBLO']:
|
||||
ardour.Merge ([ libraries['lo'] ])
|
||||
|
||||
ardour.VersionBuild(['version.cc', 'ardour/version.h'], 'SConscript')
|
||||
|
||||
|
|
|
|||
|
|
@ -26,14 +26,11 @@
|
|||
#include <signal.h>
|
||||
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <pbd/failed_constructor.h>
|
||||
|
||||
#include <ardour/configuration.h>
|
||||
#include <ardour/types.h>
|
||||
|
||||
using namespace PBD;
|
||||
|
||||
namespace MIDI {
|
||||
class MachineControl;
|
||||
class Port;
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
#include <string>
|
||||
|
||||
#include <sigc++/signal.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <ardour/ardour.h>
|
||||
#include <jack/jack.h>
|
||||
#include <jack/transport.h>
|
||||
|
|
@ -59,7 +61,7 @@ class AudioEngine : public sigc::trackable
|
|||
int start ();
|
||||
bool running() const { return _running; }
|
||||
|
||||
PBD::NonBlockingLock& process_lock() { return _process_lock; }
|
||||
Glib::Mutex& process_lock() { return _process_lock; }
|
||||
|
||||
jack_nframes_t frame_rate();
|
||||
jack_nframes_t frames_per_cycle();
|
||||
|
|
@ -185,10 +187,10 @@ class AudioEngine : public sigc::trackable
|
|||
ARDOUR::Session *session;
|
||||
jack_client_t *_jack;
|
||||
std::string jack_client_name;
|
||||
PBD::NonBlockingLock port_lock;
|
||||
PBD::NonBlockingLock _process_lock;
|
||||
PBD::Lock session_remove_lock;
|
||||
pthread_cond_t session_removed;
|
||||
Glib::Mutex port_lock;
|
||||
Glib::Mutex _process_lock;
|
||||
Glib::Mutex session_remove_lock;
|
||||
Glib::Cond session_removed;
|
||||
bool session_remove_pending;
|
||||
bool _running;
|
||||
bool _has_run;
|
||||
|
|
@ -202,8 +204,6 @@ class AudioEngine : public sigc::trackable
|
|||
sigc::slot<int,jack_nframes_t> freewheel_action;
|
||||
bool reconnect_on_halt;
|
||||
int _usecs_per_cycle;
|
||||
jack_nframes_t last_meter_point;
|
||||
jack_nframes_t meter_interval;
|
||||
|
||||
typedef std::set<Port*> Ports;
|
||||
Ports ports;
|
||||
|
|
@ -237,10 +237,10 @@ class AudioEngine : public sigc::trackable
|
|||
|
||||
int connect_to_jack (std::string client_name);
|
||||
|
||||
static void* _meter_thread (void* arg);
|
||||
void* meter_thread ();
|
||||
pthread_t meter_thread_id;
|
||||
void maybe_start_metering_thread ();
|
||||
void meter_thread ();
|
||||
void start_metering_thread ();
|
||||
Glib::Thread* m_meter_thread;
|
||||
mutable gint m_meter_exit;
|
||||
};
|
||||
|
||||
}; /* namespace ARDOUR */
|
||||
|
|
|
|||
|
|
@ -22,10 +22,8 @@
|
|||
#define __ardour_auditioner_h__
|
||||
|
||||
#include <string>
|
||||
#include <pthread.h>
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <pbd/atomic.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <ardour/ardour.h>
|
||||
#include <ardour/audio_track.h>
|
||||
|
|
@ -50,16 +48,16 @@ class Auditioner : public AudioTrack
|
|||
int play_audition (jack_nframes_t nframes);
|
||||
|
||||
void cancel_audition () {
|
||||
atomic_set (&_active, 0);
|
||||
g_atomic_int_set (&_active, 0);
|
||||
}
|
||||
|
||||
bool active() const { return atomic_read (&_active); }
|
||||
bool active() const { return g_atomic_int_get (&_active); }
|
||||
|
||||
private:
|
||||
AudioRegion *the_region;
|
||||
jack_nframes_t current_frame;
|
||||
atomic_t _active;
|
||||
PBD::Lock lock;
|
||||
mutable gint _active;
|
||||
Glib::Mutex lock;
|
||||
jack_nframes_t length;
|
||||
|
||||
void drop_ports ();
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
#include <cmath>
|
||||
|
||||
#include <sigc++/signal.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
#include <pbd/undo.h>
|
||||
#include <pbd/xml++.h>
|
||||
#include <ardour/ardour.h>
|
||||
|
|
@ -144,7 +144,7 @@ class AutomationList : public StateManager
|
|||
std::pair<AutomationList::iterator,AutomationList::iterator> control_points_adjacent (double when);
|
||||
|
||||
template<class T> void apply_to_points (T& obj, void (T::*method)(const AutomationList&)) {
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
(obj.*method)(*this);
|
||||
}
|
||||
|
||||
|
|
@ -157,13 +157,13 @@ class AutomationList : public StateManager
|
|||
double get_max_xval() const { return max_xval; }
|
||||
|
||||
double eval (double where) {
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
return unlocked_eval (where);
|
||||
}
|
||||
|
||||
double rt_safe_eval (double where, bool& ok) {
|
||||
|
||||
TentativeLockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock, Glib::TRY_LOCK);
|
||||
|
||||
if ((ok = lm.locked())) {
|
||||
return unlocked_eval (where);
|
||||
|
|
@ -186,7 +186,7 @@ class AutomationList : public StateManager
|
|||
};
|
||||
|
||||
AutomationEventList events;
|
||||
mutable PBD::NonBlockingLock lock;
|
||||
mutable Glib::Mutex lock;
|
||||
bool _frozen;
|
||||
bool changed_when_thawed;
|
||||
bool _dirty;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
#include <vector>
|
||||
#include <string>
|
||||
#include <sigc++/signal.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
#include <ardour/stateful.h>
|
||||
|
||||
using std::vector;
|
||||
|
|
@ -67,7 +67,7 @@ class Connection : public Stateful, public sigc::trackable {
|
|||
Connection (const XMLNode&);
|
||||
|
||||
private:
|
||||
mutable PBD::Lock port_lock;
|
||||
mutable Glib::Mutex port_lock;
|
||||
vector<PortList> _ports;
|
||||
string _name;
|
||||
bool _sysdep;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
#include <sigc++/sigc++.h>
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <ardour/stateful.h>
|
||||
|
||||
|
|
@ -52,7 +52,7 @@ struct ControlProtocolInfo {
|
|||
static ControlProtocolManager* _instance;
|
||||
|
||||
Session* _session;
|
||||
PBD::Lock protocols_lock;
|
||||
Glib::Mutex protocols_lock;
|
||||
std::list<ControlProtocol*> control_protocols;
|
||||
|
||||
void drop_session ();
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ class CoreAudioSource : public ExternalSource {
|
|||
|
||||
mutable float *tmpbuf;
|
||||
mutable jack_nframes_t tmpbufsize;
|
||||
mutable PBD::Lock _tmpbuf_lock;
|
||||
mutable Glib::Mutex _tmpbuf_lock;
|
||||
|
||||
void init (const string &str, bool build_peak);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -23,11 +23,10 @@
|
|||
|
||||
#include <sys/types.h>
|
||||
#include <sigc++/signal.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
#include <pbd/undo.h>
|
||||
#include <list>
|
||||
#include <algorithm>
|
||||
#include <pthread.h>
|
||||
#include <ardour/automation_event.h>
|
||||
|
||||
namespace ARDOUR {
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
#include <pbd/fastlog.h>
|
||||
#include <pbd/ringbufferNPT.h>
|
||||
#include <pbd/atomic.h>
|
||||
|
||||
|
||||
#include <ardour/ardour.h>
|
||||
#include <ardour/configuration.h>
|
||||
|
|
@ -115,7 +115,7 @@ class DiskStream : public Stateful, public sigc::trackable
|
|||
}
|
||||
|
||||
void set_record_enabled (bool yn, void *src);
|
||||
bool record_enabled() const { return atomic_read (&_record_enabled); }
|
||||
bool record_enabled() const { return g_atomic_int_get (&_record_enabled); }
|
||||
void punch_in ();
|
||||
void punch_out ();
|
||||
|
||||
|
|
@ -320,7 +320,7 @@ class DiskStream : public Stateful, public sigc::trackable
|
|||
uint32_t _n_channels;
|
||||
id_t _id;
|
||||
|
||||
atomic_t _record_enabled;
|
||||
mutable gint _record_enabled;
|
||||
AudioPlaylist* _playlist;
|
||||
double _visible_speed;
|
||||
double _actual_speed;
|
||||
|
|
@ -365,7 +365,7 @@ class DiskStream : public Stateful, public sigc::trackable
|
|||
AlignStyle _persistent_alignment_style;
|
||||
bool first_input_change;
|
||||
|
||||
PBD::NonBlockingLock state_lock;
|
||||
Glib::Mutex state_lock;
|
||||
|
||||
jack_nframes_t scrub_start;
|
||||
jack_nframes_t scrub_buffer_size;
|
||||
|
|
@ -404,7 +404,7 @@ class DiskStream : public Stateful, public sigc::trackable
|
|||
};
|
||||
|
||||
vector<CaptureInfo*> capture_info;
|
||||
PBD::Lock capture_info_lock;
|
||||
Glib::Mutex capture_info_lock;
|
||||
|
||||
void init (Flag);
|
||||
|
||||
|
|
|
|||
|
|
@ -27,10 +27,11 @@
|
|||
#include <sigc++/signal.h>
|
||||
#include <jack/jack.h>
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <pbd/fastlog.h>
|
||||
#include <pbd/undo.h>
|
||||
#include <pbd/atomic.h>
|
||||
|
||||
#include <midi++/controllable.h>
|
||||
|
||||
#include <ardour/ardour.h>
|
||||
|
|
@ -205,7 +206,15 @@ class IO : public Stateful, public ARDOUR::StateManager
|
|||
}
|
||||
}
|
||||
|
||||
static void update_meters();
|
||||
|
||||
private:
|
||||
|
||||
static sigc::signal<void> Meter;
|
||||
static Glib::StaticMutex m_meter_signal_lock;
|
||||
sigc::connection m_meter_connection;
|
||||
|
||||
public:
|
||||
|
||||
/* automation */
|
||||
|
||||
|
|
@ -261,7 +270,7 @@ class IO : public Stateful, public ARDOUR::StateManager
|
|||
int ports_became_legal ();
|
||||
|
||||
private:
|
||||
mutable PBD::Lock io_lock;
|
||||
mutable Glib::Mutex io_lock;
|
||||
|
||||
protected:
|
||||
Session& _session;
|
||||
|
|
@ -269,7 +278,7 @@ class IO : public Stateful, public ARDOUR::StateManager
|
|||
gain_t _gain;
|
||||
gain_t _effective_gain;
|
||||
gain_t _desired_gain;
|
||||
PBD::NonBlockingLock declick_lock;
|
||||
Glib::Mutex declick_lock;
|
||||
vector<Port*> _outputs;
|
||||
vector<Port*> _inputs;
|
||||
vector<float> _peak_power;
|
||||
|
|
@ -331,7 +340,7 @@ class IO : public Stateful, public ARDOUR::StateManager
|
|||
int save_automation (const string&);
|
||||
int load_automation (const string&);
|
||||
|
||||
PBD::NonBlockingLock automation_lock;
|
||||
Glib::Mutex automation_lock;
|
||||
|
||||
/* AudioTrack::deprecated_use_diskstream_connections() needs these */
|
||||
|
||||
|
|
|
|||
|
|
@ -27,10 +27,10 @@
|
|||
#include <map>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <pthread.h>
|
||||
#include <sigc++/signal.h>
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <pbd/undo.h>
|
||||
|
||||
#include "ardour.h"
|
||||
|
|
@ -168,12 +168,12 @@ class Locations : public Stateful, public StateManager
|
|||
sigc::signal<void,Location*> removed;
|
||||
|
||||
template<class T> void apply (T& obj, void (T::*method)(LocationList&)) {
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
(obj.*method)(locations);
|
||||
}
|
||||
|
||||
template<class T1, class T2> void apply (T1& obj, void (T1::*method)(LocationList&, T2& arg), T2& arg) {
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
(obj.*method)(locations, arg);
|
||||
}
|
||||
|
||||
|
|
@ -190,7 +190,7 @@ class Locations : public Stateful, public StateManager
|
|||
|
||||
LocationList locations;
|
||||
Location *current_location;
|
||||
mutable PBD::Lock lock;
|
||||
mutable Glib::Mutex lock;
|
||||
|
||||
int set_current_unlocked (Location *);
|
||||
void location_changed (Location*);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
#define __ardour_logcurve_h__
|
||||
|
||||
#include <pbd/fastlog.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
namespace ARDOUR {
|
||||
|
||||
|
|
@ -94,7 +94,7 @@ class LogCurve {
|
|||
}
|
||||
void set_length (uint32_t len) { l = len; }
|
||||
|
||||
mutable PBD::NonBlockingLock lock;
|
||||
mutable Glib::Mutex lock;
|
||||
|
||||
protected:
|
||||
float a;
|
||||
|
|
|
|||
|
|
@ -28,8 +28,9 @@
|
|||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include <sigc++/signal.h>
|
||||
#include <pbd/atomic.h>
|
||||
#include <pbd/undo.h>
|
||||
|
||||
#include <ardour/ardour.h>
|
||||
|
|
@ -169,9 +170,9 @@ class Playlist : public Stateful, public StateManager {
|
|||
RegionList regions;
|
||||
string _name;
|
||||
Session& _session;
|
||||
atomic_t block_notifications;
|
||||
atomic_t ignore_state_changes;
|
||||
mutable PBD::NonBlockingLock region_lock;
|
||||
mutable gint block_notifications;
|
||||
mutable gint ignore_state_changes;
|
||||
mutable Glib::Mutex region_lock;
|
||||
RegionList pending_removals;
|
||||
RegionList pending_adds;
|
||||
RegionList pending_bounds;
|
||||
|
|
@ -197,8 +198,8 @@ class Playlist : public Stateful, public StateManager {
|
|||
void init (bool hide);
|
||||
|
||||
bool holding_state () const {
|
||||
return atomic_read (&block_notifications) != 0 ||
|
||||
atomic_read (&ignore_state_changes) != 0;
|
||||
return g_atomic_int_get (&block_notifications) != 0 ||
|
||||
g_atomic_int_get (&ignore_state_changes) != 0;
|
||||
}
|
||||
|
||||
/* prevent the compiler from ever generating these */
|
||||
|
|
|
|||
|
|
@ -27,7 +27,8 @@
|
|||
#include <map>
|
||||
#include <sigc++/signal.h>
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <pbd/undo.h>
|
||||
|
||||
#include <ardour/ardour.h>
|
||||
|
|
@ -131,7 +132,7 @@ class Redirect : public IO
|
|||
map<uint32_t,AutomationList*> parameter_automation;
|
||||
set<uint32_t> visible_parameter_automation;
|
||||
|
||||
mutable PBD::NonBlockingLock _automation_lock;
|
||||
mutable Glib::Mutex _automation_lock;
|
||||
|
||||
void can_automate (uint32_t);
|
||||
set<uint32_t> can_automate_list;
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@ class Region : public Stateful, public StateManager
|
|||
string _name;
|
||||
mutable RegionEditState _first_edit;
|
||||
int _frozen;
|
||||
PBD::Lock lock;
|
||||
Glib::Mutex lock;
|
||||
ARDOUR::id_t _id;
|
||||
ARDOUR::Playlist* _playlist;
|
||||
mutable uint32_t _read_data_count; // modified in read()
|
||||
|
|
|
|||
|
|
@ -27,11 +27,8 @@
|
|||
#include <map>
|
||||
#include <string>
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#include <pbd/atomic.h>
|
||||
#include <pbd/fastlog.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
#include <pbd/xml++.h>
|
||||
#include <pbd/undo.h>
|
||||
#include <midi++/controllable.h>
|
||||
|
|
@ -142,14 +139,14 @@ class Route : public IO
|
|||
void flush_redirects ();
|
||||
|
||||
template<class T> void foreach_redirect (T *obj, void (T::*func)(Redirect *)) {
|
||||
RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (redirect_lock);
|
||||
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
|
||||
(obj->*func) (*i);
|
||||
}
|
||||
}
|
||||
|
||||
Redirect *nth_redirect (uint32_t n) {
|
||||
RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (redirect_lock);
|
||||
RedirectList::iterator i;
|
||||
for (i = _redirects.begin(); i != _redirects.end() && n; ++i, --n);
|
||||
if (i == _redirects.end()) {
|
||||
|
|
@ -294,9 +291,9 @@ class Route : public IO
|
|||
jack_nframes_t _roll_delay;
|
||||
jack_nframes_t _own_latency;
|
||||
RedirectList _redirects;
|
||||
PBD::NonBlockingRWLock redirect_lock;
|
||||
Glib::RWLock redirect_lock;
|
||||
IO *_control_outs;
|
||||
PBD::NonBlockingLock control_outs_lock;
|
||||
Glib::Mutex control_outs_lock;
|
||||
RouteGroup *_edit_group;
|
||||
RouteGroup *_mix_group;
|
||||
std::string _comment;
|
||||
|
|
|
|||
|
|
@ -31,9 +31,9 @@
|
|||
|
||||
#include <sndfile.h>
|
||||
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/atomic.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <pbd/undo.h>
|
||||
#include <pbd/pool.h>
|
||||
|
||||
|
|
@ -274,7 +274,7 @@ class Session : public sigc::trackable, public Stateful
|
|||
typedef list<DiskStream *> DiskStreamList;
|
||||
|
||||
Session::DiskStreamList disk_streams() const {
|
||||
RWLockMonitor lm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (diskstream_lock);
|
||||
return diskstreams; /* XXX yes, force a copy */
|
||||
}
|
||||
|
||||
|
|
@ -284,7 +284,7 @@ class Session : public sigc::trackable, public Stateful
|
|||
typedef list<Route *> RouteList;
|
||||
|
||||
RouteList get_routes() const {
|
||||
RWLockMonitor rlock (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock rlock (route_lock);
|
||||
return routes; /* XXX yes, force a copy */
|
||||
}
|
||||
|
||||
|
|
@ -310,7 +310,7 @@ class Session : public sigc::trackable, public Stateful
|
|||
}
|
||||
|
||||
RecordState record_status() const {
|
||||
return (RecordState) atomic_read (&_record_status);
|
||||
return (RecordState) g_atomic_int_get (&_record_status);
|
||||
}
|
||||
|
||||
bool actively_recording () {
|
||||
|
|
@ -1004,12 +1004,12 @@ class Session : public sigc::trackable, public Stateful
|
|||
typedef void (Session::*process_function_type)(jack_nframes_t);
|
||||
|
||||
AudioEngine &_engine;
|
||||
atomic_t processing_prohibited;
|
||||
mutable gint processing_prohibited;
|
||||
process_function_type process_function;
|
||||
process_function_type last_process_function;
|
||||
jack_nframes_t _current_frame_rate;
|
||||
int transport_sub_state;
|
||||
atomic_t _record_status;
|
||||
mutable gint _record_status;
|
||||
jack_nframes_t _transport_frame;
|
||||
Location* end_location;
|
||||
Location* start_location;
|
||||
|
|
@ -1169,10 +1169,10 @@ class Session : public sigc::trackable, public Stateful
|
|||
Sample* butler_mixdown_buffer;
|
||||
float* butler_gain_buffer;
|
||||
pthread_t butler_thread;
|
||||
PBD::NonBlockingLock butler_request_lock;
|
||||
pthread_cond_t butler_paused;
|
||||
Glib::Mutex butler_request_lock;
|
||||
Glib::Cond butler_paused;
|
||||
bool butler_should_run;
|
||||
atomic_t butler_should_do_transport_work;
|
||||
mutable gint butler_should_do_transport_work;
|
||||
int butler_request_pipe[2];
|
||||
|
||||
struct ButlerRequest {
|
||||
|
|
@ -1417,10 +1417,10 @@ class Session : public sigc::trackable, public Stateful
|
|||
static MultiAllocSingleReleasePool pool;
|
||||
};
|
||||
|
||||
PBD::Lock midi_lock;
|
||||
Glib::Mutex midi_lock;
|
||||
pthread_t midi_thread;
|
||||
int midi_request_pipe[2];
|
||||
atomic_t butler_active;
|
||||
mutable gint butler_active;
|
||||
RingBuffer<MIDIRequest*> midi_requests;
|
||||
|
||||
int start_midi_thread ();
|
||||
|
|
@ -1471,7 +1471,7 @@ class Session : public sigc::trackable, public Stateful
|
|||
/* disk-streams */
|
||||
|
||||
DiskStreamList diskstreams;
|
||||
mutable PBD::NonBlockingRWLock diskstream_lock;
|
||||
mutable Glib::RWLock diskstream_lock;
|
||||
uint32_t dstream_buffer_size;
|
||||
void add_diskstream (DiskStream*);
|
||||
int load_diskstreams (const XMLNode&);
|
||||
|
|
@ -1479,7 +1479,7 @@ class Session : public sigc::trackable, public Stateful
|
|||
/* routes stuff */
|
||||
|
||||
RouteList routes;
|
||||
mutable PBD::NonBlockingRWLock route_lock;
|
||||
mutable Glib::RWLock route_lock;
|
||||
void add_route (Route*);
|
||||
uint32_t destructive_index;
|
||||
|
||||
|
|
@ -1502,7 +1502,7 @@ class Session : public sigc::trackable, public Stateful
|
|||
|
||||
/* REGION MANAGEMENT */
|
||||
|
||||
mutable PBD::Lock region_lock;
|
||||
mutable Glib::Mutex region_lock;
|
||||
typedef map<ARDOUR::id_t,AudioRegion *> AudioRegionList;
|
||||
AudioRegionList audio_regions;
|
||||
|
||||
|
|
@ -1515,7 +1515,7 @@ class Session : public sigc::trackable, public Stateful
|
|||
|
||||
/* SOURCES */
|
||||
|
||||
mutable PBD::Lock source_lock;
|
||||
mutable Glib::Mutex source_lock;
|
||||
typedef std::map<id_t, Source *> SourceList;
|
||||
|
||||
SourceList sources;
|
||||
|
|
@ -1529,7 +1529,7 @@ class Session : public sigc::trackable, public Stateful
|
|||
|
||||
/* PLAYLISTS */
|
||||
|
||||
mutable PBD::Lock playlist_lock;
|
||||
mutable Glib::Mutex playlist_lock;
|
||||
typedef set<Playlist *> PlaylistList;
|
||||
PlaylistList playlists;
|
||||
PlaylistList unused_playlists;
|
||||
|
|
@ -1547,7 +1547,7 @@ class Session : public sigc::trackable, public Stateful
|
|||
|
||||
/* NAMED SELECTIONS */
|
||||
|
||||
mutable PBD::Lock named_selection_lock;
|
||||
mutable Glib::Mutex named_selection_lock;
|
||||
typedef set<NamedSelection *> NamedSelectionList;
|
||||
NamedSelectionList named_selections;
|
||||
|
||||
|
|
@ -1607,7 +1607,7 @@ class Session : public sigc::trackable, public Stateful
|
|||
vector<space_and_path> session_dirs;
|
||||
vector<space_and_path>::iterator last_rr_session_dir;
|
||||
uint32_t _total_free_4k_blocks;
|
||||
PBD::Lock space_lock;
|
||||
Glib::Mutex space_lock;
|
||||
|
||||
static const char* sound_dir_name;
|
||||
static const char* tape_dir_name;
|
||||
|
|
@ -1618,15 +1618,15 @@ class Session : public sigc::trackable, public Stateful
|
|||
int ensure_sound_dir (string, string&);
|
||||
void refresh_disk_space ();
|
||||
|
||||
atomic_t _playback_load;
|
||||
atomic_t _capture_load;
|
||||
atomic_t _playback_load_min;
|
||||
atomic_t _capture_load_min;
|
||||
mutable gint _playback_load;
|
||||
mutable gint _capture_load;
|
||||
mutable gint _playback_load_min;
|
||||
mutable gint _capture_load_min;
|
||||
|
||||
/* I/O Connections */
|
||||
|
||||
typedef list<Connection *> ConnectionList;
|
||||
mutable PBD::Lock connection_lock;
|
||||
mutable Glib::Mutex connection_lock;
|
||||
ConnectionList _connections;
|
||||
int load_connections (const XMLNode&);
|
||||
|
||||
|
|
@ -1685,7 +1685,7 @@ class Session : public sigc::trackable, public Stateful
|
|||
Sample* click_emphasis_data;
|
||||
jack_nframes_t click_length;
|
||||
jack_nframes_t click_emphasis_length;
|
||||
mutable PBD::NonBlockingRWLock click_lock;
|
||||
mutable Glib::RWLock click_lock;
|
||||
|
||||
static const Sample default_click[];
|
||||
static const jack_nframes_t default_click_length;
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ namespace ARDOUR {
|
|||
template<class T> void
|
||||
Session::foreach_connection (T *obj, void (T::*func)(Connection *))
|
||||
{
|
||||
LockMonitor lm (connection_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (connection_lock);
|
||||
for (ConnectionList::iterator i = _connections.begin(); i != _connections.end(); i++) {
|
||||
(obj->*func) (*i);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ namespace ARDOUR {
|
|||
template<class T> void
|
||||
Session::foreach_diskstream (T *obj, void (T::*func)(DiskStream&))
|
||||
{
|
||||
RWLockMonitor lm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (diskstream_lock);
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); i++) {
|
||||
if (!(*i)->hidden()) {
|
||||
(obj->*func) (**i);
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ namespace ARDOUR {
|
|||
template<class T> void
|
||||
Session::foreach_playlist (T *obj, void (T::*func)(Playlist *))
|
||||
{
|
||||
LockMonitor lm (playlist_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (playlist_lock);
|
||||
for (PlaylistList::iterator i = playlists.begin(); i != playlists.end(); i++) {
|
||||
if (!(*i)->hidden()) {
|
||||
(obj->*func) (*i);
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ namespace ARDOUR {
|
|||
|
||||
template<class T> void Session::foreach_audio_region (T *obj, void (T::*func)(AudioRegion *))
|
||||
{
|
||||
LockMonitor lm (region_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (region_lock);
|
||||
for (AudioRegionList::iterator i = audio_regions.begin(); i != audio_regions.end(); i++) {
|
||||
(obj->*func) ((*i).second);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,8 @@
|
|||
|
||||
#include <iostream>
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <ardour/session.h>
|
||||
#include <ardour/route.h>
|
||||
|
||||
|
|
@ -35,7 +36,7 @@ Session::foreach_route (T *obj, void (T::*func)(Route&))
|
|||
RouteList public_order;
|
||||
|
||||
{
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
public_order = routes;
|
||||
}
|
||||
|
||||
|
|
@ -53,7 +54,7 @@ Session::foreach_route (T *obj, void (T::*func)(Route*))
|
|||
RouteList public_order;
|
||||
|
||||
{
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
public_order = routes;
|
||||
}
|
||||
|
||||
|
|
@ -72,7 +73,7 @@ Session::foreach_route (T *obj, void (T::*func)(Route&, A), A arg1)
|
|||
RouteList public_order;
|
||||
|
||||
{
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
public_order = routes;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ namespace ARDOUR {
|
|||
template<class T> void
|
||||
Session::foreach_named_selection (T& obj, void (T::*func)(NamedSelection&))
|
||||
{
|
||||
LockMonitor lm (named_selection_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (named_selection_lock);
|
||||
for (NamedSelectionList::iterator i = named_selections.begin(); i != named_selections.end(); i++) {
|
||||
(obj.*func) (**i);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
|
||||
#include <jack/jack.h>
|
||||
|
||||
#include <pthread.h>
|
||||
#include <sigc++/signal.h>
|
||||
#include <ardour/ardour.h>
|
||||
#include <midi++/parser.h>
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ class SndFileSource : public ExternalSource {
|
|||
|
||||
mutable float *tmpbuf;
|
||||
mutable jack_nframes_t tmpbufsize;
|
||||
mutable PBD::Lock _tmpbuf_lock;
|
||||
mutable Glib::Mutex _tmpbuf_lock;
|
||||
|
||||
void init (const string &str, bool build_peak);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -25,10 +25,12 @@
|
|||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
#include <time.h>
|
||||
#include <ctime>
|
||||
|
||||
#include <sigc++/signal.h>
|
||||
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <ardour/ardour.h>
|
||||
#include <ardour/stateful.h>
|
||||
#include <pbd/xml++.h>
|
||||
|
|
@ -125,7 +127,7 @@ class Source : public Stateful, public sigc::trackable
|
|||
string _name;
|
||||
uint32_t _use_cnt;
|
||||
bool _peaks_built;
|
||||
mutable PBD::Lock _lock;
|
||||
mutable Glib::Mutex _lock;
|
||||
jack_nframes_t _length;
|
||||
bool next_peak_clear_should_notify;
|
||||
string peakpath;
|
||||
|
|
@ -156,7 +158,7 @@ class Source : public Stateful, public sigc::trackable
|
|||
};
|
||||
|
||||
static vector<Source*> pending_peak_sources;
|
||||
static PBD::Lock pending_peak_sources_lock;
|
||||
static Glib::StaticMutex pending_peak_sources_lock;
|
||||
|
||||
static void queue_for_peaks (Source&);
|
||||
static void clear_queue_for_peaks ();
|
||||
|
|
|
|||
|
|
@ -25,8 +25,7 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
#include <cmath>
|
||||
#include <pthread.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
#include <pbd/undo.h>
|
||||
#include <sigc++/signal.h>
|
||||
|
||||
|
|
@ -198,7 +197,7 @@ class TempoMap : public Stateful, public StateManager {
|
|||
typedef vector<BBTPoint> BBTPointList;
|
||||
|
||||
template<class T> void apply_with_metrics (T& obj, void (T::*method)(const Metrics&)) {
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
(obj.*method)(*metrics);
|
||||
}
|
||||
|
||||
|
|
@ -285,7 +284,7 @@ class TempoMap : public Stateful, public StateManager {
|
|||
jack_nframes_t last_bbt_when;
|
||||
bool last_bbt_valid;
|
||||
BBT_Time last_bbt;
|
||||
mutable PBD::Lock lock;
|
||||
mutable Glib::Mutex lock;
|
||||
|
||||
void timestamp_metrics ();
|
||||
|
||||
|
|
|
|||
|
|
@ -203,7 +203,7 @@ AudioPlaylist::read (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, ch
|
|||
its OK to block (for short intervals).
|
||||
*/
|
||||
|
||||
LockMonitor rm (region_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock rm (region_lock);
|
||||
|
||||
end = start + cnt - 1;
|
||||
|
||||
|
|
@ -504,7 +504,7 @@ AudioPlaylist::add_crossfade (Crossfade& xfade)
|
|||
|
||||
void AudioPlaylist::notify_crossfade_added (Crossfade *x)
|
||||
{
|
||||
if (atomic_read(&block_notifications)) {
|
||||
if (g_atomic_int_get(&block_notifications)) {
|
||||
_pending_xfade_adds.insert (_pending_xfade_adds.end(), x);
|
||||
} else {
|
||||
NewCrossfade (x); /* EMIT SIGNAL */
|
||||
|
|
|
|||
|
|
@ -625,7 +625,7 @@ AudioTrack::roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nfram
|
|||
jack_nframes_t transport_frame;
|
||||
|
||||
{
|
||||
TentativeRWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (redirect_lock, Glib::TRY_LOCK);
|
||||
if (lm.locked()) {
|
||||
// automation snapshot can also be called from the non-rt context
|
||||
// and it uses the redirect list, so we take the lock out here
|
||||
|
|
@ -709,7 +709,7 @@ AudioTrack::roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nfram
|
|||
/* don't waste time with automation if we're recording or we've just stopped (yes it can happen) */
|
||||
|
||||
if (!diskstream->record_enabled() && _session.transport_rolling()) {
|
||||
TentativeLockMonitor am (automation_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock am (automation_lock, Glib::TRY_LOCK);
|
||||
|
||||
if (am.locked() && gain_automation_playback()) {
|
||||
apply_gain_automation = _gain_automation_curve.rt_safe_get_vector (start_frame, end_frame, _session.gain_automation_buffer(), nframes);
|
||||
|
|
@ -789,7 +789,7 @@ AudioTrack::export_stuff (vector<Sample*>& buffers, char * workbuf, uint32_t nbu
|
|||
vector<Sample*>::iterator bi;
|
||||
Sample * b;
|
||||
|
||||
RWLockMonitor rlock (redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock rlock (redirect_lock);
|
||||
|
||||
if (diskstream->playlist()->read (buffers[0], mix_buffer, gain_buffer, workbuf, start, nframes) != nframes) {
|
||||
return -1;
|
||||
|
|
@ -958,7 +958,7 @@ AudioTrack::freeze (InterThreadInfo& itt)
|
|||
_freeze_record.have_mementos = true;
|
||||
|
||||
{
|
||||
RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (redirect_lock);
|
||||
|
||||
for (RedirectList::iterator r = _redirects.begin(); r != _redirects.end(); ++r) {
|
||||
|
||||
|
|
@ -1015,7 +1015,7 @@ AudioTrack::unfreeze ()
|
|||
|
||||
} else {
|
||||
|
||||
RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__); // should this be a write lock? jlc
|
||||
Glib::RWLock::ReaderLock lm (redirect_lock); // should this be a write lock? jlc
|
||||
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
|
||||
for (vector<FreezeRecordInsertInfo*>::iterator ii = _freeze_record.insert_info.begin(); ii != _freeze_record.insert_info.end(); ++ii) {
|
||||
if ((*ii)->id == (*i)->id()) {
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
#include <cerrno>
|
||||
#include <vector>
|
||||
|
||||
#include <glibmm/timer.h>
|
||||
#include <pbd/pthread_utils.h>
|
||||
|
||||
#include <ardour/audioengine.h>
|
||||
|
|
@ -45,7 +46,6 @@ jack_nframes_t Port::long_over_length = 10;
|
|||
|
||||
AudioEngine::AudioEngine (string client_name)
|
||||
{
|
||||
pthread_cond_init (&session_removed, 0);
|
||||
session = 0;
|
||||
session_remove_pending = false;
|
||||
_running = false;
|
||||
|
|
@ -60,9 +60,11 @@ AudioEngine::AudioEngine (string client_name)
|
|||
_buffer_size = 0;
|
||||
_freewheeling = false;
|
||||
_freewheel_thread_registered = false;
|
||||
last_meter_point = 0;
|
||||
meter_interval = 0;
|
||||
meter_thread_id = (pthread_t) 0;
|
||||
|
||||
m_meter_thread = 0;
|
||||
m_meter_exit = false;
|
||||
|
||||
start_metering_thread();
|
||||
|
||||
if (connect_to_jack (client_name)) {
|
||||
throw NoBackendAvailable ();
|
||||
|
|
@ -76,8 +78,8 @@ AudioEngine::~AudioEngine ()
|
|||
jack_client_close (_jack);
|
||||
}
|
||||
|
||||
if (meter_thread_id != (pthread_t) 0) {
|
||||
pthread_cancel (meter_thread_id);
|
||||
if(m_meter_thread) {
|
||||
g_atomic_int_inc(&m_meter_exit);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -227,7 +229,7 @@ AudioEngine::_freewheel_callback (int onoff, void *arg)
|
|||
int
|
||||
AudioEngine::process_callback (jack_nframes_t nframes)
|
||||
{
|
||||
TentativeLockMonitor tm (_process_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock tm (_process_lock, Glib::TRY_LOCK);
|
||||
jack_nframes_t next_processed_frames;
|
||||
|
||||
/* handle wrap around of total frames counter */
|
||||
|
|
@ -246,7 +248,7 @@ AudioEngine::process_callback (jack_nframes_t nframes)
|
|||
if (session_remove_pending) {
|
||||
session = 0;
|
||||
session_remove_pending = false;
|
||||
pthread_cond_signal (&session_removed);
|
||||
session_removed.signal();
|
||||
_processed_frames = next_processed_frames;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -270,13 +272,6 @@ AudioEngine::process_callback (jack_nframes_t nframes)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* manage meters */
|
||||
|
||||
if ((meter_interval > _buffer_size) && (last_meter_point + meter_interval < next_processed_frames)) {
|
||||
IO::Meter ();
|
||||
last_meter_point = next_processed_frames;
|
||||
}
|
||||
|
||||
if (last_monitor_check + monitor_check_interval < next_processed_frames) {
|
||||
for (Ports::iterator i = ports.begin(); i != ports.end(); ++i) {
|
||||
|
||||
|
|
@ -315,11 +310,6 @@ AudioEngine::jack_sample_rate_callback (jack_nframes_t nframes)
|
|||
monitor_check_interval = nframes / 10;
|
||||
last_monitor_check = 0;
|
||||
|
||||
meter_interval = nframes / 100;
|
||||
last_meter_point = 0;
|
||||
|
||||
maybe_start_metering_thread ();
|
||||
|
||||
if (session) {
|
||||
session->set_frame_rate (nframes);
|
||||
}
|
||||
|
|
@ -350,48 +340,25 @@ AudioEngine::jack_bufsize_callback (jack_nframes_t nframes)
|
|||
session->set_block_size (_buffer_size);
|
||||
}
|
||||
|
||||
maybe_start_metering_thread ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
AudioEngine::maybe_start_metering_thread ()
|
||||
AudioEngine::start_metering_thread ()
|
||||
{
|
||||
if (meter_interval == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (_buffer_size == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (meter_interval < _buffer_size) {
|
||||
if (meter_thread_id != (pthread_t) 0) {
|
||||
pthread_cancel (meter_thread_id);
|
||||
}
|
||||
pthread_create (&meter_thread_id, 0, _meter_thread, this);
|
||||
if(m_meter_thread == 0) {
|
||||
m_meter_thread = Glib::Thread::create (sigc::mem_fun(this, &AudioEngine::meter_thread), false);
|
||||
}
|
||||
}
|
||||
|
||||
void*
|
||||
AudioEngine::_meter_thread (void *arg)
|
||||
{
|
||||
return static_cast<AudioEngine*>(arg)->meter_thread ();
|
||||
}
|
||||
|
||||
void*
|
||||
void
|
||||
AudioEngine::meter_thread ()
|
||||
{
|
||||
PBD::ThreadCreated (pthread_self(), "Metering");
|
||||
|
||||
while (true) {
|
||||
usleep (10000); /* 1/100th sec interval */
|
||||
pthread_testcancel();
|
||||
IO::Meter ();
|
||||
while (g_atomic_int_get(&m_meter_exit) != true) {
|
||||
Glib::usleep (10000); /* 1/100th sec interval */
|
||||
IO::update_meters ();
|
||||
}
|
||||
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -405,13 +372,13 @@ AudioEngine::set_session (Session *s)
|
|||
void
|
||||
AudioEngine::remove_session ()
|
||||
{
|
||||
LockMonitor lm (_process_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_process_lock);
|
||||
|
||||
if (_running) {
|
||||
|
||||
if (session) {
|
||||
session_remove_pending = true;
|
||||
pthread_cond_wait (&session_removed, _process_lock.mutex());
|
||||
session_removed.wait(_process_lock);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
|
@ -448,7 +415,7 @@ AudioEngine::register_audio_input_port (const string& portname)
|
|||
|
||||
} else {
|
||||
|
||||
pthread_mutex_unlock (_process_lock.mutex());
|
||||
_process_lock.unlock();
|
||||
throw PortRegistrationFailure();
|
||||
}
|
||||
|
||||
|
|
@ -476,7 +443,7 @@ AudioEngine::register_audio_output_port (const string& portname)
|
|||
|
||||
} else {
|
||||
|
||||
pthread_mutex_unlock (_process_lock.mutex());
|
||||
_process_lock.unlock();
|
||||
throw PortRegistrationFailure ();
|
||||
}
|
||||
|
||||
|
|
@ -633,7 +600,7 @@ AudioEngine::frames_per_cycle ()
|
|||
Port *
|
||||
AudioEngine::get_port_by_name (const string& portname, bool keep)
|
||||
{
|
||||
LockMonitor lm (_process_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_process_lock);
|
||||
|
||||
if (!_running) {
|
||||
if (!_has_run) {
|
||||
|
|
@ -966,7 +933,7 @@ AudioEngine::reconnect_to_jack ()
|
|||
if (_jack) {
|
||||
disconnect_from_jack ();
|
||||
/* XXX give jackd a chance */
|
||||
usleep (250000);
|
||||
Glib::usleep (250000);
|
||||
}
|
||||
|
||||
if (connect_to_jack (jack_client_name)) {
|
||||
|
|
|
|||
|
|
@ -27,8 +27,9 @@
|
|||
#include <sigc++/bind.h>
|
||||
#include <sigc++/class_slot.h>
|
||||
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <pbd/basename.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <pbd/xml++.h>
|
||||
|
||||
#include <ardour/audioregion.h>
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
$Id$
|
||||
*/
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <ardour/diskstream.h>
|
||||
#include <ardour/audioregion.h>
|
||||
|
|
@ -57,7 +57,7 @@ Auditioner::Auditioner (Session& s)
|
|||
IO::output_changed.connect (mem_fun (*this, &Auditioner::output_changed));
|
||||
|
||||
the_region = 0;
|
||||
atomic_set (&_active, 0);
|
||||
g_atomic_int_set (&_active, 0);
|
||||
}
|
||||
|
||||
Auditioner::~Auditioner ()
|
||||
|
|
@ -74,14 +74,14 @@ Auditioner::prepare_playlist ()
|
|||
void
|
||||
Auditioner::audition_current_playlist ()
|
||||
{
|
||||
if (atomic_read (&_active)) {
|
||||
if (g_atomic_int_get (&_active)) {
|
||||
/* don't go via session for this, because we are going
|
||||
to remain active.
|
||||
*/
|
||||
cancel_audition ();
|
||||
}
|
||||
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
diskstream->seek (0);
|
||||
length = diskstream->playlist()->get_maximum_extent();
|
||||
current_frame = 0;
|
||||
|
|
@ -90,20 +90,20 @@ Auditioner::audition_current_playlist ()
|
|||
|
||||
_panner->reset (n_outputs(), diskstream->n_channels());
|
||||
|
||||
atomic_set (&_active, 1);
|
||||
g_atomic_int_set (&_active, 1);
|
||||
}
|
||||
|
||||
void
|
||||
Auditioner::audition_region (AudioRegion& region)
|
||||
{
|
||||
if (atomic_read (&_active)) {
|
||||
if (g_atomic_int_get (&_active)) {
|
||||
/* don't go via session for this, because we are going
|
||||
to remain active.
|
||||
*/
|
||||
cancel_audition ();
|
||||
}
|
||||
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
the_region = new AudioRegion (region);
|
||||
the_region->set_position (0, this);
|
||||
|
|
@ -126,7 +126,7 @@ Auditioner::audition_region (AudioRegion& region)
|
|||
length = the_region->length();
|
||||
diskstream->seek (0);
|
||||
current_frame = 0;
|
||||
atomic_set (&_active, 1);
|
||||
g_atomic_int_set (&_active, 1);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -136,7 +136,7 @@ Auditioner::play_audition (jack_nframes_t nframes)
|
|||
jack_nframes_t this_nframes;
|
||||
int ret;
|
||||
|
||||
if (atomic_read (&_active) == 0) {
|
||||
if (g_atomic_int_get (&_active) == 0) {
|
||||
silence (nframes, 0);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ void
|
|||
AutomationList::clear ()
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
events.clear ();
|
||||
if (!no_state) {
|
||||
save_state (_("cleared"));
|
||||
|
|
@ -239,14 +239,14 @@ AutomationList::clear ()
|
|||
void
|
||||
AutomationList::x_scale (double factor)
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
_x_scale (factor);
|
||||
}
|
||||
|
||||
bool
|
||||
AutomationList::extend_to (double when)
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
if (events.empty() || events.back()->when == when) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -285,7 +285,7 @@ AutomationList::rt_add (double when, double value)
|
|||
// cerr << "RT: alist @ " << this << " add " << value << " @ " << when << endl;
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
iterator where;
|
||||
TimeComparator cmp;
|
||||
|
|
@ -369,7 +369,7 @@ AutomationList::add (double when, double value, bool for_loading)
|
|||
/* this is for graphical editing and loading data from storage */
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
TimeComparator cmp;
|
||||
ControlEvent cp (when, 0.0f);
|
||||
bool insert = true;
|
||||
|
|
@ -413,7 +413,7 @@ void
|
|||
AutomationList::erase (AutomationList::iterator i)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
events.erase (i);
|
||||
reposition_for_rt_add (0);
|
||||
if (!no_state) {
|
||||
|
|
@ -428,7 +428,7 @@ void
|
|||
AutomationList::erase (AutomationList::iterator start, AutomationList::iterator end)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
events.erase (start, end);
|
||||
reposition_for_rt_add (0);
|
||||
if (!no_state) {
|
||||
|
|
@ -445,7 +445,7 @@ AutomationList::reset_range (double start, double endt)
|
|||
bool reset = false;
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
TimeComparator cmp;
|
||||
ControlEvent cp (start, 0.0f);
|
||||
iterator s;
|
||||
|
|
@ -481,7 +481,7 @@ AutomationList::erase_range (double start, double endt)
|
|||
bool erased = false;
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
TimeComparator cmp;
|
||||
ControlEvent cp (start, 0.0f);
|
||||
iterator s;
|
||||
|
|
@ -515,7 +515,7 @@ AutomationList::move_range (iterator start, iterator end, double xdelta, double
|
|||
*/
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
while (start != end) {
|
||||
(*start)->when += xdelta;
|
||||
|
|
@ -542,7 +542,7 @@ AutomationList::modify (iterator iter, double when, double val)
|
|||
*/
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
(*iter)->when = when;
|
||||
(*iter)->value = val;
|
||||
if (!no_state) {
|
||||
|
|
@ -558,7 +558,7 @@ AutomationList::modify (iterator iter, double when, double val)
|
|||
std::pair<AutomationList::iterator,AutomationList::iterator>
|
||||
AutomationList::control_points_adjacent (double xval)
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
iterator i;
|
||||
TimeComparator cmp;
|
||||
ControlEvent cp (xval, 0.0f);
|
||||
|
|
@ -620,7 +620,7 @@ Change
|
|||
AutomationList::restore_state (StateManager::State& state)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
State* lstate = dynamic_cast<State*> (&state);
|
||||
|
||||
events.clear ();
|
||||
|
|
@ -655,7 +655,7 @@ void
|
|||
AutomationList::truncate_end (double last_coordinate)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
ControlEvent cp (last_coordinate, 0);
|
||||
list<ControlEvent*>::reverse_iterator i;
|
||||
double last_val;
|
||||
|
|
@ -760,7 +760,7 @@ void
|
|||
AutomationList::truncate_start (double overall_length)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
AutomationList::iterator i;
|
||||
double first_legal_value;
|
||||
double first_legal_coordinate;
|
||||
|
|
@ -998,7 +998,7 @@ AutomationList::cut (iterator start, iterator end)
|
|||
AutomationList* nal = new AutomationList (default_value);
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
for (iterator x = start; x != end; ) {
|
||||
iterator tmp;
|
||||
|
|
@ -1032,7 +1032,7 @@ AutomationList::cut_copy_clear (double start, double end, int op)
|
|||
bool changed = false;
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
if ((s = lower_bound (events.begin(), events.end(), &cp, cmp)) == events.end()) {
|
||||
return nal;
|
||||
|
|
@ -1094,7 +1094,7 @@ AutomationList::copy (iterator start, iterator end)
|
|||
AutomationList* nal = new AutomationList (default_value);
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
for (iterator x = start; x != end; ) {
|
||||
iterator tmp;
|
||||
|
|
@ -1141,7 +1141,7 @@ AutomationList::paste (AutomationList& alist, double pos, float times)
|
|||
}
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
iterator where;
|
||||
iterator prev;
|
||||
double end = 0;
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@
|
|||
#include "i18n.h"
|
||||
|
||||
using namespace ARDOUR;
|
||||
using namespace PBD;
|
||||
|
||||
Connection::Connection (const XMLNode& node)
|
||||
{
|
||||
|
|
@ -58,7 +57,7 @@ void
|
|||
Connection::add_connection (int port, string portname)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (port_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (port_lock);
|
||||
_ports[port].push_back (portname);
|
||||
}
|
||||
ConnectionsChanged (port); /* EMIT SIGNAL */
|
||||
|
|
@ -70,7 +69,7 @@ Connection::remove_connection (int port, string portname)
|
|||
bool changed = false;
|
||||
|
||||
{
|
||||
LockMonitor lm (port_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (port_lock);
|
||||
PortList& pl = _ports[port];
|
||||
PortList::iterator i = find (pl.begin(), pl.end(), portname);
|
||||
|
||||
|
|
@ -88,7 +87,7 @@ Connection::remove_connection (int port, string portname)
|
|||
const Connection::PortList&
|
||||
Connection::port_connections (int port) const
|
||||
{
|
||||
LockMonitor lm (port_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (port_lock);
|
||||
return _ports[port];
|
||||
}
|
||||
|
||||
|
|
@ -102,7 +101,7 @@ void
|
|||
Connection::add_port ()
|
||||
{
|
||||
{
|
||||
LockMonitor lm (port_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (port_lock);
|
||||
_ports.push_back (PortList());
|
||||
}
|
||||
ConfigurationChanged(); /* EMIT SIGNAL */
|
||||
|
|
@ -114,7 +113,7 @@ Connection::remove_port (int which_port)
|
|||
bool changed = false;
|
||||
|
||||
{
|
||||
LockMonitor lm (port_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (port_lock);
|
||||
vector<PortList>::iterator i;
|
||||
int n;
|
||||
|
||||
|
|
@ -135,7 +134,7 @@ void
|
|||
Connection::clear ()
|
||||
{
|
||||
{
|
||||
LockMonitor lm (port_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (port_lock);
|
||||
_ports.clear ();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@
|
|||
|
||||
|
||||
using namespace ARDOUR;
|
||||
using namespace PBD;
|
||||
using namespace std;
|
||||
|
||||
#include "i18n.h"
|
||||
|
|
@ -32,7 +31,7 @@ ControlProtocolManager::ControlProtocolManager ()
|
|||
|
||||
ControlProtocolManager::~ControlProtocolManager()
|
||||
{
|
||||
LockMonitor lm (protocols_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (protocols_lock);
|
||||
|
||||
for (list<ControlProtocol*>::iterator i = control_protocols.begin(); i != control_protocols.end(); ++i) {
|
||||
delete (*i);
|
||||
|
|
@ -62,7 +61,7 @@ ControlProtocolManager::drop_session ()
|
|||
_session = 0;
|
||||
|
||||
{
|
||||
LockMonitor lm (protocols_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (protocols_lock);
|
||||
for (list<ControlProtocol*>::iterator p = control_protocols.begin(); p != control_protocols.end(); ++p) {
|
||||
delete *p;
|
||||
}
|
||||
|
|
@ -89,7 +88,7 @@ ControlProtocolManager::instantiate (ControlProtocolInfo& cpi)
|
|||
return 0;
|
||||
}
|
||||
|
||||
LockMonitor lm (protocols_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (protocols_lock);
|
||||
control_protocols.push_back (cpi.protocol);
|
||||
|
||||
return cpi.protocol;
|
||||
|
|
@ -113,7 +112,7 @@ ControlProtocolManager::teardown (ControlProtocolInfo& cpi)
|
|||
cpi.descriptor->destroy (cpi.descriptor, cpi.protocol);
|
||||
|
||||
{
|
||||
LockMonitor lm (protocols_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (protocols_lock);
|
||||
list<ControlProtocol*>::iterator p = find (control_protocols.begin(), control_protocols.end(), cpi.protocol);
|
||||
if (p != control_protocols.end()) {
|
||||
control_protocols.erase (p);
|
||||
|
|
@ -281,7 +280,7 @@ XMLNode&
|
|||
ControlProtocolManager::get_state (void)
|
||||
{
|
||||
XMLNode* root = new XMLNode (state_node_name);
|
||||
LockMonitor lm (protocols_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (protocols_lock);
|
||||
|
||||
for (list<ControlProtocolInfo*>::iterator i = control_protocol_info.begin(); i != control_protocol_info.end(); ++i) {
|
||||
XMLNode* child = new XMLNode (X_("Protocol"));
|
||||
|
|
|
|||
|
|
@ -66,29 +66,34 @@ CoreAudioSource::init (const string& idstr, bool build_peak)
|
|||
}
|
||||
|
||||
/* note that we temporarily truncated _id at the colon */
|
||||
FSRef ref;
|
||||
err = FSPathMakeRef ((UInt8*)file.c_str(), &ref, 0);
|
||||
FSRef fsr;
|
||||
err = FSPathMakeRef ((UInt8*)file.c_str(), &fsr, 0);
|
||||
if (err != noErr) {
|
||||
cerr << "FSPathMakeRef " << err << endl;
|
||||
throw failed_constructor();
|
||||
}
|
||||
|
||||
err = ExtAudioFileOpen (&ref, &af);
|
||||
err = ExtAudioFileOpen (&fsr, &af);
|
||||
if (err != noErr) {
|
||||
cerr << "ExtAudioFileOpen " << err << endl;
|
||||
ExtAudioFileDispose (af);
|
||||
throw failed_constructor();
|
||||
}
|
||||
|
||||
AudioStreamBasicDescription file_asbd;
|
||||
memset(&file_asbd, 0, sizeof(file_asbd));
|
||||
size_t asbd_size = sizeof(file_asbd);
|
||||
memset(&file_asbd, 0, sizeof(AudioStreamBasicDescription));
|
||||
size_t asbd_size = sizeof(AudioStreamBasicDescription);
|
||||
err = ExtAudioFileGetProperty(af,
|
||||
kExtAudioFileProperty_FileDataFormat, &asbd_size, &file_asbd);
|
||||
if (err != noErr) {
|
||||
cerr << "ExtAudioFileGetProperty1 " << err << endl;
|
||||
ExtAudioFileDispose (af);
|
||||
throw failed_constructor();
|
||||
}
|
||||
n_channels = file_asbd.mChannelsPerFrame;
|
||||
|
||||
cerr << "number of channels: " << n_channels << endl;
|
||||
|
||||
if (channel >= n_channels) {
|
||||
error << string_compose(_("CoreAudioSource: file only contains %1 channels; %2 is invalid as a channel number"), n_channels, channel) << endmsg;
|
||||
ExtAudioFileDispose (af);
|
||||
|
|
@ -96,17 +101,36 @@ CoreAudioSource::init (const string& idstr, bool build_peak)
|
|||
}
|
||||
|
||||
int64_t ca_frames;
|
||||
size_t prop_size = sizeof(ca_frames);
|
||||
size_t prop_size = sizeof(int64_t);
|
||||
|
||||
err = ExtAudioFileGetProperty(af, kExtAudioFileProperty_FileLengthFrames, &prop_size, &ca_frames);
|
||||
if (err != noErr) {
|
||||
cerr << "ExtAudioFileGetProperty2 " << err << endl;
|
||||
ExtAudioFileDispose (af);
|
||||
throw failed_constructor();
|
||||
}
|
||||
_length = ca_frames;
|
||||
|
||||
_length = ca_frames;
|
||||
_path = file;
|
||||
|
||||
AudioStreamBasicDescription client_asbd;
|
||||
memset(&client_asbd, 0, sizeof(AudioStreamBasicDescription));
|
||||
client_asbd.mSampleRate = file_asbd.mSampleRate;
|
||||
client_asbd.mFormatID = kAudioFormatLinearPCM;
|
||||
client_asbd.mFormatFlags = kLinearPCMFormatFlagIsFloat;
|
||||
client_asbd.mBytesPerPacket = file_asbd.mChannelsPerFrame * 4;
|
||||
client_asbd.mFramesPerPacket = 1;
|
||||
client_asbd.mBytesPerFrame = client_asbd.mBytesPerPacket;
|
||||
client_asbd.mChannelsPerFrame = file_asbd.mChannelsPerFrame;
|
||||
client_asbd.mBitsPerChannel = 32;
|
||||
|
||||
err = ExtAudioFileSetProperty (af, kExtAudioFileProperty_ClientDataFormat, asbd_size, &client_asbd);
|
||||
if (err != noErr) {
|
||||
cerr << "ExtAudioFileSetProperty3 " << err << endl;
|
||||
ExtAudioFileDispose (af);
|
||||
throw failed_constructor ();
|
||||
}
|
||||
|
||||
if (build_peak) {
|
||||
if (initialize_peakfile (false, file)) {
|
||||
error << "initialize peakfile failed" << endmsg;
|
||||
|
|
@ -114,24 +138,6 @@ CoreAudioSource::init (const string& idstr, bool build_peak)
|
|||
throw failed_constructor ();
|
||||
}
|
||||
}
|
||||
|
||||
AudioStreamBasicDescription client_asbd;
|
||||
memset(&client_asbd, 0, sizeof(client_asbd));
|
||||
client_asbd.mFormatID = kAudioFormatLinearPCM;
|
||||
client_asbd.mFormatFlags = kLinearPCMFormatFlagIsFloat;
|
||||
client_asbd.mSampleRate = file_asbd.mSampleRate;
|
||||
|
||||
err = AudioFormatGetProperty(kAudioFormatProperty_FormatInfo, 0, NULL, &asbd_size, &client_asbd);
|
||||
if (err != noErr) {
|
||||
ExtAudioFileDispose (af);
|
||||
throw failed_constructor ();
|
||||
}
|
||||
|
||||
err = ExtAudioFileSetProperty (af, kExtAudioFileProperty_ClientDataFormat, asbd_size, &client_asbd);
|
||||
if (err != noErr) {
|
||||
ExtAudioFileDispose (af);
|
||||
throw failed_constructor ();
|
||||
}
|
||||
}
|
||||
|
||||
CoreAudioSource::~CoreAudioSource ()
|
||||
|
|
@ -173,7 +179,7 @@ CoreAudioSource::read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, ch
|
|||
uint32_t real_cnt = cnt * n_channels;
|
||||
|
||||
{
|
||||
LockMonitor lm (_tmpbuf_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_tmpbuf_lock);
|
||||
|
||||
if (tmpbufsize < real_cnt) {
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
#include <cfloat>
|
||||
#include <cmath>
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
#include <sigc++/bind.h>
|
||||
|
||||
#include "ardour/curve.h"
|
||||
|
|
@ -37,7 +37,6 @@
|
|||
|
||||
using namespace std;
|
||||
using namespace ARDOUR;
|
||||
using namespace PBD;
|
||||
using namespace sigc;
|
||||
|
||||
Curve::Curve (double minv, double maxv, double canv, bool nostate)
|
||||
|
|
@ -204,7 +203,7 @@ Curve::solve ()
|
|||
bool
|
||||
Curve::rt_safe_get_vector (double x0, double x1, float *vec, int32_t veclen)
|
||||
{
|
||||
TentativeLockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock, Glib::TRY_LOCK);
|
||||
|
||||
if (!lm.locked()) {
|
||||
return false;
|
||||
|
|
@ -217,7 +216,7 @@ Curve::rt_safe_get_vector (double x0, double x1, float *vec, int32_t veclen)
|
|||
void
|
||||
Curve::get_vector (double x0, double x1, float *vec, int32_t veclen)
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
_get_vector (x0, x1, vec, veclen);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -268,7 +268,7 @@ jack_nframes_t
|
|||
DestructiveFileSource::write (Sample* data, jack_nframes_t cnt, char * workbuf)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_lock);
|
||||
|
||||
jack_nframes_t old_file_pos;
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/basename.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
#include <pbd/xml++.h>
|
||||
|
||||
#include <ardour/ardour.h>
|
||||
|
|
@ -139,7 +139,7 @@ DiskStream::init (Flag f)
|
|||
first_input_change = true;
|
||||
_playlist = 0;
|
||||
i_am_the_modifier = 0;
|
||||
atomic_set (&_record_enabled, 0);
|
||||
g_atomic_int_set (&_record_enabled, 0);
|
||||
was_recording = false;
|
||||
capture_start_frame = 0;
|
||||
capture_captured = 0;
|
||||
|
|
@ -213,7 +213,7 @@ DiskStream::destroy_channel (ChannelInfo &chan)
|
|||
|
||||
DiskStream::~DiskStream ()
|
||||
{
|
||||
LockMonitor lm (state_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (state_lock);
|
||||
|
||||
if (_playlist) {
|
||||
_playlist->unref ();
|
||||
|
|
@ -229,7 +229,7 @@ DiskStream::~DiskStream ()
|
|||
void
|
||||
DiskStream::handle_input_change (IOChange change, void *src)
|
||||
{
|
||||
LockMonitor lm (state_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (state_lock);
|
||||
|
||||
if (!(input_change_pending & change)) {
|
||||
input_change_pending = IOChange (input_change_pending|change);
|
||||
|
|
@ -241,7 +241,7 @@ void
|
|||
DiskStream::non_realtime_input_change ()
|
||||
{
|
||||
{
|
||||
LockMonitor lm (state_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (state_lock);
|
||||
|
||||
if (input_change_pending == NoChange) {
|
||||
return;
|
||||
|
|
@ -349,7 +349,7 @@ int
|
|||
DiskStream::use_playlist (AudioPlaylist* playlist)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (state_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (state_lock);
|
||||
|
||||
if (playlist == _playlist) {
|
||||
return 0;
|
||||
|
|
@ -565,7 +565,7 @@ DiskStream::non_realtime_set_speed ()
|
|||
{
|
||||
if (_buffer_reallocation_required)
|
||||
{
|
||||
LockMonitor lm (state_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (state_lock);
|
||||
allocate_temporary_buffers ();
|
||||
|
||||
_buffer_reallocation_required = false;
|
||||
|
|
@ -753,7 +753,8 @@ DiskStream::process (jack_nframes_t transport_frame, jack_nframes_t nframes, jac
|
|||
returns a non-zero value, in which case, ::commit should not be called.
|
||||
*/
|
||||
|
||||
if (pthread_mutex_trylock (state_lock.mutex())) {
|
||||
// If we can't take the state lock return.
|
||||
if (!state_lock.trylock()) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
@ -1002,7 +1003,7 @@ DiskStream::process (jack_nframes_t transport_frame, jack_nframes_t nframes, jac
|
|||
be called. unlock the state lock.
|
||||
*/
|
||||
|
||||
pthread_mutex_unlock (state_lock.mutex());
|
||||
state_lock.unlock();
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
@ -1011,7 +1012,7 @@ DiskStream::process (jack_nframes_t transport_frame, jack_nframes_t nframes, jac
|
|||
void
|
||||
DiskStream::recover ()
|
||||
{
|
||||
pthread_mutex_unlock (state_lock.mutex());
|
||||
state_lock.unlock();
|
||||
_processed = false;
|
||||
}
|
||||
|
||||
|
|
@ -1047,7 +1048,7 @@ DiskStream::commit (jack_nframes_t nframes)
|
|||
|| channels[0].capture_buf->read_space() >= disk_io_chunk_frames;
|
||||
}
|
||||
|
||||
pthread_mutex_unlock (state_lock.mutex());
|
||||
state_lock.unlock();
|
||||
|
||||
_processed = false;
|
||||
|
||||
|
|
@ -1140,7 +1141,7 @@ DiskStream::overwrite_existing_buffers ()
|
|||
int
|
||||
DiskStream::seek (jack_nframes_t frame, bool complete_refill)
|
||||
{
|
||||
LockMonitor lm (state_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (state_lock);
|
||||
uint32_t n;
|
||||
int ret;
|
||||
ChannelList::iterator chan;
|
||||
|
|
@ -1702,7 +1703,7 @@ DiskStream::transport_stopped (struct tm& when, time_t twhen, bool abort_capture
|
|||
}
|
||||
|
||||
/* XXX is there anything we can do if err != 0 ? */
|
||||
LockMonitor lm (capture_info_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (capture_info_lock);
|
||||
|
||||
if (capture_info.empty()) {
|
||||
return;
|
||||
|
|
@ -1925,7 +1926,7 @@ DiskStream::set_record_enabled (bool yn, void* src)
|
|||
|
||||
if (record_enabled() != yn) {
|
||||
if (yn) {
|
||||
atomic_set (&_record_enabled, 1);
|
||||
g_atomic_int_set (&_record_enabled, 1);
|
||||
capturing_sources.clear ();
|
||||
if (Config->get_use_hardware_monitoring()) {
|
||||
for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
|
||||
|
|
@ -1941,7 +1942,7 @@ DiskStream::set_record_enabled (bool yn, void* src)
|
|||
}
|
||||
|
||||
} else {
|
||||
atomic_set (&_record_enabled, 0);
|
||||
g_atomic_int_set (&_record_enabled, 0);
|
||||
if (Config->get_use_hardware_monitoring()) {
|
||||
for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
|
||||
if ((*chan).source) {
|
||||
|
|
@ -2415,7 +2416,7 @@ DiskStream::set_loop (Location *location)
|
|||
jack_nframes_t
|
||||
DiskStream::get_capture_start_frame (uint32_t n)
|
||||
{
|
||||
LockMonitor lm (capture_info_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (capture_info_lock);
|
||||
|
||||
if (capture_info.size() > n) {
|
||||
return capture_info[n]->start;
|
||||
|
|
@ -2428,7 +2429,7 @@ DiskStream::get_capture_start_frame (uint32_t n)
|
|||
jack_nframes_t
|
||||
DiskStream::get_captured_frames (uint32_t n)
|
||||
{
|
||||
LockMonitor lm (capture_info_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (capture_info_lock);
|
||||
|
||||
if (capture_info.size() > n) {
|
||||
return capture_info[n]->frames;
|
||||
|
|
|
|||
|
|
@ -53,10 +53,11 @@
|
|||
#include <vector>
|
||||
#include <cstdio> /* for rename(2) */
|
||||
|
||||
#include <glibmm.h>
|
||||
|
||||
#include <pbd/stl_delete.h>
|
||||
#include <pbd/basename.h>
|
||||
#include <pbd/dirname.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
|
||||
#include <glibmm/thread.h>
|
||||
#include <pbd/pathscanner.h>
|
||||
|
||||
#include <ardour/ardour.h>
|
||||
|
|
@ -351,7 +352,7 @@ FileSource::set_allow_remove_if_empty (bool yn)
|
|||
int
|
||||
FileSource::set_name (string newname, bool destructive)
|
||||
{
|
||||
LockMonitor lm (_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_lock);
|
||||
string oldpath = _path;
|
||||
string newpath = Session::change_audio_path_by_name (oldpath, _name, newname, destructive);
|
||||
|
||||
|
|
@ -365,7 +366,7 @@ FileSource::set_name (string newname, bool destructive)
|
|||
return -1;
|
||||
}
|
||||
|
||||
_name = basename (newpath);
|
||||
_name = Glib::path_get_basename (newpath);
|
||||
_path = newpath;
|
||||
|
||||
return rename_peakfile (peak_path (_path));
|
||||
|
|
@ -680,7 +681,7 @@ FileSource::compute_header_size ()
|
|||
int
|
||||
FileSource::update_header (jack_nframes_t when, struct tm& now, time_t tnow)
|
||||
{
|
||||
LockMonitor lm (_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_lock);
|
||||
|
||||
if (is_bwf) {
|
||||
/* random code is 9 digits */
|
||||
|
|
@ -1009,7 +1010,7 @@ FileSource::mark_for_remove ()
|
|||
jack_nframes_t
|
||||
FileSource::read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const
|
||||
{
|
||||
LockMonitor lm (_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_lock);
|
||||
return read_unlocked (dst, start, cnt, workbuf);
|
||||
}
|
||||
|
||||
|
|
@ -1055,7 +1056,7 @@ jack_nframes_t
|
|||
FileSource::write (Sample *data, jack_nframes_t cnt, char * workbuf)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_lock);
|
||||
|
||||
jack_nframes_t oldlen;
|
||||
int32_t frame_pos = _length;
|
||||
|
|
@ -1287,7 +1288,7 @@ FileSource::is_empty (string path)
|
|||
void
|
||||
FileSource::mark_streaming_write_completed ()
|
||||
{
|
||||
LockMonitor lm (_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_lock);
|
||||
|
||||
next_peak_clear_should_notify = true;
|
||||
|
||||
|
|
@ -1313,13 +1314,15 @@ FileSource::move_to_trash (const string trash_dir_name)
|
|||
on whichever filesystem it was already on.
|
||||
*/
|
||||
|
||||
newpath = PBD::dirname (_path);
|
||||
newpath = PBD::dirname (newpath);
|
||||
// XXX Portability
|
||||
|
||||
newpath = Glib::path_get_dirname (_path);
|
||||
newpath = Glib::path_get_dirname (newpath);
|
||||
|
||||
newpath += '/';
|
||||
newpath += trash_dir_name;
|
||||
newpath += '/';
|
||||
newpath += PBD::basename (_path);
|
||||
newpath += Glib::path_get_basename (_path);
|
||||
|
||||
if (access (newpath.c_str(), F_OK) == 0) {
|
||||
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ inline static void gdither_innner_loop(const GDitherType dt,
|
|||
const int clamp_l)
|
||||
{
|
||||
uint32_t pos, i;
|
||||
u_int8_t *o8 = (u_int8_t*) y;
|
||||
uint8_t *o8 = (uint8_t*) y;
|
||||
int16_t *o16 = (int16_t*) y;
|
||||
int32_t *o32 = (int32_t*) y;
|
||||
float tmp, r, ideal;
|
||||
|
|
|
|||
|
|
@ -47,7 +47,10 @@
|
|||
#include <ardour/utils.h>
|
||||
#include <ardour/session.h>
|
||||
#include <ardour/control_protocol_manager.h>
|
||||
|
||||
#ifdef HAVE_LIBLO
|
||||
#include <ardour/osc.h>
|
||||
#endif
|
||||
|
||||
#include <ardour/mix.h>
|
||||
|
||||
|
|
@ -59,7 +62,10 @@
|
|||
|
||||
ARDOUR::Configuration* ARDOUR::Config = 0;
|
||||
ARDOUR::AudioLibrary* ARDOUR::Library = 0;
|
||||
|
||||
#ifdef HAVE_LIBLO
|
||||
ARDOUR::OSC* ARDOUR::osc = 0;
|
||||
#endif
|
||||
|
||||
using namespace ARDOUR;
|
||||
using namespace std;
|
||||
|
|
@ -74,6 +80,7 @@ Change ARDOUR::PositionChanged = ARDOUR::new_change ();
|
|||
Change ARDOUR::NameChanged = ARDOUR::new_change ();
|
||||
Change ARDOUR::BoundsChanged = Change (0); // see init(), below
|
||||
|
||||
#ifdef HAVE_LIBLO
|
||||
static int
|
||||
setup_osc ()
|
||||
{
|
||||
|
|
@ -89,6 +96,7 @@ setup_osc ()
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static int
|
||||
setup_midi ()
|
||||
|
|
@ -198,9 +206,11 @@ ARDOUR::init (AudioEngine& engine, bool use_vst, bool try_optimization, void (*s
|
|||
return -1;
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBLO
|
||||
if (setup_osc ()) {
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef VST_SUPPORT
|
||||
if (Config->get_use_vst() && fst_init (sighandler)) {
|
||||
|
|
|
|||
|
|
@ -30,7 +30,10 @@
|
|||
#include <sndfile.h>
|
||||
#include <samplerate.h>
|
||||
|
||||
#include <glibmm.h>
|
||||
|
||||
#include <pbd/basename.h>
|
||||
|
||||
#include <ardour/ardour.h>
|
||||
#include <ardour/session.h>
|
||||
#include <ardour/diskstream.h>
|
||||
|
|
@ -212,7 +215,7 @@ Session::import_audiofile (import_status& status)
|
|||
sources.push_back(newfiles[n]);
|
||||
}
|
||||
|
||||
AudioRegion *r = new AudioRegion (sources, 0, newfiles[0]->length(), region_name_from_path (PBD::basename(basepath)),
|
||||
AudioRegion *r = new AudioRegion (sources, 0, newfiles[0]->length(), region_name_from_path (Glib::path_get_basename (basepath)),
|
||||
0, AudioRegion::Flag (AudioRegion::DefaultFlags | AudioRegion::WholeFile));
|
||||
|
||||
status.new_regions.push_back (r);
|
||||
|
|
@ -228,7 +231,7 @@ Session::import_audiofile (import_status& status)
|
|||
did not bother to create whole-file AudioRegions for them. Do it now.
|
||||
*/
|
||||
|
||||
AudioRegion *r = new AudioRegion (*newfiles[n], 0, newfiles[n]->length(), region_name_from_path (PBD::basename (newfiles[n]->name())),
|
||||
AudioRegion *r = new AudioRegion (*newfiles[n], 0, newfiles[n]->length(), region_name_from_path (Glib::path_get_basename (newfiles[n]->name())),
|
||||
0, AudioRegion::Flag (AudioRegion::DefaultFlags | AudioRegion::WholeFile | AudioRegion::Import));
|
||||
|
||||
status.new_regions.push_back (r);
|
||||
|
|
@ -285,7 +288,7 @@ Session::import_audiofile (import_status& status)
|
|||
string
|
||||
Session::build_tmp_convert_name(string infile)
|
||||
{
|
||||
string tmp_name(_path + "/." + PBD::basename (infile.c_str()) + "XXXXXX");
|
||||
string tmp_name(_path + "/." + Glib::path_get_basename (infile.c_str()) + "XXXXXX");
|
||||
char* tmp = new char[tmp_name.length() + 1];
|
||||
tmp_name.copy(tmp, string::npos);
|
||||
tmp[tmp_name.length()] = 0;
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ PluginInsert::PluginInsert (Session& s, Plugin& plug, Placement placement)
|
|||
save_state (_("initial state"));
|
||||
|
||||
{
|
||||
LockMonitor em (_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em (_session.engine().process_lock());
|
||||
IO::MoreOutputs (output_streams ());
|
||||
}
|
||||
|
||||
|
|
@ -97,7 +97,7 @@ PluginInsert::PluginInsert (Session& s, const XMLNode& node)
|
|||
_plugins[0]->ParameterChanged.connect (mem_fun (*this, &PluginInsert::parameter_changed));
|
||||
|
||||
{
|
||||
LockMonitor em (_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em (_session.engine().process_lock());
|
||||
IO::MoreOutputs (output_streams());
|
||||
}
|
||||
}
|
||||
|
|
@ -410,7 +410,7 @@ PluginInsert::automation_run (vector<Sample *>& bufs, uint32_t nbufs, jack_nfram
|
|||
jack_nframes_t now = _session.transport_frame ();
|
||||
jack_nframes_t end = now + nframes;
|
||||
|
||||
TentativeLockMonitor lm (_automation_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_automation_lock, Glib::TRY_LOCK);
|
||||
|
||||
if (!lm.locked()) {
|
||||
connect_and_run (bufs, nbufs, nframes, offset, false);
|
||||
|
|
|
|||
|
|
@ -25,7 +25,8 @@
|
|||
|
||||
#include <sigc++/bind.h>
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <pbd/xml++.h>
|
||||
|
||||
#include <ardour/audioengine.h>
|
||||
|
|
@ -70,6 +71,8 @@ sigc::signal<int> IO::PannersLegal;
|
|||
sigc::signal<void,uint32_t> IO::MoreOutputs;
|
||||
sigc::signal<int> IO::PortsCreated;
|
||||
|
||||
Glib::StaticMutex IO::m_meter_signal_lock = GLIBMM_STATIC_MUTEX_INIT;
|
||||
|
||||
/* this is a default mapper of MIDI control values to a gain coefficient.
|
||||
others can be imagined. see IO::set_midi_to_gain_function().
|
||||
*/
|
||||
|
|
@ -127,12 +130,19 @@ IO::IO (Session& s, string name,
|
|||
_gain_automation_state = Off;
|
||||
_gain_automation_style = Absolute;
|
||||
|
||||
Meter.connect (mem_fun (*this, &IO::meter));
|
||||
{
|
||||
// IO::Meter is emitted from another thread so the
|
||||
// Meter signal must be protected.
|
||||
Glib::Mutex::Lock guard (m_meter_signal_lock);
|
||||
m_meter_connection = Meter.connect (mem_fun (*this, &IO::meter));
|
||||
}
|
||||
}
|
||||
|
||||
IO::~IO ()
|
||||
{
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
|
||||
Glib::Mutex::Lock guard (m_meter_signal_lock);
|
||||
Glib::Mutex::Lock lm (io_lock);
|
||||
vector<Port *>::iterator i;
|
||||
|
||||
for (i = _inputs.begin(); i != _inputs.end(); ++i) {
|
||||
|
|
@ -142,6 +152,8 @@ IO::~IO ()
|
|||
for (i = _outputs.begin(); i != _outputs.end(); ++i) {
|
||||
_session.engine().unregister_port (*i);
|
||||
}
|
||||
|
||||
m_meter_connection.disconnect();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -380,7 +392,7 @@ IO::deliver_output (vector<Sample *>& bufs, uint32_t nbufs, jack_nframes_t nfram
|
|||
gain_t pangain = _gain;
|
||||
|
||||
{
|
||||
TentativeLockMonitor dm (declick_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock dm (declick_lock, Glib::TRY_LOCK);
|
||||
|
||||
if (dm.locked()) {
|
||||
dg = _desired_gain;
|
||||
|
|
@ -427,7 +439,7 @@ IO::deliver_output_no_pan (vector<Sample *>& bufs, uint32_t nbufs, jack_nframes_
|
|||
|
||||
} else {
|
||||
|
||||
TentativeLockMonitor dm (declick_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock dm (declick_lock, Glib::TRY_LOCK);
|
||||
|
||||
if (dm.locked()) {
|
||||
dg = _desired_gain;
|
||||
|
|
@ -568,10 +580,10 @@ IO::disconnect_input (Port* our_port, string other_port, void* src)
|
|||
}
|
||||
|
||||
{
|
||||
LockMonitor em (_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em (_session.engine().process_lock());
|
||||
|
||||
{
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (io_lock);
|
||||
|
||||
/* check that our_port is really one of ours */
|
||||
|
||||
|
|
@ -604,10 +616,10 @@ IO::connect_input (Port* our_port, string other_port, void* src)
|
|||
}
|
||||
|
||||
{
|
||||
LockMonitor em(_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em(_session.engine().process_lock());
|
||||
|
||||
{
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (io_lock);
|
||||
|
||||
/* check that our_port is really one of ours */
|
||||
|
||||
|
|
@ -638,10 +650,10 @@ IO::disconnect_output (Port* our_port, string other_port, void* src)
|
|||
}
|
||||
|
||||
{
|
||||
LockMonitor em(_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em(_session.engine().process_lock());
|
||||
|
||||
{
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (io_lock);
|
||||
|
||||
if (find (_outputs.begin(), _outputs.end(), our_port) == _outputs.end()) {
|
||||
return -1;
|
||||
|
|
@ -671,10 +683,10 @@ IO::connect_output (Port* our_port, string other_port, void* src)
|
|||
}
|
||||
|
||||
{
|
||||
LockMonitor em(_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em(_session.engine().process_lock());
|
||||
|
||||
{
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (io_lock);
|
||||
|
||||
/* check that our_port is really one of ours */
|
||||
|
||||
|
|
@ -730,10 +742,10 @@ IO::remove_output_port (Port* port, void* src)
|
|||
IOChange change (NoChange);
|
||||
|
||||
{
|
||||
LockMonitor em(_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em(_session.engine().process_lock());
|
||||
|
||||
{
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (io_lock);
|
||||
|
||||
if (_noutputs - 1 == (uint32_t) _output_minimum) {
|
||||
/* sorry, you can't do this */
|
||||
|
|
@ -779,10 +791,10 @@ IO::add_output_port (string destination, void* src)
|
|||
char buf[64];
|
||||
|
||||
{
|
||||
LockMonitor em(_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em(_session.engine().process_lock());
|
||||
|
||||
{
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (io_lock);
|
||||
|
||||
if (_output_maximum >= 0 && (int) _noutputs == _output_maximum) {
|
||||
return -1;
|
||||
|
|
@ -830,10 +842,10 @@ IO::remove_input_port (Port* port, void* src)
|
|||
IOChange change (NoChange);
|
||||
|
||||
{
|
||||
LockMonitor em(_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em(_session.engine().process_lock());
|
||||
|
||||
{
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (io_lock);
|
||||
|
||||
if (((int)_ninputs - 1) < _input_minimum) {
|
||||
/* sorry, you can't do this */
|
||||
|
|
@ -880,10 +892,10 @@ IO::add_input_port (string source, void* src)
|
|||
char buf[64];
|
||||
|
||||
{
|
||||
LockMonitor em (_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em (_session.engine().process_lock());
|
||||
|
||||
{
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (io_lock);
|
||||
|
||||
if (_input_maximum >= 0 && (int) _ninputs == _input_maximum) {
|
||||
return -1;
|
||||
|
|
@ -931,10 +943,10 @@ int
|
|||
IO::disconnect_inputs (void* src)
|
||||
{
|
||||
{
|
||||
LockMonitor em (_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em (_session.engine().process_lock());
|
||||
|
||||
{
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (io_lock);
|
||||
|
||||
for (vector<Port *>::iterator i = _inputs.begin(); i != _inputs.end(); ++i) {
|
||||
_session.engine().disconnect (*i);
|
||||
|
|
@ -951,10 +963,10 @@ int
|
|||
IO::disconnect_outputs (void* src)
|
||||
{
|
||||
{
|
||||
LockMonitor em (_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em (_session.engine().process_lock());
|
||||
|
||||
{
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (io_lock);
|
||||
|
||||
for (vector<Port *>::iterator i = _outputs.begin(); i != _outputs.end(); ++i) {
|
||||
_session.engine().disconnect (*i);
|
||||
|
|
@ -1063,8 +1075,8 @@ IO::ensure_io (uint32_t nin, uint32_t nout, bool clear, void* src)
|
|||
}
|
||||
|
||||
{
|
||||
LockMonitor em (_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em (_session.engine().process_lock());
|
||||
Glib::Mutex::Lock lm (io_lock);
|
||||
|
||||
Port* port;
|
||||
|
||||
|
|
@ -1212,8 +1224,8 @@ IO::ensure_inputs (uint32_t n, bool clear, bool lockit, void* src)
|
|||
}
|
||||
|
||||
if (lockit) {
|
||||
LockMonitor em (_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
LockMonitor im (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em (_session.engine().process_lock());
|
||||
Glib::Mutex::Lock im (io_lock);
|
||||
changed = ensure_inputs_locked (n, clear, src);
|
||||
} else {
|
||||
changed = ensure_inputs_locked (n, clear, src);
|
||||
|
|
@ -1314,8 +1326,8 @@ IO::ensure_outputs (uint32_t n, bool clear, bool lockit, void* src)
|
|||
/* XXX caller should hold io_lock, but generally doesn't */
|
||||
|
||||
if (lockit) {
|
||||
LockMonitor em (_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
LockMonitor im (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock em (_session.engine().process_lock());
|
||||
Glib::Mutex::Lock im (io_lock);
|
||||
changed = ensure_outputs_locked (n, clear, src);
|
||||
} else {
|
||||
changed = ensure_outputs_locked (n, clear, src);
|
||||
|
|
@ -1389,7 +1401,7 @@ IO::state (bool full_state)
|
|||
bool need_ins = true;
|
||||
bool need_outs = true;
|
||||
LocaleGuard lg (X_("POSIX"));
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (io_lock);
|
||||
|
||||
node->add_property("name", _name);
|
||||
snprintf (buf, sizeof(buf), "%" PRIu64, id());
|
||||
|
|
@ -2058,7 +2070,7 @@ IO::set_output_maximum (int n)
|
|||
void
|
||||
IO::set_port_latency (jack_nframes_t nframes)
|
||||
{
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (io_lock);
|
||||
|
||||
for (vector<Port *>::iterator i = _outputs.begin(); i != _outputs.end(); ++i) {
|
||||
(*i)->set_latency (nframes);
|
||||
|
|
@ -2109,8 +2121,8 @@ IO::use_input_connection (Connection& c, void* src)
|
|||
uint32_t limit;
|
||||
|
||||
{
|
||||
LockMonitor lm (_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
LockMonitor lm2 (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_session.engine().process_lock());
|
||||
Glib::Mutex::Lock lm2 (io_lock);
|
||||
|
||||
limit = c.nports();
|
||||
|
||||
|
|
@ -2187,8 +2199,8 @@ IO::use_output_connection (Connection& c, void* src)
|
|||
uint32_t limit;
|
||||
|
||||
{
|
||||
LockMonitor lm (_session.engine().process_lock(), __LINE__, __FILE__);
|
||||
LockMonitor lm2 (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_session.engine().process_lock());
|
||||
Glib::Mutex::Lock lm2 (io_lock);
|
||||
|
||||
limit = c.nports();
|
||||
|
||||
|
|
@ -2437,10 +2449,26 @@ IO::send_state_changed ()
|
|||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
Update the peak meters.
|
||||
|
||||
The meter signal lock is taken to prevent modification of the
|
||||
Meter signal while updating the meters, taking the meter signal
|
||||
lock prior to taking the io_lock ensures that all IO will remain
|
||||
valid while metering.
|
||||
*/
|
||||
void
|
||||
IO::update_meters()
|
||||
{
|
||||
Glib::Mutex::Lock guard (m_meter_signal_lock);
|
||||
|
||||
Meter();
|
||||
}
|
||||
|
||||
void
|
||||
IO::meter ()
|
||||
{
|
||||
LockMonitor lm (io_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (io_lock); // READER: meter thread.
|
||||
uint32_t limit = max (_ninputs, _noutputs);
|
||||
|
||||
for (uint32_t n = 0; n < limit; ++n) {
|
||||
|
|
@ -2602,7 +2630,7 @@ IO::load_automation (const string& path)
|
|||
void
|
||||
IO::clear_automation ()
|
||||
{
|
||||
LockMonitor lm (automation_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (automation_lock);
|
||||
_gain_automation_curve.clear ();
|
||||
_panner->clear_automation ();
|
||||
}
|
||||
|
|
@ -2613,7 +2641,7 @@ IO::set_gain_automation_state (AutoState state)
|
|||
bool changed = false;
|
||||
|
||||
{
|
||||
LockMonitor lm (automation_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (automation_lock);
|
||||
|
||||
if (state != _gain_automation_curve.automation_state()) {
|
||||
changed = true;
|
||||
|
|
@ -2638,7 +2666,7 @@ IO::set_gain_automation_style (AutoStyle style)
|
|||
bool changed = false;
|
||||
|
||||
{
|
||||
LockMonitor lm (automation_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (automation_lock);
|
||||
|
||||
if (style != _gain_automation_curve.automation_style()) {
|
||||
changed = true;
|
||||
|
|
@ -2666,7 +2694,7 @@ IO::set_gain (gain_t val, void *src)
|
|||
if (val>1.99526231f) val=1.99526231f;
|
||||
|
||||
{
|
||||
LockMonitor dm (declick_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock dm (declick_lock);
|
||||
_desired_gain = val;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -371,7 +371,7 @@ Locations::set_current (Location *loc, bool want_lock)
|
|||
int ret;
|
||||
|
||||
if (want_lock) {
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
ret = set_current_unlocked (loc);
|
||||
} else {
|
||||
ret = set_current_unlocked (loc);
|
||||
|
|
@ -399,7 +399,7 @@ void
|
|||
Locations::clear ()
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
LocationList::iterator tmp;
|
||||
for (LocationList::iterator i = locations.begin(); i != locations.end(); ) {
|
||||
tmp = i;
|
||||
|
|
@ -424,7 +424,7 @@ void
|
|||
Locations::clear_markers ()
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
LocationList::iterator tmp;
|
||||
|
||||
for (LocationList::iterator i = locations.begin(); i != locations.end(); ) {
|
||||
|
|
@ -448,7 +448,7 @@ void
|
|||
Locations::clear_ranges ()
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
LocationList::iterator tmp;
|
||||
|
||||
for (LocationList::iterator i = locations.begin(); i != locations.end(); ) {
|
||||
|
|
@ -477,7 +477,7 @@ void
|
|||
Locations::add (Location *loc, bool make_current)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
locations.push_back (loc);
|
||||
|
||||
if (make_current) {
|
||||
|
|
@ -507,7 +507,7 @@ Locations::remove (Location *loc)
|
|||
}
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
for (i = locations.begin(); i != locations.end(); ++i) {
|
||||
if ((*i) == loc) {
|
||||
|
|
@ -547,7 +547,7 @@ Locations::get_state ()
|
|||
{
|
||||
XMLNode *node = new XMLNode ("Locations");
|
||||
LocationList::iterator iter;
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
for (iter = locations.begin(); iter != locations.end(); ++iter) {
|
||||
node->add_child_nocopy ((*iter)->get_state ());
|
||||
|
|
@ -570,7 +570,7 @@ Locations::set_state (const XMLNode& node)
|
|||
nlist = node.children();
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
|
||||
Location *loc = new Location;
|
||||
|
|
@ -614,7 +614,7 @@ Locations::first_location_before (jack_nframes_t frame)
|
|||
LocationList locs;
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
locs = locations;
|
||||
}
|
||||
|
||||
|
|
@ -638,7 +638,7 @@ Locations::first_location_after (jack_nframes_t frame)
|
|||
LocationList locs;
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
locs = locations;
|
||||
}
|
||||
|
||||
|
|
@ -662,7 +662,7 @@ Locations::first_mark_before (jack_nframes_t frame)
|
|||
LocationList locs;
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
locs = locations;
|
||||
}
|
||||
|
||||
|
|
@ -699,7 +699,7 @@ Locations::first_mark_after (jack_nframes_t frame)
|
|||
LocationList locs;
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
locs = locations;
|
||||
}
|
||||
|
||||
|
|
@ -792,7 +792,7 @@ Change
|
|||
Locations::restore_state (StateManager::State& state)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
State* lstate = dynamic_cast<State*> (&state);
|
||||
|
||||
locations = lstate->locations;
|
||||
|
|
@ -817,7 +817,7 @@ uint32_t
|
|||
Locations::num_range_markers () const
|
||||
{
|
||||
uint32_t cnt = 0;
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
for (LocationList::const_iterator i = locations.begin(); i != locations.end(); ++i) {
|
||||
if ((*i)->is_range_marker()) {
|
||||
++cnt;
|
||||
|
|
|
|||
|
|
@ -28,9 +28,10 @@
|
|||
#include <unistd.h>
|
||||
#include <float.h>
|
||||
|
||||
#include <glibmm.h>
|
||||
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/failed_constructor.h>
|
||||
#include <pbd/basename.h>
|
||||
#include <pbd/xml++.h>
|
||||
|
||||
#include <ardour/session.h>
|
||||
|
|
@ -1369,7 +1370,7 @@ Panner::state (bool full)
|
|||
|
||||
if (full) {
|
||||
if (save () == 0) {
|
||||
root->add_property (X_("automation"), PBD::basename (automation_path));
|
||||
root->add_property (X_("automation"), Glib::path_get_basename (automation_path));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -225,8 +225,8 @@ Playlist::copy_regions (RegionList& newlist) const
|
|||
void
|
||||
Playlist::init (bool hide)
|
||||
{
|
||||
atomic_set (&block_notifications, 0);
|
||||
atomic_set (&ignore_state_changes, 0);
|
||||
g_atomic_int_set (&block_notifications, 0);
|
||||
g_atomic_int_set (&ignore_state_changes, 0);
|
||||
pending_modified = false;
|
||||
pending_length = false;
|
||||
_refcnt = 0;
|
||||
|
|
@ -292,13 +292,13 @@ void
|
|||
Playlist::freeze ()
|
||||
{
|
||||
delay_notifications ();
|
||||
atomic_inc (&ignore_state_changes);
|
||||
g_atomic_int_inc (&ignore_state_changes);
|
||||
}
|
||||
|
||||
void
|
||||
Playlist::thaw ()
|
||||
{
|
||||
atomic_dec (&ignore_state_changes);
|
||||
g_atomic_int_dec_and_test (&ignore_state_changes);
|
||||
release_notifications ();
|
||||
}
|
||||
|
||||
|
|
@ -306,14 +306,14 @@ Playlist::thaw ()
|
|||
void
|
||||
Playlist::delay_notifications ()
|
||||
{
|
||||
atomic_inc (&block_notifications);
|
||||
g_atomic_int_inc (&block_notifications);
|
||||
freeze_length = _get_maximum_extent();
|
||||
}
|
||||
|
||||
void
|
||||
Playlist::release_notifications ()
|
||||
{
|
||||
if (atomic_dec_and_test(&block_notifications)) {
|
||||
if (g_atomic_int_dec_and_test (&block_notifications)) {
|
||||
flush_notifications ();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ Redirect::load_automation (string path)
|
|||
return 1;
|
||||
}
|
||||
|
||||
LockMonitor lm (_automation_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_automation_lock);
|
||||
set<uint32_t> tosave;
|
||||
parameter_automation.clear ();
|
||||
|
||||
|
|
@ -159,7 +159,7 @@ Redirect::load_automation (string path)
|
|||
int
|
||||
Redirect::save_automation (string path)
|
||||
{
|
||||
LockMonitor lm (_automation_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_automation_lock);
|
||||
string fullpath;
|
||||
|
||||
if (parameter_automation.empty()) {
|
||||
|
|
@ -268,7 +268,7 @@ Redirect::state (bool full_state)
|
|||
void
|
||||
Redirect::what_has_automation (set<uint32_t>& s) const
|
||||
{
|
||||
LockMonitor lm (_automation_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_automation_lock);
|
||||
map<uint32_t,AutomationList*>::const_iterator li;
|
||||
|
||||
for (li = parameter_automation.begin(); li != parameter_automation.end(); ++li) {
|
||||
|
|
@ -279,7 +279,7 @@ Redirect::what_has_automation (set<uint32_t>& s) const
|
|||
void
|
||||
Redirect::what_has_visible_automation (set<uint32_t>& s) const
|
||||
{
|
||||
LockMonitor lm (_automation_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_automation_lock);
|
||||
set<uint32_t>::const_iterator li;
|
||||
|
||||
for (li = visible_parameter_automation.begin(); li != visible_parameter_automation.end(); ++li) {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
#include <sigc++/bind.h>
|
||||
#include <sigc++/class_slot.h>
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
#include <pbd/xml++.h>
|
||||
|
||||
#include <ardour/region.h>
|
||||
|
|
@ -178,7 +178,7 @@ Region::restore_and_return_flags (RegionState& state)
|
|||
Change what_changed = Change (0);
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
if (_start != state._start) {
|
||||
what_changed = Change (what_changed|StartChanged);
|
||||
|
|
@ -947,7 +947,7 @@ Region::thaw (const string& why)
|
|||
Change what_changed = Change (0);
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
if (_frozen && --_frozen > 0) {
|
||||
return;
|
||||
|
|
@ -978,7 +978,7 @@ void
|
|||
Region::send_change (Change what_changed)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
if (_frozen) {
|
||||
pending_changed = Change (pending_changed|what_changed);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -235,7 +235,7 @@ Route::process_output_buffers (vector<Sample*>& bufs, uint32_t nbufs,
|
|||
declick = _pending_declick;
|
||||
|
||||
{
|
||||
TentativeLockMonitor cm (control_outs_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock cm (control_outs_lock, Glib::TRY_LOCK);
|
||||
|
||||
if (cm.locked()) {
|
||||
co = _control_outs;
|
||||
|
|
@ -245,7 +245,7 @@ Route::process_output_buffers (vector<Sample*>& bufs, uint32_t nbufs,
|
|||
}
|
||||
|
||||
{
|
||||
TentativeLockMonitor dm (declick_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock dm (declick_lock, Glib::TRY_LOCK);
|
||||
|
||||
if (dm.locked()) {
|
||||
dmg = desired_mute_gain;
|
||||
|
|
@ -330,7 +330,7 @@ Route::process_output_buffers (vector<Sample*>& bufs, uint32_t nbufs,
|
|||
-------------------------------------------------------------------------------------------------- */
|
||||
|
||||
if (with_redirects) {
|
||||
TentativeRWLockMonitor rm (redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock rm (redirect_lock, Glib::TRY_LOCK);
|
||||
if (rm.locked()) {
|
||||
if (mute_gain > 0 || !_mute_affects_pre_fader) {
|
||||
for (i = _redirects.begin(); i != _redirects.end(); ++i) {
|
||||
|
|
@ -499,7 +499,7 @@ Route::process_output_buffers (vector<Sample*>& bufs, uint32_t nbufs,
|
|||
|
||||
if (post_fader_work) {
|
||||
|
||||
TentativeRWLockMonitor rm (redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock rm (redirect_lock, Glib::TRY_LOCK);
|
||||
if (rm.locked()) {
|
||||
if (mute_gain > 0 || !_mute_affects_post_fader) {
|
||||
for (i = _redirects.begin(); i != _redirects.end(); ++i) {
|
||||
|
|
@ -723,7 +723,7 @@ Route::set_solo (bool yn, void *src)
|
|||
void
|
||||
Route::set_solo_mute (bool yn)
|
||||
{
|
||||
LockMonitor lm (declick_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (declick_lock);
|
||||
|
||||
/* Called by Session in response to another Route being soloed.
|
||||
*/
|
||||
|
|
@ -757,7 +757,7 @@ Route::set_mute (bool yn, void *src)
|
|||
_midi_mute_control.send_feedback (_muted);
|
||||
}
|
||||
|
||||
LockMonitor lm (declick_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (declick_lock);
|
||||
desired_mute_gain = (yn?0.0f:1.0f);
|
||||
}
|
||||
}
|
||||
|
|
@ -772,7 +772,7 @@ Route::add_redirect (Redirect *redirect, void *src, uint32_t* err_streams)
|
|||
}
|
||||
|
||||
{
|
||||
RWLockMonitor lm (redirect_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock lm (redirect_lock);
|
||||
|
||||
PluginInsert* pi;
|
||||
PortInsert* porti;
|
||||
|
|
@ -845,7 +845,7 @@ Route::add_redirects (const RedirectList& others, void *src, uint32_t* err_strea
|
|||
}
|
||||
|
||||
{
|
||||
RWLockMonitor lm (redirect_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock lm (redirect_lock);
|
||||
|
||||
RedirectList::iterator existing_end = _redirects.end();
|
||||
--existing_end;
|
||||
|
|
@ -904,7 +904,7 @@ Route::clear_redirects (void *src)
|
|||
}
|
||||
|
||||
{
|
||||
RWLockMonitor lm (redirect_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock lm (redirect_lock);
|
||||
|
||||
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
|
||||
delete *i;
|
||||
|
|
@ -934,7 +934,7 @@ Route::remove_redirect (Redirect *redirect, void *src, uint32_t* err_streams)
|
|||
redirect_max_outs = 0;
|
||||
|
||||
{
|
||||
RWLockMonitor lm (redirect_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock lm (redirect_lock);
|
||||
RedirectList::iterator i;
|
||||
bool removed = false;
|
||||
|
||||
|
|
@ -1013,7 +1013,7 @@ Route::remove_redirect (Redirect *redirect, void *src, uint32_t* err_streams)
|
|||
int
|
||||
Route::reset_plugin_counts (uint32_t* lpc)
|
||||
{
|
||||
RWLockMonitor lm (redirect_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock lm (redirect_lock);
|
||||
return _reset_plugin_counts (lpc);
|
||||
}
|
||||
|
||||
|
|
@ -1183,7 +1183,7 @@ Route::copy_redirects (const Route& other, Placement placement, uint32_t* err_st
|
|||
RedirectList to_be_deleted;
|
||||
|
||||
{
|
||||
RWLockMonitor lm (redirect_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock lm (redirect_lock);
|
||||
RedirectList::iterator tmp;
|
||||
RedirectList the_copy;
|
||||
|
||||
|
|
@ -1262,7 +1262,7 @@ Route::copy_redirects (const Route& other, Placement placement, uint32_t* err_st
|
|||
void
|
||||
Route::all_redirects_flip ()
|
||||
{
|
||||
RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (redirect_lock);
|
||||
|
||||
if (_redirects.empty()) {
|
||||
return;
|
||||
|
|
@ -1278,7 +1278,7 @@ Route::all_redirects_flip ()
|
|||
void
|
||||
Route::all_redirects_active (bool state)
|
||||
{
|
||||
RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (redirect_lock);
|
||||
|
||||
if (_redirects.empty()) {
|
||||
return;
|
||||
|
|
@ -1300,7 +1300,7 @@ Route::sort_redirects (uint32_t* err_streams)
|
|||
{
|
||||
{
|
||||
RedirectSorter comparator;
|
||||
RWLockMonitor lm (redirect_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock lm (redirect_lock);
|
||||
uint32_t old_rmo = redirect_max_outs;
|
||||
|
||||
/* the sweet power of C++ ... */
|
||||
|
|
@ -1779,7 +1779,7 @@ Route::silence (jack_nframes_t nframes, jack_nframes_t offset)
|
|||
}
|
||||
|
||||
{
|
||||
TentativeRWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (redirect_lock, Glib::TRY_LOCK);
|
||||
|
||||
if (lm.locked()) {
|
||||
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
|
||||
|
|
@ -1804,7 +1804,7 @@ Route::silence (jack_nframes_t nframes, jack_nframes_t offset)
|
|||
int
|
||||
Route::set_control_outs (const vector<string>& ports)
|
||||
{
|
||||
LockMonitor lm (control_outs_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (control_outs_lock);
|
||||
vector<string>::const_iterator i;
|
||||
|
||||
if (_control_outs) {
|
||||
|
|
@ -2007,7 +2007,7 @@ Route::transport_stopped (bool abort_ignored, bool did_locate, bool can_flush_re
|
|||
jack_nframes_t now = _session.transport_frame();
|
||||
|
||||
{
|
||||
RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (redirect_lock);
|
||||
|
||||
if (!did_locate) {
|
||||
automation_snapshot (now);
|
||||
|
|
@ -2126,7 +2126,7 @@ Route::roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t
|
|||
bool can_record, bool rec_monitors_input)
|
||||
{
|
||||
{
|
||||
TentativeRWLockMonitor lm(redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (redirect_lock, Glib::TRY_LOCK);
|
||||
if (lm.locked()) {
|
||||
// automation snapshot can also be called from the non-rt context
|
||||
// and it uses the redirect list, so we take the lock out here
|
||||
|
|
@ -2150,7 +2150,7 @@ Route::roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t
|
|||
apply_gain_automation = false;
|
||||
|
||||
{
|
||||
TentativeLockMonitor am (automation_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock am (automation_lock, Glib::TRY_LOCK);
|
||||
|
||||
if (am.locked() && _session.transport_rolling()) {
|
||||
|
||||
|
|
@ -2242,7 +2242,7 @@ Route::send_all_midi_feedback ()
|
|||
if (_session.get_midi_feedback()) {
|
||||
|
||||
{
|
||||
RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (redirect_lock);
|
||||
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
|
||||
(*i)->send_all_midi_feedback ();
|
||||
}
|
||||
|
|
@ -2262,7 +2262,7 @@ Route::write_midi_feedback (MIDI::byte* buf, int32_t& bufsize)
|
|||
buf = _midi_mute_control.write_feedback (buf, bufsize, _muted);
|
||||
|
||||
{
|
||||
RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (redirect_lock);
|
||||
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
|
||||
buf = (*i)->write_midi_feedback (buf, bufsize);
|
||||
}
|
||||
|
|
@ -2278,7 +2278,7 @@ Route::flush_redirects ()
|
|||
this is called from the RT audio thread.
|
||||
*/
|
||||
|
||||
RWLockMonitor lm (redirect_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (redirect_lock);
|
||||
|
||||
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
|
||||
(*i)->deactivate ();
|
||||
|
|
|
|||
|
|
@ -32,12 +32,13 @@
|
|||
#include <sigc++/bind.h>
|
||||
#include <sigc++/retype.h>
|
||||
|
||||
#include <glibmm.h>
|
||||
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
#include <pbd/pathscanner.h>
|
||||
#include <pbd/stl_delete.h>
|
||||
#include <pbd/basename.h>
|
||||
#include <pbd/dirname.h>
|
||||
|
||||
#include <ardour/audioengine.h>
|
||||
#include <ardour/configuration.h>
|
||||
|
|
@ -64,7 +65,10 @@
|
|||
#include <ardour/crossfade.h>
|
||||
#include <ardour/playlist.h>
|
||||
#include <ardour/click.h>
|
||||
|
||||
#ifdef HAVE_LIBLO
|
||||
#include <ardour/osc.h>
|
||||
#endif
|
||||
|
||||
#include "i18n.h"
|
||||
|
||||
|
|
@ -550,7 +554,7 @@ Session::set_worst_io_latencies (bool take_lock)
|
|||
}
|
||||
|
||||
if (take_lock) {
|
||||
route_lock.read_lock ();
|
||||
route_lock.reader_lock ();
|
||||
}
|
||||
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
|
|
@ -559,7 +563,7 @@ Session::set_worst_io_latencies (bool take_lock)
|
|||
}
|
||||
|
||||
if (take_lock) {
|
||||
route_lock.unlock ();
|
||||
route_lock.reader_unlock ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -794,9 +798,11 @@ Session::when_engine_running ()
|
|||
|
||||
_engine.set_session (this);
|
||||
|
||||
#ifdef HAVE_LIBLO
|
||||
/* and to OSC */
|
||||
|
||||
osc->set_session (*this);
|
||||
#endif
|
||||
|
||||
_state_of_the_state = Clean;
|
||||
|
||||
|
|
@ -954,7 +960,7 @@ Session::set_auto_input (bool yn)
|
|||
a non-tentative rwlock here, because the action must occur.
|
||||
The rarity and short potential lock duration makes this "OK"
|
||||
*/
|
||||
RWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock);
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if ((*i)->record_enabled ()) {
|
||||
//cerr << "switching to input = " << !auto_input << __FILE__ << __LINE__ << endl << endl;
|
||||
|
|
@ -972,7 +978,7 @@ void
|
|||
Session::reset_input_monitor_state ()
|
||||
{
|
||||
if (transport_rolling()) {
|
||||
RWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock);
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if ((*i)->record_enabled ()) {
|
||||
//cerr << "switching to input = " << !auto_input << __FILE__ << __LINE__ << endl << endl;
|
||||
|
|
@ -980,7 +986,7 @@ Session::reset_input_monitor_state ()
|
|||
}
|
||||
}
|
||||
} else {
|
||||
RWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock);
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if ((*i)->record_enabled ()) {
|
||||
//cerr << "switching to input = " << !auto_input << __FILE__ << __LINE__ << endl << endl;
|
||||
|
|
@ -1247,8 +1253,8 @@ void
|
|||
Session::enable_record ()
|
||||
{
|
||||
/* XXX really atomic compare+swap here */
|
||||
if (atomic_read (&_record_status) != Recording) {
|
||||
atomic_set (&_record_status, Recording);
|
||||
if (g_atomic_int_get (&_record_status) != Recording) {
|
||||
g_atomic_int_set (&_record_status, Recording);
|
||||
_last_record_location = _transport_frame;
|
||||
send_mmc_in_another_thread (MIDI::MachineControl::cmdRecordStrobe);
|
||||
|
||||
|
|
@ -1257,7 +1263,7 @@ Session::enable_record ()
|
|||
a non-tentative rwlock here, because the action must occur.
|
||||
The rarity and short potential lock duration makes this "OK"
|
||||
*/
|
||||
RWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock);
|
||||
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if ((*i)->record_enabled ()) {
|
||||
|
|
@ -1275,13 +1281,13 @@ Session::disable_record (bool rt_context, bool force)
|
|||
{
|
||||
RecordState rs;
|
||||
|
||||
if ((rs = (RecordState) atomic_read (&_record_status)) != Disabled) {
|
||||
if ((rs = (RecordState) g_atomic_int_get (&_record_status)) != Disabled) {
|
||||
|
||||
if (!Config->get_latched_record_enable () || force) {
|
||||
atomic_set (&_record_status, Disabled);
|
||||
g_atomic_int_set (&_record_status, Disabled);
|
||||
} else {
|
||||
if (rs == Recording) {
|
||||
atomic_set (&_record_status, Enabled);
|
||||
g_atomic_int_set (&_record_status, Enabled);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1292,7 +1298,7 @@ Session::disable_record (bool rt_context, bool force)
|
|||
a non-tentative rwlock here, because the action must occur.
|
||||
The rarity and short potential lock duration makes this "OK"
|
||||
*/
|
||||
RWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock);
|
||||
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if ((*i)->record_enabled ()) {
|
||||
|
|
@ -1312,14 +1318,14 @@ Session::disable_record (bool rt_context, bool force)
|
|||
void
|
||||
Session::step_back_from_record ()
|
||||
{
|
||||
atomic_set (&_record_status, Enabled);
|
||||
g_atomic_int_set (&_record_status, Enabled);
|
||||
|
||||
if (Config->get_use_hardware_monitoring()) {
|
||||
/* Even though this can be called from RT context we are using
|
||||
a non-tentative rwlock here, because the action must occur.
|
||||
The rarity and short potential lock duration makes this "OK"
|
||||
*/
|
||||
RWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock);
|
||||
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if (auto_input && (*i)->record_enabled ()) {
|
||||
|
|
@ -1333,7 +1339,7 @@ Session::step_back_from_record ()
|
|||
void
|
||||
Session::maybe_enable_record ()
|
||||
{
|
||||
atomic_set (&_record_status, Enabled);
|
||||
g_atomic_int_set (&_record_status, Enabled);
|
||||
|
||||
/* XXX this save should really happen in another thread. its needed so that
|
||||
pending capture state can be recovered if we crash.
|
||||
|
|
@ -1441,8 +1447,8 @@ Session::set_block_size (jack_nframes_t nframes)
|
|||
*/
|
||||
|
||||
{
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
RWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock);
|
||||
vector<Sample*>::iterator i;
|
||||
uint32_t np;
|
||||
|
||||
|
|
@ -1519,7 +1525,7 @@ Session::set_default_fade (float steepness, float fade_msecs)
|
|||
|
||||
{
|
||||
// jlc, WTF is this!
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
AudioRegion::set_default_fade (steepness, fade_frames);
|
||||
}
|
||||
|
||||
|
|
@ -1670,7 +1676,7 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod
|
|||
/* count existing audio tracks */
|
||||
|
||||
{
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
if (dynamic_cast<AudioTrack*>(*i) != 0) {
|
||||
if (!(*i)->hidden()) {
|
||||
|
|
@ -1786,7 +1792,7 @@ Session::new_audio_route (int input_channels, int output_channels)
|
|||
/* count existing audio busses */
|
||||
|
||||
{
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
if (dynamic_cast<AudioTrack*>(*i) == 0) {
|
||||
if (!(*i)->hidden()) {
|
||||
|
|
@ -1869,7 +1875,7 @@ void
|
|||
Session::add_route (Route* route)
|
||||
{
|
||||
{
|
||||
RWLockMonitor lm (route_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock lm (route_lock);
|
||||
routes.push_front (route);
|
||||
resort_routes(0);
|
||||
}
|
||||
|
|
@ -1900,7 +1906,7 @@ Session::add_diskstream (DiskStream* dstream)
|
|||
dstream->do_refill(0, 0, 0);
|
||||
|
||||
{
|
||||
RWLockMonitor lm (diskstream_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock lm (diskstream_lock);
|
||||
diskstreams.push_back (dstream);
|
||||
}
|
||||
|
||||
|
|
@ -1928,7 +1934,7 @@ void
|
|||
Session::remove_route (Route& route)
|
||||
{
|
||||
{
|
||||
RWLockMonitor lm (route_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock lm (route_lock);
|
||||
routes.remove (&route);
|
||||
|
||||
/* deleting the master out seems like a dumb
|
||||
|
|
@ -1956,7 +1962,7 @@ Session::remove_route (Route& route)
|
|||
}
|
||||
|
||||
{
|
||||
RWLockMonitor lm (diskstream_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock lm (diskstream_lock);
|
||||
|
||||
AudioTrack* at;
|
||||
|
||||
|
|
@ -1992,7 +1998,7 @@ Session::route_solo_changed (void* src, Route* route)
|
|||
return;
|
||||
}
|
||||
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
bool is_track;
|
||||
|
||||
is_track = (dynamic_cast<AudioTrack*>(route) != 0);
|
||||
|
|
@ -2191,14 +2197,14 @@ Session::catch_up_on_solo ()
|
|||
basis, but needs the global overview that only the session
|
||||
has.
|
||||
*/
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
update_route_solo_state();
|
||||
}
|
||||
|
||||
Route *
|
||||
Session::route_by_name (string name)
|
||||
{
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
if ((*i)->name() == name) {
|
||||
|
|
@ -2212,7 +2218,7 @@ Session::route_by_name (string name)
|
|||
Route *
|
||||
Session::route_by_remote_id (uint32_t id)
|
||||
{
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
if ((*i)->remote_control_id() == id) {
|
||||
|
|
@ -2262,7 +2268,7 @@ Session::get_maximum_extent () const
|
|||
DiskStream *
|
||||
Session::diskstream_by_name (string name)
|
||||
{
|
||||
RWLockMonitor lm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (diskstream_lock);
|
||||
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if ((*i)->name() == name) {
|
||||
|
|
@ -2276,7 +2282,7 @@ Session::diskstream_by_name (string name)
|
|||
DiskStream *
|
||||
Session::diskstream_by_id (id_t id)
|
||||
{
|
||||
RWLockMonitor lm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (diskstream_lock);
|
||||
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if ((*i)->id() == id) {
|
||||
|
|
@ -2348,7 +2354,7 @@ Session::region_name (string& result, string base, bool newlevel) const
|
|||
|
||||
if (base == "") {
|
||||
|
||||
LockMonitor lm (region_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (region_lock);
|
||||
|
||||
snprintf (buf, sizeof (buf), "%d", (int)audio_regions.size() + 1);
|
||||
|
||||
|
|
@ -2376,7 +2382,7 @@ Session::region_name (string& result, string base, bool newlevel) const
|
|||
bool name_taken = true;
|
||||
|
||||
{
|
||||
LockMonitor lm (region_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (region_lock);
|
||||
|
||||
for (int n = 1; n < 5000; ++n) {
|
||||
|
||||
|
|
@ -2415,7 +2421,7 @@ Session::add_region (Region* region)
|
|||
bool added = false;
|
||||
|
||||
{
|
||||
LockMonitor lm (region_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (region_lock);
|
||||
|
||||
if ((ar = dynamic_cast<AudioRegion*> (region)) != 0) {
|
||||
|
||||
|
|
@ -2492,7 +2498,7 @@ Session::remove_region (Region* region)
|
|||
bool removed = false;
|
||||
|
||||
{
|
||||
LockMonitor lm (region_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (region_lock);
|
||||
|
||||
if ((ar = dynamic_cast<AudioRegion*> (region)) != 0) {
|
||||
if ((i = audio_regions.find (region->id())) != audio_regions.end()) {
|
||||
|
|
@ -2523,7 +2529,7 @@ Session::find_whole_file_parent (AudioRegion& child)
|
|||
{
|
||||
AudioRegionList::iterator i;
|
||||
AudioRegion* region;
|
||||
LockMonitor lm (region_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (region_lock);
|
||||
|
||||
for (i = audio_regions.begin(); i != audio_regions.end(); ++i) {
|
||||
|
||||
|
|
@ -2599,7 +2605,7 @@ Session::remove_last_capture ()
|
|||
{
|
||||
list<Region*> r;
|
||||
|
||||
RWLockMonitor lm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (diskstream_lock);
|
||||
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
list<Region*>& l = (*i)->last_capture_regions();
|
||||
|
|
@ -2629,7 +2635,7 @@ Session::add_source (Source* source)
|
|||
pair<SourceList::key_type, SourceList::mapped_type> entry;
|
||||
|
||||
{
|
||||
LockMonitor lm (source_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (source_lock);
|
||||
entry.first = source->id();
|
||||
entry.second = source;
|
||||
sources.insert (entry);
|
||||
|
|
@ -2647,7 +2653,7 @@ Session::remove_source (Source* source)
|
|||
SourceList::iterator i;
|
||||
|
||||
{
|
||||
LockMonitor lm (source_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (source_lock);
|
||||
|
||||
if ((i = sources.find (source->id())) != sources.end()) {
|
||||
sources.erase (i);
|
||||
|
|
@ -2669,7 +2675,7 @@ Session::remove_source (Source* source)
|
|||
Source *
|
||||
Session::get_source (ARDOUR::id_t id)
|
||||
{
|
||||
LockMonitor lm (source_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (source_lock);
|
||||
SourceList::iterator i;
|
||||
Source* source = 0;
|
||||
|
||||
|
|
@ -2687,8 +2693,8 @@ Session::peak_path_from_audio_path (string audio_path)
|
|||
|
||||
string res;
|
||||
|
||||
res = PBD::dirname (audio_path);
|
||||
res = PBD::dirname (res);
|
||||
res = Glib::path_get_dirname (audio_path);
|
||||
res = Glib::path_get_dirname (res);
|
||||
res += '/';
|
||||
res += peak_dir_name;
|
||||
res += '/';
|
||||
|
|
@ -2702,7 +2708,7 @@ string
|
|||
Session::change_audio_path_by_name (string path, string oldname, string newname, bool destructive)
|
||||
{
|
||||
string look_for;
|
||||
string old_basename = basename_nosuffix (oldname);
|
||||
string old_basename = PBD::basename_nosuffix (oldname);
|
||||
string new_legalized = legalize_for_path (newname);
|
||||
|
||||
/* note: we know (or assume) the old path is already valid */
|
||||
|
|
@ -2915,7 +2921,7 @@ Session::get_playlist (string name)
|
|||
Playlist *
|
||||
Session::playlist_by_name (string name)
|
||||
{
|
||||
LockMonitor lm (playlist_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (playlist_lock);
|
||||
for (PlaylistList::iterator i = playlists.begin(); i != playlists.end(); ++i) {
|
||||
if ((*i)->name() == name) {
|
||||
return* i;
|
||||
|
|
@ -2937,7 +2943,7 @@ Session::add_playlist (Playlist* playlist)
|
|||
}
|
||||
|
||||
{
|
||||
LockMonitor lm (playlist_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (playlist_lock);
|
||||
if (find (playlists.begin(), playlists.end(), playlist) == playlists.end()) {
|
||||
playlists.insert (playlists.begin(), playlist);
|
||||
// playlist->ref();
|
||||
|
|
@ -2957,7 +2963,7 @@ Session::track_playlist (Playlist* pl, bool inuse)
|
|||
PlaylistList::iterator x;
|
||||
|
||||
{
|
||||
LockMonitor lm (playlist_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (playlist_lock);
|
||||
|
||||
if (!inuse) {
|
||||
//cerr << "shifting playlist to unused: " << pl->name() << endl;
|
||||
|
|
@ -2989,7 +2995,7 @@ Session::remove_playlist (Playlist* playlist)
|
|||
}
|
||||
|
||||
{
|
||||
LockMonitor lm (playlist_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (playlist_lock);
|
||||
// cerr << "removing playlist: " << playlist->name() << endl;
|
||||
|
||||
PlaylistList::iterator i;
|
||||
|
|
@ -3105,7 +3111,7 @@ void
|
|||
Session::set_all_solo (bool yn)
|
||||
{
|
||||
{
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
if (!(*i)->hidden()) {
|
||||
|
|
@ -3121,7 +3127,7 @@ void
|
|||
Session::set_all_mute (bool yn)
|
||||
{
|
||||
{
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
if (!(*i)->hidden()) {
|
||||
|
|
@ -3136,7 +3142,7 @@ Session::set_all_mute (bool yn)
|
|||
uint32_t
|
||||
Session::n_diskstreams () const
|
||||
{
|
||||
RWLockMonitor lm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (diskstream_lock);
|
||||
uint32_t n = 0;
|
||||
|
||||
for (DiskStreamList::const_iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
|
|
@ -3150,7 +3156,7 @@ Session::n_diskstreams () const
|
|||
void
|
||||
Session::foreach_diskstream (void (DiskStream::*func)(void))
|
||||
{
|
||||
RWLockMonitor lm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (diskstream_lock);
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if (!(*i)->hidden()) {
|
||||
((*i)->*func)();
|
||||
|
|
@ -3169,8 +3175,8 @@ Session::graph_reordered ()
|
|||
return;
|
||||
}
|
||||
|
||||
RWLockMonitor lm1 (route_lock, true, __LINE__, __FILE__);
|
||||
RWLockMonitor lm2 (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock lm1 (route_lock);
|
||||
Glib::RWLock::ReaderLock lm2 (diskstream_lock);
|
||||
|
||||
resort_routes (0);
|
||||
|
||||
|
|
@ -3198,7 +3204,7 @@ Session::record_enable_all ()
|
|||
void
|
||||
Session::record_enable_change_all (bool yn)
|
||||
{
|
||||
RWLockMonitor lm1 (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm1 (route_lock);
|
||||
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
AudioTrack* at;
|
||||
|
|
@ -3283,7 +3289,7 @@ void
|
|||
Session::add_connection (ARDOUR::Connection* connection)
|
||||
{
|
||||
{
|
||||
LockMonitor (connection_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock guard (connection_lock);
|
||||
_connections.push_back (connection);
|
||||
}
|
||||
|
||||
|
|
@ -3298,7 +3304,7 @@ Session::remove_connection (ARDOUR::Connection* connection)
|
|||
bool removed = false;
|
||||
|
||||
{
|
||||
LockMonitor (connection_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock guard (connection_lock);
|
||||
ConnectionList::iterator i = find (_connections.begin(), _connections.end(), connection);
|
||||
|
||||
if (i != _connections.end()) {
|
||||
|
|
@ -3317,7 +3323,7 @@ Session::remove_connection (ARDOUR::Connection* connection)
|
|||
ARDOUR::Connection *
|
||||
Session::connection_by_name (string name) const
|
||||
{
|
||||
LockMonitor lm (connection_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (connection_lock);
|
||||
|
||||
for (ConnectionList::const_iterator i = _connections.begin(); i != _connections.end(); ++i) {
|
||||
if ((*i)->name() == name) {
|
||||
|
|
@ -3334,7 +3340,7 @@ Session::set_edit_mode (EditMode mode)
|
|||
_edit_mode = mode;
|
||||
|
||||
{
|
||||
LockMonitor lm (playlist_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (playlist_lock);
|
||||
|
||||
for (PlaylistList::iterator i = playlists.begin(); i != playlists.end(); ++i) {
|
||||
(*i)->set_edit_mode (mode);
|
||||
|
|
@ -3409,7 +3415,7 @@ Session::next_insert_name ()
|
|||
NamedSelection *
|
||||
Session::named_selection_by_name (string name)
|
||||
{
|
||||
LockMonitor lm (named_selection_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (named_selection_lock);
|
||||
for (NamedSelectionList::iterator i = named_selections.begin(); i != named_selections.end(); ++i) {
|
||||
if ((*i)->name == name) {
|
||||
return* i;
|
||||
|
|
@ -3422,7 +3428,7 @@ void
|
|||
Session::add_named_selection (NamedSelection* named_selection)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (named_selection_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (named_selection_lock);
|
||||
named_selections.insert (named_selections.begin(), named_selection);
|
||||
}
|
||||
|
||||
|
|
@ -3437,7 +3443,7 @@ Session::remove_named_selection (NamedSelection* named_selection)
|
|||
bool removed = false;
|
||||
|
||||
{
|
||||
LockMonitor lm (named_selection_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (named_selection_lock);
|
||||
|
||||
NamedSelectionList::iterator i = find (named_selections.begin(), named_selections.end(), named_selection);
|
||||
|
||||
|
|
@ -3459,7 +3465,7 @@ Session::reset_native_file_format ()
|
|||
{
|
||||
// jlc - WHY take routelock?
|
||||
//RWLockMonitor lm1 (route_lock, true, __LINE__, __FILE__);
|
||||
RWLockMonitor lm2 (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm2 (diskstream_lock);
|
||||
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
(*i)->reset_write_sources (false);
|
||||
|
|
@ -3469,7 +3475,7 @@ Session::reset_native_file_format ()
|
|||
bool
|
||||
Session::route_name_unique (string n) const
|
||||
{
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
|
||||
for (RouteList::const_iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
if ((*i)->name() == n) {
|
||||
|
|
@ -3489,7 +3495,7 @@ Session::remove_file_source (FileSource& fs)
|
|||
uint32_t
|
||||
Session::n_playlists () const
|
||||
{
|
||||
LockMonitor lm (playlist_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (playlist_lock);
|
||||
return playlists.size();
|
||||
}
|
||||
|
||||
|
|
@ -3538,7 +3544,7 @@ Session::add_instant_xml (XMLNode& node, const std::string& dir)
|
|||
int
|
||||
Session::freeze (InterThreadInfo& itt)
|
||||
{
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
|
||||
|
|
@ -3573,7 +3579,7 @@ Session::write_one_track (AudioTrack& track, jack_nframes_t start, jack_nframes_
|
|||
char * workbuf = 0;
|
||||
const jack_nframes_t chunk_size = (256 * 1024)/4;
|
||||
|
||||
atomic_set (&processing_prohibited, 1);
|
||||
g_atomic_int_set (&processing_prohibited, 1);
|
||||
|
||||
/* call tree *MUST* hold route_lock */
|
||||
|
||||
|
|
@ -3694,7 +3700,7 @@ Session::write_one_track (AudioTrack& track, jack_nframes_t start, jack_nframes_
|
|||
delete [] workbuf;
|
||||
}
|
||||
|
||||
atomic_set (&processing_prohibited, 0);
|
||||
g_atomic_int_set (&processing_prohibited, 0);
|
||||
|
||||
itt.done = true;
|
||||
|
||||
|
|
@ -3714,7 +3720,7 @@ uint32_t
|
|||
Session::ntracks () const
|
||||
{
|
||||
uint32_t n = 0;
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
|
||||
for (RouteList::const_iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
if (dynamic_cast<AudioTrack*> (*i)) {
|
||||
|
|
@ -3729,7 +3735,7 @@ uint32_t
|
|||
Session::nbusses () const
|
||||
{
|
||||
uint32_t n = 0;
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
|
||||
for (RouteList::const_iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
if (dynamic_cast<AudioTrack*> (*i) == 0) {
|
||||
|
|
|
|||
|
|
@ -26,8 +26,9 @@
|
|||
#include <fcntl.h>
|
||||
#include <poll.h>
|
||||
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <pbd/pthread_utils.h>
|
||||
|
||||
#include <ardour/configuration.h>
|
||||
|
|
@ -73,8 +74,6 @@ Session::start_butler_thread ()
|
|||
|
||||
Crossfade::set_buffer_size (dstream_buffer_size);
|
||||
|
||||
pthread_cond_init (&butler_paused, 0);
|
||||
|
||||
butler_should_run = false;
|
||||
|
||||
if (pipe (butler_request_pipe)) {
|
||||
|
|
@ -114,7 +113,7 @@ Session::terminate_butler_thread ()
|
|||
void
|
||||
Session::schedule_butler_transport_work ()
|
||||
{
|
||||
atomic_inc (&butler_should_do_transport_work);
|
||||
g_atomic_int_inc (&butler_should_do_transport_work);
|
||||
summon_butler ();
|
||||
}
|
||||
|
||||
|
|
@ -135,19 +134,19 @@ Session::summon_butler ()
|
|||
void
|
||||
Session::stop_butler ()
|
||||
{
|
||||
LockMonitor lm (butler_request_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (butler_request_lock);
|
||||
char c = ButlerRequest::Pause;
|
||||
::write (butler_request_pipe[1], &c, 1);
|
||||
pthread_cond_wait (&butler_paused, butler_request_lock.mutex());
|
||||
butler_paused.wait(butler_request_lock);
|
||||
}
|
||||
|
||||
void
|
||||
Session::wait_till_butler_finished ()
|
||||
{
|
||||
LockMonitor lm (butler_request_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (butler_request_lock);
|
||||
char c = ButlerRequest::Wake;
|
||||
::write (butler_request_pipe[1], &c, 1);
|
||||
pthread_cond_wait (&butler_paused, butler_request_lock.mutex());
|
||||
butler_paused.wait(butler_request_lock);
|
||||
}
|
||||
|
||||
void *
|
||||
|
|
@ -158,7 +157,7 @@ Session::_butler_thread_work (void* arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#define transport_work_requested() atomic_read(&butler_should_do_transport_work)
|
||||
#define transport_work_requested() g_atomic_int_get(&butler_should_do_transport_work)
|
||||
|
||||
void *
|
||||
Session::butler_thread_work ()
|
||||
|
|
@ -256,7 +255,7 @@ Session::butler_thread_work ()
|
|||
|
||||
gettimeofday (&begin, 0);
|
||||
|
||||
RWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock);
|
||||
|
||||
for (i = diskstreams.begin(); !transport_work_requested() && butler_should_run && i != diskstreams.end(); ++i) {
|
||||
|
||||
|
|
@ -355,7 +354,7 @@ Session::butler_thread_work ()
|
|||
|
||||
|
||||
{
|
||||
LockMonitor lm (butler_request_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (butler_request_lock);
|
||||
|
||||
if (butler_should_run && (disk_work_outstanding || transport_work_requested())) {
|
||||
// for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
|
|
@ -365,7 +364,7 @@ Session::butler_thread_work ()
|
|||
continue;
|
||||
}
|
||||
|
||||
pthread_cond_signal (&butler_paused);
|
||||
butler_paused.signal();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -398,7 +397,7 @@ Session::overwrite_some_buffers (DiskStream* ds)
|
|||
|
||||
} else {
|
||||
|
||||
RWLockMonitor dm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dm (diskstream_lock);
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
(*i)->set_pending_overwrite (true);
|
||||
}
|
||||
|
|
@ -429,36 +428,36 @@ Session::write_data_rate () const
|
|||
uint32_t
|
||||
Session::playback_load ()
|
||||
{
|
||||
return (uint32_t) atomic_read (&_playback_load);
|
||||
return (uint32_t) g_atomic_int_get (&_playback_load);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
Session::capture_load ()
|
||||
{
|
||||
return (uint32_t) atomic_read (&_capture_load);
|
||||
return (uint32_t) g_atomic_int_get (&_capture_load);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
Session::playback_load_min ()
|
||||
{
|
||||
return (uint32_t) atomic_read (&_playback_load_min);
|
||||
return (uint32_t) g_atomic_int_get (&_playback_load_min);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
Session::capture_load_min ()
|
||||
{
|
||||
return (uint32_t) atomic_read (&_capture_load_min);
|
||||
return (uint32_t) g_atomic_int_get (&_capture_load_min);
|
||||
}
|
||||
|
||||
void
|
||||
Session::reset_capture_load_min ()
|
||||
{
|
||||
atomic_set (&_capture_load_min, 100);
|
||||
g_atomic_int_set (&_capture_load_min, 100);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Session::reset_playback_load_min ()
|
||||
{
|
||||
atomic_set (&_playback_load_min, 100);
|
||||
g_atomic_int_set (&_playback_load_min, 100);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ Session::click (jack_nframes_t start, jack_nframes_t nframes, jack_nframes_t off
|
|||
return;
|
||||
}
|
||||
|
||||
TentativeRWLockMonitor clickm (click_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock clickm (click_lock, Glib::TRY_LOCK);
|
||||
|
||||
if (!clickm.locked() || _transport_speed != 1.0 || !_clicking || click_data == 0) {
|
||||
_click_io->silence (nframes, offset);
|
||||
|
|
@ -209,7 +209,7 @@ Session::setup_click_sounds (int which)
|
|||
void
|
||||
Session::clear_clicks ()
|
||||
{
|
||||
RWLockMonitor lm (click_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock lm (click_lock);
|
||||
|
||||
for (Clicks::iterator i = clicks.begin(); i != clicks.end(); ++i) {
|
||||
delete *i;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
#include <ardour/timestamps.h>
|
||||
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <ardour/ardour.h>
|
||||
#include <ardour/session.h>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
#include <sigc++/bind.h>
|
||||
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <ardour/gdither.h>
|
||||
#include <ardour/timestamps.h>
|
||||
|
|
@ -485,7 +485,7 @@ Session::prepare_to_export (AudioExportSpecification& spec)
|
|||
/* take everyone out of awrite to avoid disasters */
|
||||
|
||||
{
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
(*i)->protect_automation ();
|
||||
}
|
||||
|
|
@ -494,7 +494,7 @@ Session::prepare_to_export (AudioExportSpecification& spec)
|
|||
/* get everyone to the right position */
|
||||
|
||||
{
|
||||
RWLockMonitor lm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (diskstream_lock);
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if ((*i)-> seek (spec.start_frame, true)) {
|
||||
error << string_compose (_("%1: cannot seek to %2 for export"),
|
||||
|
|
@ -524,7 +524,7 @@ Session::prepare_to_export (AudioExportSpecification& spec)
|
|||
|
||||
set_transport_speed (1.0, false);
|
||||
butler_transport_work ();
|
||||
atomic_set (&butler_should_do_transport_work, 0);
|
||||
g_atomic_int_set (&butler_should_do_transport_work, 0);
|
||||
post_transport ();
|
||||
|
||||
/* we are ready to go ... */
|
||||
|
|
|
|||
|
|
@ -28,8 +28,10 @@
|
|||
#include <midi++/types.h>
|
||||
#include <midi++/port.h>
|
||||
#include <midi++/manager.h>
|
||||
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <pbd/pthread_utils.h>
|
||||
|
||||
#include <ardour/configuration.h>
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
#include <midi++/port.h>
|
||||
#include <midi++/manager.h>
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
#include <pbd/pthread_utils.h>
|
||||
|
||||
#include <ardour/configuration.h>
|
||||
|
|
@ -110,7 +110,7 @@ Session::set_midi_control (bool yn)
|
|||
poke_midi_thread ();
|
||||
|
||||
if (_midi_port) {
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock guard (route_lock);
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
(*i)->reset_midi_control (_midi_port, midi_control);
|
||||
}
|
||||
|
|
@ -601,7 +601,7 @@ Session::mmc_record_strobe (MIDI::MachineControl &mmc)
|
|||
*/
|
||||
|
||||
save_state ("", true);
|
||||
atomic_set (&_record_status, Enabled);
|
||||
g_atomic_int_set (&_record_status, Enabled);
|
||||
RecordStateChanged (); /* EMIT SIGNAL */
|
||||
|
||||
request_transport_speed (1.0);
|
||||
|
|
@ -783,7 +783,7 @@ Session::mmc_record_enable (MIDI::MachineControl &mmc, size_t trk, bool enabled)
|
|||
if (mmc_control) {
|
||||
|
||||
RouteList::iterator i;
|
||||
RWLockMonitor (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock guard (route_lock);
|
||||
|
||||
for (i = routes.begin(); i != routes.end(); ++i) {
|
||||
AudioTrack *at;
|
||||
|
|
@ -908,7 +908,7 @@ Session::send_full_time_code ()
|
|||
msg[8] = smpte.frames;
|
||||
|
||||
{
|
||||
LockMonitor lm (midi_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (midi_lock);
|
||||
|
||||
if (_mtc_port->midimsg (msg, sizeof (msg))) {
|
||||
error << _("Session: could not send full MIDI time code") << endmsg;
|
||||
|
|
@ -940,7 +940,7 @@ Session::send_midi_time_code ()
|
|||
|
||||
// Send quarter frames up to current time
|
||||
{
|
||||
LockMonitor lm (midi_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (midi_lock);
|
||||
|
||||
switch(next_quarter_frame_to_send) {
|
||||
case 0:
|
||||
|
|
@ -1075,7 +1075,7 @@ Session::deliver_mmc (MIDI::MachineControl::Command cmd, jack_nframes_t where)
|
|||
|
||||
mmc_buffer[nbytes++] = 0xf7; // terminate SysEx/MMC message
|
||||
|
||||
LockMonitor lm (midi_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (midi_lock);
|
||||
|
||||
if (_mmc_port->write (mmc_buffer, nbytes) != nbytes) {
|
||||
error << string_compose(_("MMC: cannot send command %1%2%3"), &hex, cmd, &dec) << endmsg;
|
||||
|
|
|
|||
|
|
@ -23,14 +23,13 @@
|
|||
#include <algorithm>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <ardour/timestamps.h>
|
||||
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/atomic.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
|
||||
#include <glibmm/thread.h>
|
||||
|
||||
#include <ardour/ardour.h>
|
||||
#include <ardour/session.h>
|
||||
#include <ardour/timestamps.h>
|
||||
#include <ardour/diskstream.h>
|
||||
#include <ardour/audioengine.h>
|
||||
#include <ardour/slave.h>
|
||||
|
|
@ -54,7 +53,7 @@ Session::process (jack_nframes_t nframes)
|
|||
}
|
||||
|
||||
if (non_realtime_work_pending()) {
|
||||
if (atomic_read (&butler_should_do_transport_work) == 0) {
|
||||
if (g_atomic_int_get (&butler_should_do_transport_work) == 0) {
|
||||
post_transport ();
|
||||
}
|
||||
}
|
||||
|
|
@ -85,7 +84,7 @@ Session::no_roll (jack_nframes_t nframes, jack_nframes_t offset)
|
|||
this is really bad ...
|
||||
*/
|
||||
|
||||
if (atomic_read (&processing_prohibited)) {
|
||||
if (g_atomic_int_get (&processing_prohibited)) {
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
(*i)->silence (nframes, offset);
|
||||
}
|
||||
|
|
@ -222,15 +221,15 @@ Session::commit_diskstreams (jack_nframes_t nframes, bool &needs_butler)
|
|||
cworst = min (cworst, (*i)->capture_buffer_load());
|
||||
}
|
||||
|
||||
uint32_t pmin = atomic_read (&_playback_load);
|
||||
uint32_t pminold = atomic_read (&_playback_load_min);
|
||||
uint32_t cmin = atomic_read (&_capture_load);
|
||||
uint32_t cminold = atomic_read (&_capture_load_min);
|
||||
uint32_t pmin = g_atomic_int_get (&_playback_load);
|
||||
uint32_t pminold = g_atomic_int_get (&_playback_load_min);
|
||||
uint32_t cmin = g_atomic_int_get (&_capture_load);
|
||||
uint32_t cminold = g_atomic_int_get (&_capture_load_min);
|
||||
|
||||
atomic_set (&_playback_load, (uint32_t) floor (pworst * 100.0f));
|
||||
atomic_set (&_capture_load, (uint32_t) floor (cworst * 100.0f));
|
||||
atomic_set (&_playback_load_min, min (pmin, pminold));
|
||||
atomic_set (&_capture_load_min, min (cmin, cminold));
|
||||
g_atomic_int_set (&_playback_load, (uint32_t) floor (pworst * 100.0f));
|
||||
g_atomic_int_set (&_capture_load, (uint32_t) floor (cworst * 100.0f));
|
||||
g_atomic_int_set (&_playback_load_min, min (pmin, pminold));
|
||||
g_atomic_int_set (&_capture_load_min, min (cmin, cminold));
|
||||
|
||||
if (actively_recording()) {
|
||||
set_dirty();
|
||||
|
|
@ -280,8 +279,8 @@ Session::process_with_events (jack_nframes_t nframes)
|
|||
end_frame = _transport_frame + nframes;
|
||||
|
||||
{
|
||||
TentativeRWLockMonitor rm (route_lock, false, __LINE__, __FILE__);
|
||||
TentativeRWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock rm (route_lock, Glib::TRY_LOCK);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock, Glib::TRY_LOCK);
|
||||
|
||||
Event* this_event;
|
||||
Events::iterator the_next_one;
|
||||
|
|
@ -557,7 +556,7 @@ Session::follow_slave (jack_nframes_t nframes, jack_nframes_t offset)
|
|||
if (slave_state == Waiting) {
|
||||
|
||||
// cerr << "waiting at " << slave_transport_frame << endl;
|
||||
TentativeRWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock, Glib::TRY_LOCK);
|
||||
|
||||
if (dsm.locked() && slave_transport_frame >= slave_wait_end) {
|
||||
// cerr << "\tstart at " << _transport_frame << endl;
|
||||
|
|
@ -679,7 +678,7 @@ Session::follow_slave (jack_nframes_t nframes, jack_nframes_t offset)
|
|||
|
||||
bool need_butler;
|
||||
|
||||
TentativeRWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock, Glib::TRY_LOCK);
|
||||
if (!dsm.locked()) {
|
||||
goto noroll;
|
||||
}
|
||||
|
|
@ -730,8 +729,8 @@ Session::process_without_events (jack_nframes_t nframes)
|
|||
long frames_moved;
|
||||
|
||||
{
|
||||
TentativeRWLockMonitor rm (route_lock, false, __LINE__, __FILE__);
|
||||
TentativeRWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock rm (route_lock, Glib::TRY_LOCK);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock, Glib::TRY_LOCK);
|
||||
|
||||
if (!rm.locked() || !dsm.locked() || (post_transport_work & (PostTransportLocate|PostTransportStop))) {
|
||||
no_roll (nframes, 0);
|
||||
|
|
@ -802,7 +801,7 @@ Session::process_without_events (jack_nframes_t nframes)
|
|||
void
|
||||
Session::process_audition (jack_nframes_t nframes)
|
||||
{
|
||||
TentativeRWLockMonitor rm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock rm (route_lock, Glib::TRY_LOCK);
|
||||
Event* ev;
|
||||
|
||||
if (rm.locked()) {
|
||||
|
|
|
|||
|
|
@ -44,14 +44,15 @@
|
|||
#include <sys/param.h>
|
||||
#endif
|
||||
|
||||
#include <glibmm.h>
|
||||
|
||||
#include <midi++/mmc.h>
|
||||
#include <midi++/port.h>
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/dirname.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
|
||||
#include <glibmm/thread.h>
|
||||
#include <pbd/pathscanner.h>
|
||||
#include <pbd/pthread_utils.h>
|
||||
#include <pbd/basename.h>
|
||||
#include <pbd/strsplit.h>
|
||||
|
||||
#include <ardour/audioengine.h>
|
||||
|
|
@ -118,7 +119,7 @@ Session::first_stage_init (string fullpath, string snapshot_name)
|
|||
_tempo_map = new TempoMap (_current_frame_rate);
|
||||
_tempo_map->StateChanged.connect (mem_fun (*this, &Session::tempo_map_changed));
|
||||
|
||||
atomic_set (&processing_prohibited, 0);
|
||||
g_atomic_int_set (&processing_prohibited, 0);
|
||||
send_cnt = 0;
|
||||
insert_cnt = 0;
|
||||
_transport_speed = 0;
|
||||
|
|
@ -129,7 +130,7 @@ Session::first_stage_init (string fullpath, string snapshot_name)
|
|||
end_location = new Location (0, 0, _("end"), Location::Flags ((Location::IsMark|Location::IsEnd)));
|
||||
start_location = new Location (0, 0, _("start"), Location::Flags ((Location::IsMark|Location::IsStart)));
|
||||
_end_location_is_free = true;
|
||||
atomic_set (&_record_status, Disabled);
|
||||
g_atomic_int_set (&_record_status, Disabled);
|
||||
auto_play = false;
|
||||
punch_in = false;
|
||||
punch_out = false;
|
||||
|
|
@ -170,12 +171,12 @@ Session::first_stage_init (string fullpath, string snapshot_name)
|
|||
midi_control = true;
|
||||
mmc = 0;
|
||||
post_transport_work = PostTransportWork (0);
|
||||
atomic_set (&butler_should_do_transport_work, 0);
|
||||
atomic_set (&butler_active, 0);
|
||||
atomic_set (&_playback_load, 100);
|
||||
atomic_set (&_capture_load, 100);
|
||||
atomic_set (&_playback_load_min, 100);
|
||||
atomic_set (&_capture_load_min, 100);
|
||||
g_atomic_int_set (&butler_should_do_transport_work, 0);
|
||||
g_atomic_int_set (&butler_active, 0);
|
||||
g_atomic_int_set (&_playback_load, 100);
|
||||
g_atomic_int_set (&_capture_load, 100);
|
||||
g_atomic_int_set (&_playback_load_min, 100);
|
||||
g_atomic_int_set (&_capture_load_min, 100);
|
||||
pending_audition_region = 0;
|
||||
_edit_mode = Slide;
|
||||
pending_edit_mode = _edit_mode;
|
||||
|
|
@ -1334,7 +1335,7 @@ Session::state(bool full_state)
|
|||
child = node->add_child ("Sources");
|
||||
|
||||
if (full_state) {
|
||||
LockMonitor sl (source_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock sl (source_lock);
|
||||
|
||||
for (SourceList::iterator siter = sources.begin(); siter != sources.end(); ++siter) {
|
||||
|
||||
|
|
@ -1363,7 +1364,7 @@ Session::state(bool full_state)
|
|||
child = node->add_child ("Regions");
|
||||
|
||||
if (full_state) {
|
||||
LockMonitor rl (region_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock rl (region_lock);
|
||||
|
||||
for (AudioRegionList::const_iterator i = audio_regions.begin(); i != audio_regions.end(); ++i) {
|
||||
|
||||
|
|
@ -1378,7 +1379,7 @@ Session::state(bool full_state)
|
|||
child = node->add_child ("DiskStreams");
|
||||
|
||||
{
|
||||
RWLockMonitor dl (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dl (diskstream_lock);
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if (!(*i)->hidden()) {
|
||||
child->add_child_nocopy ((*i)->get_state());
|
||||
|
|
@ -1390,7 +1391,7 @@ Session::state(bool full_state)
|
|||
|
||||
child = node->add_child ("Connections");
|
||||
{
|
||||
LockMonitor lm (connection_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (connection_lock);
|
||||
for (ConnectionList::iterator i = _connections.begin(); i != _connections.end(); ++i) {
|
||||
if (!(*i)->system_dependent()) {
|
||||
child->add_child_nocopy ((*i)->get_state());
|
||||
|
|
@ -1400,7 +1401,7 @@ Session::state(bool full_state)
|
|||
|
||||
child = node->add_child ("Routes");
|
||||
{
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
|
||||
RoutePublicOrderSorter cmp;
|
||||
RouteList public_order(routes);
|
||||
|
|
@ -1803,7 +1804,7 @@ Session::get_sources_as_xml ()
|
|||
|
||||
{
|
||||
XMLNode* node = new XMLNode (X_("Sources"));
|
||||
LockMonitor lm (source_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (source_lock);
|
||||
|
||||
for (SourceList::iterator i = sources.begin(); i != sources.end(); ++i) {
|
||||
node->add_child_nocopy ((*i).second->get_state());
|
||||
|
|
@ -1958,7 +1959,7 @@ Session::refresh_disk_space ()
|
|||
#if HAVE_SYS_VFS_H
|
||||
struct statfs statfsbuf;
|
||||
vector<space_and_path>::iterator i;
|
||||
LockMonitor lm (space_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (space_lock);
|
||||
double scale;
|
||||
|
||||
/* get freespace on every FS that is part of the session path */
|
||||
|
|
@ -2399,7 +2400,7 @@ Session::load_route_groups (const XMLNode& node, bool edit)
|
|||
void
|
||||
Session::swap_configuration(Configuration** new_config)
|
||||
{
|
||||
RWLockMonitor lm (route_lock, true, __LINE__, __FILE__); // jlc - WHY?
|
||||
Glib::RWLock::WriterLock lm (route_lock); // jlc - WHY?
|
||||
Configuration* tmp = *new_config;
|
||||
*new_config = Config;
|
||||
Config = tmp;
|
||||
|
|
@ -2409,7 +2410,7 @@ Session::swap_configuration(Configuration** new_config)
|
|||
void
|
||||
Session::copy_configuration(Configuration* new_config)
|
||||
{
|
||||
RWLockMonitor lm (route_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock lm (route_lock);
|
||||
new_config = new Configuration(*Config);
|
||||
}
|
||||
|
||||
|
|
@ -2588,7 +2589,7 @@ Session::GlobalRouteBooleanState
|
|||
Session::get_global_route_boolean (bool (Route::*method)(void) const)
|
||||
{
|
||||
GlobalRouteBooleanState s;
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
if (!(*i)->hidden()) {
|
||||
|
|
@ -2608,7 +2609,7 @@ Session::GlobalRouteMeterState
|
|||
Session::get_global_route_metering ()
|
||||
{
|
||||
GlobalRouteMeterState s;
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
if (!(*i)->hidden()) {
|
||||
|
|
@ -3065,13 +3066,13 @@ Session::cleanup_sources (Session::cleanup_report& rep)
|
|||
on whichever filesystem it was already on.
|
||||
*/
|
||||
|
||||
newpath = PBD::dirname (*x);
|
||||
newpath = PBD::dirname (newpath);
|
||||
newpath = Glib::path_get_dirname (*x);
|
||||
newpath = Glib::path_get_dirname (newpath);
|
||||
|
||||
newpath += '/';
|
||||
newpath += dead_sound_dir_name;
|
||||
newpath += '/';
|
||||
newpath += PBD::basename ((*x));
|
||||
newpath += Glib::path_get_basename ((*x));
|
||||
|
||||
if (access (newpath.c_str(), F_OK) == 0) {
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
#include <pbd/undo.h>
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
#include <pbd/pthread_utils.h>
|
||||
|
||||
#include <midi++/mmc.h>
|
||||
|
|
@ -190,8 +190,8 @@ Session::realtime_stop (bool abort)
|
|||
void
|
||||
Session::butler_transport_work ()
|
||||
{
|
||||
RWLockMonitor rm (route_lock, false, __LINE__, __FILE__);
|
||||
RWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock rm (route_lock);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock);
|
||||
|
||||
if (post_transport_work & PostTransportCurveRealloc) {
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
|
|
@ -240,13 +240,13 @@ Session::butler_transport_work ()
|
|||
non_realtime_set_audition ();
|
||||
}
|
||||
|
||||
atomic_dec (&butler_should_do_transport_work);
|
||||
g_atomic_int_dec_and_test (&butler_should_do_transport_work);
|
||||
}
|
||||
|
||||
void
|
||||
Session::non_realtime_set_speed ()
|
||||
{
|
||||
RWLockMonitor lm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (diskstream_lock);
|
||||
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
(*i)->non_realtime_set_speed ();
|
||||
|
|
@ -256,7 +256,7 @@ Session::non_realtime_set_speed ()
|
|||
void
|
||||
Session::non_realtime_overwrite ()
|
||||
{
|
||||
RWLockMonitor lm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (diskstream_lock);
|
||||
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if ((*i)->pending_overwrite) {
|
||||
|
|
@ -395,9 +395,9 @@ Session::non_realtime_stop (bool abort)
|
|||
*/
|
||||
|
||||
if (!Config->get_latched_record_enable()) {
|
||||
atomic_set (&_record_status, Disabled);
|
||||
g_atomic_int_set (&_record_status, Disabled);
|
||||
} else {
|
||||
atomic_set (&_record_status, Enabled);
|
||||
g_atomic_int_set (&_record_status, Enabled);
|
||||
}
|
||||
RecordStateChanged (); /* emit signal */
|
||||
}
|
||||
|
|
@ -625,7 +625,7 @@ Session::locate (jack_nframes_t target_frame, bool with_roll, bool with_flush, b
|
|||
|
||||
/* this is functionally what clear_clicks() does but with a tentative lock */
|
||||
|
||||
TentativeRWLockMonitor clickm (click_lock, true, __LINE__, __FILE__);
|
||||
Glib::RWLock::WriterLock clickm (click_lock, Glib::TRY_LOCK);
|
||||
|
||||
if (clickm.locked()) {
|
||||
|
||||
|
|
@ -644,7 +644,7 @@ Session::locate (jack_nframes_t target_frame, bool with_roll, bool with_flush, b
|
|||
a non-tentative rwlock here, because the action must occur.
|
||||
The rarity and short potential lock duration makes this "OK"
|
||||
*/
|
||||
RWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock);
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if ((*i)->record_enabled ()) {
|
||||
//cerr << "switching from input" << __FILE__ << __LINE__ << endl << endl;
|
||||
|
|
@ -659,7 +659,7 @@ Session::locate (jack_nframes_t target_frame, bool with_roll, bool with_flush, b
|
|||
a non-tentative rwlock here, because the action must occur.
|
||||
The rarity and short potential lock duration makes this "OK"
|
||||
*/
|
||||
RWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock);
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if ((*i)->record_enabled ()) {
|
||||
//cerr << "switching to input" << __FILE__ << __LINE__ << endl << endl;
|
||||
|
|
@ -703,7 +703,7 @@ Session::set_transport_speed (float speed, bool abort)
|
|||
a non-tentative rwlock here, because the action must occur.
|
||||
The rarity and short potential lock duration makes this "OK"
|
||||
*/
|
||||
RWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock);
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if ((*i)->record_enabled ()) {
|
||||
//cerr << "switching to input" << __FILE__ << __LINE__ << endl << endl;
|
||||
|
|
@ -729,7 +729,7 @@ Session::set_transport_speed (float speed, bool abort)
|
|||
a non-tentative rwlock here, because the action must occur.
|
||||
The rarity and short potential lock duration makes this "OK"
|
||||
*/
|
||||
RWLockMonitor dsm (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock dsm (diskstream_lock);
|
||||
for (DiskStreamList::iterator i = diskstreams.begin(); i != diskstreams.end(); ++i) {
|
||||
if (auto_input && (*i)->record_enabled ()) {
|
||||
//cerr << "switching from input" << __FILE__ << __LINE__ << endl << endl;
|
||||
|
|
@ -1156,7 +1156,7 @@ Session::engine_halted ()
|
|||
the picture.
|
||||
*/
|
||||
|
||||
atomic_set (&butler_should_do_transport_work, 0);
|
||||
g_atomic_int_set (&butler_should_do_transport_work, 0);
|
||||
post_transport_work = PostTransportWork (0);
|
||||
stop_butler ();
|
||||
|
||||
|
|
@ -1192,8 +1192,8 @@ Session::update_latency_compensation (bool with_stop, bool abort)
|
|||
return;
|
||||
}
|
||||
|
||||
RWLockMonitor lm (route_lock, false, __LINE__, __FILE__);
|
||||
RWLockMonitor lm2 (diskstream_lock, false, __LINE__, __FILE__);
|
||||
Glib::RWLock::ReaderLock lm (route_lock);
|
||||
Glib::RWLock::ReaderLock lm2 (diskstream_lock);
|
||||
_worst_track_latency = 0;
|
||||
|
||||
for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ SndFileSource::read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char
|
|||
real_cnt = cnt * _info.channels;
|
||||
|
||||
{
|
||||
LockMonitor lm (_tmpbuf_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_tmpbuf_lock);
|
||||
|
||||
if (tmpbufsize < real_cnt) {
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
#include <iomanip>
|
||||
#include <algorithm>
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
#include <pbd/xml++.h>
|
||||
#include <pbd/pthread_utils.h>
|
||||
|
||||
|
|
@ -41,13 +41,12 @@ using std::min;
|
|||
using std::max;
|
||||
|
||||
using namespace ARDOUR;
|
||||
using namespace PBD;
|
||||
|
||||
sigc::signal<void,Source *> Source::SourceCreated;
|
||||
pthread_t Source::peak_thread;
|
||||
bool Source::have_peak_thread = false;
|
||||
vector<Source*> Source::pending_peak_sources;
|
||||
PBD::Lock Source::pending_peak_sources_lock;
|
||||
Glib::StaticMutex Source::pending_peak_sources_lock = GLIBMM_STATIC_MUTEX_INIT;
|
||||
int Source::peak_request_pipe[2];
|
||||
|
||||
bool Source::_build_missing_peakfiles = false;
|
||||
|
|
@ -142,19 +141,19 @@ Source::peak_thread_work (void* arg)
|
|||
PBD::ThreadCreated (pthread_self(), X_("Peak"));
|
||||
struct pollfd pfd[1];
|
||||
|
||||
LockMonitor lm (pending_peak_sources_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (pending_peak_sources_lock);
|
||||
|
||||
while (true) {
|
||||
|
||||
pfd[0].fd = peak_request_pipe[0];
|
||||
pfd[0].events = POLLIN|POLLERR|POLLHUP;
|
||||
|
||||
pthread_mutex_unlock (pending_peak_sources_lock.mutex());
|
||||
pending_peak_sources_lock.unlock();
|
||||
|
||||
if (poll (pfd, 1, -1) < 0) {
|
||||
|
||||
if (errno == EINTR) {
|
||||
pthread_mutex_lock (pending_peak_sources_lock.mutex());
|
||||
pending_peak_sources_lock.lock();
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -204,16 +203,16 @@ Source::peak_thread_work (void* arg)
|
|||
}
|
||||
}
|
||||
|
||||
pthread_mutex_lock (pending_peak_sources_lock.mutex());
|
||||
pending_peak_sources_lock.lock();
|
||||
|
||||
while (!pending_peak_sources.empty()) {
|
||||
|
||||
Source* s = pending_peak_sources.front();
|
||||
pending_peak_sources.erase (pending_peak_sources.begin());
|
||||
|
||||
pthread_mutex_unlock (pending_peak_sources_lock.mutex());
|
||||
pending_peak_sources_lock.unlock();
|
||||
s->build_peaks();
|
||||
pthread_mutex_lock (pending_peak_sources_lock.mutex());
|
||||
pending_peak_sources_lock.lock();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -272,7 +271,7 @@ Source::queue_for_peaks (Source& source)
|
|||
{
|
||||
if (have_peak_thread) {
|
||||
|
||||
LockMonitor lm (pending_peak_sources_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (pending_peak_sources_lock);
|
||||
|
||||
source.next_peak_clear_should_notify = true;
|
||||
|
||||
|
|
@ -291,7 +290,7 @@ void Source::clear_queue_for_peaks ()
|
|||
{
|
||||
/* this is done to cancel a group of running peak builds */
|
||||
if (have_peak_thread) {
|
||||
LockMonitor lm (pending_peak_sources_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (pending_peak_sources_lock);
|
||||
pending_peak_sources.clear ();
|
||||
}
|
||||
}
|
||||
|
|
@ -301,7 +300,7 @@ bool
|
|||
Source::peaks_ready (sigc::slot<void> the_slot, sigc::connection& conn) const
|
||||
{
|
||||
bool ret;
|
||||
LockMonitor lm (_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_lock);
|
||||
|
||||
/* check to see if the peak data is ready. if not
|
||||
connect the slot while still holding the lock.
|
||||
|
|
@ -388,7 +387,7 @@ Source::initialize_peakfile (bool newfile, string audio_path)
|
|||
int
|
||||
Source::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t start, jack_nframes_t cnt, double samples_per_visual_peak) const
|
||||
{
|
||||
LockMonitor lm (_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_lock);
|
||||
double scale;
|
||||
double expected_peaks;
|
||||
PeakData::PeakDatum xmax;
|
||||
|
|
@ -699,7 +698,7 @@ Source::build_peaks ()
|
|||
list<PeakBuildRecord*> copy;
|
||||
|
||||
{
|
||||
LockMonitor lm (_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_lock);
|
||||
copy = pending_peak_builds;
|
||||
pending_peak_builds.clear ();
|
||||
}
|
||||
|
|
@ -719,7 +718,7 @@ Source::build_peaks ()
|
|||
}
|
||||
|
||||
{
|
||||
LockMonitor lm (_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_lock);
|
||||
|
||||
if (status == 0) {
|
||||
_peaks_built = true;
|
||||
|
|
@ -830,7 +829,7 @@ Source::do_build_peak (jack_nframes_t first_frame, jack_nframes_t cnt)
|
|||
void
|
||||
Source::build_peaks_from_scratch ()
|
||||
{
|
||||
LockMonitor lp (_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lp (_lock);
|
||||
|
||||
next_peak_clear_should_notify = true;
|
||||
pending_peak_builds.push_back (new PeakBuildRecord (0, _length));
|
||||
|
|
@ -883,7 +882,7 @@ Source::available_peaks (double zoom_factor) const
|
|||
}
|
||||
|
||||
{
|
||||
LockMonitor lm (_lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (_lock);
|
||||
end = lseek (peakfile, 0, SEEK_END);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
#include <sigc++/bind.h>
|
||||
|
||||
#include <pbd/lockmonitor.h>
|
||||
#include <glibmm/thread.h>
|
||||
#include <pbd/xml++.h>
|
||||
#include <ardour/tempo.h>
|
||||
#include <ardour/utils.h>
|
||||
|
|
@ -240,7 +240,7 @@ TempoMap::move_metric_section (MetricSection& section, const BBT_Time& when)
|
|||
return 1;
|
||||
}
|
||||
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
MetricSectionSorter cmp;
|
||||
BBT_Time corrected (when);
|
||||
|
||||
|
|
@ -283,7 +283,7 @@ TempoMap::remove_tempo (const TempoSection& tempo)
|
|||
bool removed = false;
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
Metrics::iterator i;
|
||||
|
||||
for (i = metrics->begin(); i != metrics->end(); ++i) {
|
||||
|
|
@ -310,7 +310,7 @@ TempoMap::remove_meter (const MeterSection& tempo)
|
|||
bool removed = false;
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
Metrics::iterator i;
|
||||
|
||||
for (i = metrics->begin(); i != metrics->end(); ++i) {
|
||||
|
|
@ -361,7 +361,7 @@ void
|
|||
TempoMap::add_tempo (const Tempo& tempo, BBT_Time where)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
/* new tempos always start on a beat */
|
||||
|
||||
|
|
@ -381,7 +381,7 @@ TempoMap::replace_tempo (TempoSection& existing, const Tempo& replacement)
|
|||
bool replaced = false;
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
Metrics::iterator i;
|
||||
|
||||
for (i = metrics->begin(); i != metrics->end(); ++i) {
|
||||
|
|
@ -411,7 +411,7 @@ void
|
|||
TempoMap::add_meter (const Meter& meter, BBT_Time where)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
/* a new meter always starts a new bar on the first beat. so
|
||||
round the start time appropriately. remember that
|
||||
|
|
@ -443,7 +443,7 @@ TempoMap::replace_meter (MeterSection& existing, const Meter& replacement)
|
|||
bool replaced = false;
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
Metrics::iterator i;
|
||||
|
||||
for (i = metrics->begin(); i != metrics->end(); ++i) {
|
||||
|
|
@ -611,7 +611,7 @@ TempoMap::metric_at (BBT_Time bbt) const
|
|||
void
|
||||
TempoMap::bbt_time (jack_nframes_t frame, BBT_Time& bbt) const
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
bbt_time_unlocked (frame, bbt);
|
||||
}
|
||||
|
||||
|
|
@ -759,7 +759,7 @@ TempoMap::bbt_duration_at (jack_nframes_t pos, const BBT_Time& bbt, int dir) con
|
|||
bbt_time(pos,when);
|
||||
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
frames = bbt_duration_at_unlocked (when, bbt,dir);
|
||||
}
|
||||
|
||||
|
|
@ -896,7 +896,7 @@ TempoMap::bbt_duration_at_unlocked (const BBT_Time& when, const BBT_Time& bbt, i
|
|||
jack_nframes_t
|
||||
TempoMap::round_to_bar (jack_nframes_t fr, int dir)
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
return round_to_type (fr, dir, Bar);
|
||||
}
|
||||
|
||||
|
|
@ -904,7 +904,7 @@ TempoMap::round_to_bar (jack_nframes_t fr, int dir)
|
|||
jack_nframes_t
|
||||
TempoMap::round_to_beat (jack_nframes_t fr, int dir)
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
return round_to_type (fr, dir, Beat);
|
||||
}
|
||||
|
||||
|
|
@ -912,7 +912,7 @@ jack_nframes_t
|
|||
|
||||
TempoMap::round_to_beat_subdivision (jack_nframes_t fr, int sub_num)
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
TempoMap::BBTPointList::iterator i;
|
||||
TempoMap::BBTPointList *more_zoomed_bbt_points;
|
||||
jack_nframes_t frame_one_beats_worth;
|
||||
|
|
@ -1185,7 +1185,7 @@ TempoMap::meter_at (jack_nframes_t frame)
|
|||
XMLNode&
|
||||
TempoMap::get_state ()
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
Metrics::const_iterator i;
|
||||
XMLNode *root = new XMLNode ("TempoMap");
|
||||
|
||||
|
|
@ -1200,7 +1200,7 @@ int
|
|||
TempoMap::set_state (const XMLNode& node)
|
||||
{
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
XMLNodeList nlist;
|
||||
XMLNodeConstIterator niter;
|
||||
|
|
@ -1292,7 +1292,7 @@ TempoMap::get_memento () const
|
|||
Change
|
||||
TempoMap::restore_state (StateManager::State& state)
|
||||
{
|
||||
LockMonitor lm (lock, __LINE__, __FILE__);
|
||||
Glib::Mutex::Lock lm (lock);
|
||||
|
||||
TempoMapState* tmstate = dynamic_cast<TempoMapState*> (&state);
|
||||
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
#include <gtkmm2ext/fastmeter.h>
|
||||
#include <gtkmm2ext/utils.h>
|
||||
#include <gtkmm/style.h>
|
||||
#include <string.h>
|
||||
|
||||
using namespace Gtk;
|
||||
using namespace Gdk;
|
||||
|
|
@ -32,15 +33,15 @@ using namespace Glib;
|
|||
using namespace Gtkmm2ext;
|
||||
using namespace std;
|
||||
|
||||
string FastMeter::v_image_path;
|
||||
string FastMeter::h_image_path;
|
||||
RefPtr<Pixbuf> FastMeter::v_pixbuf;
|
||||
gint FastMeter::v_pixheight = 0;
|
||||
gint FastMeter::v_pixwidth = 0;
|
||||
|
||||
RefPtr<Pixbuf> FastMeter::h_pixbuf;
|
||||
gint FastMeter::h_pixheight = 0;
|
||||
gint FastMeter::h_pixwidth = 0;
|
||||
int FastMeter::min_v_pixbuf_size = 50;
|
||||
int FastMeter::max_v_pixbuf_size = 1024;
|
||||
Glib::RefPtr<Gdk::Pixbuf>* FastMeter::v_pixbuf_cache = 0;
|
||||
|
||||
int FastMeter::min_h_pixbuf_size = 50;
|
||||
int FastMeter::max_h_pixbuf_size = 1024;
|
||||
Glib::RefPtr<Gdk::Pixbuf>* FastMeter::h_pixbuf_cache = 0;
|
||||
|
||||
|
||||
FastMeter::FastMeter (long hold, unsigned long dimen, Orientation o)
|
||||
{
|
||||
|
|
@ -56,46 +57,184 @@ FastMeter::FastMeter (long hold, unsigned long dimen, Orientation o)
|
|||
pixrect.x = 0;
|
||||
pixrect.y = 0;
|
||||
|
||||
if (!v_image_path.empty() && v_pixbuf == 0) {
|
||||
v_pixbuf = Pixbuf::create_from_file (v_image_path);
|
||||
v_pixheight = v_pixbuf->get_height();
|
||||
v_pixwidth = v_pixbuf->get_width();
|
||||
}
|
||||
|
||||
if (!h_image_path.empty() && h_pixbuf == 0) {
|
||||
h_pixbuf = Pixbuf::create_from_file (h_image_path);
|
||||
h_pixheight = h_pixbuf->get_height();
|
||||
h_pixwidth = h_pixbuf->get_width();
|
||||
}
|
||||
|
||||
if (orientation == Vertical) {
|
||||
pixrect.width = min (v_pixwidth, (gint) dimen);
|
||||
pixrect.height = v_pixheight;
|
||||
pixbuf = request_vertical_meter(250);
|
||||
} else {
|
||||
pixrect.width = h_pixwidth;
|
||||
pixrect.height = min (h_pixheight, (gint) dimen);
|
||||
pixbuf = request_horizontal_meter(186);
|
||||
}
|
||||
|
||||
pixheight = pixbuf->get_height();
|
||||
pixwidth = pixbuf->get_width();
|
||||
|
||||
if (orientation == Vertical) {
|
||||
pixrect.width = min (pixwidth, (gint) dimen);
|
||||
pixrect.height = pixheight;
|
||||
} else {
|
||||
pixrect.width = pixwidth;
|
||||
pixrect.height = min (pixheight, (gint) dimen);
|
||||
}
|
||||
|
||||
request_width = pixrect.width;
|
||||
request_height= pixrect.height;
|
||||
}
|
||||
|
||||
Glib::RefPtr<Gdk::Pixbuf> FastMeter::request_vertical_meter(int length)
|
||||
{
|
||||
if (length < min_v_pixbuf_size)
|
||||
length = min_v_pixbuf_size;
|
||||
if (length > max_v_pixbuf_size)
|
||||
length = max_v_pixbuf_size;
|
||||
|
||||
int index = length - 1;
|
||||
|
||||
if (v_pixbuf_cache == 0) {
|
||||
v_pixbuf_cache = (Glib::RefPtr<Gdk::Pixbuf>*) malloc(sizeof(Glib::RefPtr<Gdk::Pixbuf>) * max_v_pixbuf_size);
|
||||
memset(v_pixbuf_cache,0,sizeof(Glib::RefPtr<Gdk::Pixbuf>) * max_v_pixbuf_size);
|
||||
}
|
||||
Glib::RefPtr<Gdk::Pixbuf> ret = v_pixbuf_cache[index];
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
guint8* data;
|
||||
int width = 5;
|
||||
int height = length;
|
||||
|
||||
data = (guint8*) malloc(width*height * 3);
|
||||
|
||||
guint8 r,g,b;
|
||||
r=0;
|
||||
g=255;
|
||||
b=0;
|
||||
|
||||
// fake log calculation copied from log_meter.h
|
||||
// actual calculation:
|
||||
// log_meter(0.0f) =
|
||||
// def = (0.0f + 20.0f) * 2.5f + 50f
|
||||
// return def / 115.0f
|
||||
int knee = (int)floor((float)height * 100.0f / 115.0f);
|
||||
|
||||
int y;
|
||||
|
||||
for (y = 0; y < knee / 2; y++) {
|
||||
|
||||
r = (guint8)floor(255.0 * (float)y/(float)(knee / 2));
|
||||
|
||||
for (int x = 0; x < width; x++) {
|
||||
data[ (x+(height-y-1)*width) * 3 + 0 ] = r;
|
||||
data[ (x+(height-y-1)*width) * 3 + 1 ] = g;
|
||||
data[ (x+(height-y-1)*width) * 3 + 2 ] = b;
|
||||
}
|
||||
}
|
||||
|
||||
for (; y < knee; y++) {
|
||||
|
||||
g = 255 - (guint8)floor(170.0 * (float)(y - knee/ 2)/(float)(knee / 2));
|
||||
|
||||
for (int x = 0; x < width; x++) {
|
||||
data[ (x+(height-y-1)*width) * 3 + 0 ] = r;
|
||||
data[ (x+(height-y-1)*width) * 3 + 1 ] = g;
|
||||
data[ (x+(height-y-1)*width) * 3 + 2 ] = b;
|
||||
}
|
||||
}
|
||||
|
||||
r=255;
|
||||
g=0;
|
||||
b=0;
|
||||
for (; y < height; y++) {
|
||||
for (int x = 0; x < width; x++) {
|
||||
data[ (x+(height-y-1)*width) * 3 + 0 ] = r;
|
||||
data[ (x+(height-y-1)*width) * 3 + 1 ] = g;
|
||||
data[ (x+(height-y-1)*width) * 3 + 2 ] = b;
|
||||
}
|
||||
}
|
||||
|
||||
ret = Pixbuf::create_from_data(data, COLORSPACE_RGB, false, 8, width, height, width * 3);
|
||||
v_pixbuf_cache[index] = ret;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
Glib::RefPtr<Gdk::Pixbuf> FastMeter::request_horizontal_meter(int length)
|
||||
{
|
||||
if (length < min_h_pixbuf_size)
|
||||
length = min_h_pixbuf_size;
|
||||
if (length > max_h_pixbuf_size)
|
||||
length = max_h_pixbuf_size;
|
||||
|
||||
int index = length - 1;
|
||||
|
||||
if (h_pixbuf_cache == 0) {
|
||||
h_pixbuf_cache = (Glib::RefPtr<Gdk::Pixbuf>*) malloc(sizeof(Glib::RefPtr<Gdk::Pixbuf>) * max_h_pixbuf_size);
|
||||
memset(h_pixbuf_cache,0,sizeof(Glib::RefPtr<Gdk::Pixbuf>) * max_h_pixbuf_size);
|
||||
}
|
||||
Glib::RefPtr<Gdk::Pixbuf> ret = h_pixbuf_cache[index];
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
guint8* data;
|
||||
int width = length;
|
||||
int height = 5;
|
||||
|
||||
data = (guint8*) malloc(width*height * 3);
|
||||
|
||||
guint8 r,g,b;
|
||||
r=0;
|
||||
g=255;
|
||||
b=0;
|
||||
|
||||
// fake log calculation copied from log_meter.h
|
||||
// actual calculation:
|
||||
// log_meter(0.0f) =
|
||||
// def = (0.0f + 20.0f) * 2.5f + 50f
|
||||
// return def / 115.0f
|
||||
int knee = (int)floor((float)width * 100.0f / 115.0f);
|
||||
|
||||
int x;
|
||||
|
||||
for (x = 0; x < knee / 2; x++) {
|
||||
|
||||
r = (guint8)floor(255.0 * (float)x/(float)(knee / 2));
|
||||
|
||||
for (int y = 0; y < height; y++) {
|
||||
data[ (x+(height-y-1)*width) * 3 + 0 ] = r;
|
||||
data[ (x+(height-y-1)*width) * 3 + 1 ] = g;
|
||||
data[ (x+(height-y-1)*width) * 3 + 2 ] = b;
|
||||
}
|
||||
}
|
||||
|
||||
for (; x < knee; x++) {
|
||||
|
||||
g = 255 - (guint8)floor(170.0 * (float)(x - knee/ 2)/(float)(knee / 2));
|
||||
|
||||
for (int y = 0; y < height; y++) {
|
||||
data[ (x+(height-y-1)*width) * 3 + 0 ] = r;
|
||||
data[ (x+(height-y-1)*width) * 3 + 1 ] = g;
|
||||
data[ (x+(height-y-1)*width) * 3 + 2 ] = b;
|
||||
}
|
||||
}
|
||||
|
||||
r=255;
|
||||
g=0;
|
||||
b=0;
|
||||
for (; x < width; x++) {
|
||||
for (int y = 0; y < height; y++) {
|
||||
data[ (x+(height-y-1)*width) * 3 + 0 ] = r;
|
||||
data[ (x+(height-y-1)*width) * 3 + 1 ] = g;
|
||||
data[ (x+(height-y-1)*width) * 3 + 2 ] = b;
|
||||
}
|
||||
}
|
||||
|
||||
ret = Pixbuf::create_from_data(data, COLORSPACE_RGB, false, 8, width, height, width * 3);
|
||||
h_pixbuf_cache[index] = ret;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
FastMeter::~FastMeter ()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
FastMeter::set_vertical_xpm (std::string path)
|
||||
{
|
||||
v_image_path = path;
|
||||
}
|
||||
|
||||
void
|
||||
FastMeter::set_horizontal_xpm (std::string path)
|
||||
{
|
||||
h_image_path = path;
|
||||
}
|
||||
|
||||
void
|
||||
FastMeter::set_hold_count (long val)
|
||||
{
|
||||
|
|
@ -113,8 +252,63 @@ FastMeter::set_hold_count (long val)
|
|||
void
|
||||
FastMeter::on_size_request (GtkRequisition* req)
|
||||
{
|
||||
req->width = request_width;
|
||||
if (orientation == Vertical) {
|
||||
req->height = request_height;
|
||||
|
||||
req->height = max(req->height, min_v_pixbuf_size);
|
||||
req->height = min(req->height, max_v_pixbuf_size);
|
||||
|
||||
req->width = 5;
|
||||
} else {
|
||||
req->width = request_width;
|
||||
|
||||
req->width = max(req->width, min_h_pixbuf_size);
|
||||
req->width = min(req->width, max_h_pixbuf_size);
|
||||
|
||||
req->height = 5;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
FastMeter::on_size_allocate (Gtk::Allocation &alloc)
|
||||
{
|
||||
if (orientation == Vertical) {
|
||||
if (alloc.get_width() != 5) {
|
||||
alloc.set_width(5);
|
||||
}
|
||||
|
||||
int h = alloc.get_height();
|
||||
h = max(h, min_v_pixbuf_size);
|
||||
h = min(h, max_v_pixbuf_size);
|
||||
|
||||
if ( h != alloc.get_height())
|
||||
alloc.set_height(h);
|
||||
|
||||
if (pixheight != h) {
|
||||
pixbuf = request_vertical_meter(h);
|
||||
}
|
||||
} else {
|
||||
if (alloc.get_height() != 5) {
|
||||
alloc.set_height(5);
|
||||
}
|
||||
|
||||
int w = alloc.get_width();
|
||||
w = max(w, min_h_pixbuf_size);
|
||||
w = min(w, max_h_pixbuf_size);
|
||||
|
||||
if ( w != alloc.get_width())
|
||||
alloc.set_width(w);
|
||||
|
||||
if (pixwidth != w) {
|
||||
pixbuf = request_horizontal_meter(w);
|
||||
}
|
||||
}
|
||||
|
||||
pixheight = pixbuf->get_height();
|
||||
pixwidth = pixbuf->get_width();
|
||||
|
||||
DrawingArea::on_size_allocate(alloc);
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
@ -134,13 +328,13 @@ FastMeter::vertical_expose (GdkEventExpose* ev)
|
|||
GdkRectangle intersection;
|
||||
GdkRectangle background;
|
||||
|
||||
top_of_meter = (gint) floor (v_pixheight * current_level);
|
||||
top_of_meter = (gint) floor (pixheight * current_level);
|
||||
pixrect.height = top_of_meter;
|
||||
|
||||
background.x = 0;
|
||||
background.y = 0;
|
||||
background.width = pixrect.width;
|
||||
background.height = v_pixheight - top_of_meter;
|
||||
background.height = pixheight - top_of_meter;
|
||||
|
||||
if (gdk_rectangle_intersect (&background, &ev->area, &intersection)) {
|
||||
get_window()->draw_rectangle (get_style()->get_black_gc(), true,
|
||||
|
|
@ -149,62 +343,71 @@ FastMeter::vertical_expose (GdkEventExpose* ev)
|
|||
}
|
||||
|
||||
if (gdk_rectangle_intersect (&pixrect, &ev->area, &intersection)) {
|
||||
|
||||
/* draw the part of the meter image that we need. the area we draw is bounded "in reverse" (top->bottom)
|
||||
*/
|
||||
|
||||
get_window()->draw_pixbuf(get_style()->get_fg_gc(get_state()), v_pixbuf,
|
||||
intersection.x, v_pixheight - top_of_meter,
|
||||
intersection.x, v_pixheight - top_of_meter,
|
||||
// draw the part of the meter image that we need. the area we draw is bounded "in reverse" (top->bottom)
|
||||
get_window()->draw_pixbuf(get_style()->get_fg_gc(get_state()), pixbuf,
|
||||
intersection.x, pixheight - top_of_meter,
|
||||
intersection.x, pixheight - top_of_meter,
|
||||
intersection.width, intersection.height,
|
||||
Gdk::RGB_DITHER_NONE, 0, 0);
|
||||
}
|
||||
|
||||
/* draw peak bar */
|
||||
// draw peak bar
|
||||
if (hold_state && intersection.width > 0) {
|
||||
gint y = pixheight - (gint) floor (pixheight * current_peak);
|
||||
|
||||
if (hold_state) {
|
||||
get_window()->draw_pixbuf (get_style()->get_fg_gc(get_state()), v_pixbuf,
|
||||
intersection.x, v_pixheight - (gint) floor (v_pixheight * current_peak),
|
||||
intersection.x, v_pixheight - (gint) floor (v_pixheight * current_peak),
|
||||
get_window()->draw_pixbuf (get_style()->get_fg_gc(get_state()), pixbuf,
|
||||
intersection.x, y,
|
||||
intersection.x, y,
|
||||
intersection.width, 3,
|
||||
Gdk::RGB_DITHER_NONE, 0, 0);
|
||||
}
|
||||
|
||||
return true;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool
|
||||
FastMeter::horizontal_expose (GdkEventExpose* ev)
|
||||
{
|
||||
GdkRectangle intersection;
|
||||
gint right_of_meter;
|
||||
GdkRectangle intersection;
|
||||
GdkRectangle background;
|
||||
|
||||
right_of_meter = (gint) floor (h_pixwidth * current_level);
|
||||
right_of_meter = (gint) floor (pixwidth * current_level);
|
||||
pixrect.width = right_of_meter;
|
||||
|
||||
background.x = 0;
|
||||
background.y = 0;
|
||||
background.width = pixwidth - right_of_meter;
|
||||
background.height = pixrect.height;
|
||||
|
||||
if (gdk_rectangle_intersect (&background, &ev->area, &intersection)) {
|
||||
get_window()->draw_rectangle (get_style()->get_black_gc(), true,
|
||||
intersection.x + right_of_meter, intersection.y,
|
||||
intersection.width, intersection.height);
|
||||
}
|
||||
|
||||
if (gdk_rectangle_intersect (&pixrect, &ev->area, &intersection)) {
|
||||
|
||||
/* draw the part of the meter image that we need.
|
||||
*/
|
||||
|
||||
get_window()->draw_pixbuf (get_style()->get_fg_gc(get_state()), h_pixbuf,
|
||||
// draw the part of the meter image that we need. the area we draw is bounded "in reverse" (top->bottom)
|
||||
get_window()->draw_pixbuf(get_style()->get_fg_gc(get_state()), pixbuf,
|
||||
intersection.x, intersection.y,
|
||||
intersection.x, intersection.y,
|
||||
intersection.width, intersection.height,
|
||||
Gdk::RGB_DITHER_NONE, 0, 0);
|
||||
|
||||
}
|
||||
|
||||
/* draw peak bar */
|
||||
// draw peak bar
|
||||
// XXX: peaks don't work properly
|
||||
/*
|
||||
if (hold_state && intersection.height > 0) {
|
||||
gint x = (gint) floor(pixwidth * current_peak);
|
||||
|
||||
if (hold_state) {
|
||||
get_window()->draw_pixbuf (get_style()->get_fg_gc(get_state()), h_pixbuf,
|
||||
right_of_meter, intersection.y,
|
||||
right_of_meter, intersection.y,
|
||||
get_window()->draw_pixbuf (get_style()->get_fg_gc(get_state()), pixbuf,
|
||||
x, intersection.y,
|
||||
x, intersection.y,
|
||||
3, intersection.height,
|
||||
Gdk::RGB_DITHER_NONE, 0, 0);
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,23 +46,16 @@ class FastMeter : public Gtk::DrawingArea {
|
|||
long hold_count() { return hold_cnt; }
|
||||
void set_hold_count (long);
|
||||
|
||||
static void set_horizontal_xpm (std::string);
|
||||
static void set_vertical_xpm (std::string);
|
||||
|
||||
protected:
|
||||
bool on_expose_event (GdkEventExpose*);
|
||||
void on_size_request (GtkRequisition*);
|
||||
void on_size_allocate (Gtk::Allocation&);
|
||||
|
||||
private:
|
||||
static std::string h_image_path;
|
||||
static std::string v_image_path;
|
||||
static Glib::RefPtr<Gdk::Pixbuf> h_pixbuf;
|
||||
static gint h_pixheight;
|
||||
static gint h_pixwidth;
|
||||
|
||||
static Glib::RefPtr<Gdk::Pixbuf> v_pixbuf;
|
||||
static gint v_pixheight;
|
||||
static gint v_pixwidth;
|
||||
Glib::RefPtr<Gdk::Pixbuf> pixbuf;
|
||||
gint pixheight;
|
||||
gint pixwidth;
|
||||
|
||||
Orientation orientation;
|
||||
GdkRectangle pixrect;
|
||||
|
|
@ -76,6 +69,18 @@ class FastMeter : public Gtk::DrawingArea {
|
|||
|
||||
bool vertical_expose (GdkEventExpose*);
|
||||
bool horizontal_expose (GdkEventExpose*);
|
||||
|
||||
static Glib::RefPtr<Gdk::Pixbuf> request_vertical_meter(int);
|
||||
|
||||
static Glib::RefPtr<Gdk::Pixbuf> *v_pixbuf_cache;
|
||||
static int min_v_pixbuf_size;
|
||||
static int max_v_pixbuf_size;
|
||||
|
||||
static Glib::RefPtr<Gdk::Pixbuf> request_horizontal_meter(int);
|
||||
|
||||
static Glib::RefPtr<Gdk::Pixbuf> *h_pixbuf_cache;
|
||||
static int min_h_pixbuf_size;
|
||||
static int max_h_pixbuf_size;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -36,11 +36,10 @@
|
|||
#include <gdkmm/color.h>
|
||||
#include <pbd/abstract_ui.h>
|
||||
#include <pbd/ringbufferNPT.h>
|
||||
#include <pbd/atomic.h>
|
||||
|
||||
#include <pbd/pool.h>
|
||||
#include <pbd/error.h>
|
||||
#include <pbd/receiver.h>
|
||||
#include <pbd/lockmonitor.h>
|
||||
|
||||
using std::string;
|
||||
using std::queue;
|
||||
|
|
|
|||
14
libs/libsndfile/AUTHORS
Normal file
14
libs/libsndfile/AUTHORS
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
The main author of libsndfile is Erik de Castro Lopo <erikd@mega-nerd.com>.
|
||||
|
||||
The code in the src/GSM610 directory was written by Jutta Degener
|
||||
<jutta@cs.tu-berlin.de> and Carsten Bormann <cabo@cs.tu-berlin.de>.
|
||||
They should not be contacted in relation to libsndfile or the GSM 6.10 code
|
||||
that is part of libsndfile. Their original code can be found at:
|
||||
|
||||
http://kbs.cs.tu-berlin.de/~jutta/toast.html
|
||||
|
||||
Code in the src/G72x directory was released by Sun Microsystems, Inc. to the
|
||||
public domain. Minor modifications were required to integrate these files
|
||||
into libsndfile. The changes are listed in src/G72x/ChangeLog.
|
||||
|
||||
|
||||
6107
libs/libsndfile/ChangeLog
Normal file
6107
libs/libsndfile/ChangeLog
Normal file
File diff suppressed because it is too large
Load diff
113
libs/libsndfile/Mingw-make-dist.sh
Executable file
113
libs/libsndfile/Mingw-make-dist.sh
Executable file
|
|
@ -0,0 +1,113 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Copyright (C) 2006 Erik de Castro Lopo <erikd@mega-nerd.com>
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# * Neither the author nor the names of any contributors may be used
|
||||
# to endorse or promote products derived from this software without
|
||||
# specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
set -e
|
||||
|
||||
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
|
||||
echo "Usage : Mingw-make-dist.sh <source tarball>."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TARGZ=$1
|
||||
if [ ! -f $TARGZ ]; then
|
||||
echo "Can't find source tarball."
|
||||
fi
|
||||
|
||||
TARGZ=$1
|
||||
if [ ! -f $TARGZ.asc ]; then
|
||||
echo "Can't find source tarball signature."
|
||||
fi
|
||||
|
||||
UNAME=`uname -s`
|
||||
if [ x$UNAME != "xMINGW32_NT-5.1" ]; then
|
||||
echo "Not able to build Win32 binaries on this platform."
|
||||
fi
|
||||
|
||||
echo "Building MinGW binary/source zip file."
|
||||
|
||||
VERSION=`pwd | sed -e "s#.*/##" | sed -e s/libsndfile-//`
|
||||
BUILD=`echo $VERSION | sed -e "s/\./_/g"`
|
||||
INSTALL="libsndfile-$BUILD"
|
||||
ZIPNAME="$INSTALL.zip"
|
||||
|
||||
if [ -z "$BUILD" ]; then
|
||||
echo "Bad BUILD variable : '$BUILD'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d $INSTALL/ ]; then
|
||||
mkdir $INSTALL
|
||||
fi
|
||||
|
||||
if [ ! -f config.status ]; then
|
||||
./configure --prefix=`pwd`/$INSTALL/
|
||||
else
|
||||
teststr=`grep "with options" config.status | grep -- --prefix=`
|
||||
if [ -z "$teststr" ]; then
|
||||
# --disable-static doesn't work.
|
||||
./configure --prefix=`pwd`/$INSTALL/
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -f src/.libs/libsndfile-1.dll ]; then
|
||||
make all check
|
||||
fi
|
||||
|
||||
if [ ! -f $INSTALL/bin/libsndfile-1.dll ]; then
|
||||
make install
|
||||
rm -f $INSTALL/bin/sndfile-regtest.exe
|
||||
strip $INSTALL/bin/*.*
|
||||
mv $INSTALL/bin/*.* $INSTALL/include/*.* $INSTALL/
|
||||
rmdir $INSTALL/bin
|
||||
rm -rf $INSTALL/lib
|
||||
rmdir $INSTALL/include
|
||||
cp src/libsndfile.def $INSTALL/
|
||||
cp Win32/README-precompiled-dll.txt $INSTALL/
|
||||
fi
|
||||
|
||||
if [ ! -f $INSTALL/libsndfile-$VERSION.tar.gz ]; then
|
||||
cp $TARGZ $INSTALL/
|
||||
if [ -f $TARGZ.asc ]; then
|
||||
cp $TARGZ.asc $INSTALL/
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -f $ZIPNAME ]; then
|
||||
zip -r $ZIPNAME $INSTALL/
|
||||
fi
|
||||
|
||||
|
||||
# Do not edit or modify anything in this comment block.
|
||||
# The following line is a file identity tag for the GNU Arch
|
||||
# revision control system.
|
||||
#
|
||||
# arch-tag: 3f82cd8a-f800-48d7-9646-2cdcf03c81a0
|
||||
126
libs/libsndfile/NEWS
Normal file
126
libs/libsndfile/NEWS
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
Version 1.0.16 (2006-04-30)
|
||||
* Add support for Broadcast (BEXT) chunks in WAV files.
|
||||
* Implement new commands SFC_GET_SIGNAL_MAX and SFC_GET_MAX_ALL_CHANNELS.
|
||||
* Add support for RIFX (big endian WAV variant).
|
||||
* Fix configure script bugs.
|
||||
* Fix bug in INST and MARK chunk writing for AIFF files.
|
||||
|
||||
Version 1.0.15 (2006-03-16)
|
||||
* Fix some ia64 issues.
|
||||
* Fix precompiled DLL.
|
||||
* Minor bug fixes.
|
||||
|
||||
Version 1.0.14 (2006-02-19)
|
||||
* Really fix MinGW compile problems.
|
||||
* Minor bug fixes.
|
||||
|
||||
Version 1.0.13 (2006-01-21)
|
||||
* Fix for MinGW compiler problems.
|
||||
* Allow readin/write of instrument chunks from WAV and AIFF files.
|
||||
* Compile problem fix for Solaris compiler.
|
||||
* Minor cleanups and bug fixes.
|
||||
|
||||
Version 1.0.12 (2005-09-30)
|
||||
* Add support for FLAC and Apple's Core Audio Format (CAF).
|
||||
* Add virtual I/O interface (still needs docs).
|
||||
* Cygwin and other Win32 fixes.
|
||||
* Minor bug fixes and cleanups.
|
||||
|
||||
Version 1.0.11 (2004-11-15)
|
||||
* Add support for SD2 files.
|
||||
* Add read support for loop info in WAV and AIFF files.
|
||||
* Add more tests.
|
||||
* Improve type safety.
|
||||
* Minor optimisations and bug fixes.
|
||||
|
||||
Version 1.0.10 (2004-06-15)
|
||||
* Fix AIFF read/write mode bugs.
|
||||
* Add support for compiling Win32 DLLS using MinGW.
|
||||
* Fix problems resulting in failed compiles with gcc-2.95.
|
||||
* Improve test suite.
|
||||
* Minor bug fixes.
|
||||
|
||||
Version 1.0.9 (2004-03-30)
|
||||
* Add handling of AVR (Audio Visual Research) files.
|
||||
* Improve handling of WAVEFORMATEXTENSIBLE WAV files.
|
||||
* Fix for using pipes on Win32.
|
||||
|
||||
Version 1.0.8 (2004-03-14)
|
||||
* Correct peak chunk handing for files with > 16 tracks.
|
||||
* Fix for WAV files with huge number of CUE chunks.
|
||||
|
||||
Version 1.0.7 (2004-02-25)
|
||||
* Fix clip mode detection on ia64, MIPS and other CPUs.
|
||||
* Fix two MacOSX build problems.
|
||||
|
||||
Version 1.0.6 (2004-02-08)
|
||||
* Added support for native Win32 file access API (Ross Bencina).
|
||||
* New mode to add clippling then a converting from float/double to integer
|
||||
would otherwise wrap around.
|
||||
* Fixed a bug in reading/writing files > 2Gig on Linux, Solaris and others.
|
||||
* Many minor bug fixes.
|
||||
* Other random fixes for Win32.
|
||||
|
||||
Version 1.0.5 (2003-05-03)
|
||||
* Added support for HTK files.
|
||||
* Added new function sf_open_fd() to allow for secure opening of temporary
|
||||
files as well as reading/writing sound files embedded within larger
|
||||
container files.
|
||||
* Added string support for AIFF files.
|
||||
* Minor bug fixes and code cleanups.
|
||||
|
||||
Version 1.0.4 (2003-02-02)
|
||||
* Added suport of PVF and XI files.
|
||||
* Added functionality for setting and retreiving strings from sound files.
|
||||
* Minor code cleanups and bug fixes.
|
||||
|
||||
Version 1.0.3 (2002-12-09)
|
||||
* Minor bug fixes.
|
||||
|
||||
Version 1.0.2 (2002-11-24)
|
||||
* Added support for VOX ADPCM.
|
||||
* Improved error reporting.
|
||||
* Added version scripting on Linux and Solaris.
|
||||
* Minor bug fixes.
|
||||
|
||||
Version 1.0.1 (2002-09-14)
|
||||
* Added MAT and MAT5 file formats.
|
||||
* Minor bug fixes.
|
||||
|
||||
Version 1.0.0 (2002-08-16)
|
||||
* Final release for 1.0.0.
|
||||
|
||||
Version 1.0.0rc6 (2002-08-14)
|
||||
* Release candidate 6 for the 1.0.0 series.
|
||||
* MacOS9 fixes.
|
||||
|
||||
Version 1.0.0rc5 (2002-08-10)
|
||||
* Release candidate 5 for the 1.0.0 series.
|
||||
* Changed the definition of sf_count_t which was causing problems when
|
||||
libsndfile was compiled with other libraries (ie WxWindows).
|
||||
* Minor bug fixes.
|
||||
* Documentation cleanup.
|
||||
|
||||
Version 1.0.0rc4 (2002-08-03)
|
||||
* Release candidate 4 for the 1.0.0 series.
|
||||
* Minor bug fixes.
|
||||
* Fix broken Win32 "make check".
|
||||
|
||||
Version 1.0.0rc3 (2002-08-02)
|
||||
* Release candidate 3 for the 1.0.0 series.
|
||||
* Fix bug where libsndfile was reading beyond the end of the data chunk.
|
||||
* Added on-the-fly header updates on write.
|
||||
* Fix a couple of documentation issues.
|
||||
|
||||
Version 1.0.0rc2 (2002-06-24)
|
||||
* Release candidate 2 for the 1.0.0 series.
|
||||
* Fix compile problem for Win32.
|
||||
|
||||
Version 1.0.0rc1 (2002-06-24)
|
||||
* Release candidate 1 for the 1.0.0 series.
|
||||
|
||||
Version 0.0.28 (2002-04-27)
|
||||
* Last offical release of 0.0.X series of the library.
|
||||
|
||||
Version 0.0.8 (1999-02-16)
|
||||
* First offical release.
|
||||
71
libs/libsndfile/README
Normal file
71
libs/libsndfile/README
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
This is libsndfile, 1.0.16
|
||||
|
||||
libsndfile is a library of C routines for reading and writing
|
||||
files containing sampled audio data.
|
||||
|
||||
The src/ directory contains the source code for library itself.
|
||||
|
||||
The doc/ directory contains the libsndfile documentation.
|
||||
|
||||
The examples/ directory contains examples of how to write code using
|
||||
libsndfile. 'wav32_aiff24' converts a WAV file containing 32 bit floating
|
||||
point data into a 24 bit PCM AIFF file. 'sndfile2oct' dumps the audio
|
||||
data of a file in a human readable format. 'sfconvert' is the beginnings
|
||||
of a audio file format conversion utility. 'make_sine' generates a WAV
|
||||
file containing one cycle of a sine wave with 4096 sample points in
|
||||
32 bit floating point format. 'sfinfo' opens a sound file and prints
|
||||
out information about that file.
|
||||
|
||||
The tests/ directory contains programs which link against libsndfile
|
||||
and test its functionality.
|
||||
|
||||
The Win32/ directory contains files and documentation to allow libsndfile
|
||||
to compile under Win32 with the Microsoft Visual C++ compiler.
|
||||
|
||||
The src/GSM610 directory contains code written by Jutta Degener and Carsten
|
||||
Bormann. Their original code can be found at :
|
||||
http://kbs.cs.tu-berlin.de/~jutta/toast.html
|
||||
|
||||
The src/G72x directory contains code written and released by Sun Microsystems
|
||||
under a suitably free license.
|
||||
|
||||
|
||||
Win32
|
||||
-----
|
||||
There are detailed instructions for building libsndfile on Win32 in the file
|
||||
|
||||
doc/win32.html
|
||||
|
||||
|
||||
MacOSX
|
||||
------
|
||||
Building on MacOSX should be the same as building it on any other Unix.
|
||||
|
||||
|
||||
OTHER PLATFORMS
|
||||
---------------
|
||||
To compile libsndfile on platforms which have a Bourne Shell compatible
|
||||
shell, an ANSI C compiler and a make utility should require no more that
|
||||
the following three commands :
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
|
||||
For platforms without the required shell, it is usually sufficient to
|
||||
create an approriate config.h file in the src/ directory with correct
|
||||
values for the following #defines (this would work for AmigaOS) :
|
||||
|
||||
#define HAVE_ENDIAN_H 0
|
||||
#define GUESS_BIG_ENDIAN 1
|
||||
#define GUESS_LITTLE_ENDIAN 0
|
||||
#define FORCE_BROKEN_FLOAT 0
|
||||
|
||||
|
||||
CONTACTS
|
||||
--------
|
||||
|
||||
libsndfile was written by Erik de Castro Lopo (erikd AT mega-nerd DOT com).
|
||||
The libsndfile home page is at :
|
||||
|
||||
http://www.mega-nerd.com/libsndfile/
|
||||
|
||||
43
libs/libsndfile/SConscript
Normal file
43
libs/libsndfile/SConscript
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
# -*- python -*-
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import glob
|
||||
|
||||
sndfile_files = glob.glob('src/*.c') + glob.glob('src/GSM610/*.c') + glob.glob('src/G72x/*.c')
|
||||
|
||||
Import('env install_prefix')
|
||||
sndfile = env.Copy()
|
||||
|
||||
domain = 'libsndfile'
|
||||
|
||||
sndfile.Append(CCFLAGS = "-DPACKAGE=\\\"" + domain + "\\\"")
|
||||
sndfile.Append(CCFLAGS = "-DVERSION=\\\"ardour-special\\\"")
|
||||
# mingw may need this
|
||||
#sndfile.Append(CCFLAGS="-no-undefined")
|
||||
sndfile.Append(PACKAGE = domain)
|
||||
sndfile.Append(POTFILE = domain + '.pot')
|
||||
|
||||
conf = Configure(sndfile)
|
||||
|
||||
if conf.CheckCHeader('/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h'):
|
||||
sndfile.Append(LINKFLAGS = "-framework CoreServices")
|
||||
|
||||
sndfile = conf.Finish()
|
||||
|
||||
libsndfile = sndfile.SharedLibrary('sndfile', sndfile_files)
|
||||
|
||||
sndfile_h = sndfile.Command('src/sndfile.h', ['src/sndfile.h.in'], 'cd libs/libsndfile && ./configure && cd -', ENV=os.environ)
|
||||
|
||||
Default([sndfile_h,libsndfile])
|
||||
|
||||
env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), libsndfile))
|
||||
|
||||
env.Alias('tarball', env.Distribute (env['DISTTREE'],
|
||||
[ 'NEWS', 'README', 'AUTHORS', 'ChangeLog',
|
||||
'configure', 'SConscript',] +
|
||||
sndfile_files +
|
||||
glob.glob('src/*.h') +
|
||||
[ 'src/sndfile.h.in', 'src/config.h.in', 'src/Symbols.linux', 'src/Symbols.darwin', 'src/libsndfile.def', 'src/cygsndfile.def' ]
|
||||
))
|
||||
|
||||
579
libs/libsndfile/acinclude.m4
Normal file
579
libs/libsndfile/acinclude.m4
Normal file
|
|
@ -0,0 +1,579 @@
|
|||
dnl By default, many hosts won't let programs access large files;
|
||||
dnl one must use special compiler options to get large-file access to work.
|
||||
dnl For more details about this brain damage please see:
|
||||
dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
|
||||
|
||||
dnl Written by Paul Eggert <eggert@twinsun.com>.
|
||||
|
||||
dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
|
||||
dnl AC_SYS_EXTRA_LARGEFILE_FLAGS(FLAGSNAME)
|
||||
AC_DEFUN([AC_SYS_EXTRA_LARGEFILE_FLAGS],
|
||||
[AC_CACHE_CHECK([for $1 value to request large file support],
|
||||
ac_cv_sys_largefile_$1,
|
||||
[ac_cv_sys_largefile_$1=`($GETCONF LFS_$1) 2>/dev/null` || {
|
||||
ac_cv_sys_largefile_$1=no
|
||||
ifelse($1, CFLAGS,
|
||||
[case "$host_os" in
|
||||
# IRIX 6.2 and later require cc -n32.
|
||||
changequote(, )dnl
|
||||
irix6.[2-9]* | irix6.1[0-9]* | irix[7-9].* | irix[1-9][0-9]*)
|
||||
changequote([, ])dnl
|
||||
if test "$GCC" != yes; then
|
||||
ac_cv_sys_largefile_CFLAGS=-n32
|
||||
fi
|
||||
ac_save_CC="$CC"
|
||||
CC="$CC $ac_cv_sys_largefile_CFLAGS"
|
||||
AC_TRY_LINK(, , , ac_cv_sys_largefile_CFLAGS=no)
|
||||
CC="$ac_save_CC"
|
||||
esac])
|
||||
}])])
|
||||
|
||||
dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
|
||||
dnl AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(VAR, VAL)
|
||||
AC_DEFUN([AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND],
|
||||
[case $2 in
|
||||
no) ;;
|
||||
?*)
|
||||
case "[$]$1" in
|
||||
'') $1=$2 ;;
|
||||
*) $1=[$]$1' '$2 ;;
|
||||
esac ;;
|
||||
esac])
|
||||
|
||||
dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
|
||||
dnl AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(C-MACRO, CACHE-VAR, COMMENT, CODE-TO-SET-DEFAULT)
|
||||
AC_DEFUN([AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE],
|
||||
[AC_CACHE_CHECK([for $1], $2,
|
||||
[$2=no
|
||||
changequote(, )dnl
|
||||
$4
|
||||
for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
|
||||
case "$ac_flag" in
|
||||
-D$1)
|
||||
$2=1 ;;
|
||||
-D$1=*)
|
||||
$2=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
|
||||
esac
|
||||
done
|
||||
changequote([, ])dnl
|
||||
])
|
||||
if test "[$]$2" != no; then
|
||||
AC_DEFINE_UNQUOTED([$1], [$]$2, [$3])
|
||||
fi])
|
||||
|
||||
AC_DEFUN([AC_SYS_EXTRA_LARGEFILE],
|
||||
[AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
AC_ARG_ENABLE(largefile,
|
||||
[ --disable-largefile omit support for large files])
|
||||
if test "$enable_largefile" != no; then
|
||||
AC_CHECK_TOOL(GETCONF, getconf)
|
||||
AC_SYS_EXTRA_LARGEFILE_FLAGS(CFLAGS)
|
||||
AC_SYS_EXTRA_LARGEFILE_FLAGS(LDFLAGS)
|
||||
AC_SYS_EXTRA_LARGEFILE_FLAGS(LIBS)
|
||||
|
||||
for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
|
||||
case "$ac_flag" in
|
||||
no) ;;
|
||||
-D_FILE_OFFSET_BITS=*) ;;
|
||||
-D_LARGEFILE_SOURCE | -D_LARGEFILE_SOURCE=*) ;;
|
||||
-D_LARGE_FILES | -D_LARGE_FILES=*) ;;
|
||||
-D?* | -I?*)
|
||||
AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(CPPFLAGS, "$ac_flag") ;;
|
||||
*)
|
||||
AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(CFLAGS, "$ac_flag") ;;
|
||||
esac
|
||||
done
|
||||
AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(LDFLAGS, "$ac_cv_sys_largefile_LDFLAGS")
|
||||
AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(LIBS, "$ac_cv_sys_largefile_LIBS")
|
||||
AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS,
|
||||
ac_cv_sys_file_offset_bits,
|
||||
[Number of bits in a file offset, on hosts where this is settable.])
|
||||
[case "$host_os" in
|
||||
# HP-UX 10.20 and later
|
||||
hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
|
||||
ac_cv_sys_file_offset_bits=64 ;;
|
||||
esac]
|
||||
AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE,
|
||||
ac_cv_sys_largefile_source,
|
||||
[Define to make fseeko etc. visible, on some hosts.],
|
||||
[case "$host_os" in
|
||||
# HP-UX 10.20 and later
|
||||
hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
|
||||
ac_cv_sys_largefile_source=1 ;;
|
||||
esac])
|
||||
AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_LARGE_FILES,
|
||||
ac_cv_sys_large_files,
|
||||
[Define for large files, on AIX-style hosts.],
|
||||
[case "$host_os" in
|
||||
# AIX 4.2 and later
|
||||
aix4.[2-9]* | aix4.1[0-9]* | aix[5-9].* | aix[1-9][0-9]*)
|
||||
ac_cv_sys_large_files=1 ;;
|
||||
esac])
|
||||
fi
|
||||
])
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
dnl @synopsis AC_C_FIND_ENDIAN
|
||||
dnl
|
||||
dnl Determine endian-ness of target processor.
|
||||
dnl @version 1.1 Mar 03 2002
|
||||
dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
|
||||
dnl
|
||||
dnl Majority written from scratch to replace the standard autoconf macro
|
||||
dnl AC_C_BIGENDIAN. Only part remaining from the original it the invocation
|
||||
dnl of the AC_TRY_RUN macro.
|
||||
dnl
|
||||
dnl Permission to use, copy, modify, distribute, and sell this file for any
|
||||
dnl purpose is hereby granted without fee, provided that the above copyright
|
||||
dnl and this permission notice appear in all copies. No representations are
|
||||
dnl made about the suitability of this software for any purpose. It is
|
||||
dnl provided "as is" without express or implied warranty.
|
||||
|
||||
dnl Find endian-ness in the following way:
|
||||
dnl 1) Look in <endian.h>.
|
||||
dnl 2) If 1) fails, look in <sys/types.h> and <sys/param.h>.
|
||||
dnl 3) If 1) and 2) fails and not cross compiling run a test program.
|
||||
dnl 4) If 1) and 2) fails and cross compiling then guess based on target.
|
||||
|
||||
AC_DEFUN([AC_C_FIND_ENDIAN],
|
||||
[AC_CACHE_CHECK(processor byte ordering,
|
||||
ac_cv_c_byte_order,
|
||||
|
||||
# Initialize to unknown
|
||||
ac_cv_c_byte_order=unknown
|
||||
|
||||
if test x$ac_cv_header_endian_h = xyes ; then
|
||||
|
||||
# First try <endian.h> which should set BYTE_ORDER.
|
||||
|
||||
[AC_TRY_LINK([
|
||||
#include <endian.h>
|
||||
#if BYTE_ORDER != LITTLE_ENDIAN
|
||||
not big endian
|
||||
#endif
|
||||
], return 0 ;,
|
||||
ac_cv_c_byte_order=little
|
||||
)]
|
||||
|
||||
[AC_TRY_LINK([
|
||||
#include <endian.h>
|
||||
#if BYTE_ORDER != BIG_ENDIAN
|
||||
not big endian
|
||||
#endif
|
||||
], return 0 ;,
|
||||
ac_cv_c_byte_order=big
|
||||
)]
|
||||
|
||||
fi
|
||||
|
||||
if test $ac_cv_c_byte_order = unknown ; then
|
||||
|
||||
[AC_TRY_LINK([
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
|
||||
bogus endian macros
|
||||
#endif
|
||||
], return 0 ;,
|
||||
|
||||
[AC_TRY_LINK([
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#if BYTE_ORDER != LITTLE_ENDIAN
|
||||
not big endian
|
||||
#endif
|
||||
], return 0 ;,
|
||||
ac_cv_c_byte_order=little
|
||||
)]
|
||||
|
||||
[AC_TRY_LINK([
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#if BYTE_ORDER != LITTLE_ENDIAN
|
||||
not big endian
|
||||
#endif
|
||||
], return 0 ;,
|
||||
ac_cv_c_byte_order=little
|
||||
)]
|
||||
|
||||
)]
|
||||
|
||||
fi
|
||||
|
||||
if test $ac_cv_c_byte_order = unknown ; then
|
||||
if test $cross_compiling = yes ; then
|
||||
# This is the last resort. Try to guess the target processor endian-ness
|
||||
# by looking at the target CPU type.
|
||||
[
|
||||
case "$target_cpu" in
|
||||
alpha* | i?86* | mipsel* | ia64*)
|
||||
ac_cv_c_big_endian=0
|
||||
ac_cv_c_little_endian=1
|
||||
;;
|
||||
|
||||
m68* | mips* | powerpc* | hppa* | sparc*)
|
||||
ac_cv_c_big_endian=1
|
||||
ac_cv_c_little_endian=0
|
||||
;;
|
||||
|
||||
esac
|
||||
]
|
||||
else
|
||||
AC_TRY_RUN(
|
||||
[[
|
||||
int main (void)
|
||||
{ /* Are we little or big endian? From Harbison&Steele. */
|
||||
union
|
||||
{ long l ;
|
||||
char c [sizeof (long)] ;
|
||||
} u ;
|
||||
u.l = 1 ;
|
||||
return (u.c [sizeof (long) - 1] == 1);
|
||||
}
|
||||
]], , ac_cv_c_byte_order=big,
|
||||
ac_cv_c_byte_order=unknown
|
||||
)
|
||||
|
||||
AC_TRY_RUN(
|
||||
[[int main (void)
|
||||
{ /* Are we little or big endian? From Harbison&Steele. */
|
||||
union
|
||||
{ long l ;
|
||||
char c [sizeof (long)] ;
|
||||
} u ;
|
||||
u.l = 1 ;
|
||||
return (u.c [0] == 1);
|
||||
}]], , ac_cv_c_byte_order=little,
|
||||
ac_cv_c_byte_order=unknown
|
||||
)
|
||||
fi
|
||||
fi
|
||||
|
||||
)
|
||||
]
|
||||
|
||||
if test $ac_cv_c_byte_order = big ; then
|
||||
ac_cv_c_big_endian=1
|
||||
ac_cv_c_little_endian=0
|
||||
elif test $ac_cv_c_byte_order = little ; then
|
||||
ac_cv_c_big_endian=0
|
||||
ac_cv_c_little_endian=1
|
||||
else
|
||||
ac_cv_c_big_endian=0
|
||||
ac_cv_c_little_endian=0
|
||||
|
||||
AC_MSG_WARN([[*****************************************************************]])
|
||||
AC_MSG_WARN([[*** Not able to determine endian-ness of target processor. ]])
|
||||
AC_MSG_WARN([[*** The constants CPU_IS_BIG_ENDIAN and CPU_IS_LITTLE_ENDIAN in ]])
|
||||
AC_MSG_WARN([[*** src/config.h may need to be hand editied. ]])
|
||||
AC_MSG_WARN([[*****************************************************************]])
|
||||
fi
|
||||
|
||||
)# AC_C_FIND_ENDIAN
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
dnl @synopsis AC_C99_FLEXIBLE_ARRAY
|
||||
dnl
|
||||
dnl Dose the compiler support the 1999 ISO C Standard "stuct hack".
|
||||
dnl @version 1.1 Mar 15 2004
|
||||
dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
|
||||
dnl
|
||||
dnl Permission to use, copy, modify, distribute, and sell this file for any
|
||||
dnl purpose is hereby granted without fee, provided that the above copyright
|
||||
dnl and this permission notice appear in all copies. No representations are
|
||||
dnl made about the suitability of this software for any purpose. It is
|
||||
dnl provided "as is" without express or implied warranty.
|
||||
|
||||
AC_DEFUN([AC_C99_FLEXIBLE_ARRAY],
|
||||
[AC_CACHE_CHECK(C99 struct flexible array support,
|
||||
ac_cv_c99_flexible_array,
|
||||
|
||||
# Initialize to unknown
|
||||
ac_cv_c99_flexible_array=no
|
||||
|
||||
AC_TRY_LINK([[
|
||||
#include <stdlib.h>
|
||||
typedef struct {
|
||||
int k;
|
||||
char buffer [] ;
|
||||
} MY_STRUCT ;
|
||||
]],
|
||||
[ MY_STRUCT *p = calloc (1, sizeof (MY_STRUCT) + 42); ],
|
||||
ac_cv_c99_flexible_array=yes,
|
||||
ac_cv_c99_flexible_array=no
|
||||
))]
|
||||
) # AC_C99_FLEXIBLE_ARRAY
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
dnl @synopsis AC_C99_FUNC_LRINT
|
||||
dnl
|
||||
dnl Check whether C99's lrint function is available.
|
||||
dnl @version 1.3 Feb 12 2002
|
||||
dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
|
||||
dnl
|
||||
dnl Permission to use, copy, modify, distribute, and sell this file for any
|
||||
dnl purpose is hereby granted without fee, provided that the above copyright
|
||||
dnl and this permission notice appear in all copies. No representations are
|
||||
dnl made about the suitability of this software for any purpose. It is
|
||||
dnl provided "as is" without express or implied warranty.
|
||||
dnl
|
||||
AC_DEFUN([AC_C99_FUNC_LRINT],
|
||||
[AC_CACHE_CHECK(for lrint,
|
||||
ac_cv_c99_lrint,
|
||||
[
|
||||
lrint_save_CFLAGS=$CFLAGS
|
||||
CFLAGS="-O2 -lm"
|
||||
AC_TRY_LINK([
|
||||
#define _ISOC9X_SOURCE 1
|
||||
#define _ISOC99_SOURCE 1
|
||||
#define __USE_ISOC99 1
|
||||
#define __USE_ISOC9X 1
|
||||
|
||||
#include <math.h>
|
||||
], if (!lrint(3.14159)) lrint(2.7183);, ac_cv_c99_lrint=yes, ac_cv_c99_lrint=no)
|
||||
|
||||
CFLAGS=$lrint_save_CFLAGS
|
||||
|
||||
])
|
||||
|
||||
if test "$ac_cv_c99_lrint" = yes; then
|
||||
AC_DEFINE(HAVE_LRINT, 1,
|
||||
[Define if you have C99's lrint function.])
|
||||
fi
|
||||
])# AC_C99_FUNC_LRINT
|
||||
dnl @synopsis AC_C99_FUNC_LRINTF
|
||||
dnl
|
||||
dnl Check whether C99's lrintf function is available.
|
||||
dnl @version 1.3 Feb 12 2002
|
||||
dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
|
||||
dnl
|
||||
dnl Permission to use, copy, modify, distribute, and sell this file for any
|
||||
dnl purpose is hereby granted without fee, provided that the above copyright
|
||||
dnl and this permission notice appear in all copies. No representations are
|
||||
dnl made about the suitability of this software for any purpose. It is
|
||||
dnl provided "as is" without express or implied warranty.
|
||||
dnl
|
||||
AC_DEFUN([AC_C99_FUNC_LRINTF],
|
||||
[AC_CACHE_CHECK(for lrintf,
|
||||
ac_cv_c99_lrintf,
|
||||
[
|
||||
lrintf_save_CFLAGS=$CFLAGS
|
||||
CFLAGS="-O2 -lm"
|
||||
AC_TRY_LINK([
|
||||
#define _ISOC9X_SOURCE 1
|
||||
#define _ISOC99_SOURCE 1
|
||||
#define __USE_ISOC99 1
|
||||
#define __USE_ISOC9X 1
|
||||
|
||||
#include <math.h>
|
||||
], if (!lrintf(3.14159)) lrintf(2.7183);, ac_cv_c99_lrintf=yes, ac_cv_c99_lrintf=no)
|
||||
|
||||
CFLAGS=$lrintf_save_CFLAGS
|
||||
|
||||
])
|
||||
|
||||
if test "$ac_cv_c99_lrintf" = yes; then
|
||||
AC_DEFINE(HAVE_LRINTF, 1,
|
||||
[Define if you have C99's lrintf function.])
|
||||
fi
|
||||
])# AC_C99_FUNC_LRINTF
|
||||
|
||||
|
||||
|
||||
|
||||
dnl @synopsis AC_C99_FUNC_LLRINT
|
||||
dnl
|
||||
dnl Check whether C99's llrint function is available.
|
||||
dnl @version 1.1 Sep 30 2002
|
||||
dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
|
||||
dnl
|
||||
dnl Permission to use, copy, modify, distribute, and sell this file for any
|
||||
dnl purpose is hereby granted without fee, provided that the above copyright
|
||||
dnl and this permission notice appear in all copies. No representations are
|
||||
dnl made about the suitability of this software for any purpose. It is
|
||||
dnl provided "as is" without express or implied warranty.
|
||||
dnl
|
||||
AC_DEFUN([AC_C99_FUNC_LLRINT],
|
||||
[AC_CACHE_CHECK(for llrint,
|
||||
ac_cv_c99_llrint,
|
||||
[
|
||||
llrint_save_CFLAGS=$CFLAGS
|
||||
CFLAGS="-O2 -lm"
|
||||
AC_TRY_LINK([
|
||||
#define _ISOC9X_SOURCE 1
|
||||
#define _ISOC99_SOURCE 1
|
||||
#define __USE_ISOC99 1
|
||||
#define __USE_ISOC9X 1
|
||||
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
], int64_t x ; x = llrint(3.14159) ;, ac_cv_c99_llrint=yes, ac_cv_c99_llrint=no)
|
||||
|
||||
CFLAGS=$llrint_save_CFLAGS
|
||||
|
||||
])
|
||||
|
||||
if test "$ac_cv_c99_llrint" = yes; then
|
||||
AC_DEFINE(HAVE_LLRINT, 1,
|
||||
[Define if you have C99's llrint function.])
|
||||
fi
|
||||
])# AC_C99_FUNC_LLRINT
|
||||
|
||||
|
||||
|
||||
dnl @synopsis AC_C_CLIP_MODE
|
||||
dnl
|
||||
dnl Determine the clipping mode when converting float to int.
|
||||
dnl @version 1.0 May 17 2003
|
||||
dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
|
||||
dnl
|
||||
dnl Permission to use, copy, modify, distribute, and sell this file for any
|
||||
dnl purpose is hereby granted without fee, provided that the above copyright
|
||||
dnl and this permission notice appear in all copies. No representations are
|
||||
dnl made about the suitability of this software for any purpose. It is
|
||||
dnl provided "as is" without express or implied warranty.
|
||||
|
||||
|
||||
|
||||
dnl Find the clipping mode in the following way:
|
||||
dnl 1) If we are not cross compiling test it.
|
||||
dnl 2) IF we are cross compiling, assume that clipping isn't done correctly.
|
||||
|
||||
AC_DEFUN([AC_C_CLIP_MODE],
|
||||
[AC_CACHE_CHECK(processor clipping capabilities,
|
||||
ac_cv_c_clip_type,
|
||||
|
||||
# Initialize to unknown
|
||||
ac_cv_c_clip_positive=unknown
|
||||
ac_cv_c_clip_negative=unknown
|
||||
|
||||
if test $ac_cv_c_clip_positive = unknown ; then
|
||||
AC_TRY_RUN(
|
||||
[[
|
||||
#define _ISOC9X_SOURCE 1
|
||||
#define _ISOC99_SOURCE 1
|
||||
#define __USE_ISOC99 1
|
||||
#define __USE_ISOC9X 1
|
||||
#include <math.h>
|
||||
int main (void)
|
||||
{ double fval ;
|
||||
int k, ival ;
|
||||
|
||||
fval = 1.0 * 0x7FFFFFFF ;
|
||||
for (k = 0 ; k < 100 ; k++)
|
||||
{ ival = (lrint (fval)) >> 24 ;
|
||||
if (ival != 127)
|
||||
return 1 ;
|
||||
|
||||
fval *= 1.2499999 ;
|
||||
} ;
|
||||
|
||||
return 0 ;
|
||||
}
|
||||
]],
|
||||
ac_cv_c_clip_positive=yes,
|
||||
ac_cv_c_clip_positive=no,
|
||||
ac_cv_c_clip_positive=unknown
|
||||
)
|
||||
|
||||
AC_TRY_RUN(
|
||||
[[
|
||||
#define _ISOC9X_SOURCE 1
|
||||
#define _ISOC99_SOURCE 1
|
||||
#define __USE_ISOC99 1
|
||||
#define __USE_ISOC9X 1
|
||||
#include <math.h>
|
||||
int main (void)
|
||||
{ double fval ;
|
||||
int k, ival ;
|
||||
|
||||
fval = -8.0 * 0x10000000 ;
|
||||
for (k = 0 ; k < 100 ; k++)
|
||||
{ ival = (lrint (fval)) >> 24 ;
|
||||
if (ival != -128)
|
||||
return 1 ;
|
||||
|
||||
fval *= 1.2499999 ;
|
||||
} ;
|
||||
|
||||
return 0 ;
|
||||
}
|
||||
]],
|
||||
ac_cv_c_clip_negative=yes,
|
||||
ac_cv_c_clip_negative=no,
|
||||
ac_cv_c_clip_negative=unknown
|
||||
)
|
||||
fi
|
||||
|
||||
if test $ac_cv_c_clip_positive = yes ; then
|
||||
ac_cv_c_clip_positive=1
|
||||
else
|
||||
ac_cv_c_clip_positive=0
|
||||
fi
|
||||
|
||||
if test $ac_cv_c_clip_negative = yes ; then
|
||||
ac_cv_c_clip_negative=1
|
||||
else
|
||||
ac_cv_c_clip_negative=0
|
||||
fi
|
||||
|
||||
[[
|
||||
case "$ac_cv_c_clip_positive$ac_cv_c_clip_negative" in
|
||||
"00")
|
||||
ac_cv_c_clip_type="none"
|
||||
;;
|
||||
"10")
|
||||
ac_cv_c_clip_type="positive"
|
||||
;;
|
||||
"01")
|
||||
ac_cv_c_clip_type="negative"
|
||||
;;
|
||||
"11")
|
||||
ac_cv_c_clip_type="both"
|
||||
;;
|
||||
esac
|
||||
]]
|
||||
|
||||
)
|
||||
]
|
||||
|
||||
)# AC_C_CLIP_MODE
|
||||
|
||||
|
||||
dnl @synopsis AC_ADD_CFLAGS
|
||||
dnl
|
||||
dnl Add the given option to CFLAGS, if it doesn't break the compiler
|
||||
|
||||
AC_DEFUN([AC_ADD_CFLAGS],
|
||||
[AC_MSG_CHECKING([if $CC accepts $1])
|
||||
ac_add_cflags__old_cflags="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $1"
|
||||
AC_TRY_LINK([#include <stdio.h>],
|
||||
[printf("Hello, World!\n"); return 0;],
|
||||
AC_MSG_RESULT([yes]),
|
||||
AC_MSG_RESULT([no])
|
||||
CFLAGS="$ac_add_cflags__old_cflags")
|
||||
])
|
||||
|
||||
|
||||
|
||||
|
||||
ifelse(dnl
|
||||
|
||||
Do not edit or modify anything in this comment block.
|
||||
The arch-tag line is a file identity tag for the GNU Arch
|
||||
revision control system.
|
||||
|
||||
arch-tag: bc38294d-bb5c-42ad-90b9-779def5eaab7
|
||||
|
||||
)dnl
|
||||
72
libs/libsndfile/aclocal.m4
vendored
Normal file
72
libs/libsndfile/aclocal.m4
vendored
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
# generated automatically by aclocal 1.9.2 -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
||||
# Free Software Foundation, Inc.
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
|
||||
dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
|
||||
dnl also defines GSTUFF_PKG_ERRORS on error
|
||||
AC_DEFUN([PKG_CHECK_MODULES], [
|
||||
succeeded=no
|
||||
|
||||
if test -z "$PKG_CONFIG"; then
|
||||
AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
|
||||
fi
|
||||
|
||||
if test "$PKG_CONFIG" = "no" ; then
|
||||
echo "*** The pkg-config script could not be found. Make sure it is"
|
||||
echo "*** in your path, or set the PKG_CONFIG environment variable"
|
||||
echo "*** to the full path to pkg-config."
|
||||
echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
|
||||
else
|
||||
PKG_CONFIG_MIN_VERSION=0.9.0
|
||||
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
|
||||
AC_MSG_CHECKING(for $2)
|
||||
|
||||
if $PKG_CONFIG --exists "$2" ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
succeeded=yes
|
||||
|
||||
AC_MSG_CHECKING($1_CFLAGS)
|
||||
$1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
|
||||
AC_MSG_RESULT($$1_CFLAGS)
|
||||
|
||||
AC_MSG_CHECKING($1_LIBS)
|
||||
$1_LIBS=`$PKG_CONFIG --libs "$2"`
|
||||
AC_MSG_RESULT($$1_LIBS)
|
||||
else
|
||||
$1_CFLAGS=""
|
||||
$1_LIBS=""
|
||||
## If we have a custom action on failure, don't print errors, but
|
||||
## do set a variable so people can do so.
|
||||
$1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
|
||||
ifelse([$4], ,echo $$1_PKG_ERRORS,)
|
||||
fi
|
||||
|
||||
AC_SUBST($1_CFLAGS)
|
||||
AC_SUBST($1_LIBS)
|
||||
else
|
||||
echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
|
||||
echo "*** See http://www.freedesktop.org/software/pkgconfig"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $succeeded = yes; then
|
||||
ifelse([$3], , :, [$3])
|
||||
else
|
||||
ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
|
||||
fi
|
||||
])
|
||||
|
||||
|
||||
|
||||
m4_include([acinclude.m4])
|
||||
107
libs/libsndfile/compile
Executable file
107
libs/libsndfile/compile
Executable file
|
|
@ -0,0 +1,107 @@
|
|||
#! /bin/sh
|
||||
|
||||
# Wrapper for compilers which do not understand `-c -o'.
|
||||
|
||||
# Copyright 1999, 2000 Free Software Foundation, Inc.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Usage:
|
||||
# compile PROGRAM [ARGS]...
|
||||
# `-o FOO.o' is removed from the args passed to the actual compile.
|
||||
|
||||
# Usage statement added by Billy Biggs <vektor@dumbterm.net>.
|
||||
if [ -z $1 ]; then
|
||||
echo "Wrapper for compilers which do not understand '-c -o'."
|
||||
echo "usage: compile PROGRAM [ARGS]..."
|
||||
echo "'-o FOO.o' is removed from the args passed to the actual compile."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
prog=$1
|
||||
shift
|
||||
|
||||
ofile=
|
||||
cfile=
|
||||
args=
|
||||
while test $# -gt 0; do
|
||||
case "$1" in
|
||||
-o)
|
||||
# configure might choose to run compile as `compile cc -o foo foo.c'.
|
||||
# So we do something ugly here.
|
||||
ofile=$2
|
||||
shift
|
||||
case "$ofile" in
|
||||
*.o | *.obj)
|
||||
;;
|
||||
*)
|
||||
args="$args -o $ofile"
|
||||
ofile=
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*.c)
|
||||
cfile=$1
|
||||
args="$args $1"
|
||||
;;
|
||||
*)
|
||||
args="$args $1"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if test -z "$ofile" || test -z "$cfile"; then
|
||||
# If no `-o' option was seen then we might have been invoked from a
|
||||
# pattern rule where we don't need one. That is ok -- this is a
|
||||
# normal compilation that the losing compiler can handle. If no
|
||||
# `.c' file was seen then we are probably linking. That is also
|
||||
# ok.
|
||||
exec "$prog" $args
|
||||
fi
|
||||
|
||||
# Name of file we expect compiler to create.
|
||||
cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
|
||||
|
||||
# Create the lock directory.
|
||||
# Note: use `[/.-]' here to ensure that we don't use the same name
|
||||
# that we are using for the .o file. Also, base the name on the expected
|
||||
# object file name, since that is what matters with a parallel build.
|
||||
lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d
|
||||
while true; do
|
||||
if mkdir $lockdir > /dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
# FIXME: race condition here if user kills between mkdir and trap.
|
||||
trap "rmdir $lockdir; exit 1" 1 2 15
|
||||
|
||||
# Run the compile.
|
||||
"$prog" $args
|
||||
status=$?
|
||||
|
||||
if test -f "$cofile"; then
|
||||
mv "$cofile" "$ofile"
|
||||
fi
|
||||
|
||||
rmdir $lockdir
|
||||
exit $status
|
||||
1497
libs/libsndfile/config.guess
vendored
Executable file
1497
libs/libsndfile/config.guess
vendored
Executable file
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue