|
Ring Daemon
|
#include <pulselayer.h>


Public Member Functions | |
| int | getAudioDeviceIndex (const std::string &descr, AudioDeviceType type) const |
| int | getAudioDeviceIndexByName (const std::string &name, AudioDeviceType type) const |
| std::string | getAudioDeviceName (int index, AudioDeviceType type) const |
| virtual std::vector< std::string > | getCaptureDeviceList () const |
| virtual std::vector< std::string > | getPlaybackDeviceList () const |
| bool | inSinkList (const std::string &deviceName) |
| bool | inSourceList (const std::string &deviceName) |
| PulseLayer (AudioPreference &pref) | |
| void | readFromMic () |
| Write data from the ring buffer to the hardware and read data from the hardware. | |
| void | ringtoneToSpeaker () |
| virtual void | startCaptureStream (const std::string &id) override |
| Start a capture stream on the given device (eg. | |
| virtual void | startStream (AudioDeviceType stream) |
| Start the capture stream and prepare the playback stream. | |
| virtual void | stopCaptureStream (const std::string &id) override |
| Stop an ongoing capture stream on the given device. | |
| virtual void | stopStream (AudioDeviceType stream=AudioDeviceType::ALL) |
| Stop the playback and capture streams. | |
| void | updateServerInfo () |
| void | updateSinkList () |
| void | updateSourceList () |
| void | writeToSpeaker () |
| ~PulseLayer () | |
Public Member Functions inherited from jami::AudioLayer | |
| AudioLayer (const AudioPreference &) | |
| void | flushMain () |
| Flush main buffer. | |
| void | flushUrgent () |
| Flush urgent buffer. | |
| double | getCaptureGain () const |
| Get capture stream gain (microphone) | |
| AudioFormat | getFormat () const |
| Get the audio format of the layer (sample rate & channel number). | |
| double | getPlaybackGain () const |
| Get playback stream gain (speaker) | |
| unsigned int | getSampleRate () const |
| Get the sample rate of the audio layer. | |
| bool | isCaptureMuted () const |
| bool | isPlaybackMuted () const |
| bool | isRingtoneMuted () const |
| bool | isStarted () const |
| Determine whether or not the audio layer is active (i.e. | |
| void | muteCapture (bool muted) |
| Mute capture (microphone) | |
| void | mutePlayback (bool muted) |
| Mute playback. | |
| void | muteRingtone (bool muted) |
| void | notifyIncomingCall () |
| Emit an audio notification (beep) on incoming calls. | |
| void | playIncomingCallNotification (bool play) |
| Start/Stop playing the incoming call notification sound (beep) while playing back audio (typically during an ongoing call). | |
| void | putUrgent (std::shared_ptr< AudioFrame > buffer) |
| Send a chunk of data to the hardware buffer to start the playback Copy data in the urgent buffer. | |
| void | setCaptureGain (double gain) |
| Set capture stream gain (microphone) Range should be [-1.0, 1.0]. | |
| void | setPlaybackGain (double gain) |
| Set playback stream gain (speaker) Range should be [-1.0, 1.0]. | |
| template<class Rep , class Period > | |
| bool | waitForStart (const std::chrono::duration< Rep, Period > &rel_time) const |
| virtual | ~AudioLayer () |
Friends | |
| class | AudioLayerTest |
Additional Inherited Members | |
Protected Types inherited from jami::AudioLayer | |
| enum class | Status : uint8_t { Idle , Starting , Started } |
Protected Member Functions inherited from jami::AudioLayer | |
| void | devicesChanged () |
| void | flush () |
| std::shared_ptr< AudioFrame > | getPlayback (AudioFormat format, size_t samples) |
| std::shared_ptr< AudioFrame > | getToPlay (AudioFormat format, size_t writableSamples) |
| std::shared_ptr< AudioFrame > | getToRing (AudioFormat format, size_t writableSamples) |
| void | hardwareFormatAvailable (AudioFormat playback, size_t bufSize=0) |
| Callback to be called by derived classes when the audio output is opened. | |
| void | hardwareInputFormatAvailable (AudioFormat capture) |
| Set the input format on necessary objects. | |
| void | playbackChanged (bool started) |
| void | putRecorded (std::shared_ptr< AudioFrame > &&frame) |
| void | recordChanged (bool started) |
| void | setHasNativeAEC (bool hasEAC) |
| void | setHasNativeNS (bool hasNS) |
Protected Attributes inherited from jami::AudioLayer | |
| AudioFormat | audioFormat_ |
| Sample Rate that should be sent to the sound card. | |
| AudioFormat | audioInputFormat_ |
| Sample Rate for input. | |
| double | captureGain_ |
| Gain applied to mic signal. | |
| bool | hasNativeAEC_ {true} |
| bool | hasNativeNS_ {false} |
| bool | isCaptureMuted_ |
| True if capture is not to be used. | |
| bool | isPlaybackMuted_ |
| True if playback is not to be used. | |
| bool | isRingtoneMuted_ {false} |
| True if ringtone should be muted. | |
| std::shared_ptr< RingBuffer > | mainRingBuffer_ |
| Buffers for audio processing. | |
| std::mutex | mutex_ {} |
| Lock for the entire audio layer. | |
| size_t | nativeFrameSize_ {0} |
| double | playbackGain_ |
| Gain applied to playback signal. | |
| std::unique_ptr< AudioFrameResizer > | playbackQueue_ |
| bool | playbackStarted_ {false} |
| const AudioPreference & | pref_ |
| bool | recordStarted_ {false} |
| std::unique_ptr< Resampler > | resampler_ |
| Manage sampling rate conversion. | |
| std::condition_variable | startedCv_ |
| std::atomic< Status > | status_ {Status::Idle} |
| Whether or not the audio layer's playback stream is started. | |
| RingBuffer | urgentRingBuffer_ |
| Urgent ring buffer used for ringtones. | |
Definition at line 109 of file pulselayer.h.
| jami::PulseLayer::PulseLayer | ( | AudioPreference & | pref | ) |
Definition at line 55 of file pulselayer.cpp.
References jami::emitSignal(), JAMI_INFO, and jami::AudioLayer::setHasNativeNS().

| jami::PulseLayer::~PulseLayer | ( | ) |
Definition at line 97 of file pulselayer.cpp.
References jami::emitSignal(), jami::AudioLayer::playbackChanged(), and jami::AudioLayer::recordChanged().

|
virtual |
Implements jami::AudioLayer.
Definition at line 249 of file pulselayer.cpp.
References jami::CAPTURE, jami::emitSignal(), JAMI_ERR, jami::PLAYBACK, and jami::RINGTONE.

| int jami::PulseLayer::getAudioDeviceIndexByName | ( | const std::string & | name, |
| AudioDeviceType | type | ||
| ) | const |
Definition at line 270 of file pulselayer.cpp.
References jami::CAPTURE, JAMI_ERR, jami::PLAYBACK, and jami::RINGTONE.
|
virtual |
Implements jami::AudioLayer.
Definition at line 324 of file pulselayer.cpp.
References jami::CAPTURE, jami::emitSignal(), JAMI_ERR, jami::PLAYBACK, and jami::RINGTONE.

|
virtual |
Implements jami::AudioLayer.
Definition at line 229 of file pulselayer.cpp.
References jami::emitSignal().

|
virtual |
Implements jami::AudioLayer.
Definition at line 239 of file pulselayer.cpp.
References jami::emitSignal().

Definition at line 215 of file pulselayer.cpp.
Definition at line 222 of file pulselayer.cpp.
| void jami::PulseLayer::readFromMic | ( | ) |
Write data from the ring buffer to the hardware and read data from the hardware.
Definition at line 558 of file pulselayer.cpp.
References jami::emitSignal(), jami::libav_utils::fillWithSilence(), jami::AudioLayer::isCaptureMuted_, JAMI_ERR, and jami::AudioLayer::putRecorded().
Referenced by startStream().

| void jami::PulseLayer::ringtoneToSpeaker | ( | ) |
Definition at line 587 of file pulselayer.cpp.
References jami::emitSignal(), jami::AudioLayer::getToRing(), and jami::AudioLayer::isRingtoneMuted_.
Referenced by startStream().

Start a capture stream on the given device (eg.
a window handle, or a hard-coded string like "desktop-audio"). Not all audio layers will implement this method, so default implementation does nothing.
| id | The identifier of the device from which audio should be captured |
Reimplemented from jami::AudioLayer.
Definition at line 446 of file pulselayer.cpp.
References PulseLoopbackCapture::channels(), jami::RingBufferPool::createRingBuffer(), jami::emitSignal(), jami::Manager::getRingBufferPool(), jami::Manager::instance(), PulseLoopbackCapture::isRunning(), JAMI_DEBUG, JAMI_ERROR, JAMI_WARNING, PulseLoopbackCapture::sampleRate(), and PulseLoopbackCapture::startCaptureAsync().

|
virtual |
Start the capture stream and prepare the playback stream.
The playback starts accordingly to its threshold
Implements jami::AudioLayer.
Definition at line 416 of file pulselayer.cpp.
References jami::CAPTURE, jami::emitSignal(), jami::AudioPreference::getEchoCanceller(), jami::AudioLayer::mutex_, jami::PLAYBACK, readFromMic(), jami::RINGTONE, ringtoneToSpeaker(), jami::AudioLayer::setHasNativeAEC(), jami::AudioLayer::Started, jami::AudioLayer::startedCv_, jami::AudioLayer::status_, and writeToSpeaker().

Stop an ongoing capture stream on the given device.
Not all audio layers will implement this method, so default implementation does nothing.
| id | The identifier of the capture device from which audio should stop being captured |
Reimplemented from jami::AudioLayer.
Definition at line 496 of file pulselayer.cpp.
References jami::emitSignal(), jami::Manager::getRingBufferPool(), jami::Manager::instance(), PulseLoopbackCapture::isRunning(), JAMI_DEBUG, JAMI_WARNING, PulseLoopbackCapture::stopCapture(), and jami::RingBufferPool::unBindAll().

|
virtual |
Stop the playback and capture streams.
Drops the pending frames and put the capture and playback handles to PREPARED state
Implements jami::AudioLayer.
Definition at line 512 of file pulselayer.cpp.
References jami::ALL, jami::emitSignal(), jami::AudioLayer::Idle, jami::AudioLayer::mutex_, jami::PLAYBACK, jami::AudioLayer::playbackChanged(), jami::AudioLayer::startedCv_, and jami::AudioLayer::status_.

| void jami::PulseLayer::updateServerInfo | ( | ) |
Definition at line 201 of file pulselayer.cpp.
References jami::emitSignal(), and JAMI_DBG.

| void jami::PulseLayer::updateSinkList | ( | ) |
Definition at line 167 of file pulselayer.cpp.
References jami::emitSignal(), JAMI_DBG, and jami::AudioFormat::nb_channels.

| void jami::PulseLayer::updateSourceList | ( | ) |
Definition at line 184 of file pulselayer.cpp.
References jami::emitSignal(), JAMI_DBG, and jami::AudioFormat::nb_channels.

| void jami::PulseLayer::writeToSpeaker | ( | ) |
Definition at line 537 of file pulselayer.cpp.
References jami::emitSignal(), jami::AudioLayer::getToPlay(), and jami::AudioLayer::isPlaybackMuted_.
Referenced by startStream().

Definition at line 251 of file pulselayer.h.