Просмотр исходного кода

UI: Always create a display capture on first run

For the sake of consistency, always create a display capture source on
the very first run of the program, just to have something displayed.

(NOTE: The only exception here is on windows 7/vista, which isn't ideal
for display capture, so it'll continue to be left blank)
jp9000 10 лет назад
Родитель
Сommit
35b2ce565a
2 измененных файлов с 33 добавлено и 17 удалено
  1. 32 17
      obs/window-basic-main.cpp
  2. 1 0
      obs/window-basic-main.hpp

+ 32 - 17
obs/window-basic-main.cpp

@@ -350,33 +350,31 @@ static inline bool HasAudioDevices(const char *source_id)
 	return count != 0;
 }
 
-void OBSBasic::CreateDefaultScene()
+void OBSBasic::CreateFirstRunSources(obs_scene_t *scene)
 {
-	disableSaving++;
-
 	bool hasDesktopAudio = HasAudioDevices(App()->OutputAudioSource());
 	bool hasInputAudio   = HasAudioDevices(App()->InputAudioSource());
-
-	ClearSceneData();
-
-	obs_scene_t  *scene  = obs_scene_create(Str("Basic.Scene"));
-	obs_source_t *source = obs_scene_get_source(scene);
-
-	obs_add_source(source);
+	const char *displayCaptureType = nullptr;
+	obs_source_t *source = nullptr;
 
 #ifdef __APPLE__
-	source = obs_source_create(OBS_SOURCE_TYPE_INPUT, "display_capture",
-			Str("Basic.DisplayCapture"), NULL, nullptr);
-
+	displayCaptureType = "display_capture";
+#elif _WIN32
+	if (GetWindowsVersion() >= 0x602)
+		displayCaptureType = "monitor_capture";
+#else //X11
+	displayCaptureType = "xshm_input";
+#endif
+	if (displayCaptureType) {
+		source = obs_source_create(OBS_SOURCE_TYPE_INPUT,
+				displayCaptureType, Str("Basic.DisplayCapture"),
+				NULL, nullptr);
+	}
 	if (source) {
 		obs_scene_add(scene, source);
 		obs_add_source(source);
 		obs_source_release(source);
 	}
-#endif
-
-	obs_set_output_source(0, obs_scene_get_source(scene));
-	obs_scene_release(scene);
 
 	if (hasDesktopAudio)
 		ResetAudioDevice(App()->OutputAudioSource(), "default",
@@ -384,6 +382,23 @@ void OBSBasic::CreateDefaultScene()
 	if (hasInputAudio)
 		ResetAudioDevice(App()->InputAudioSource(), "default",
 				Str("Basic.AuxDevice1"), 3);
+}
+
+void OBSBasic::CreateDefaultScene()
+{
+	disableSaving++;
+
+	ClearSceneData();
+
+	obs_scene_t  *scene  = obs_scene_create(Str("Basic.Scene"));
+	obs_source_t *source = obs_scene_get_source(scene);
+
+	obs_add_source(source);
+
+	CreateFirstRunSources(scene);
+
+	obs_set_output_source(0, obs_scene_get_source(scene));
+	obs_scene_release(scene);
 
 	disableSaving--;
 }

+ 1 - 0
obs/window-basic-main.hpp

@@ -113,6 +113,7 @@ private:
 
 	void          SetupEncoders();
 
+	void          CreateFirstRunSources(obs_scene_t *scene);
 	void          CreateDefaultScene();
 
 	void          ClearVolumeControls();