diff --git a/client/controller.cpp b/client/controller.cpp index 70a086ee..1abf22aa 100644 --- a/client/controller.cpp +++ b/client/controller.cpp @@ -92,7 +92,7 @@ void Controller::onMessageReceived(ClientConnection* connection, const msg::Base logO << "Codec: " << headerChunk_->codec << "\n"; decoder_.reset(nullptr); - stream_.reset(nullptr); + stream_ = nullptr; player_.reset(nullptr); if (headerChunk_->codec == "pcm") @@ -109,15 +109,15 @@ void Controller::onMessageReceived(ClientConnection* connection, const msg::Base sampleFormat_ = decoder_->setHeader(headerChunk_.get()); logState << "sampleformat: " << sampleFormat_.rate << ":" << sampleFormat_.bits << ":" << sampleFormat_.channels << "\n"; - stream_.reset(new Stream(sampleFormat_)); + stream_ = make_shared(sampleFormat_); stream_->setBufferLen(serverSettings_->getBufferMs() - latency_); #ifdef HAS_ALSA - player_.reset(new AlsaPlayer(pcmDevice_, stream_.get())); + player_.reset(new AlsaPlayer(pcmDevice_, stream_)); #elif HAS_OPENSL - player_.reset(new OpenslPlayer(pcmDevice_, stream_.get())); + player_.reset(new OpenslPlayer(pcmDevice_, stream_)); #elif HAS_COREAUDIO - player_.reset(new CoreAudioPlayer(pcmDevice_, stream_.get())); + player_.reset(new CoreAudioPlayer(pcmDevice_, stream_)); #else throw SnapException("No audio player support"); #endif diff --git a/client/controller.h b/client/controller.h index aa3f3007..1b3cf101 100644 --- a/client/controller.h +++ b/client/controller.h @@ -66,7 +66,7 @@ private: PcmDevice pcmDevice_; int latency_; std::unique_ptr clientConnection_; - std::unique_ptr stream_; + std::shared_ptr stream_; std::unique_ptr decoder_; std::unique_ptr player_; std::shared_ptr serverSettings_; diff --git a/client/player/alsaPlayer.cpp b/client/player/alsaPlayer.cpp index 68200458..78624995 100644 --- a/client/player/alsaPlayer.cpp +++ b/client/player/alsaPlayer.cpp @@ -26,7 +26,7 @@ using namespace std; -AlsaPlayer::AlsaPlayer(const PcmDevice& pcmDevice, Stream* stream) : +AlsaPlayer::AlsaPlayer(const PcmDevice& pcmDevice, std::shared_ptr stream) : Player(pcmDevice, stream), handle_(NULL), buff_(NULL) { } diff --git a/client/player/alsaPlayer.h b/client/player/alsaPlayer.h index 996530d6..72850b37 100644 --- a/client/player/alsaPlayer.h +++ b/client/player/alsaPlayer.h @@ -30,7 +30,7 @@ class AlsaPlayer : public Player { public: - AlsaPlayer(const PcmDevice& pcmDevice, Stream* stream); + AlsaPlayer(const PcmDevice& pcmDevice, std::shared_ptr stream); virtual ~AlsaPlayer(); /// Set audio volume in range [0..1] diff --git a/client/player/coreAudioPlayer.cpp b/client/player/coreAudioPlayer.cpp index 596ee352..18ae0c63 100644 --- a/client/player/coreAudioPlayer.cpp +++ b/client/player/coreAudioPlayer.cpp @@ -31,7 +31,7 @@ void callback(void *custom_data, AudioQueueRef queue, AudioQueueBufferRef buffer } -CoreAudioPlayer::CoreAudioPlayer(const PcmDevice& pcmDevice, Stream* stream) : +CoreAudioPlayer::CoreAudioPlayer(const PcmDevice& pcmDevice, std::shared_ptr stream) : Player(pcmDevice, stream), ms_(100), pubStream_(stream) diff --git a/client/player/coreAudioPlayer.h b/client/player/coreAudioPlayer.h index 8098b874..7a12d945 100644 --- a/client/player/coreAudioPlayer.h +++ b/client/player/coreAudioPlayer.h @@ -37,7 +37,7 @@ class CoreAudioPlayer : public Player { public: - CoreAudioPlayer(const PcmDevice& pcmDevice, Stream* stream); + CoreAudioPlayer(const PcmDevice& pcmDevice, std::shared_ptr stream); virtual ~CoreAudioPlayer(); void playerCallback(AudioQueueRef queue, AudioQueueBufferRef bufferRef); @@ -49,7 +49,7 @@ protected: size_t ms_; size_t frames_; size_t buff_size_; - Stream* pubStream_; + std::shared_ptr pubStream_; }; diff --git a/client/player/openslPlayer.cpp b/client/player/openslPlayer.cpp index 940e85d4..eca9348a 100644 --- a/client/player/openslPlayer.cpp +++ b/client/player/openslPlayer.cpp @@ -43,7 +43,7 @@ static void bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context) -OpenslPlayer::OpenslPlayer(const PcmDevice& pcmDevice, Stream* stream) : +OpenslPlayer::OpenslPlayer(const PcmDevice& pcmDevice, std::shared_ptr stream) : Player(pcmDevice, stream), engineObject(NULL), engineEngine(NULL), diff --git a/client/player/openslPlayer.h b/client/player/openslPlayer.h index d66d97e0..1a849acc 100644 --- a/client/player/openslPlayer.h +++ b/client/player/openslPlayer.h @@ -35,7 +35,7 @@ typedef int (*AndroidAudioCallback)(short *buffer, int num_samples); class OpenslPlayer : public Player { public: - OpenslPlayer(const PcmDevice& pcmDevice, Stream* stream); + OpenslPlayer(const PcmDevice& pcmDevice, std::shared_ptr stream); virtual ~OpenslPlayer(); virtual void start(); @@ -69,7 +69,7 @@ protected: size_t ms_; size_t frames_; size_t buff_size; - Stream* pubStream_; + std::shared_ptr pubStream_; }; diff --git a/client/player/player.cpp b/client/player/player.cpp index 59df22f4..9d6c1756 100644 --- a/client/player/player.cpp +++ b/client/player/player.cpp @@ -26,7 +26,7 @@ using namespace std; -Player::Player(const PcmDevice& pcmDevice, Stream* stream) : +Player::Player(const PcmDevice& pcmDevice, std::shared_ptr stream) : active_(false), stream_(stream), pcmDevice_(pcmDevice), diff --git a/client/player/player.h b/client/player/player.h index b36b15f3..4b4f9ea9 100644 --- a/client/player/player.h +++ b/client/player/player.h @@ -36,7 +36,7 @@ class Player { public: - Player(const PcmDevice& pcmDevice, Stream* stream); + Player(const PcmDevice& pcmDevice, std::shared_ptr stream); virtual ~Player(); /// Set audio volume in range [0..1] @@ -59,7 +59,7 @@ protected: void adjustVolume(char* buffer, size_t frames); std::atomic active_; - Stream* stream_; + std::shared_ptr stream_; std::thread playerThread_; PcmDevice pcmDevice_; double volume_;