working on win32 uwp! and libremidi update

This commit is contained in:
Sebastian @ HfG
2024-10-28 19:24:18 +01:00
parent 06cb6d8319
commit 1e3755148c
106 changed files with 8474 additions and 2198 deletions
+19 -19
View File
@@ -1,14 +1,6 @@
#pragma once
#if __has_include(<weakjack/weak_libjack.h>)
#include <weakjack/weak_libjack.h>
#elif __has_include(<weak_libjack.h>)
#include <weak_libjack.h>
#elif __has_include(<jack/jack.h> )
#include <jack/jack.h>
#include <jack/midiport.h>
#include <jack/ringbuffer.h>
#endif
#include <libremidi/backends/jack/error_domain.hpp>
#include <libremidi/detail/midi_in.hpp>
#include <libremidi/detail/semaphore.hpp>
@@ -157,6 +149,10 @@ struct jack_helpers : jack_client
= jack_client_open(configuration.client_name.c_str(), JackNoStartServer, &status);
if (this->client != nullptr)
{
if(status & JackNameNotUnique) {
self.libremidi_handle_warning(self.configuration, "JACK client with the same name already exists, renamed.");
}
jack_set_process_callback(
this->client,
+[](jack_nframes_t nf, void* ctx) -> int {
@@ -192,9 +188,12 @@ struct jack_helpers : jack_client
if (this->client && !self.configuration.context)
jack_client_close(this->client);
self.client_open_ = std::errc::not_connected;
}
bool create_local_port(const auto& self, std::string_view portName, JackPortFlags flags)
stdx::error
create_local_port(const auto& self, std::string_view portName, JackPortFlags flags)
{
// full name: "client_name:port_name\0"
if (portName.empty())
@@ -203,9 +202,9 @@ struct jack_helpers : jack_client
if (self.configuration.client_name.size() + portName.size() + 2u
>= static_cast<size_t>(jack_port_name_size()))
{
self.template error<invalid_use_error>(
self.configuration, "JACK: port name length limit exceeded");
return false;
self.libremidi_handle_error(
self.configuration, "port name length limit exceeded");
return std::errc::invalid_argument;
}
if (!this->port)
@@ -216,16 +215,16 @@ struct jack_helpers : jack_client
if (!this->port)
{
self.template error<driver_error>(self.configuration, "JACK: error creating port");
return false;
self.libremidi_handle_error(self.configuration, "error creating port");
return std::errc::operation_not_supported;
}
return true;
return stdx::error{};
}
void do_close_port()
stdx::error do_close_port()
{
if (this->port == nullptr)
return;
return stdx::error{};
// 1. Ensure that the next time the cycle runs it sees the port as nullptr
jack_port_t* port_ptr = this->port.impl->load();
@@ -235,7 +234,8 @@ struct jack_helpers : jack_client
this->thread_lock.prepare_release_client();
// 3. Now we are sure that the client is not going to use the port anymore
jack_port_unregister(this->client, port_ptr);
int err = jack_port_unregister(this->client, port_ptr);
return from_errc(err);
}
};
}