LMMS
Loading...
Searching...
No Matches
carla-native-plugin.cpp
Go to the documentation of this file.
1/*
2 * Carla Plugin Host
3 * Copyright (C) 2011-2022 Filipe Coelho <falktx@falktx.com>
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of
8 * the License, or any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * For a full copy of the GNU General Public License see the doc/GPL.txt file.
16 */
17
18#include "CarlaNativePlugin.h"
19#include "CarlaHostImpl.hpp"
20
21#include "CarlaEngine.hpp"
22#include "CarlaString.hpp"
23
24#include "water/files/File.h"
25
26// --------------------------------------------------------------------------------------------------------------------
27// Expose info functions as needed
28
29#ifndef CARLA_HOST_PLUGIN_BUILD
30# include "utils/Information.cpp"
31#endif
32
33// --------------------------------------------------------------------------------------------------------------------
34
36
37// --------------------------------------------------------------------------------------------------------------------
38
40{
41 CarlaEngine* const engine = carla_get_native_plugin_engine(desc, handle);
42 CARLA_SAFE_ASSERT_RETURN(engine, nullptr);
43
44 CarlaHostHandleImpl* hosthandle;
45
46 try {
47 hosthandle = new CarlaHostHandleImpl();
48 } CARLA_SAFE_EXCEPTION_RETURN("carla_create_native_plugin_host_handle()", nullptr);
49
50 hosthandle->engine = engine;
51 hosthandle->isPlugin = true;
52 return hosthandle;
53}
54
56{
57 CARLA_SAFE_ASSERT_RETURN(handle != nullptr,);
58 CARLA_SAFE_ASSERT_RETURN(handle->isPlugin,);
59
60 delete (CarlaHostHandleImpl*)handle;
61}
62
63// --------------------------------------------------------------------------------------------------------------------
64
66{
67 CARLA_SAFE_ASSERT_RETURN(desc != nullptr, nullptr);
68 CARLA_SAFE_ASSERT_RETURN(handle != nullptr, nullptr);
69
70 return (CarlaEngine*)static_cast<uintptr_t>(desc->dispatcher(handle,
72 0, 0, nullptr, 0.0f));
73}
74
75// --------------------------------------------------------------------------------------------------------------------
76
77// testing purposes only
78#if 0
80{
81 return 128;
82}
83
85{
86 return 44100.0;
87}
88
90{
91 return false;
92}
93
94int main()
95{
96 const char* const filename = carla_get_library_filename();
97 CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', 1);
98
99 const char* const folder = carla_get_library_folder();
100 CARLA_SAFE_ASSERT_RETURN(folder != nullptr && folder[0] != '\0', 1);
101
103 CARLA_SAFE_ASSERT_RETURN(rack != nullptr, 1);
104
106 CARLA_SAFE_ASSERT_RETURN(patchbay != nullptr, 1);
107
108 const NativeHostDescriptor host = {
109 nullptr,
110 "", // resourceDir
111 "Carla Plugin UI",
112 0,
113
117
118 nullptr, // get_time_info
119 nullptr, // write_midi_event
120
121 nullptr, // ui_parameter_changed
122 nullptr, // ui_midi_program_changed
123 nullptr, // ui_custom_data_changed
124 nullptr, // ui_closed
125
126 nullptr, // ui_open_file
127 nullptr, // ui_save_file
128
129 nullptr, // dispatcher
130 };
131
132 const NativePluginHandle handle = rack->instantiate(&host);
133 CARLA_SAFE_ASSERT_RETURN(handle != nullptr, 1);
134
135 CarlaEngine* const engine = carla_get_native_plugin_engine(rack, handle);
136 CARLA_SAFE_ASSERT_RETURN(engine != nullptr, 1);
137
138 carla_stdout("Got Engine %p, %s, %i, %f",
139 engine, engine->getName(), engine->getBufferSize(), engine->getSampleRate());
140
141 rack->cleanup(handle);
142 return 0;
143}
144#endif
145
146// --------------------------------------------------------------------------------------------------------------------
CARLA_EXPORT const NativePluginDescriptor * carla_get_native_rack_plugin()
Definition CarlaEngineNative.cpp:3048
CARLA_EXPORT const NativePluginDescriptor * carla_get_native_patchbay_plugin()
Definition CarlaEngineNative.cpp:3054
#define CARLA_SAFE_EXCEPTION_RETURN(msg, ret)
Definition CarlaDefines.h:231
#define CARLA_SAFE_ASSERT_RETURN(cond, ret)
Definition CarlaDefines.h:190
int main(void)
Definition atom-test.c:30
static uint32_t get_buffer_size(NativeHostHandle h)
Definition carla-host-plugin.c:24
static double get_sample_rate(NativeHostHandle h)
Definition carla-host-plugin.c:32
static bool is_offline(NativeHostHandle h)
Definition carla-host-plugin.c:40
void carla_host_handle_free(CarlaHostHandle handle)
Definition carla-native-plugin.cpp:55
CARLA_BACKEND_USE_NAMESPACE CarlaHostHandle carla_create_native_plugin_host_handle(const NativePluginDescriptor *desc, NativePluginHandle handle)
Definition carla-native-plugin.cpp:39
CarlaEngine * carla_get_native_plugin_engine(const NativePluginDescriptor *desc, NativePluginHandle handle)
Definition carla-native-plugin.cpp:65
CARLA_BACKEND_USE_NAMESPACE
Definition carla_settings.cpp:63
static char filename[]
Definition features.c:5
CARLA_API_EXPORT const char * carla_get_library_filename(void)
Definition Information.cpp:220
struct _CarlaHostHandle * CarlaHostHandle
Definition CarlaHost.h:354
CARLA_API_EXPORT const char * carla_get_library_folder(void)
Definition Information.cpp:235
void * NativeHostHandle
Definition CarlaNative.h:36
struct _NativePluginDescriptor NativePluginDescriptor
void * NativePluginHandle
Definition CarlaNative.h:37
@ NATIVE_PLUGIN_OPCODE_GET_INTERNAL_HANDLE
Definition CarlaNative.h:108
unsigned int uint32_t
Definition mid.cpp:100
void(* cleanup)(NativePluginHandle handle)
Definition CarlaNative.h:263
NativePluginHandle(* instantiate)(const NativeHostDescriptor *host)
Definition CarlaNative.h:262
intptr_t(* dispatcher)(NativePluginHandle handle, NativePluginDispatcherOpcode opcode, int32_t index, intptr_t value, void *ptr, float opt)
Definition CarlaNative.h:294
Definition CarlaNative.h:218