From 7149cbbb23d3a0b686e6739ed5701325976a81a6 Mon Sep 17 00:00:00 2001 From: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com> Date: Thu, 9 Jan 2020 11:52:41 -0500 Subject: [PATCH] audio: start capture or playback stream. Change-Id: If67bb0d338daca8d96a0398d0f9f0cbecb3293c9 --- src/media/audio/alsa/alsalayer.cpp | 2 +- src/media/audio/alsa/alsalayer.h | 2 +- src/media/audio/audiolayer.h | 8 +++++++- src/media/audio/coreaudio/ios/corelayer.cpp | 16 +++++++++++----- src/media/audio/coreaudio/ios/corelayer.h | 4 ++-- src/media/audio/coreaudio/osx/corelayer.cpp | 2 +- src/media/audio/coreaudio/osx/corelayer.h | 2 +- src/media/audio/jack/jacklayer.cpp | 2 +- src/media/audio/jack/jacklayer.h | 2 +- src/media/audio/opensl/opensllayer.cpp | 2 +- src/media/audio/opensl/opensllayer.h | 2 +- src/media/audio/portaudio/portaudiolayer.cpp | 2 +- src/media/audio/portaudio/portaudiolayer.h | 2 +- src/media/audio/pulseaudio/pulselayer.cpp | 2 +- src/media/audio/pulseaudio/pulselayer.h | 2 +- 15 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/media/audio/alsa/alsalayer.cpp b/src/media/audio/alsa/alsalayer.cpp index aa14ab208d..ebef086b7b 100644 --- a/src/media/audio/alsa/alsalayer.cpp +++ b/src/media/audio/alsa/alsalayer.cpp @@ -214,7 +214,7 @@ bool AlsaLayer::openDevice(snd_pcm_t **pcm, const std::string &dev, snd_pcm_stre } void -AlsaLayer::startStream() +AlsaLayer::startStream(AudioStreamType stream) { { std::lock_guard<std::mutex> lock(mutex_); diff --git a/src/media/audio/alsa/alsalayer.h b/src/media/audio/alsa/alsalayer.h index d393cbb047..6837fe0505 100644 --- a/src/media/audio/alsa/alsalayer.h +++ b/src/media/audio/alsa/alsalayer.h @@ -67,7 +67,7 @@ class AlsaLayer : public AudioLayer { * The playback starts accordingly to its threshold * ALSA Library API */ - virtual void startStream(); + virtual void startStream(AudioStreamType stream = AudioStreamType::DEFAULT); /** * Stop the playback and capture streams. diff --git a/src/media/audio/audiolayer.h b/src/media/audio/audiolayer.h index 6c6bdfc20f..039ee5e5a7 100644 --- a/src/media/audio/audiolayer.h +++ b/src/media/audio/audiolayer.h @@ -60,6 +60,12 @@ enum class DeviceType { RINGTONE /** To open the ringtone device only */ }; +enum class AudioStreamType { + PLAYBACK, /** To start playback stream only */ + CAPTURE, /** To start capture stream only */ + DEFAULT /** To start both playback and capture streams */ +}; + class AudioLayer { private: @@ -91,7 +97,7 @@ public: * The playback starts accordingly to its threshold * ALSA Library API */ - virtual void startStream() = 0; + virtual void startStream(AudioStreamType stream = AudioStreamType::DEFAULT) = 0; /** * Stop the playback and capture streams. diff --git a/src/media/audio/coreaudio/ios/corelayer.cpp b/src/media/audio/coreaudio/ios/corelayer.cpp index f1fba6a3f7..c7453e0195 100644 --- a/src/media/audio/coreaudio/ios/corelayer.cpp +++ b/src/media/audio/coreaudio/ios/corelayer.cpp @@ -87,7 +87,7 @@ CoreLayer::getAudioDeviceName(int index, DeviceType type) const } void -CoreLayer::initAudioLayerIO() +CoreLayer::initAudioLayerIO(AudioStreamType stream) { JAMI_DBG("iOS CoreLayer - initializing audio session"); @@ -135,8 +135,14 @@ CoreLayer::initAudioLayerIO() break; } - setupOutputBus(); - setupInputBus(); + bool setUpOutput = stream == AudioStreamType::DEFAULT || stream == AudioStreamType::PLAYBACK; + bool setUpInput = stream == AudioStreamType::DEFAULT || stream == AudioStreamType::CAPTURE; + if (setUpOutput) { + setupOutputBus(); + } + if (setUpInput) { + setupInputBus(); + } bindCallbacks(); } @@ -308,7 +314,7 @@ CoreLayer::bindCallbacks() { } void -CoreLayer::startStream() +CoreLayer::startStream(AudioStreamType stream) { JAMI_DBG("iOS CoreLayer - Start Stream"); @@ -321,7 +327,7 @@ CoreLayer::startStream() dcblocker_.reset(); - initAudioLayerIO(); + initAudioLayerIO(stream); // Run auto inputRes = AudioUnitInitialize(ioUnit_); diff --git a/src/media/audio/coreaudio/ios/corelayer.h b/src/media/audio/coreaudio/ios/corelayer.h index 76dbd0d522..810efcc9d4 100644 --- a/src/media/audio/coreaudio/ios/corelayer.h +++ b/src/media/audio/coreaudio/ios/corelayer.h @@ -83,7 +83,7 @@ class CoreLayer : public AudioLayer { /** * Configure the AudioUnit */ - void initAudioLayerIO(); + void initAudioLayerIO(AudioStreamType stream); void setupOutputBus(); void setupInputBus(); void bindCallbacks(); @@ -96,7 +96,7 @@ class CoreLayer : public AudioLayer { * CoreAudio Library API */ - virtual void startStream(); + virtual void startStream(AudioStreamType stream = AudioStreamType::DEFAULT); void destroyAudioLayer(); diff --git a/src/media/audio/coreaudio/osx/corelayer.cpp b/src/media/audio/coreaudio/osx/corelayer.cpp index ef069d6ed5..853a648db7 100644 --- a/src/media/audio/coreaudio/osx/corelayer.cpp +++ b/src/media/audio/coreaudio/osx/corelayer.cpp @@ -230,7 +230,7 @@ CoreLayer::initAudioLayerIO() } void -CoreLayer::startStream() +CoreLayer::startStream(AudioStreamType stream) { JAMI_DBG("START STREAM"); diff --git a/src/media/audio/coreaudio/osx/corelayer.h b/src/media/audio/coreaudio/osx/corelayer.h index 0da3bb322b..9d447b2ec5 100644 --- a/src/media/audio/coreaudio/osx/corelayer.h +++ b/src/media/audio/coreaudio/osx/corelayer.h @@ -97,7 +97,7 @@ class CoreLayer : public AudioLayer { * CoreAudio Library API */ - virtual void startStream(); + virtual void startStream(AudioStreamType stream = AudioStreamType::DEFAULT); void destroyAudioLayer(); diff --git a/src/media/audio/jack/jacklayer.cpp b/src/media/audio/jack/jacklayer.cpp index 64c3437e69..dc34dd3cae 100644 --- a/src/media/audio/jack/jacklayer.cpp +++ b/src/media/audio/jack/jacklayer.cpp @@ -347,7 +347,7 @@ JackLayer::process_playback(jack_nframes_t frames, void *arg) * Start the capture and playback. */ void -JackLayer::startStream() +JackLayer::startStream(AudioStreamType stream) { { std::lock_guard<std::mutex> lock(mutex_); diff --git a/src/media/audio/jack/jacklayer.h b/src/media/audio/jack/jacklayer.h index 6080011600..dde32e50e4 100644 --- a/src/media/audio/jack/jacklayer.h +++ b/src/media/audio/jack/jacklayer.h @@ -75,7 +75,7 @@ private: /** * Start the capture and playback. */ - void startStream(); + void startStream(AudioStreamType stream = AudioStreamType::DEFAULT); /** * Stop playback and capture. diff --git a/src/media/audio/opensl/opensllayer.cpp b/src/media/audio/opensl/opensllayer.cpp index 50dfd5ee8a..79ca4f56f5 100644 --- a/src/media/audio/opensl/opensllayer.cpp +++ b/src/media/audio/opensl/opensllayer.cpp @@ -68,7 +68,7 @@ OpenSLLayer::init() } void -OpenSLLayer::startStream() +OpenSLLayer::startStream(AudioStreamType stream) { std::lock_guard<std::mutex> lock(mutex_); if (status_ != Status::Idle) diff --git a/src/media/audio/opensl/opensllayer.h b/src/media/audio/opensl/opensllayer.h index 3a030bc705..239537b4f7 100644 --- a/src/media/audio/opensl/opensllayer.h +++ b/src/media/audio/opensl/opensllayer.h @@ -67,7 +67,7 @@ class OpenSLLayer : public AudioLayer { * Start the capture stream and prepare the playback stream. * The playback starts accordingly to its threshold */ - virtual void startStream(); + virtual void startStream(AudioStreamType stream = AudioStreamType::DEFAULT); /** * Stop the playback and capture streams. diff --git a/src/media/audio/portaudio/portaudiolayer.cpp b/src/media/audio/portaudio/portaudiolayer.cpp index db20ef3334..d567dad89f 100644 --- a/src/media/audio/portaudio/portaudiolayer.cpp +++ b/src/media/audio/portaudio/portaudiolayer.cpp @@ -155,7 +155,7 @@ PortAudioLayer::getIndexRingtone() const } void -PortAudioLayer::startStream() +PortAudioLayer::startStream(AudioStreamType stream) { { std::lock_guard<std::mutex> lock(mutex_); diff --git a/src/media/audio/portaudio/portaudiolayer.h b/src/media/audio/portaudio/portaudiolayer.h index 80e4cd8acd..2d8658caa8 100644 --- a/src/media/audio/portaudio/portaudiolayer.h +++ b/src/media/audio/portaudio/portaudiolayer.h @@ -47,7 +47,7 @@ public: * Start the capture stream and prepare the playback stream. * The playback starts accordingly to its threshold */ - void startStream() override; + void startStream(AudioStreamType stream = AudioStreamType::DEFAULT) override; /** * Stop the playback and capture streams. diff --git a/src/media/audio/pulseaudio/pulselayer.cpp b/src/media/audio/pulseaudio/pulselayer.cpp index d54195d4d1..90dea49b20 100644 --- a/src/media/audio/pulseaudio/pulselayer.cpp +++ b/src/media/audio/pulseaudio/pulselayer.cpp @@ -373,7 +373,7 @@ void PulseLayer::disconnectAudioStream() record_.reset(); } -void PulseLayer::startStream() +void PulseLayer::startStream(AudioStreamType stream) { std::unique_lock<std::mutex> lk(readyMtx_); readyCv_.wait(lk, [this] { diff --git a/src/media/audio/pulseaudio/pulselayer.h b/src/media/audio/pulseaudio/pulselayer.h index 0c3e27a7fd..12e5601a18 100644 --- a/src/media/audio/pulseaudio/pulselayer.h +++ b/src/media/audio/pulseaudio/pulselayer.h @@ -130,7 +130,7 @@ class PulseLayer : public AudioLayer { std::string getAudioDeviceName(int index, DeviceType type) const; - virtual void startStream(); + virtual void startStream(AudioStreamType stream = AudioStreamType::DEFAULT); virtual void stopStream(); private: -- GitLab