Overwrite sample format for airplay before ctor is called

This commit is contained in:
Christian Flach 2020-01-28 14:46:41 +01:00 committed by Johannes Pohl
parent 862f08da9f
commit a7808cfec3
3 changed files with 8 additions and 9 deletions

View file

@ -59,9 +59,6 @@ AirplayStream::AirplayStream(PcmListener* pcmListener, boost::asio::io_context&
// XXX: Check if pipe exists, delete or throw error
sampleFormat_ = SampleFormat("44100:16:2");
uri_.query["sampleformat"] = sampleFormat_.getFormat();
port_ = cpt::stoul(uri_.getQuery("port", "5000"));
string devicename = uri_.getQuery("devicename", "Snapcast");

View file

@ -34,12 +34,6 @@ static constexpr auto LOG_TAG = "LibrespotStream";
LibrespotStream::LibrespotStream(PcmListener* pcmListener, boost::asio::io_context& ioc, const StreamUri& uri) : ProcessStream(pcmListener, ioc, uri)
{
sampleFormat_ = SampleFormat("44100:16:2");
uri_.query["sampleformat"] = sampleFormat_.getFormat();
// chunk is created in PcmStream ctor, using the (possibly wrongly) configured sample format
// we have to recreate it using spotify's native sample format
chunk_ = std::make_unique<msg::PcmChunk>(sampleFormat_, chunk_ms_);
wd_timeout_sec_ = cpt::stoul(uri_.getQuery("wd_timeout", "7800")); ///< 130min
string username = uri_.getQuery("username", "");

View file

@ -75,10 +75,18 @@ PcmStreamPtr StreamManager::addStream(const std::string& uri)
}
else if ((streamUri.scheme == "spotify") || (streamUri.scheme == "librespot"))
{
// Overwrite sample format here instead of inside the constructor, to make sure
// that all constructors of all parent classes also use the overwritten sample
// format.
streamUri.query[kUriSampleFormat] = "44100:16:2";
stream = make_shared<LibrespotStream>(pcmListener_, ioc_, streamUri);
}
else if (streamUri.scheme == "airplay")
{
// Overwrite sample format here instead of inside the constructor, to make sure
// that all constructors of all parent classes also use the overwritten sample
// format.
streamUri.query[kUriSampleFormat] = "44100:16:2";
stream = make_shared<AirplayStream>(pcmListener_, ioc_, streamUri);
}
else if (streamUri.scheme == "tcp")