Custom Anbox installation files & patches, including patched Android OS image file.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

171 lines
7.0 KiB

From 5e754cda716b9f17a69bf3363bb6dfc46ba6194d Mon Sep 17 00:00:00 2001
From: awakening <lucidsunlight@yandex.ru>
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<anbox::audio::Sink> &sink) :
- sink_(sink) {
+ AudioForwarder(const std::shared_ptr<anbox::audio::Sink> &sink,
+ const std::shared_ptr<anbox::network::LocalSocketMessenger> &messenger) :
+ sink_(sink),
+ messenger_(messenger) {
}
bool process_data(const std::vector<std::uint8_t> &data) override {
@@ -42,6 +44,7 @@ class AudioForwarder : public anbox::network::MessageProcessor {
private:
std::shared_ptr<anbox::audio::Sink> sink_;
+ std::shared_ptr<anbox::network::LocalSocketMessenger> messenger_;
};
}
@@ -81,7 +84,7 @@ void Server::create_connection_for(std::shared_ptr<boost::asio::basic_stream_soc
switch (client_info.type) {
case ClientInfo::Type::Playback:
- processor = std::make_shared<AudioForwarder>(platform_->create_audio_sink());
+ processor = std::make_shared<AudioForwarder>(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 <memory>
@@ -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<audio::Sink> create_audio_sink() = 0;
+ virtual std::shared_ptr<audio::Sink> create_audio_sink(const std::shared_ptr<anbox::network::LocalSocketMessenger> &messenger) = 0;
virtual std::shared_ptr<audio::Source> create_audio_source() = 0;
virtual void set_renderer(const std::shared_ptr<Renderer> &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<audio::Sink> NullPlatform::create_audio_sink() {
+std::shared_ptr<audio::Sink> NullPlatform::create_audio_sink(const std::shared_ptr<network::LocalSocketMessenger> &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<audio::Sink> create_audio_sink() override;
+ std::shared_ptr<audio::Sink> create_audio_sink(const std::shared_ptr<network::LocalSocketMessenger> &messenger) override;
std::shared_ptr<audio::Source> create_audio_source() override;
void set_renderer(const std::shared_ptr<Renderer> &renderer) override;
void set_window_manager(const std::shared_ptr<wm::Manager> &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<network::LocalSocketMessenger> &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 <thread>
@@ -29,7 +30,7 @@ namespace platform {
namespace sdl {
class AudioSink : public audio::Sink {
public:
- AudioSink();
+ AudioSink(const std::shared_ptr<network::LocalSocketMessenger> &messenger);
~AudioSink();
void write_data(const std::vector<std::uint8_t> &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<anbox::network::LocalSocketMessenger> 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<audio::Sink> Platform::create_audio_sink() {
- return std::make_shared<AudioSink>();
+std::shared_ptr<audio::Sink> Platform::create_audio_sink(const std::shared_ptr<network::LocalSocketMessenger> &messenger) {
+ return std::make_shared<AudioSink>(messenger);
}
std::shared_ptr<audio::Source> 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<Platform>,
void set_clipboard_data(const ClipboardData &data) override;
ClipboardData get_clipboard_data() override;
- std::shared_ptr<audio::Sink> create_audio_sink() override;
+ std::shared_ptr<audio::Sink> create_audio_sink(const std::shared_ptr<network::LocalSocketMessenger> &messenger) override;
std::shared_ptr<audio::Source> create_audio_source() override;
bool supports_multi_window() const override;