|
@@ -287,6 +287,10 @@ OBSBasic::OBSBasic(QWidget *parent)
|
|
SLOT(UpdateCPUUsage()));
|
|
SLOT(UpdateCPUUsage()));
|
|
cpuUsageTimer->start(3000);
|
|
cpuUsageTimer->start(3000);
|
|
|
|
|
|
|
|
+ diskFullTimer = new QTimer(this);
|
|
|
|
+ connect(diskFullTimer, SIGNAL(timeout()), this,
|
|
|
|
+ SLOT(CheckDiskSpaceRemaining()));
|
|
|
|
+
|
|
QAction *renameScene = new QAction(ui->scenesDock);
|
|
QAction *renameScene = new QAction(ui->scenesDock);
|
|
renameScene->setShortcutContext(Qt::WidgetWithChildrenShortcut);
|
|
renameScene->setShortcutContext(Qt::WidgetWithChildrenShortcut);
|
|
connect(renameScene, SIGNAL(triggered()), this, SLOT(EditSceneName()));
|
|
connect(renameScene, SIGNAL(triggered()), this, SLOT(EditSceneName()));
|
|
@@ -5320,6 +5324,12 @@ void OBSBasic::StartRecording()
|
|
if (disableOutputsRef)
|
|
if (disableOutputsRef)
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
+ if (LowDiskSpace()) {
|
|
|
|
+ DiskSpaceMessage();
|
|
|
|
+ ui->recordButton->setChecked(false);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (api)
|
|
if (api)
|
|
api->on_event(OBS_FRONTEND_EVENT_RECORDING_STARTING);
|
|
api->on_event(OBS_FRONTEND_EVENT_RECORDING_STARTING);
|
|
|
|
|
|
@@ -5364,6 +5374,9 @@ void OBSBasic::RecordingStart()
|
|
if (api)
|
|
if (api)
|
|
api->on_event(OBS_FRONTEND_EVENT_RECORDING_STARTED);
|
|
api->on_event(OBS_FRONTEND_EVENT_RECORDING_STARTED);
|
|
|
|
|
|
|
|
+ if (!diskFullTimer->isActive())
|
|
|
|
+ diskFullTimer->start(1000);
|
|
|
|
+
|
|
OnActivate();
|
|
OnActivate();
|
|
UpdatePause();
|
|
UpdatePause();
|
|
|
|
|
|
@@ -5428,6 +5441,9 @@ void OBSBasic::RecordingStop(int code, QString last_error)
|
|
if (api)
|
|
if (api)
|
|
api->on_event(OBS_FRONTEND_EVENT_RECORDING_STOPPED);
|
|
api->on_event(OBS_FRONTEND_EVENT_RECORDING_STOPPED);
|
|
|
|
|
|
|
|
+ if (diskFullTimer->isActive())
|
|
|
|
+ diskFullTimer->stop();
|
|
|
|
+
|
|
if (remuxAfterRecord)
|
|
if (remuxAfterRecord)
|
|
AutoRemux();
|
|
AutoRemux();
|
|
|
|
|
|
@@ -5486,6 +5502,12 @@ void OBSBasic::StartReplayBuffer()
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (LowDiskSpace()) {
|
|
|
|
+ DiskSpaceMessage();
|
|
|
|
+ replayBufferButton->setChecked(false);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
obs_output_t *output = outputHandler->replayBuffer;
|
|
obs_output_t *output = outputHandler->replayBuffer;
|
|
obs_data_t *hotkeys = obs_hotkeys_save_output(output);
|
|
obs_data_t *hotkeys = obs_hotkeys_save_output(output);
|
|
obs_data_array_t *bindings =
|
|
obs_data_array_t *bindings =
|
|
@@ -7496,3 +7518,42 @@ void OBSBasic::UpdatePause(bool activate)
|
|
pause.reset();
|
|
pause.reset();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+#define MBYTE (1024ULL * 1024ULL)
|
|
|
|
+#define MBYTES_LEFT_STOP_REC 50ULL
|
|
|
|
+#define MAX_BYTES_LEFT (MBYTES_LEFT_STOP_REC * MBYTE)
|
|
|
|
+
|
|
|
|
+void OBSBasic::DiskSpaceMessage()
|
|
|
|
+{
|
|
|
|
+ blog(LOG_ERROR, "Recording stopped because of low disk space");
|
|
|
|
+
|
|
|
|
+ OBSMessageBox::critical(this, QTStr("Output.RecordNoSpace.Title"),
|
|
|
|
+ QTStr("Output.RecordNoSpace.Msg"));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+bool OBSBasic::LowDiskSpace()
|
|
|
|
+{
|
|
|
|
+ const char *mode = config_get_string(Config(), "Output", "Mode");
|
|
|
|
+ const char *path =
|
|
|
|
+ strcmp(mode, "Advanced")
|
|
|
|
+ ? config_get_string(Config(), "SimpleOutput",
|
|
|
|
+ "FilePath")
|
|
|
|
+ : config_get_string(Config(), "AdvOut", "RecFilePath");
|
|
|
|
+
|
|
|
|
+ uint64_t num_bytes = os_get_free_disk_space(path);
|
|
|
|
+
|
|
|
|
+ if (num_bytes < (MAX_BYTES_LEFT))
|
|
|
|
+ return true;
|
|
|
|
+ else
|
|
|
|
+ return false;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void OBSBasic::CheckDiskSpaceRemaining()
|
|
|
|
+{
|
|
|
|
+ if (LowDiskSpace()) {
|
|
|
|
+ StopRecording();
|
|
|
|
+ StopReplayBuffer();
|
|
|
|
+
|
|
|
|
+ DiskSpaceMessage();
|
|
|
|
+ }
|
|
|
|
+}
|