Enable control of meta streams

This commit is contained in:
badaix 2021-06-28 22:25:21 +02:00
parent 74b3e7d9a4
commit cee6b2cfee
2 changed files with 23 additions and 6 deletions

View file

@ -57,11 +57,11 @@ MetaStream::MetaStream(PcmListener* pcmListener, const std::vector<std::shared_p
throw SnapException("Unknown stream: \"" + component + "\""); throw SnapException("Unknown stream: \"" + component + "\"");
} }
if (!streams_.empty()) if (streams_.empty())
{ throw SnapException("Meta stream '" + getName() + "' must contain at least one stream");
active_stream_ = streams_.front();
resampler_ = make_unique<Resampler>(active_stream_->getSampleFormat(), sampleFormat_); active_stream_ = streams_.front();
} resampler_ = make_unique<Resampler>(active_stream_->getSampleFormat(), sampleFormat_);
} }
@ -129,7 +129,7 @@ void MetaStream::onStateChanged(const PcmStream* pcmStream, ReaderState state)
return; return;
} }
} }
active_stream_ = nullptr; active_stream_ = streams_.front();
setState(ReaderState::kIdle); setState(ReaderState::kIdle);
} }
@ -202,4 +202,18 @@ void MetaStream::onResync(const PcmStream* pcmStream, double ms)
} }
void MetaStream::setProperty(const jsonrpcpp::Request& request, const StreamControl::OnResponse& response_handler)
{
std::lock_guard<std::mutex> lock(mutex_);
active_stream_->setProperty(request, response_handler);
}
void MetaStream::control(const jsonrpcpp::Request& request, const StreamControl::OnResponse& response_handler)
{
std::lock_guard<std::mutex> lock(mutex_);
active_stream_->control(request, response_handler);
}
} // namespace streamreader } // namespace streamreader

View file

@ -54,6 +54,9 @@ protected:
void onResync(const PcmStream* pcmStream, double ms) override; void onResync(const PcmStream* pcmStream, double ms) override;
protected: protected:
void setProperty(const jsonrpcpp::Request& request, const StreamControl::OnResponse& response_handler) override;
void control(const jsonrpcpp::Request& request, const StreamControl::OnResponse& response_handler) override;
std::vector<std::shared_ptr<PcmStream>> streams_; std::vector<std::shared_ptr<PcmStream>> streams_;
std::shared_ptr<PcmStream> active_stream_; std::shared_ptr<PcmStream> active_stream_;
std::mutex mutex_; std::mutex mutex_;