summaryrefslogtreecommitdiffstats
path: root/pica-client/audiovideocallcontroller.h
diff options
context:
space:
mode:
authorAnton <anton@picapica.im>2026-08-12 22:52:20 +0400
committerAnton <anton@picapica.im>2026-08-12 22:52:20 +0400
commit9c5a67f89a6f90080e171fb6c7bb0964bd9e69f3 (patch)
treefdfac4241af1508608eb40ef60d2c3daf86a897f /pica-client/audiovideocallcontroller.h
parent386f189f03fc199285716d78a059b790bd1b9a6b (diff)
downloadpica-pica-9c5a67f89a6f90080e171fb6c7bb0964bd9e69f3.tar.gz
pica-pica-9c5a67f89a6f90080e171fb6c7bb0964bd9e69f3.zip
pica-client: voice calls
Diffstat (limited to 'pica-client/audiovideocallcontroller.h')
-rw-r--r--pica-client/audiovideocallcontroller.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/pica-client/audiovideocallcontroller.h b/pica-client/audiovideocallcontroller.h
index 7a38f1b..8df6af1 100644
--- a/pica-client/audiovideocallcontroller.h
+++ b/pica-client/audiovideocallcontroller.h
@@ -19,6 +19,7 @@
#include <QObject>
#include <QThread>
+#include <QElapsedTimer>
#include "callwindow.h"
#include "audiodevice.h"
#include "videodevice.h"
@@ -36,7 +37,7 @@ public:
public slots:
void start_call(QByteArray peer_id);
void call_from(QByteArray peer_id);
- void call_failed(QString reason);
+ void call_failed(QByteArray peer_id, QString reason);
void call_accepted(QByteArray peer_id);
void call_rejected(QByteArray peer_id);
void call_hungup(QByteArray peer_id);
@@ -59,10 +60,23 @@ private:
TonePlayer *ringtoneplayer;
QThread ringtoneplayer_thread;
+ // Mic capture+encode and remote-audio decode+playback, each blocking
+ // its own thread for the duration of the call (see AudioDevice).
+ QThread microphone_thread;
+ QThread output_thread;
+
+ // Sequence number / capture-clock timestamp stamped onto outgoing
+ // 0x76 audio packets (see PICA_PROTO_CALL_PACKET_HDRSIZE).
+ quint16 m_audioSeq;
+ QElapsedTimer m_callClock;
+
void playEarpieceTone(void (TonePlayer::*tone)());
void playRingTone();
void stopTones();
+ void startAudioPipeline();
+ void stopAudioPipeline();
+
private slots:
// button handlers
void initiate_call();
@@ -70,6 +84,10 @@ private slots:
void end_call();
void callwindow_closed(CallWindow *sender_window);
+ void send_audio_packet(QByteArray data);
+ void incoming_audio_params(QByteArray peer_id, QString codec, quint16 sample_rate);
+ void incoming_audio_packet(QByteArray peer_id, quint16 seq_num, quint32 timestamp, QByteArray data);
+
};
#endif // AUDIOVIDEOCALLCONTROLLER_H