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