summaryrefslogtreecommitdiffstats
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/JackDriver.cpp43
-rw-r--r--src/server/JackDriver.hpp4
2 files changed, 23 insertions, 24 deletions
diff --git a/src/server/JackDriver.cpp b/src/server/JackDriver.cpp
index a331811e..11f7cafe 100644
--- a/src/server/JackDriver.cpp
+++ b/src/server/JackDriver.cpp
@@ -54,6 +54,7 @@ namespace server {
JackDriver::JackDriver(Engine& engine)
: _engine(engine)
+ , _forge(&engine.world()->uri_map().urid_map_feature()->urid_map)
, _sem(0)
, _flag(false)
, _client(nullptr)
@@ -66,8 +67,6 @@ JackDriver::JackDriver(Engine& engine)
, _old_rolling(false)
{
_midi_event_type = _engine.world()->uris().midi_MidiEvent;
- lv2_atom_forge_init(
- &_forge, &engine.world()->uri_map().urid_map_feature()->urid_map);
}
JackDriver::~JackDriver()
@@ -437,26 +436,26 @@ JackDriver::append_time_events(RunContext& context,
_old_bpm = pos->beats_per_minute;
// Build an LV2 position object to append to the buffer
- LV2_Atom pos_buf[16];
- LV2_Atom_Forge_Frame frame;
- lv2_atom_forge_set_buffer(&_forge, (uint8_t*)pos_buf, sizeof(pos_buf));
- lv2_atom_forge_object(&_forge, &frame, 0, uris.time_Position);
- lv2_atom_forge_key(&_forge, uris.time_frame);
- lv2_atom_forge_long(&_forge, pos->frame);
- lv2_atom_forge_key(&_forge, uris.time_speed);
- lv2_atom_forge_float(&_forge, rolling ? 1.0 : 0.0);
- if (pos->valid & JackPositionBBT) {
- lv2_atom_forge_key(&_forge, uris.time_barBeat);
- lv2_atom_forge_float(
- &_forge, pos->beat - 1 + (pos->tick / pos->ticks_per_beat));
- lv2_atom_forge_key(&_forge, uris.time_bar);
- lv2_atom_forge_long(&_forge, pos->bar - 1);
- lv2_atom_forge_key(&_forge, uris.time_beatUnit);
- lv2_atom_forge_int(&_forge, pos->beat_type);
- lv2_atom_forge_key(&_forge, uris.time_beatsPerBar);
- lv2_atom_forge_float(&_forge, pos->beats_per_bar);
- lv2_atom_forge_key(&_forge, uris.time_beatsPerMinute);
- lv2_atom_forge_float(&_forge, pos->beats_per_minute);
+ LV2_Atom pos_buf[16];
+ _forge.set_buffer((uint8_t*)pos_buf, sizeof(pos_buf));
+ {
+ lv2::atom::Forge::ScopedObject position(_forge, 0, uris.time_Position);
+ position.key(uris.time_frame);
+ _forge.write(int64_t(pos->frame));
+ position.key(uris.time_speed);
+ _forge.write(rolling ? 1.0f : 0.0f);
+ if (pos->valid & JackPositionBBT) {
+ position.key(uris.time_barBeat);
+ _forge.write(pos->beat - 1 + (pos->tick / pos->ticks_per_beat));
+ position.key(uris.time_bar);
+ _forge.write(int64_t(pos->bar - 1));
+ position.key(uris.time_beatUnit);
+ _forge.write(int32_t(pos->beat_type));
+ position.key(uris.time_beatsPerBar);
+ _forge.write(float(pos->beats_per_bar));
+ position.key(uris.time_beatsPerMinute);
+ _forge.write(float(pos->beats_per_minute));
+ }
}
// Append position to buffer at offset 0 (start of this cycle)
diff --git a/src/server/JackDriver.hpp b/src/server/JackDriver.hpp
index c9307623..0f57431e 100644
--- a/src/server/JackDriver.hpp
+++ b/src/server/JackDriver.hpp
@@ -30,7 +30,7 @@
#endif
#include "ingen/types.hpp"
-#include "lv2/atom/forge.h"
+#include "lv2/atom/Forge.hpp"
#include "raul/Semaphore.hpp"
#include "Driver.hpp"
@@ -150,7 +150,7 @@ protected:
Engine& _engine;
Ports _ports;
AudioBufPtr _fallback_buffer;
- LV2_Atom_Forge _forge;
+ lv2::atom::Forge _forge;
Raul::Semaphore _sem;
std::atomic<bool> _flag;
jack_client_t* _client;