diff --git a/applications/gui2/src/inputoutput.cpp b/applications/gui2/src/inputoutput.cpp index 9349b232997ec283651c748ad9b62b8b69421e35..5ee5e03f8fd748580e2c8eec760419e063d27dc0 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 e80b7546157092e60f82091de64d198492ee775f..98d6a0dbef6b5205b2b97a57ad324fabbd86741d 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 7c58b2e21582f0912c7d8bdf52cf31f4d4552dd0..7a5d05794dcc53b7764db81ccbdbfa313a858a1f 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 cbff43fb7a180cde4da68424e5db0051cfd6ffbd..5377ca6c4c914ee8b88028e5a5a8fdeb6c7710e8 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) {