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 + "\"");
}
if (!streams_.empty())
{
active_stream_ = streams_.front();
resampler_ = make_unique<Resampler>(active_stream_->getSampleFormat(), sampleFormat_);
}
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_);
}
@ -129,7 +129,7 @@ void MetaStream::onStateChanged(const PcmStream* pcmStream, ReaderState state)
return;
}
}
active_stream_ = nullptr;
active_stream_ = streams_.front();
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

View file

@ -54,6 +54,9 @@ protected:
void onResync(const PcmStream* pcmStream, double ms) override;
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::shared_ptr<PcmStream> active_stream_;
std::mutex mutex_;