mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-03-05 23:26:13 -05:00
UI: Add virtual camera to UI
Adds a virtual camera button to the main user interface. If virtual camera is not installed, it will not add the button. On Windows, it detects whether the virtual camera filters are properly registered, and will only add the button if the virtual camera filter is confirmed registered. Also adds a virtual camera option to the auto-configuration wizard, which will just simply set the user's resolution/scale to 1920x1080 at 30 FPS.
This commit is contained in:
@@ -1080,6 +1080,12 @@ retryScene:
|
||||
opt_start_replaybuffer = false;
|
||||
}
|
||||
|
||||
if (opt_start_virtualcam) {
|
||||
QMetaObject::invokeMethod(this, "StartVirtualCam",
|
||||
Qt::QueuedConnection);
|
||||
opt_start_virtualcam = false;
|
||||
}
|
||||
|
||||
copyStrings.clear();
|
||||
copyFiltersString = nullptr;
|
||||
|
||||
@@ -1518,6 +1524,18 @@ void OBSBasic::ReplayBufferClicked()
|
||||
StartReplayBuffer();
|
||||
};
|
||||
|
||||
void OBSBasic::AddVCamButton()
|
||||
{
|
||||
vcamButton = new ReplayBufferButton(QTStr("Basic.Main.StartVirtualCam"),
|
||||
this);
|
||||
vcamButton->setCheckable(true);
|
||||
connect(vcamButton.data(), &QPushButton::clicked, this,
|
||||
&OBSBasic::VCamButtonClicked);
|
||||
|
||||
vcamButton->setProperty("themeID", "vcamButton");
|
||||
ui->buttonsVLayout->insertWidget(2, vcamButton);
|
||||
}
|
||||
|
||||
void OBSBasic::ResetOutputs()
|
||||
{
|
||||
ProfileScope("OBSBasic::ResetOutputs");
|
||||
@@ -1645,6 +1663,13 @@ void OBSBasic::OBSInit()
|
||||
cef = obs_browser_init_panel();
|
||||
#endif
|
||||
|
||||
obs_data_t *obsData = obs_get_private_data();
|
||||
vcamEnabled = obs_data_get_bool(obsData, "vcamEnabled");
|
||||
if (vcamEnabled) {
|
||||
AddVCamButton();
|
||||
}
|
||||
obs_data_release(obsData);
|
||||
|
||||
InitBasicConfigDefaults2();
|
||||
|
||||
CheckForSimpleModeX264Fallback();
|
||||
@@ -2248,6 +2273,23 @@ void OBSBasic::CreateHotkeys()
|
||||
LoadHotkeyPair(replayBufHotkeys, "OBSBasic.StartReplayBuffer",
|
||||
"OBSBasic.StopReplayBuffer");
|
||||
|
||||
if (vcamEnabled) {
|
||||
vcamHotkeys = obs_hotkey_pair_register_frontend(
|
||||
"OBSBasic.StartVirtualCam",
|
||||
Str("Basic.Main.StartVirtualCam"),
|
||||
"OBSBasic.StopVirtualCam",
|
||||
Str("Basic.Main.StopVirtualCam"),
|
||||
MAKE_CALLBACK(!basic.outputHandler->VirtualCamActive(),
|
||||
basic.StartVirtualCam,
|
||||
"Starting virtual camera"),
|
||||
MAKE_CALLBACK(basic.outputHandler->VirtualCamActive(),
|
||||
basic.StopVirtualCam,
|
||||
"Stopping virtual camera"),
|
||||
this, this);
|
||||
LoadHotkeyPair(vcamHotkeys, "OBSBasic.StartVirtualCam",
|
||||
"OBSBasic.StopVirtualCam");
|
||||
}
|
||||
|
||||
togglePreviewHotkeys = obs_hotkey_pair_register_frontend(
|
||||
"OBSBasic.EnablePreview",
|
||||
Str("Basic.Main.PreviewConextMenu.Enable"),
|
||||
@@ -5247,6 +5289,10 @@ void OBSBasic::OpenSceneFilters()
|
||||
"==== Streaming Start ==============================================="
|
||||
#define STREAMING_STOP \
|
||||
"==== Streaming Stop ================================================"
|
||||
#define VIRTUAL_CAM_START \
|
||||
"==== Virtual Camera Start =========================================="
|
||||
#define VIRTUAL_CAM_STOP \
|
||||
"==== Virtual Camera Stop ==========================================="
|
||||
|
||||
void OBSBasic::StartStreaming()
|
||||
{
|
||||
@@ -5967,6 +6013,61 @@ void OBSBasic::ReplayBufferStop(int code)
|
||||
UpdateReplayBuffer(false);
|
||||
}
|
||||
|
||||
void OBSBasic::StartVirtualCam()
|
||||
{
|
||||
if (!outputHandler || !outputHandler->virtualCam)
|
||||
return;
|
||||
if (outputHandler->VirtualCamActive())
|
||||
return;
|
||||
if (disableOutputsRef)
|
||||
return;
|
||||
|
||||
SaveProject();
|
||||
|
||||
if (!outputHandler->StartVirtualCam()) {
|
||||
vcamButton->setChecked(false);
|
||||
}
|
||||
}
|
||||
|
||||
void OBSBasic::StopVirtualCam()
|
||||
{
|
||||
if (!outputHandler || !outputHandler->virtualCam)
|
||||
return;
|
||||
|
||||
SaveProject();
|
||||
|
||||
if (outputHandler->VirtualCamActive())
|
||||
outputHandler->StopVirtualCam();
|
||||
|
||||
OnDeactivate();
|
||||
}
|
||||
|
||||
void OBSBasic::OnVirtualCamStart()
|
||||
{
|
||||
if (!outputHandler || !outputHandler->virtualCam)
|
||||
return;
|
||||
|
||||
vcamButton->setText(QTStr("Basic.Main.StopVirtualCam"));
|
||||
vcamButton->setChecked(true);
|
||||
|
||||
OnActivate();
|
||||
|
||||
blog(LOG_INFO, VIRTUAL_CAM_START);
|
||||
}
|
||||
|
||||
void OBSBasic::OnVirtualCamStop(int)
|
||||
{
|
||||
if (!outputHandler || !outputHandler->virtualCam)
|
||||
return;
|
||||
|
||||
vcamButton->setText(QTStr("Basic.Main.StartVirtualCam"));
|
||||
vcamButton->setChecked(false);
|
||||
|
||||
blog(LOG_INFO, VIRTUAL_CAM_STOP);
|
||||
|
||||
OnDeactivate();
|
||||
}
|
||||
|
||||
void OBSBasic::on_streamButton_clicked()
|
||||
{
|
||||
if (outputHandler->StreamingActive()) {
|
||||
@@ -6073,6 +6174,20 @@ void OBSBasic::on_recordButton_clicked()
|
||||
}
|
||||
}
|
||||
|
||||
void OBSBasic::VCamButtonClicked()
|
||||
{
|
||||
if (outputHandler->VirtualCamActive()) {
|
||||
StopVirtualCam();
|
||||
} else {
|
||||
if (!UIValidation::NoSourcesConfirmation(this)) {
|
||||
vcamButton->setChecked(false);
|
||||
return;
|
||||
}
|
||||
|
||||
StartVirtualCam();
|
||||
}
|
||||
}
|
||||
|
||||
void OBSBasic::on_settingsButton_clicked()
|
||||
{
|
||||
on_action_Settings_triggered();
|
||||
|
||||
Reference in New Issue
Block a user