UI: Use main video on the virtual camera if program

This change allows the virtual camera to really output what is in the
program view, some plugin interract with this view but their changes
does not appear on the virtual camera.
This commit is contained in:
tytan652
2022-11-15 10:00:41 +01:00
committed by Lain
parent 2be0550e9a
commit 7cd7ca80f8
9 changed files with 159 additions and 78 deletions

View File

@@ -301,13 +301,17 @@ bool BasicOutputHandler::StartVirtualCam()
if (!main->vcamEnabled)
return false;
if (!virtualCamView)
bool typeIsProgram = main->vcamConfig.type ==
VCamOutputType::ProgramView;
if (!virtualCamView && !typeIsProgram)
virtualCamView = obs_view_create();
UpdateVirtualCamOutputSource();
if (!virtualCamVideo) {
virtualCamVideo = obs_view_add(virtualCamView);
virtualCamVideo = typeIsProgram ? obs_get_video()
: obs_view_add(virtualCamView);
if (!virtualCamVideo)
return false;
@@ -361,19 +365,17 @@ void BasicOutputHandler::UpdateVirtualCamOutputSource()
OBSSourceAutoRelease source;
switch (main->vcamConfig.type) {
case VCamOutputType::InternalOutput:
case VCamOutputType::Invalid:
case VCamOutputType::ProgramView:
DestroyVirtualCameraScene();
switch (main->vcamConfig.internal) {
case VCamInternalType::Default:
source = obs_get_output_source(0);
break;
case VCamInternalType::Preview:
OBSSource s = main->GetCurrentSceneSource();
obs_source_get_ref(s);
source = s.Get();
break;
}
return;
case VCamOutputType::PreviewOutput: {
DestroyVirtualCameraScene();
OBSSource s = main->GetCurrentSceneSource();
obs_source_get_ref(s);
source = s.Get();
break;
}
case VCamOutputType::SceneOutput:
DestroyVirtualCameraScene();
source = obs_get_source_by_name(main->vcamConfig.scene.c_str());
@@ -418,6 +420,11 @@ void BasicOutputHandler::UpdateVirtualCamOutputSource()
void BasicOutputHandler::DestroyVirtualCamView()
{
if (main->vcamConfig.type == VCamOutputType::ProgramView) {
virtualCamVideo = nullptr;
return;
}
obs_view_remove(virtualCamView);
obs_view_set_source(virtualCamView, 0, nullptr);
virtualCamVideo = nullptr;