blob: b5b1d97d2c72a47d0d826ee8abc380899845107c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
/*
(c) Copyright 2012 - 2018 Anton Sviridenko
https://picapica.im
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, version 3.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef CALLWINDOW_H
#define CALLWINDOW_H
#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QTimer>
#include <QImage>
#ifdef HAVE_VAAPI
#include "vaapi.h"
#endif
class CallWindow : public QWidget
{
Q_OBJECT
public:
explicit CallWindow(QByteArray peer_id, bool incoming);
signals:
void start_call_pressed();
void accept_call_pressed();
void hang_call_pressed();
void callwindow_closed(CallWindow *sender_window);
#ifdef HAVE_VAAPI
// Drawing frames straight out of GPU memory did not work on this system.
// The call controller answers by having them decoded into system memory
// instead, which the label below can show.
void video_rendering_failed();
#endif
private:
QByteArray m_peer_id;
bool is_incoming;
QPushButton *pbAccept;
QPushButton *pbCall;
QPushButton *pbHang;
QLabel *lbTimer;
// Displays the remote side's video. Stays hidden until the first frame
// arrives, so an audio-only call keeps the compact window it had before.
QLabel *lbVideo;
#ifdef HAVE_VAAPI
// Used instead of lbVideo when frames arrive still living in GPU memory;
// only one of the two is ever visible. Which of the two renderers this is
// depends on the session - see VaapiRenderWidget::create().
VaapiRenderWidget *videoGpu;
#endif
QTimer *callTimer;
int callElapsedSeconds;
void closeEvent(QCloseEvent *e);
public slots:
void call_started();
void call_ended();
void showRemoteFrame(QImage frame);
#ifdef HAVE_VAAPI
void showRemoteHwFrame(AVFramePtr frame);
#endif
private slots:
void call();
void accept();
void hang();
void update_call_timer();
#ifdef HAVE_VAAPI
void gpu_rendering_failed(QString message);
#endif
};
#endif
|