annotate system/System.h @ 1223:c2207877689d piper

Avoid instantiating all plugins (in piper client) on startup, using plugin static data instead. Problem of where to get the units field from is still pending.
author Chris Cannam
date Thu, 20 Oct 2016 14:06:58 +0100
parents 794b64e62e58
children f350af2b542d
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@687 19 #include "base/Debug.h"
Chris@687 20
Chris@150 21 #ifdef _WIN32
Chris@150 22
Chris@150 23 #include <windows.h>
Chris@150 24 #include <malloc.h>
Chris@150 25 #include <process.h>
Chris@606 26 #include <math.h>
Chris@150 27
Chris@150 28 #define MLOCK(a,b) 1
Chris@150 29 #define MUNLOCK(a,b) 1
Chris@150 30 #define MUNLOCK_SAMPLEBLOCK(a) 1
Chris@368 31 #define MUNLOCKALL() 1
Chris@150 32
Chris@835 33 extern void SystemMemoryBarrier();
Chris@835 34 #define MBARRIER() SystemMemoryBarrier()
Chris@835 35
Chris@150 36 #define DLOPEN(a,b) LoadLibrary((a).toStdWString().c_str())
Chris@150 37 #define DLSYM(a,b) GetProcAddress((HINSTANCE)(a),(b))
Chris@223 38 #define DLCLOSE(a) (!FreeLibrary((HINSTANCE)(a)))
Chris@150 39 #define DLERROR() ""
Chris@150 40
Chris@150 41 #define PLUGIN_GLOB "*.dll"
Chris@223 42 #define PATH_SEPARATOR ';'
Chris@186 43
Chris@219 44 // The default Vamp plugin path is obtained from a function in the
Chris@219 45 // Vamp SDK (Vamp::PluginHostAdapter::getPluginPath).
Chris@186 46
Chris@219 47 // At the time of writing, at least, the vast majority of LADSPA
Chris@219 48 // plugins on Windows hosts will have been put there for use in
Chris@219 49 // Audacity. It's a bit of a shame that Audacity uses its own Program
Chris@219 50 // Files directory for plugins that any host may want to use... maybe
Chris@219 51 // they were just following the example of VSTs, which are usually
Chris@219 52 // found in Steinberg's Program Files directory. Anyway, we can
Chris@219 53 // greatly increase our chances of picking up some LADSPA plugins by
Chris@219 54 // default if we include the Audacity plugin location as well as an
Chris@219 55 // (imho) more sensible place.
Chris@219 56
Chris@223 57 #define DEFAULT_LADSPA_PATH "%ProgramFiles%\\LADSPA Plugins;%ProgramFiles%\\Audacity\\Plug-Ins"
Chris@186 58 #define DEFAULT_DSSI_PATH "%ProgramFiles%\\DSSI Plugins"
Chris@150 59
Chris@150 60 #define getpid _getpid
Chris@150 61
Chris@1216 62 #if defined(_MSC_VER)
Chris@1216 63 #include <BaseTsd.h>
Chris@1216 64 typedef SSIZE_T ssize_t;
Chris@1216 65 #endif
Chris@1216 66
Chris@150 67 extern "C" {
Chris@1218 68
Chris@1218 69 #ifdef _MSC_VER
Chris@150 70 void usleep(unsigned long usec);
Chris@1218 71 #endif
Chris@1218 72
Chris@501 73 int gettimeofday(struct timeval *p, void *tz);
Chris@150 74 }
Chris@150 75
Chris@765 76 #define ISNAN std::isnan
Chris@765 77 #define ISINF std::isinf
Chris@606 78
Chris@150 79 #else
Chris@150 80
Chris@150 81 #include <sys/mman.h>
Chris@150 82 #include <dlfcn.h>
Chris@602 83 #include <stdio.h> // for perror
Chris@606 84 #include <cmath>
Chris@1219 85 #include <unistd.h> // sleep + usleep primarily
Chris@150 86
Chris@150 87 #define MLOCK(a,b) ::mlock((a),(b))
Chris@150 88 #define MUNLOCK(a,b) (::munlock((a),(b)) ? (::perror("munlock failed"), 0) : 0)
Chris@150 89 #define MUNLOCK_SAMPLEBLOCK(a) do { if (!(a).empty()) { const float &b = *(a).begin(); MUNLOCK(&b, (a).capacity() * sizeof(float)); } } while(0);
Chris@232 90 //#define MLOCK(a,b) 1
Chris@232 91 //#define MUNLOCK(a,b) 1
Chris@232 92 //#define MUNLOCK_SAMPLEBLOCK(a) 1
Chris@150 93
Chris@150 94 #define DLOPEN(a,b) dlopen((a).toStdString().c_str(),(b))
Chris@150 95 #define DLSYM(a,b) dlsym((a),(b))
Chris@150 96 #define DLCLOSE(a) dlclose((a))
Chris@150 97 #define DLERROR() dlerror()
Chris@150 98
Chris@606 99 #include <cmath>
Chris@606 100 #define ISNAN std::isnan
Chris@606 101 #define ISINF std::isinf
Chris@606 102
Chris@150 103 #ifdef __APPLE__
Chris@150 104
Chris@255 105 #define PLUGIN_GLOB "*.dylib *.so"
Chris@223 106 #define PATH_SEPARATOR ':'
Chris@186 107
Chris@186 108 #define DEFAULT_LADSPA_PATH "$HOME/Library/Audio/Plug-Ins/LADSPA:/Library/Audio/Plug-Ins/LADSPA"
Chris@186 109 #define DEFAULT_DSSI_PATH "$HOME/Library/Audio/Plug-Ins/DSSI:/Library/Audio/Plug-Ins/DSSI"
Chris@150 110
Chris@368 111 #define MUNLOCKALL() 1
Chris@368 112
Chris@835 113 #include <libkern/OSAtomic.h>
Chris@835 114 #define MBARRIER() OSMemoryBarrier()
Chris@835 115
Chris@150 116 #else
Chris@150 117
Chris@606 118 #ifdef sun
Chris@606 119 #undef MLOCK
Chris@606 120 #undef MUNLOCK
Chris@606 121 #define MLOCK(a,b) ::mlock((char *)a,b)
Chris@606 122 #define MUNLOCK(a,b) ::munlock((char *)a,b)
Chris@606 123 #ifdef __SUNPRO_CC
Chris@606 124 #undef ISNAN
Chris@606 125 #undef ISINF
Chris@606 126 #define ISNAN(x) ((x)!=(x))
Chris@606 127 #define ISINF(x) 0
Chris@606 128 #endif
Chris@606 129 #endif
Chris@606 130
Chris@150 131 #define PLUGIN_GLOB "*.so"
Chris@223 132 #define PATH_SEPARATOR ':'
Chris@186 133
Chris@186 134 #define DEFAULT_LADSPA_PATH "$HOME/ladspa:$HOME/.ladspa:/usr/local/lib/ladspa:/usr/lib/ladspa"
Chris@186 135 #define DEFAULT_DSSI_PATH "$HOME/dssi:$HOME/.dssi:/usr/local/lib/dssi:/usr/lib/dssi"
Chris@150 136
Chris@368 137 #define MUNLOCKALL() ::munlockall()
Chris@368 138
Chris@835 139 #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)
Chris@835 140 #define MBARRIER() __sync_synchronize()
Chris@835 141 #else
Chris@835 142 extern void SystemMemoryBarrier();
Chris@835 143 #define MBARRIER() SystemMemoryBarrier()
Chris@835 144 #endif
Chris@835 145
Chris@835 146 #endif /* ! __APPLE__ */
Chris@150 147
Chris@150 148 #endif /* ! _WIN32 */
Chris@150 149
Chris@150 150 enum ProcessStatus { ProcessRunning, ProcessNotRunning, UnknownProcessStatus };
Chris@150 151 extern ProcessStatus GetProcessStatus(int pid);
Chris@150 152
Chris@168 153 // Return a vague approximation to the number of free megabytes of real memory.
Chris@1038 154 // Return -1 if unknown. (Hence signed args)
Chris@1038 155 extern void GetRealMemoryMBAvailable(ssize_t &available, ssize_t &total);
Chris@168 156
Chris@1038 157 // Return a vague approximation to the number of free megabytes of
Chris@1038 158 // disc space on the partition containing the given path. Return -1
Chris@1038 159 // if unknown. (Hence signed return type)
Chris@1038 160 extern ssize_t GetDiscSpaceMBAvailable(const char *path);
Chris@168 161
Chris@303 162 extern void StoreStartupLocale();
Chris@303 163 extern void RestoreStartupLocale();
Chris@303 164
Chris@150 165 #include <cmath>
Chris@150 166
Chris@1059 167 #ifndef M_PI
Chris@1059 168 #define M_PI 3.14159265358979323846
Chris@1059 169 #endif
Chris@1059 170
Chris@150 171 extern double mod(double x, double y);
Chris@150 172 extern float modf(float x, float y);
Chris@150 173
Chris@150 174 extern double princarg(double a);
Chris@150 175 extern float princargf(float a);
Chris@150 176
Chris@573 177 #ifdef USE_POW_NO_F
Chris@573 178 #define powf pow
Chris@573 179 #endif
Chris@573 180
Chris@150 181 #endif /* ! _SYSTEM_H_ */
Chris@150 182
Chris@150 183