annotate system/System.h @ 299:576be0d0d218

* Merge transform directory from sv-match-alignment branch (the previous comment included notes for this stuff, but I missed it in the actual merge) * Fix crash when a transform fails to create an output model and the thread that created the transform then deletes its input model thinking it's no longer needed, even though the transform run thread is still using it -- fix is to wait() on the transform before returning the null output model
author Chris Cannam
date Fri, 28 Sep 2007 16:15:06 +0000
parents 7033e188b2b2
children 15b47d30c085
rev   line source
Chris@150 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@150 2
Chris@150 3 /*
Chris@150 4 Sonic Visualiser
Chris@150 5 An audio file viewer and annotation editor.
Chris@150 6 Centre for Digital Music, Queen Mary, University of London.
Chris@202 7 This file copyright 2006 Chris Cannam and QMUL.
Chris@150 8
Chris@150 9 This program is free software; you can redistribute it and/or
Chris@150 10 modify it under the terms of the GNU General Public License as
Chris@150 11 published by the Free Software Foundation; either version 2 of the
Chris@150 12 License, or (at your option) any later version. See the file
Chris@150 13 COPYING included with this distribution for more information.
Chris@150 14 */
Chris@150 15
Chris@150 16 #ifndef _SYSTEM_H_
Chris@150 17 #define _SYSTEM_H_
Chris@150 18
Chris@150 19 #ifdef _WIN32
Chris@150 20
Chris@150 21 #include <windows.h>
Chris@150 22 #include <malloc.h>
Chris@150 23 #include <process.h>
Chris@150 24
Chris@150 25 #define MLOCK(a,b) 1
Chris@150 26 #define MUNLOCK(a,b) 1
Chris@150 27 #define MUNLOCK_SAMPLEBLOCK(a) 1
Chris@150 28
Chris@150 29 #define DLOPEN(a,b) LoadLibrary((a).toStdWString().c_str())
Chris@150 30 #define DLSYM(a,b) GetProcAddress((HINSTANCE)(a),(b))
Chris@223 31 #define DLCLOSE(a) (!FreeLibrary((HINSTANCE)(a)))
Chris@150 32 #define DLERROR() ""
Chris@150 33
Chris@150 34 #define PLUGIN_GLOB "*.dll"
Chris@223 35 #define PATH_SEPARATOR ';'
Chris@186 36
Chris@219 37 // The default Vamp plugin path is obtained from a function in the
Chris@219 38 // Vamp SDK (Vamp::PluginHostAdapter::getPluginPath).
Chris@186 39
Chris@219 40 // At the time of writing, at least, the vast majority of LADSPA
Chris@219 41 // plugins on Windows hosts will have been put there for use in
Chris@219 42 // Audacity. It's a bit of a shame that Audacity uses its own Program
Chris@219 43 // Files directory for plugins that any host may want to use... maybe
Chris@219 44 // they were just following the example of VSTs, which are usually
Chris@219 45 // found in Steinberg's Program Files directory. Anyway, we can
Chris@219 46 // greatly increase our chances of picking up some LADSPA plugins by
Chris@219 47 // default if we include the Audacity plugin location as well as an
Chris@219 48 // (imho) more sensible place.
Chris@219 49
Chris@223 50 #define DEFAULT_LADSPA_PATH "%ProgramFiles%\\LADSPA Plugins;%ProgramFiles%\\Audacity\\Plug-Ins"
Chris@186 51 #define DEFAULT_DSSI_PATH "%ProgramFiles%\\DSSI Plugins"
Chris@150 52
Chris@150 53 #define getpid _getpid
Chris@150 54
Chris@150 55 extern "C" {
Chris@150 56 void usleep(unsigned long usec);
Chris@150 57 void gettimeofday(struct timeval *p, void *tz);
Chris@150 58 }
Chris@150 59
Chris@150 60 #else
Chris@150 61
Chris@150 62 #include <sys/mman.h>
Chris@150 63 #include <dlfcn.h>
Chris@150 64
Chris@150 65 #define MLOCK(a,b) ::mlock((a),(b))
Chris@150 66 #define MUNLOCK(a,b) (::munlock((a),(b)) ? (::perror("munlock failed"), 0) : 0)
Chris@150 67 #define MUNLOCK_SAMPLEBLOCK(a) do { if (!(a).empty()) { const float &b = *(a).begin(); MUNLOCK(&b, (a).capacity() * sizeof(float)); } } while(0);
Chris@232 68 //#define MLOCK(a,b) 1
Chris@232 69 //#define MUNLOCK(a,b) 1
Chris@232 70 //#define MUNLOCK_SAMPLEBLOCK(a) 1
Chris@150 71
Chris@150 72 #define DLOPEN(a,b) dlopen((a).toStdString().c_str(),(b))
Chris@150 73 #define DLSYM(a,b) dlsym((a),(b))
Chris@150 74 #define DLCLOSE(a) dlclose((a))
Chris@150 75 #define DLERROR() dlerror()
Chris@150 76
Chris@150 77 #ifdef __APPLE__
Chris@150 78
Chris@255 79 #define PLUGIN_GLOB "*.dylib *.so"
Chris@223 80 #define PATH_SEPARATOR ':'
Chris@186 81
Chris@186 82 #define DEFAULT_LADSPA_PATH "$HOME/Library/Audio/Plug-Ins/LADSPA:/Library/Audio/Plug-Ins/LADSPA"
Chris@186 83 #define DEFAULT_DSSI_PATH "$HOME/Library/Audio/Plug-Ins/DSSI:/Library/Audio/Plug-Ins/DSSI"
Chris@150 84
Chris@150 85 #else
Chris@150 86
Chris@150 87 #define PLUGIN_GLOB "*.so"
Chris@223 88 #define PATH_SEPARATOR ':'
Chris@186 89
Chris@186 90 #define DEFAULT_LADSPA_PATH "$HOME/ladspa:$HOME/.ladspa:/usr/local/lib/ladspa:/usr/lib/ladspa"
Chris@186 91 #define DEFAULT_DSSI_PATH "$HOME/dssi:$HOME/.dssi:/usr/local/lib/dssi:/usr/lib/dssi"
Chris@150 92
Chris@150 93 #endif /* __APPLE__ */
Chris@150 94
Chris@150 95 #endif /* ! _WIN32 */
Chris@150 96
Chris@150 97 enum ProcessStatus { ProcessRunning, ProcessNotRunning, UnknownProcessStatus };
Chris@150 98 extern ProcessStatus GetProcessStatus(int pid);
Chris@150 99
Chris@168 100 // Return a vague approximation to the number of free megabytes of real memory.
Chris@168 101 // Return -1 if unknown.
Chris@170 102 extern void GetRealMemoryMBAvailable(int &available, int &total);
Chris@168 103
Chris@168 104 // Return a vague approximation to the number of free megabytes of disc space
Chris@168 105 // on the partition containing the given path. Return -1 if unknown.
Chris@168 106 extern int GetDiscSpaceMBAvailable(const char *path);
Chris@168 107
Chris@150 108 #include <cmath>
Chris@150 109
Chris@150 110 extern double mod(double x, double y);
Chris@150 111 extern float modf(float x, float y);
Chris@150 112
Chris@150 113 extern double princarg(double a);
Chris@150 114 extern float princargf(float a);
Chris@150 115
Chris@150 116 #endif /* ! _SYSTEM_H_ */
Chris@150 117
Chris@150 118