From 3124613c29758e34284005dc75800cfc12a6b2da Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Fri, 28 Aug 2020 14:09:39 +0300 Subject: [PATCH] Reset speaker on packet errors --- applications/gui2/src/inputoutput.cpp | 3 +-- applications/gui2/src/inputoutput.hpp | 4 ++-- components/streams/include/ftl/streams/feed.hpp | 4 ++++ components/streams/src/feed.cpp | 6 ++++++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/applications/gui2/src/inputoutput.cpp b/applications/gui2/src/inputoutput.cpp index 9349b2329..5ee5e03f8 100644 --- a/applications/gui2/src/inputoutput.cpp +++ b/applications/gui2/src/inputoutput.cpp @@ -35,8 +35,7 @@ InputOutput::InputOutput(ftl::Configurable *root, ftl::net::Universe *net) : feed_ = std::unique_ptr<ftl::stream::Feed> (ftl::create<ftl::stream::Feed>(root, "feed", net)); - speaker_ = std::unique_ptr<ftl::audio::Speaker> - (ftl::create<ftl::audio::Speaker>(root, "speaker")); + speaker_ = feed_->speaker(); //auto* f = feed_->filter({ftl::codecs::Channel::Colour, ftl::codecs::Channel::Depth}); //feed_->render(f, Eigen::Matrix4d::Identity()); diff --git a/applications/gui2/src/inputoutput.hpp b/applications/gui2/src/inputoutput.hpp index e80b75461..98d6a0dbe 100644 --- a/applications/gui2/src/inputoutput.hpp +++ b/applications/gui2/src/inputoutput.hpp @@ -35,13 +35,13 @@ public: ftl::net::Universe* net() const; ftl::ctrl::Master* master() const { return master_.get(); } ftl::stream::Feed* feed() const { return feed_.get(); } - ftl::audio::Speaker* speaker() const { return speaker_.get(); } + ftl::audio::Speaker* speaker() const { return speaker_; } private: ftl::net::Universe* net_; std::unique_ptr<ftl::stream::Feed> feed_; std::unique_ptr<ftl::ctrl::Master> master_; - std::unique_ptr<ftl::audio::Speaker> speaker_; + ftl::audio::Speaker *speaker_; }; diff --git a/components/streams/include/ftl/streams/feed.hpp b/components/streams/include/ftl/streams/feed.hpp index 7c58b2e21..7a5d05794 100644 --- a/components/streams/include/ftl/streams/feed.hpp +++ b/components/streams/include/ftl/streams/feed.hpp @@ -10,6 +10,7 @@ #include <ftl/rgbd/source.hpp> #include <ftl/data/framepool.hpp> #include <ftl/audio/mixer.hpp> +#include <ftl/audio/speaker.hpp> #include <ftl/streams/stream.hpp> #include <ftl/streams/receiver.hpp> @@ -141,6 +142,8 @@ public: inline ftl::audio::StereoMixerF<100> &mixer() { return mixer_; } + ftl::audio::Speaker *speaker() { return speaker_; } + void startRecording(Filter *, const std::string &filename); void startStreaming(Filter *, const std::string &filename); void startStreaming(Filter *); @@ -181,6 +184,7 @@ private: std::condition_variable cv_net_connect_; ftl::net::Universe* const net_; + ftl::audio::Speaker *speaker_; std::unique_ptr<ftl::data::Pool> pool_; std::unique_ptr<ftl::stream::Intercept> interceptor_; // multiple streams to single fs diff --git a/components/streams/src/feed.cpp b/components/streams/src/feed.cpp index cbff43fb7..5377ca6c4 100644 --- a/components/streams/src/feed.cpp +++ b/components/streams/src/feed.cpp @@ -102,6 +102,8 @@ Feed::Feed(nlohmann::json &config, ftl::net::Universe*net) : "recorder" }); + speaker_ = ftl::create<ftl::audio::Speaker>(this, "speaker"); + pool_ = std::make_unique<ftl::data::Pool>(3,5); stream_ = std::unique_ptr<ftl::stream::Muxer> @@ -169,6 +171,8 @@ Feed::Feed(nlohmann::json &config, ftl::net::Universe*net) : handle_rec_error_ = receiver_->onError([this](ftl::data::FrameID fid) { LOG(WARNING) << "Receiver error: resetting"; stream_->reset(); + speaker_->reset(); + mixer_.reset(); return true; }); @@ -267,6 +271,8 @@ Feed::~Feed() { for (auto *s : garbage) { delete s; } + + delete speaker_; } void Feed::_processAudio(const ftl::data::FrameSetPtr &fs) { -- GitLab