LMMS
Loading...
Searching...
No Matches
DistrhoUtils.cpp
Go to the documentation of this file.
1/*
2 * DISTRHO Plugin Framework (DPF)
3 * Copyright (C) 2012-2021 Filipe Coelho <falktx@falktx.com>
4 *
5 * Permission to use, copy, modify, and/or distribute this software for any purpose with
6 * or without fee is hereby granted, provided that the above copyright notice and this
7 * permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
10 * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
11 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
12 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
13 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17#ifndef DISTRHO_IS_STANDALONE
18# error Wrong build configuration
19#endif
20
21#include "../extra/String.hpp"
22#include "../DistrhoStandaloneUtils.hpp"
23
24#ifdef DISTRHO_OS_WINDOWS
25# include <windows.h>
26#else
27# ifndef STATIC_BUILD
28# include <dlfcn.h>
29# endif
30# include <limits.h>
31# include <stdlib.h>
32#endif
33
34#if defined(DISTRHO_OS_WINDOWS) && !defined(STATIC_BUILD) && !DISTRHO_IS_STANDALONE
35static HINSTANCE hInstance = nullptr;
36
39{
40 if (reason == DLL_PROCESS_ATTACH)
41 hInstance = hInst;
42 return 1;
43}
44#endif
45
47
48// -----------------------------------------------------------------------
49
50const char* getBinaryFilename()
51{
52 static String filename;
53
54#ifndef STATIC_BUILD
55 if (filename.isNotEmpty())
56 return filename;
57
58# ifdef DISTRHO_OS_WINDOWS
59# if DISTRHO_IS_STANDALONE
60 constexpr const HINSTANCE hInstance = nullptr;
61# endif
62 CHAR filenameBuf[MAX_PATH];
63 filenameBuf[0] = '\0';
64 GetModuleFileNameA(hInstance, filenameBuf, sizeof(filenameBuf));
65 filename = filenameBuf;
66# else
67 Dl_info info;
68 dladdr((void*)getBinaryFilename, &info);
69 char filenameBuf[PATH_MAX];
70 filename = realpath(info.dli_fname, filenameBuf);
71# endif
72#endif
73
74 return filename;
75}
76
78{
79#if defined(DISTRHO_PLUGIN_TARGET_CARLA)
80 return "Carla";
81#elif defined(DISTRHO_PLUGIN_TARGET_JACK)
82# ifdef DISTRHO_OS_WASM
83 return "Wasm/Standalone";
84# else
85 return "JACK/Standalone";
86# endif
87#elif defined(DISTRHO_PLUGIN_TARGET_LADSPA)
88 return "LADSPA";
89#elif defined(DISTRHO_PLUGIN_TARGET_DSSI)
90 return "DSSI";
91#elif defined(DISTRHO_PLUGIN_TARGET_LV2)
92 return "LV2";
93#elif defined(DISTRHO_PLUGIN_TARGET_VST2)
94 return "VST2";
95#elif defined(DISTRHO_PLUGIN_TARGET_VST3)
96 return "VST3";
97#else
98 return "Unknown";
99#endif
100}
101
102const char* getResourcePath(const char* const bundlePath) noexcept
103{
104 DISTRHO_SAFE_ASSERT_RETURN(bundlePath != nullptr, nullptr);
105
106#if defined(DISTRHO_PLUGIN_TARGET_JACK) || defined(DISTRHO_PLUGIN_TARGET_VST2)
107 static String resourcePath;
108
109 if (resourcePath.isEmpty())
110 {
111 resourcePath = bundlePath;
112# ifdef DISTRHO_OS_MAC
113 resourcePath += "/Contents/Resources";
114# else
115 resourcePath += DISTRHO_OS_SEP_STR "resources";
116# endif
117 }
118
119 return resourcePath.buffer();
120#elif defined(DISTRHO_PLUGIN_TARGET_LV2)
121 static String resourcePath;
122
123 if (resourcePath.isEmpty())
124 {
125 resourcePath = bundlePath;
126 resourcePath += DISTRHO_OS_SEP_STR "resources";
127 }
128
129 return resourcePath.buffer();
130#elif defined(DISTRHO_PLUGIN_TARGET_VST3)
131 static String resourcePath;
132
133 if (resourcePath.isEmpty())
134 {
135 resourcePath = bundlePath;
136 resourcePath += "/Contents/Resources";
137 }
138
139 return resourcePath.buffer();
140#endif
141
142 return nullptr;
143}
144
145#ifndef DISTRHO_PLUGIN_TARGET_JACK
146// all these are null for non-standalone targets
147bool isUsingNativeAudio() noexcept { return false; }
148bool supportsAudioInput() { return false; }
149bool supportsBufferSizeChanges() { return false; }
150bool supportsMIDI() { return false; }
151bool isAudioInputEnabled() { return false; }
152bool isMIDIEnabled() { return false; }
153uint getBufferSize() { return 0; }
154bool requestAudioInput() { return false; }
155bool requestBufferSizeChange(uint) { return false; }
156bool requestMIDI() { return false; }
157#endif
158
159// -----------------------------------------------------------------------
160
unsigned int uint
Definition CarlaDefines.h:327
#define noexcept
Definition DistrhoDefines.h:72
#define END_NAMESPACE_DISTRHO
Definition DistrhoDefines.h:191
#define DISTRHO_SAFE_ASSERT_RETURN(cond, ret)
Definition DistrhoDefines.h:112
#define DISTRHO_PLUGIN_EXPORT
Definition DistrhoDefines.h:36
#define DISTRHO_OS_SEP_STR
Definition DistrhoDefines.h:202
#define START_NAMESPACE_DISTRHO
Definition DistrhoDefines.h:190
bool requestBufferSizeChange(uint)
Definition DistrhoUtils.cpp:155
bool isAudioInputEnabled()
Definition DistrhoUtils.cpp:151
bool supportsAudioInput()
Definition DistrhoUtils.cpp:148
bool isMIDIEnabled()
Definition DistrhoUtils.cpp:152
const char * getResourcePath(const char *const bundlePath) noexcept
Definition DistrhoUtils.cpp:102
bool requestAudioInput()
Definition DistrhoUtils.cpp:154
bool requestMIDI()
Definition DistrhoUtils.cpp:156
bool supportsMIDI()
Definition DistrhoUtils.cpp:150
bool supportsBufferSizeChanges()
Definition DistrhoUtils.cpp:149
bool isUsingNativeAudio() noexcept
Definition DistrhoUtils.cpp:147
START_NAMESPACE_DISTRHO const char * getBinaryFilename()
Definition DistrhoUtils.cpp:50
uint getBufferSize()
Definition DistrhoUtils.cpp:153
const char * getPluginFormatName() noexcept
Definition DistrhoUtils.cpp:77
CARLA_PLUGIN_EXPORT BOOL WINAPI DllMain(HINSTANCE hInst, DWORD reason, LPVOID)
Definition carla-vst-export-bridged.cpp:44
Definition String.h:48
bool isEmpty() const noexcept
Definition String.h:238
static char filename[]
Definition features.c:5
struct backing_store_struct * info
Definition jmemsys.h:183
#define DLL_PROCESS_ATTACH
#define MAX_PATH
void * HINSTANCE
Definition swell-types.h:212
signed char BOOL
Definition swell-types.h:160
unsigned int DWORD
Definition swell-types.h:164
#define WINAPI
Definition swell-types.h:631
void * LPVOID
Definition swell-types.h:174
char CHAR
Definition swell-types.h:188
#define PATH_MAX
Definition unzpriv.h:1188