summaryrefslogtreecommitdiff
path: root/src/audio
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2022-09-28 22:10:36 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2022-09-28 22:10:36 -0400
commita96d96b3aa883c5ee5892e4ff94e3c539989c66a (patch)
treed2d874aac3e2ba5daa2edb6ee682dce2345e7a5f /src/audio
parentd57d822aa9f85ee023e2a50bd525d530b39a7186 (diff)
downloadabaddon-portaudio-a96d96b3aa883c5ee5892e4ff94e3c539989c66a.tar.gz
abaddon-portaudio-a96d96b3aa883c5ee5892e4ff94e3c539989c66a.zip
basic mute/deafen
Diffstat (limited to 'src/audio')
-rw-r--r--src/audio/manager.cpp12
-rw-r--r--src/audio/manager.hpp7
2 files changed, 18 insertions, 1 deletions
diff --git a/src/audio/manager.cpp b/src/audio/manager.cpp
index 797d899..35a9c76 100644
--- a/src/audio/manager.cpp
+++ b/src/audio/manager.cpp
@@ -137,6 +137,8 @@ void AudioManager::SetOpusBuffer(uint8_t *ptr) {
}
void AudioManager::FeedMeOpus(uint32_t ssrc, const std::vector<uint8_t> &data) {
+ if (!m_should_playback) return;
+
size_t payload_size = 0;
const auto *opus_encoded = StripRTPExtensionHeader(data.data(), static_cast<int>(data.size()), payload_size);
static std::array<opus_int16, 120 * 48 * 2> pcm;
@@ -152,8 +154,16 @@ void AudioManager::FeedMeOpus(uint32_t ssrc, const std::vector<uint8_t> &data) {
}
}
+void AudioManager::SetCapture(bool capture) {
+ m_should_capture = capture;
+}
+
+void AudioManager::SetPlayback(bool playback) {
+ m_should_playback = playback;
+}
+
void AudioManager::OnCapturedPCM(const int16_t *pcm, ma_uint32 frames) {
- if (m_opus_buffer == nullptr) return;
+ if (m_opus_buffer == nullptr || !m_should_capture) return;
int payload_len = opus_encode(m_encoder, pcm, 480, static_cast<unsigned char *>(m_opus_buffer), 1275);
if (payload_len < 0) {
diff --git a/src/audio/manager.hpp b/src/audio/manager.hpp
index 3ba6e29..4986da6 100644
--- a/src/audio/manager.hpp
+++ b/src/audio/manager.hpp
@@ -1,6 +1,7 @@
#pragma once
#ifdef WITH_VOICE
// clang-format off
+
#include <array>
#include <atomic>
#include <deque>
@@ -25,6 +26,9 @@ public:
void SetOpusBuffer(uint8_t *ptr);
void FeedMeOpus(uint32_t ssrc, const std::vector<uint8_t> &data);
+ void SetCapture(bool capture);
+ void SetPlayback(bool playback);
+
[[nodiscard]] bool OK() const;
private:
@@ -51,6 +55,9 @@ private:
uint8_t *m_opus_buffer = nullptr;
+ std::atomic<bool> m_should_capture = true;
+ std::atomic<bool> m_should_playback = true;
+
public:
using type_signal_opus_packet = sigc::signal<void(int payload_size)>;
type_signal_opus_packet signal_opus_packet();