From 9c5a67f89a6f90080e171fb6c7bb0964bd9e69f3 Mon Sep 17 00:00:00 2001 From: Anton Date: Wed, 12 Aug 2026 22:52:20 +0400 Subject: pica-client: voice calls --- pica-client/audiovideocallcontroller.h | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'pica-client/audiovideocallcontroller.h') 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 #include +#include #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 -- cgit v1.2.1