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:
parent
2be0550e9a
commit
7cd7ca80f8
9 changed files with 159 additions and 78 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue