1 #pragma once
2 
3 #include <obs.hpp>
4 #include <util/platform.h>
5 #include <obs-frontend-api.h>
6 #include <QPointer>
7 #include <QWidget>
8 #include <QTimer>
9 #include <QLabel>
10 #include <QList>
11 
12 class QGridLayout;
13 class QCloseEvent;
14 
15 class OBSBasicStats : public QWidget {
16 	Q_OBJECT
17 
18 	QLabel *fps = nullptr;
19 	QLabel *cpuUsage = nullptr;
20 	QLabel *hddSpace = nullptr;
21 	QLabel *recordTimeLeft = nullptr;
22 	QLabel *memUsage = nullptr;
23 
24 	QLabel *renderTime = nullptr;
25 	QLabel *skippedFrames = nullptr;
26 	QLabel *missedFrames = nullptr;
27 
28 	QGridLayout *outputLayout = nullptr;
29 
30 	os_cpu_usage_info_t *cpu_info = nullptr;
31 
32 	QTimer timer;
33 	QTimer recTimeLeft;
34 	uint64_t num_bytes = 0;
35 	std::vector<long double> bitrates;
36 
37 	struct OutputLabels {
38 		QPointer<QLabel> name;
39 		QPointer<QLabel> status;
40 		QPointer<QLabel> droppedFrames;
41 		QPointer<QLabel> megabytesSent;
42 		QPointer<QLabel> bitrate;
43 
44 		uint64_t lastBytesSent = 0;
45 		uint64_t lastBytesSentTime = 0;
46 
47 		int first_total = 0;
48 		int first_dropped = 0;
49 
50 		void Update(obs_output_t *output, bool rec);
51 		void Reset(obs_output_t *output);
52 
53 		long double kbps = 0.0l;
54 	};
55 
56 	QList<OutputLabels> outputLabels;
57 
58 	void AddOutputLabels(QString name);
59 	void Update();
60 
61 	virtual void closeEvent(QCloseEvent *event) override;
62 
63 	static void OBSFrontendEvent(enum obs_frontend_event event, void *ptr);
64 
65 public:
66 	OBSBasicStats(QWidget *parent = nullptr, bool closable = true);
67 	~OBSBasicStats();
68 
69 	static void InitializeValues();
70 
71 	void StartRecTimeLeft();
72 	void ResetRecTimeLeft();
73 
74 private:
75 	QPointer<QObject> shortcutFilter;
76 
77 private slots:
78 	void RecordingTimeLeft();
79 
80 public slots:
81 	void Reset();
82 
83 protected:
84 	virtual void showEvent(QShowEvent *event) override;
85 	virtual void hideEvent(QHideEvent *event) override;
86 };
87