summaryrefslogtreecommitdiff
path: root/src/audio/manager.hpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2022-10-16 23:12:26 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2022-10-16 23:12:26 -0400
commit621beb13444eb3ca16a756bfb8fdc6b4f79723f5 (patch)
tree041586c38fa8d2664a4a063e3a2ef85405f0fde6 /src/audio/manager.hpp
parent17e7478bb4827e094a06faca6c5f2d5f4e5a45cc (diff)
downloadabaddon-portaudio-621beb13444eb3ca16a756bfb8fdc6b4f79723f5.tar.gz
abaddon-portaudio-621beb13444eb3ca16a756bfb8fdc6b4f79723f5.zip
basic volume meters
Diffstat (limited to 'src/audio/manager.hpp')
-rw-r--r--src/audio/manager.hpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/audio/manager.hpp b/src/audio/manager.hpp
index 9d270fa..43d8a1e 100644
--- a/src/audio/manager.hpp
+++ b/src/audio/manager.hpp
@@ -35,9 +35,18 @@ public:
[[nodiscard]] bool OK() const;
+ [[nodiscard]] double GetCaptureVolumeLevel() const noexcept;
+ [[nodiscard]] double GetSSRCVolumeLevel(uint32_t ssrc) const noexcept;
+
private:
void OnCapturedPCM(const int16_t *pcm, ma_uint32 frames);
+ void UpdateReceiveVolume(uint32_t ssrc, const int16_t *pcm, int frames);
+ void UpdateCaptureVolume(const int16_t *pcm, ma_uint32 frames);
+ std::atomic<int> m_capture_peak_meter = 0;
+
+ bool DecayVolumeMeters();
+
friend void data_callback(ma_device *, void *, const void *, ma_uint32);
friend void capture_data_callback(ma_device *, void *, const void *, ma_uint32);
@@ -52,7 +61,7 @@ private:
ma_device m_capture_device;
ma_device_config m_capture_config;
- std::mutex m_mutex;
+ mutable std::mutex m_mutex;
std::unordered_map<uint32_t, std::pair<std::deque<int16_t>, OpusDecoder *>> m_sources;
OpusEncoder *m_encoder;
@@ -65,6 +74,9 @@ private:
std::unordered_set<uint32_t> m_muted_ssrcs;
std::unordered_map<uint32_t, double> m_volume_ssrc;
+ mutable std::mutex m_vol_mtx;
+ std::unordered_map<uint32_t, double> m_volumes;
+
public:
using type_signal_opus_packet = sigc::signal<void(int payload_size)>;
type_signal_opus_packet signal_opus_packet();