mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-02-06 12:32:12 -05:00
The status bar doesn't currently own its references to outputs, which can be a problem if streaming outputs are released soon after stream stop. The Multitrack Video output does exactly that, so the status bar will sometimes try to access an invalid pointer for updating its stats. Keeping a weak reference around and upgrading it to collect stats, similar to how the stats window behaves.
120 lines
2.5 KiB
C++
120 lines
2.5 KiB
C++
#pragma once
|
|
|
|
#include <QStatusBar>
|
|
#include <QPointer>
|
|
#include <QTimer>
|
|
#include <obs.h>
|
|
#include <memory>
|
|
|
|
class Ui_StatusBarWidget;
|
|
|
|
class StatusBarWidget : public QWidget {
|
|
Q_OBJECT
|
|
|
|
friend class OBSBasicStatusBar;
|
|
|
|
private:
|
|
std::unique_ptr<Ui_StatusBarWidget> ui;
|
|
|
|
public:
|
|
StatusBarWidget(QWidget *parent = nullptr);
|
|
~StatusBarWidget();
|
|
};
|
|
|
|
class OBSBasicStatusBar : public QStatusBar {
|
|
Q_OBJECT
|
|
|
|
private:
|
|
StatusBarWidget *statusWidget = nullptr;
|
|
|
|
OBSWeakOutputAutoRelease streamOutput;
|
|
std::vector<OBSSignal> streamSigs;
|
|
obs_output_t *recordOutput = nullptr;
|
|
bool active = false;
|
|
bool overloadedNotify = true;
|
|
bool streamPauseIconToggle = false;
|
|
bool disconnected = false;
|
|
bool firstCongestionUpdate = false;
|
|
|
|
std::vector<float> congestionArray;
|
|
|
|
int retries = 0;
|
|
int totalStreamSeconds = 0;
|
|
int totalRecordSeconds = 0;
|
|
|
|
int reconnectTimeout = 0;
|
|
|
|
int delaySecTotal = 0;
|
|
int delaySecStarting = 0;
|
|
int delaySecStopping = 0;
|
|
|
|
int startSkippedFrameCount = 0;
|
|
int startTotalFrameCount = 0;
|
|
int lastSkippedFrameCount = 0;
|
|
|
|
int seconds = 0;
|
|
uint64_t lastBytesSent = 0;
|
|
uint64_t lastBytesSentTime = 0;
|
|
|
|
QPixmap excellentPixmap;
|
|
QPixmap goodPixmap;
|
|
QPixmap mediocrePixmap;
|
|
QPixmap badPixmap;
|
|
QPixmap disconnectedPixmap;
|
|
QPixmap inactivePixmap;
|
|
|
|
QPixmap recordingActivePixmap;
|
|
QPixmap recordingPausePixmap;
|
|
QPixmap recordingPauseInactivePixmap;
|
|
QPixmap recordingInactivePixmap;
|
|
QPixmap streamingActivePixmap;
|
|
QPixmap streamingInactivePixmap;
|
|
|
|
float lastCongestion = 0.0f;
|
|
|
|
QPointer<QTimer> refreshTimer;
|
|
QPointer<QTimer> messageTimer;
|
|
|
|
obs_output_t *GetOutput();
|
|
|
|
void Activate();
|
|
void Deactivate();
|
|
|
|
void UpdateDelayMsg();
|
|
void UpdateBandwidth();
|
|
void UpdateStreamTime();
|
|
void UpdateRecordTime();
|
|
void UpdateRecordTimeLabel();
|
|
void UpdateDroppedFrames();
|
|
|
|
static void OBSOutputReconnect(void *data, calldata_t *params);
|
|
static void OBSOutputReconnectSuccess(void *data, calldata_t *params);
|
|
|
|
public slots:
|
|
void UpdateCPUUsage();
|
|
|
|
void clearMessage();
|
|
void showMessage(const QString &message, int timeout = 0);
|
|
|
|
private slots:
|
|
void Reconnect(int seconds);
|
|
void ReconnectSuccess();
|
|
void UpdateStatusBar();
|
|
void UpdateCurrentFPS();
|
|
void UpdateIcons();
|
|
|
|
public:
|
|
OBSBasicStatusBar(QWidget *parent);
|
|
|
|
void StreamDelayStarting(int sec);
|
|
void StreamDelayStopping(int sec);
|
|
void StreamStarted(obs_output_t *output);
|
|
void StreamStopped();
|
|
void RecordingStarted(obs_output_t *output);
|
|
void RecordingStopped();
|
|
void RecordingPaused();
|
|
void RecordingUnpaused();
|
|
|
|
void ReconnectClear();
|
|
};
|