#pragma once #include #include #include #include #include #include #include #include class QGridLayout; class QCloseEvent; class OBSBasicStats : public QWidget { Q_OBJECT QLabel *fps = nullptr; QLabel *cpuUsage = nullptr; QLabel *hddSpace = nullptr; QLabel *recordTimeLeft = nullptr; QLabel *memUsage = nullptr; QLabel *renderTime = nullptr; QLabel *skippedFrames = nullptr; QLabel *missedFrames = nullptr; QGridLayout *outputLayout = nullptr; os_cpu_usage_info_t *cpu_info = nullptr; QTimer timer; QTimer recTimeLeft; uint64_t num_bytes = 0; std::vector bitrates; struct OutputLabels { QPointer name; QPointer status; QPointer droppedFrames; QPointer megabytesSent; QPointer bitrate; uint64_t lastBytesSent = 0; uint64_t lastBytesSentTime = 0; int first_total = 0; int first_dropped = 0; void Update(obs_output_t *output, bool rec); void Reset(obs_output_t *output); long double kbps = 0.0l; }; QList outputLabels; void AddOutputLabels(QString name); void Update(); virtual void closeEvent(QCloseEvent *event) override; static void OBSFrontendEvent(enum obs_frontend_event event, void *ptr); public: OBSBasicStats(QWidget *parent = nullptr, bool closable = true); ~OBSBasicStats(); static void InitializeValues(); void StartRecTimeLeft(); void ResetRecTimeLeft(); private: QPointer shortcutFilter; private slots: void RecordingTimeLeft(); public slots: void Reset(); protected: virtual void showEvent(QShowEvent *event) override; virtual void hideEvent(QHideEvent *event) override; };