Explorar o código

UI: Add separate timers to status bar

This adds separate timers for streaming and recording to the status bar.
cg2121 %!s(int64=8) %!d(string=hai) anos
pai
achega
9fe127ec04
Modificáronse 2 ficheiros con 60 adicións e 19 borrados
  1. 54 16
      UI/window-basic-status-bar.cpp
  2. 6 3
      UI/window-basic-status-bar.hpp

+ 54 - 16
UI/window-basic-status-bar.cpp

@@ -11,14 +11,16 @@ OBSBasicStatusBar::OBSBasicStatusBar(QWidget *parent)
 	: QStatusBar    (parent),
 	  delayInfo     (new QLabel),
 	  droppedFrames (new QLabel),
-	  sessionTime   (new QLabel),
+	  streamTime    (new QLabel),
+	  recordTime    (new QLabel),
 	  cpuUsage      (new QLabel),
 	  transparentPixmap (20, 20),
 	  greenPixmap       (20, 20),
 	  grayPixmap        (20, 20),
 	  redPixmap         (20, 20)
 {
-	sessionTime->setText(QString("00:00:00"));
+	streamTime->setText(QString("LIVE: 00:00:00"));
+	recordTime->setText(QString("REC: 00:00:00"));
 	cpuUsage->setText(QString("CPU: 0.0%, 0.00 fps"));
 
 	QWidget *brWidget = new QWidget(this);
@@ -37,8 +39,10 @@ OBSBasicStatusBar::OBSBasicStatusBar(QWidget *parent)
 	delayInfo->setAlignment(Qt::AlignVCenter);
 	droppedFrames->setAlignment(Qt::AlignRight);
 	droppedFrames->setAlignment(Qt::AlignVCenter);
-	sessionTime->setAlignment(Qt::AlignRight);
-	sessionTime->setAlignment(Qt::AlignVCenter);
+	streamTime->setAlignment(Qt::AlignRight);
+	streamTime->setAlignment(Qt::AlignVCenter);
+	recordTime->setAlignment(Qt::AlignRight);
+	recordTime->setAlignment(Qt::AlignVCenter);
 	cpuUsage->setAlignment(Qt::AlignRight);
 	cpuUsage->setAlignment(Qt::AlignVCenter);
 	kbps->setAlignment(Qt::AlignRight);
@@ -46,12 +50,14 @@ OBSBasicStatusBar::OBSBasicStatusBar(QWidget *parent)
 
 	delayInfo->setIndent(20);
 	droppedFrames->setIndent(20);
-	sessionTime->setIndent(20);
+	streamTime->setIndent(20);
+	recordTime->setIndent(20);
 	cpuUsage->setIndent(20);
 	kbps->setIndent(10);
 
 	addPermanentWidget(droppedFrames);
-	addPermanentWidget(sessionTime);
+	addPermanentWidget(streamTime);
+	addPermanentWidget(recordTime);
 	addPermanentWidget(cpuUsage);
 	addPermanentWidget(delayInfo);
 	addPermanentWidget(brWidget);
@@ -74,7 +80,8 @@ void OBSBasicStatusBar::Activate()
 		int skipped = video_output_get_skipped_frames(obs_get_video());
 		int total   = video_output_get_total_frames(obs_get_video());
 
-		totalSeconds = 0;
+		totalStreamSeconds = 0;
+		totalRecordSeconds = 0;
 		lastSkippedFrameCount = 0;
 		startSkippedFrameCount = skipped;
 		startTotalFrameCount = total;
@@ -94,9 +101,19 @@ void OBSBasicStatusBar::Deactivate()
 	if (!main)
 		return;
 
+	if (!streamOutput) {
+		streamTime->setText(QString("LIVE: 00:00:00"));
+		totalStreamSeconds = 0;
+	}
+
+	if (!recordOutput) {
+		recordTime->setText(QString("REC: 00:00:00"));
+		totalRecordSeconds = 0;
+	}
+
 	if (!main->outputHandler->Active()) {
 		delete refreshTimer;
-		sessionTime->setText(QString("00:00:00"));
+
 		delayInfo->setText("");
 		droppedFrames->setText("");
 		kbps->setText("");
@@ -190,19 +207,19 @@ void OBSBasicStatusBar::UpdateCPUUsage()
 	cpuUsage->setMinimumWidth(cpuUsage->width());
 }
 
-void OBSBasicStatusBar::UpdateSessionTime()
+void OBSBasicStatusBar::UpdateStreamTime()
 {
-	totalSeconds++;
+	totalStreamSeconds++;
 
-	int seconds      = totalSeconds % 60;
-	int totalMinutes = totalSeconds / 60;
+	int seconds      = totalStreamSeconds % 60;
+	int totalMinutes = totalStreamSeconds / 60;
 	int minutes      = totalMinutes % 60;
 	int hours        = totalMinutes / 60;
 
 	QString text;
-	text.sprintf("%02d:%02d:%02d", hours, minutes, seconds);
-	sessionTime->setText(text);
-	sessionTime->setMinimumWidth(sessionTime->width());
+	text.sprintf("LIVE: %02d:%02d:%02d", hours, minutes, seconds);
+	streamTime->setText(text);
+	streamTime->setMinimumWidth(streamTime->width());
 
 	if (reconnectTimeout > 0) {
 		QString msg = QTStr("Basic.StatusBar.Reconnecting")
@@ -225,6 +242,21 @@ void OBSBasicStatusBar::UpdateSessionTime()
 	}
 }
 
+void OBSBasicStatusBar::UpdateRecordTime()
+{
+	totalRecordSeconds++;
+
+	int seconds      = totalRecordSeconds % 60;
+	int totalMinutes = totalRecordSeconds / 60;
+	int minutes      = totalMinutes % 60;
+	int hours        = totalMinutes / 60;
+
+	QString text;
+	text.sprintf("REC: %02d:%02d:%02d", hours, minutes, seconds);
+	recordTime->setText(text);
+	recordTime->setMinimumWidth(recordTime->width());
+}
+
 void OBSBasicStatusBar::UpdateDroppedFrames()
 {
 	if (!streamOutput)
@@ -344,7 +376,13 @@ void OBSBasicStatusBar::UpdateStatusBar()
 	OBSBasic *main = qobject_cast<OBSBasic*>(parent());
 
 	UpdateBandwidth();
-	UpdateSessionTime();
+
+	if (streamOutput)
+		UpdateStreamTime();
+
+	if (recordOutput)
+		UpdateRecordTime();
+
 	UpdateDroppedFrames();
 
 	int skipped = video_output_get_skipped_frames(obs_get_video());

+ 6 - 3
UI/window-basic-status-bar.hpp

@@ -14,7 +14,8 @@ class OBSBasicStatusBar : public QStatusBar {
 private:
 	QLabel *delayInfo;
 	QLabel *droppedFrames;
-	QLabel *sessionTime;
+	QLabel *streamTime;
+	QLabel *recordTime;
 	QLabel *cpuUsage;
 	QLabel *kbps;
 	QLabel *statusSquare;
@@ -25,7 +26,8 @@ private:
 	bool overloadedNotify = true;
 
 	int retries = 0;
-	int totalSeconds = 0;
+	int totalStreamSeconds = 0;
+	int totalRecordSeconds = 0;
 
 	int reconnectTimeout = 0;
 
@@ -57,7 +59,8 @@ private:
 
 	void UpdateDelayMsg();
 	void UpdateBandwidth();
-	void UpdateSessionTime();
+	void UpdateStreamTime();
+	void UpdateRecordTime();
 	void UpdateDroppedFrames();
 
 	static void OBSOutputReconnect(void *data, calldata_t *params);