/
githubmirror
/
obs-studio
Обзор
Документация
Войти
/
githubmirror
/
obs-studio
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
frontend/widgets/OBSBasic_OutputHandler.cpp
148 строк
4 KB
Warchamp7
Update C++ files with braces
09 июн 2026, 20:41
09 июн 2026, 20:41
30b63c6
Код
Авторство
О чём код?
/****************************************************************************** Copyright (C) 2023 by Lain Bailey <lain@obsproject.com> Zachary Lund <admin@computerquip.com> Philippe Groarke <philippe.groarke@gmail.com> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ #include "OBSBasic.hpp" #include <qt-wrappers.hpp> #include <QDir> void OBSBasic::ResetOutputs() { ProfileScope("OBSBasic::ResetOutputs"); const char *mode = config_get_string(activeConfiguration, "Output", "Mode"); bool advOut = astrcmpi(mode, "Advanced") == 0; if ((!outputHandler || !outputHandler->Active()) && (!setupStreamingGuard.valid() || setupStreamingGuard.wait_for(std::chrono::seconds{0}) == std::future_status::ready)) { outputHandler.reset(); outputHandler.reset(advOut ? CreateAdvancedOutputHandler(this) : CreateSimpleOutputHandler(this)); emit ReplayBufEnabled(outputHandler->replayBuffer); if (sysTrayReplayBuffer) { sysTrayReplayBuffer->setEnabled(!!outputHandler->replayBuffer); } UpdateIsRecordingPausable(); } else { outputHandler->Update(); } } bool OBSBasic::Active() const { if (!outputHandler) { return false; } return outputHandler->Active(); } void OBSBasic::ResizeOutputSizeOfSource() { if (obs_video_active()) { return; } QMessageBox resize_output(this); resize_output.setText(QTStr("ResizeOutputSizeOfSource.Text") + "\n\n" + QTStr("ResizeOutputSizeOfSource.Continue")); QAbstractButton *Yes = resize_output.addButton(QTStr("Yes"), QMessageBox::YesRole); resize_output.addButton(QTStr("No"), QMessageBox::NoRole); resize_output.setIcon(QMessageBox::Warning); resize_output.setWindowTitle(QTStr("ResizeOutputSizeOfSource")); resize_output.exec(); if (resize_output.clickedButton() != Yes) { return; } OBSSource source = obs_sceneitem_get_source(GetCurrentSceneItem()); int width = obs_source_get_width(source); int height = obs_source_get_height(source); width = ((width + 3) / 4) * 4; // Round width up to the nearest multiple of 4 height = ((height + 1) / 2) * 2; // Round height up to the nearest multiple of 2 config_set_uint(activeConfiguration, "Video", "BaseCX", width); config_set_uint(activeConfiguration, "Video", "BaseCY", height); config_set_uint(activeConfiguration, "Video", "OutputCX", width); config_set_uint(activeConfiguration, "Video", "OutputCY", height); ResetVideo(); ResetOutputs(); activeConfiguration.SaveSafe("tmp"); on_actionFitToScreen_triggered(); } const char *OBSBasic::GetCurrentOutputPath() { const char *path = nullptr; const char *mode = config_get_string(Config(), "Output", "Mode"); if (strcmp(mode, "Advanced") == 0) { const char *advanced_mode = config_get_string(Config(), "AdvOut", "RecType"); if (strcmp(advanced_mode, "FFmpeg") == 0) { path = config_get_string(Config(), "AdvOut", "FFFilePath"); } else { path = config_get_string(Config(), "AdvOut", "RecFilePath"); } } else { path = config_get_string(Config(), "SimpleOutput", "FilePath"); } return path; } void OBSBasic::OutputPathInvalidMessage() { blog(LOG_ERROR, "Recording stopped because of bad output path"); OBSMessageBox::critical(this, QTStr("Output.BadPath.Title"), QTStr("Output.BadPath.Text")); } bool OBSBasic::IsFFmpegOutputToURL() const { const char *mode = config_get_string(Config(), "Output", "Mode"); if (strcmp(mode, "Advanced") == 0) { const char *advanced_mode = config_get_string(Config(), "AdvOut", "RecType"); if (strcmp(advanced_mode, "FFmpeg") == 0) { bool is_local = config_get_bool(Config(), "AdvOut", "FFOutputToFile"); if (!is_local) { return true; } } } return false; } bool OBSBasic::OutputPathValid() { if (IsFFmpegOutputToURL()) { return true; } const char *path = GetCurrentOutputPath(); return path && *path && QDir(path).exists(); }