From 5e754cda716b9f17a69bf3363bb6dfc46ba6194d Mon Sep 17 00:00:00 2001 From: awakening Date: Sun, 20 Jan 2019 21:54:03 +0700 Subject: [PATCH] Pass messenger to audio sink --- src/anbox/audio/server.cpp | 9 ++++++--- src/anbox/platform/base_platform.h | 3 ++- src/anbox/platform/null/platform.cpp | 3 ++- src/anbox/platform/null/platform.h | 2 +- src/anbox/platform/sdl/audio_sink.cpp | 3 ++- src/anbox/platform/sdl/audio_sink.h | 6 ++++-- src/anbox/platform/sdl/platform.cpp | 4 ++-- src/anbox/platform/sdl/platform.h | 2 +- 8 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/anbox/audio/server.cpp b/src/anbox/audio/server.cpp index ad1396808..21f86ae60 100644 --- a/src/anbox/audio/server.cpp +++ b/src/anbox/audio/server.cpp @@ -31,8 +31,10 @@ using namespace std::placeholders; namespace { class AudioForwarder : public anbox::network::MessageProcessor { public: - AudioForwarder(const std::shared_ptr &sink) : - sink_(sink) { + AudioForwarder(const std::shared_ptr &sink, + const std::shared_ptr &messenger) : + sink_(sink), + messenger_(messenger) { } bool process_data(const std::vector &data) override { @@ -42,6 +44,7 @@ class AudioForwarder : public anbox::network::MessageProcessor { private: std::shared_ptr sink_; + std::shared_ptr messenger_; }; } @@ -81,7 +84,7 @@ void Server::create_connection_for(std::shared_ptr(platform_->create_audio_sink()); + processor = std::make_shared(platform_->create_audio_sink(messenger), messenger); break; case ClientInfo::Type::Recording: break; diff --git a/src/anbox/platform/base_platform.h b/src/anbox/platform/base_platform.h index 042781fef..bd6eed11a 100644 --- a/src/anbox/platform/base_platform.h +++ b/src/anbox/platform/base_platform.h @@ -20,6 +20,7 @@ #include "anbox/graphics/rect.h" #include "anbox/wm/window_state.h" +#include "anbox/network/local_socket_messenger.h" #include @@ -51,7 +52,7 @@ class BasePlatform { virtual void set_clipboard_data(const ClipboardData &data) = 0; virtual ClipboardData get_clipboard_data() = 0; - virtual std::shared_ptr create_audio_sink() = 0; + virtual std::shared_ptr create_audio_sink(const std::shared_ptr &messenger) = 0; virtual std::shared_ptr create_audio_source() = 0; virtual void set_renderer(const std::shared_ptr &renderer) = 0; diff --git a/src/anbox/platform/null/platform.cpp b/src/anbox/platform/null/platform.cpp index c89480640..27a97e3d8 100644 --- a/src/anbox/platform/null/platform.cpp +++ b/src/anbox/platform/null/platform.cpp @@ -48,7 +48,8 @@ NullPlatform::ClipboardData NullPlatform::get_clipboard_data() { return ClipboardData{}; } -std::shared_ptr NullPlatform::create_audio_sink() { +std::shared_ptr NullPlatform::create_audio_sink(const std::shared_ptr &messenger) { + (void) messenger; ERROR("Not implemented"); return nullptr; } diff --git a/src/anbox/platform/null/platform.h b/src/anbox/platform/null/platform.h index 24ad341e2..c0da52b08 100644 --- a/src/anbox/platform/null/platform.h +++ b/src/anbox/platform/null/platform.h @@ -31,7 +31,7 @@ class NullPlatform : public BasePlatform { const std::string &title) override; void set_clipboard_data(const ClipboardData &data) override; ClipboardData get_clipboard_data() override; - std::shared_ptr create_audio_sink() override; + std::shared_ptr create_audio_sink(const std::shared_ptr &messenger) override; std::shared_ptr create_audio_source() override; void set_renderer(const std::shared_ptr &renderer) override; void set_window_manager(const std::shared_ptr &window_manager) override; diff --git a/src/anbox/platform/sdl/audio_sink.cpp b/src/anbox/platform/sdl/audio_sink.cpp index 5a0c4ad25..118093de7 100644 --- a/src/anbox/platform/sdl/audio_sink.cpp +++ b/src/anbox/platform/sdl/audio_sink.cpp @@ -29,7 +29,8 @@ const constexpr size_t max_queue_size{16}; namespace anbox { namespace platform { namespace sdl { -AudioSink::AudioSink() : +AudioSink::AudioSink(const std::shared_ptr &messenger) : + messenger_(messenger), device_id_(0), queue_(max_queue_size) { } diff --git a/src/anbox/platform/sdl/audio_sink.h b/src/anbox/platform/sdl/audio_sink.h index f09db6975..636bcb16b 100644 --- a/src/anbox/platform/sdl/audio_sink.h +++ b/src/anbox/platform/sdl/audio_sink.h @@ -21,6 +21,7 @@ #include "anbox/audio/sink.h" #include "anbox/graphics/buffer_queue.h" #include "anbox/platform/sdl/sdl_wrapper.h" +#include "anbox/network/local_socket_messenger.h" #include @@ -29,7 +30,7 @@ namespace platform { namespace sdl { class AudioSink : public audio::Sink { public: - AudioSink(); + AudioSink(const std::shared_ptr &messenger); ~AudioSink(); void write_data(const std::vector &data) override; @@ -40,7 +41,8 @@ class AudioSink : public audio::Sink { void read_data(std::uint8_t *buffer, int size); static void on_data_requested(void *user_data, std::uint8_t *buffer, int size); - + + std::shared_ptr messenger_; std::mutex lock_; SDL_AudioSpec spec_; SDL_AudioDeviceID device_id_; diff --git a/src/anbox/platform/sdl/platform.cpp b/src/anbox/platform/sdl/platform.cpp index 1bf5292e8..b3c80ae49 100644 --- a/src/anbox/platform/sdl/platform.cpp +++ b/src/anbox/platform/sdl/platform.cpp @@ -491,8 +491,8 @@ Platform::ClipboardData Platform::get_clipboard_data() { return data; } -std::shared_ptr Platform::create_audio_sink() { - return std::make_shared(); +std::shared_ptr Platform::create_audio_sink(const std::shared_ptr &messenger) { + return std::make_shared(messenger); } std::shared_ptr Platform::create_audio_source() { diff --git a/src/anbox/platform/sdl/platform.h b/src/anbox/platform/sdl/platform.h index 7c73e86e0..5c4633fe7 100644 --- a/src/anbox/platform/sdl/platform.h +++ b/src/anbox/platform/sdl/platform.h @@ -64,7 +64,7 @@ class Platform : public std::enable_shared_from_this, void set_clipboard_data(const ClipboardData &data) override; ClipboardData get_clipboard_data() override; - std::shared_ptr create_audio_sink() override; + std::shared_ptr create_audio_sink(const std::shared_ptr &messenger) override; std::shared_ptr create_audio_source() override; bool supports_multi_window() const override;