window-basic-status-bar.hpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #pragma once
  2. #include <QStatusBar>
  3. #include <QPointer>
  4. #include <QTimer>
  5. #include <obs.h>
  6. #include <memory>
  7. class Ui_StatusBarWidget;
  8. class StatusBarWidget : public QWidget {
  9. Q_OBJECT
  10. friend class OBSBasicStatusBar;
  11. private:
  12. std::unique_ptr<Ui_StatusBarWidget> ui;
  13. public:
  14. StatusBarWidget(QWidget *parent = nullptr);
  15. ~StatusBarWidget();
  16. };
  17. class OBSBasicStatusBar : public QStatusBar {
  18. Q_OBJECT
  19. private:
  20. StatusBarWidget *statusWidget = nullptr;
  21. OBSWeakOutputAutoRelease streamOutput;
  22. std::vector<OBSSignal> streamSigs;
  23. OBSWeakOutputAutoRelease recordOutput;
  24. bool active = false;
  25. bool overloadedNotify = true;
  26. bool streamPauseIconToggle = false;
  27. bool disconnected = false;
  28. bool firstCongestionUpdate = false;
  29. std::vector<float> congestionArray;
  30. int retries = 0;
  31. int totalStreamSeconds = 0;
  32. int totalRecordSeconds = 0;
  33. int reconnectTimeout = 0;
  34. int delaySecTotal = 0;
  35. int delaySecStarting = 0;
  36. int delaySecStopping = 0;
  37. int startSkippedFrameCount = 0;
  38. int startTotalFrameCount = 0;
  39. int lastSkippedFrameCount = 0;
  40. int seconds = 0;
  41. uint64_t lastBytesSent = 0;
  42. uint64_t lastBytesSentTime = 0;
  43. QPixmap excellentPixmap;
  44. QPixmap goodPixmap;
  45. QPixmap mediocrePixmap;
  46. QPixmap badPixmap;
  47. QPixmap disconnectedPixmap;
  48. QPixmap inactivePixmap;
  49. QPixmap recordingActivePixmap;
  50. QPixmap recordingPausePixmap;
  51. QPixmap recordingPauseInactivePixmap;
  52. QPixmap recordingInactivePixmap;
  53. QPixmap streamingActivePixmap;
  54. QPixmap streamingInactivePixmap;
  55. float lastCongestion = 0.0f;
  56. QPointer<QTimer> refreshTimer;
  57. QPointer<QTimer> messageTimer;
  58. obs_output_t *GetOutput();
  59. void Activate();
  60. void Deactivate();
  61. void UpdateDelayMsg();
  62. void UpdateBandwidth();
  63. void UpdateStreamTime();
  64. void UpdateRecordTime();
  65. void UpdateRecordTimeLabel();
  66. void UpdateDroppedFrames();
  67. static void OBSOutputReconnect(void *data, calldata_t *params);
  68. static void OBSOutputReconnectSuccess(void *data, calldata_t *params);
  69. public slots:
  70. void UpdateCPUUsage();
  71. void clearMessage();
  72. void showMessage(const QString &message, int timeout = 0);
  73. private slots:
  74. void Reconnect(int seconds);
  75. void ReconnectSuccess();
  76. void UpdateStatusBar();
  77. void UpdateCurrentFPS();
  78. void UpdateIcons();
  79. public:
  80. OBSBasicStatusBar(QWidget *parent);
  81. void StreamDelayStarting(int sec);
  82. void StreamDelayStopping(int sec);
  83. void StreamStarted(obs_output_t *output);
  84. void StreamStopped();
  85. void RecordingStarted(obs_output_t *output);
  86. void RecordingStopped();
  87. void RecordingPaused();
  88. void RecordingUnpaused();
  89. void ReconnectClear();
  90. };