Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJörg Müller <nexyon@gmail.com>2021-03-02 19:29:18 +0300
committerJörg Müller <nexyon@gmail.com>2021-03-17 01:21:45 +0300
commitd33339ebf44855b62200a2784c046792d78c75bc (patch)
tree425a1d78d6c40f8b188e499cf0db2bc29e8f2d32 /extern/audaspace/plugins/pulseaudio/PulseAudioDevice.h
parent7b8fc307dc4ff608fc68e2decee45bae59f0c7c9 (diff)
Audaspace: add support for PulseAudio on Linux
This adds PulseAudio as audio backend on Linux. PulseAudio is the main audio engine used on most, if not all, Linux distributions today. Ref T86590
Diffstat (limited to 'extern/audaspace/plugins/pulseaudio/PulseAudioDevice.h')
-rw-r--r--extern/audaspace/plugins/pulseaudio/PulseAudioDevice.h105
1 files changed, 105 insertions, 0 deletions
diff --git a/extern/audaspace/plugins/pulseaudio/PulseAudioDevice.h b/extern/audaspace/plugins/pulseaudio/PulseAudioDevice.h
new file mode 100644
index 00000000000..9efae5128b1
--- /dev/null
+++ b/extern/audaspace/plugins/pulseaudio/PulseAudioDevice.h
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright 2009-2016 Jörg Müller
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#pragma once
+
+#ifdef PULSEAUDIO_PLUGIN
+#define AUD_BUILD_PLUGIN
+#endif
+
+/**
+ * @file PulseAudioDevice.h
+ * @ingroup plugin
+ * The PulseAudioDevice class.
+ */
+
+#include "devices/SoftwareDevice.h"
+
+#include <pulse/pulseaudio.h>
+
+AUD_NAMESPACE_BEGIN
+
+/**
+ * This device plays back through PulseAudio, the simple direct media layer.
+ */
+class AUD_PLUGIN_API PulseAudioDevice : public SoftwareDevice
+{
+private:
+ /**
+ * Whether there is currently playback.
+ */
+ volatile bool m_playback;
+
+ pa_threaded_mainloop* m_mainloop;
+ pa_context* m_context;
+ pa_stream* m_stream;
+ pa_context_state_t m_state;
+
+ int m_buffersize;
+ uint32_t m_underflows;
+
+ /**
+ * Reports the state of the PulseAudio server connection.
+ * \param context The PulseAudio context.
+ * \param data The PulseAudio device.
+ */
+ AUD_LOCAL static void PulseAudio_state_callback(pa_context* context, void* data);
+
+ /**
+ * Supplies the next samples to PulseAudio.
+ * \param stream The PulseAudio stream.
+ * \param num_bytes The length in bytes to be supplied.
+ * \param data The PulseAudio device.
+ */
+ AUD_LOCAL static void PulseAudio_request(pa_stream* stream, size_t num_bytes, void* data);
+
+ /**
+ * Reports an underflow from the PulseAudio server.
+ * Automatically adjusts the latency if this happens too often.
+ * @param stream The PulseAudio stream.
+ * \param data The PulseAudio device.
+ */
+ AUD_LOCAL static void PulseAudio_underflow(pa_stream* stream, void* data);
+
+ // delete copy constructor and operator=
+ PulseAudioDevice(const PulseAudioDevice&) = delete;
+ PulseAudioDevice& operator=(const PulseAudioDevice&) = delete;
+
+protected:
+ virtual void playing(bool playing);
+
+public:
+ /**
+ * Opens the PulseAudio audio device for playback.
+ * \param specs The wanted audio specification.
+ * \param buffersize The size of the internal buffer.
+ * \note The specification really used for opening the device may differ.
+ * \exception Exception Thrown if the audio device cannot be opened.
+ */
+ PulseAudioDevice(std::string name, DeviceSpecs specs, int buffersize = AUD_DEFAULT_BUFFER_SIZE);
+
+ /**
+ * Closes the PulseAudio audio device.
+ */
+ virtual ~PulseAudioDevice();
+
+ /**
+ * Registers this plugin.
+ */
+ static void registerPlugin();
+};
+
+AUD_NAMESPACE_END