blob: 83545152d1017367c11f4cb532881d4485e3d78e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
/*
* Copyright (c) 2018 Hanspeter Portner (dev@open-music-kontrollers.ch)
*
* This is free software: you can redistribute it and/or modify
* it under the terms of the Artistic License 2.0 as published by
* The Perl Foundation.
*
* This source 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
* Artistic License 2.0 for more details.
*
* You should have received a copy of the Artistic License 2.0
* along the source as a COPYING file. If not, obtain it from
* http://www.perlfoundation.org/artistic_license_2_0.
*/
#ifndef _MONITORS_LV2_H
#define _MONITORS_LV2_H
#include <stdint.h>
#if !defined(_WIN32)
# include <sys/mman.h>
#else
# define mlock(...)
# define munlock(...)
#endif
#include <lv2/lv2plug.in/ns/ext/atom/atom.h>
#include <lv2/lv2plug.in/ns/ext/atom/forge.h>
#include <lv2/lv2plug.in/ns/ext/urid/urid.h>
#include <lv2/lv2plug.in/ns/ext/state/state.h>
#include <lv2/lv2plug.in/ns/ext/log/log.h>
#include <lv2/lv2plug.in/ns/ext/log/logger.h>
#include <lv2/lv2plug.in/ns/ext/options/options.h>
#include <lv2/lv2plug.in/ns/ext/midi/midi.h>
#include <lv2/lv2plug.in/ns/extensions/ui/ui.h>
#include <lv2/lv2plug.in/ns/lv2core/lv2.h>
#define MONITORS_URI "http://open-music-kontrollers.ch/lv2/monitors"
#define MONITORS_PREFIX MONITORS_URI"#"
// plugin uris
#define MONITORS__audio_wave_mono MONITORS_PREFIX"audio_wave_mono"
#define MONITORS__audio_wave_stereo MONITORS_PREFIX"audio_wave_stereo"
#define MONITORS__midi_pianoroll MONITORS_PREFIX"midi_pianoroll"
// paramer uris
#define MONITORS__window MONITORS_PREFIX"window"
#define MONITORS__rotation MONITORS_PREFIX"rotation"
extern const LV2_Descriptor monitors_audio_wave_mono;
extern const LV2_Descriptor monitors_audio_wave_stereo;
extern const LV2_Descriptor monitors_midi_pianoroll;
typedef struct _craft_t craft_t;
struct _craft_t {
union {
LV2_Atom_Sequence *seq;
uint8_t *buf;
};
LV2_Atom_Forge forge;
LV2_Atom_Forge_Frame frame;
LV2_Atom_Forge_Ref ref;
};
static inline void
_craft_init(craft_t *craft, LV2_URID_Map *map)
{
lv2_atom_forge_init(&craft->forge, map);
}
static inline void
_craft_connect(craft_t *craft, LV2_Atom_Sequence *seq)
{
craft->seq = seq;
}
static inline void
_craft_in(craft_t *craft)
{
const uint32_t capacity = craft->seq->atom.size;
lv2_atom_forge_set_buffer(&craft->forge, craft->buf, capacity);
craft->ref = lv2_atom_forge_sequence_head(&craft->forge, &craft->frame, 0);
}
static inline void
_craft_out(craft_t *craft)
{
if(craft->ref)
lv2_atom_forge_pop(&craft->forge, &craft->frame);
else
lv2_atom_sequence_clear(craft->seq);
}
#endif // _MONITORS_LV2_H
|