summaryrefslogtreecommitdiffstats
path: root/pica-client/audiovideocallcontroller.h
diff options
context:
space:
mode:
authorAnton <anton@picapica.im>2026-08-09 08:21:47 +0400
committerAnton <anton@picapica.im>2026-08-09 08:21:47 +0400
commit32b5ae5d300a6e6ee571febd121ac985758c574e (patch)
tree271bdcd2fe3944d80a592525bd4b19e1ca9cbcb1 /pica-client/audiovideocallcontroller.h
parentdebf41f7ee5907cbd4d75d754b18380983929d44 (diff)
downloadpica-pica-32b5ae5d300a6e6ee571febd121ac985758c574e.tar.gz
pica-pica-32b5ae5d300a6e6ee571febd121ac985758c574e.zip
pica-client: add TonePlayer for classic telephony call tones
Wires ringback, busy, special-information (unreachable) and an electromechanical-bell incoming ringtone into AudioVideoCallController, each played on its own QThread since TonePlayer::play() blocks. Device selection reads audio.playback_device and audio.ring_device from Settings so it follows what's configured in SettingsDialog. Centralizes the FFmpeg libavdevice output driver name (alsa/audiotoolbox/dsound) in AudioDevice::PlatformDriverName() rather than hardcoding ALSA, so it can also back capture/playback later. Adds toneplayer.{h,cpp} to the autotools build and adds the missing GPL v3 header to the touched files that lacked it.
Diffstat (limited to 'pica-client/audiovideocallcontroller.h')
-rw-r--r--pica-client/audiovideocallcontroller.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/pica-client/audiovideocallcontroller.h b/pica-client/audiovideocallcontroller.h
index 82e1dc8..08f94af 100644
--- a/pica-client/audiovideocallcontroller.h
+++ b/pica-client/audiovideocallcontroller.h
@@ -18,15 +18,18 @@
#define AUDIOVIDEOCALLCONTROLLER_H
#include <QObject>
+#include <QThread>
#include "callwindow.h"
#include "audiodevice.h"
#include "videodevice.h"
+#include "toneplayer/toneplayer.h"
class AudioVideoCallController : public QObject
{
Q_OBJECT
public:
explicit AudioVideoCallController(QObject *parent = nullptr);
+ ~AudioVideoCallController();
// is call active (i.e. are voice/video packets exchanged now)
bool const isActive() {return is_active;}
void processCall();
@@ -46,6 +49,20 @@ private:
VideoDevice *cam;
bool is_active;
QByteArray m_peer_id;
+
+ // Earpiece tones (ringback, busy, special information/unreachable),
+ // played through the "audio.playback_device" setting.
+ TonePlayer *toneplayer;
+ QThread toneplayer_thread;
+
+ // Incoming call bell, played through the "audio.ring_device" setting.
+ TonePlayer *ringtoneplayer;
+ QThread ringtoneplayer_thread;
+
+ void playEarpieceTone(void (TonePlayer::*tone)());
+ void playRingTone();
+ void stopTones();
+
private slots:
// button handlers
void initiate_call();