From 7f37e2306f79d3f77934aa97e5f784fb0b39b838 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 17 Dec 2017 20:33:47 +0100 Subject: Use LV2 atom forge C++ bindings --- src/server/JackDriver.cpp | 43 +++++++++++++++++++++---------------------- src/server/JackDriver.hpp | 4 ++-- 2 files changed, 23 insertions(+), 24 deletions(-) (limited to 'src/server') diff --git a/src/server/JackDriver.cpp b/src/server/JackDriver.cpp index 44f92dd8..ad2c5c5b 100644 --- a/src/server/JackDriver.cpp +++ b/src/server/JackDriver.cpp @@ -55,6 +55,7 @@ namespace Server { JackDriver::JackDriver(Engine& engine) : _engine(engine) + , _forge(&engine.world()->uri_map().urid_map_feature()->urid_map) , _sem(0) , _flag(false) , _client(NULL) @@ -67,8 +68,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() @@ -427,26 +426,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 ce9af82e..9d69be7b 100644 --- a/src/server/JackDriver.hpp +++ b/src/server/JackDriver.hpp @@ -31,7 +31,7 @@ #include "raul/Semaphore.hpp" -#include "lv2/lv2plug.in/ns/ext/atom/forge.h" +#include "lv2/lv2plug.in/ns/ext/atom/Forge.hpp" #include "Driver.hpp" #include "EnginePort.hpp" @@ -144,7 +144,7 @@ protected: Engine& _engine; Ports _ports; - LV2_Atom_Forge _forge; + lv2::atom::Forge _forge; Raul::Semaphore _sem; std::atomic _flag; jack_client_t* _client; -- cgit v1.2.1