linux-v4l2: Improve module detection

Expand PATH for Debian-like systems.
Improve detection when the module is already loaded.
This commit is contained in:
Kurt Kartaltepe 2021-01-24 21:46:02 -08:00 committed by Jim
parent d8a253c42f
commit d8a25ef943
2 changed files with 17 additions and 14 deletions

View File

@ -26,18 +26,7 @@ MODULE_EXPORT const char *obs_module_description(void)
extern struct obs_source_info v4l2_input; extern struct obs_source_info v4l2_input;
extern struct obs_output_info virtualcam_info; extern struct obs_output_info virtualcam_info;
extern bool loopback_module_available();
static bool v4l2loopback_installed()
{
bool loaded = false;
int ret = system("modinfo v4l2loopback >/dev/null 2>&1");
if (ret == 0)
loaded = true;
return loaded;
}
bool obs_module_load(void) bool obs_module_load(void)
{ {
@ -45,7 +34,7 @@ bool obs_module_load(void)
obs_data_t *obs_settings = obs_data_create(); obs_data_t *obs_settings = obs_data_create();
if (v4l2loopback_installed()) { if (loopback_module_available()) {
obs_register_output(&virtualcam_info); obs_register_output(&virtualcam_info);
obs_data_set_bool(obs_settings, "vcamEnabled", true); obs_data_set_bool(obs_settings, "vcamEnabled", true);
} else { } else {

View File

@ -50,10 +50,24 @@ static bool loopback_module_loaded()
return loaded; return loaded;
} }
bool loopback_module_available()
{
if (loopback_module_loaded()) {
return true;
}
if (system("PATH=\"$PATH:/sbin\" modinfo v4l2loopback >/dev/null 2>&1") ==
0) {
return true;
}
return false;
}
static int loopback_module_load() static int loopback_module_load()
{ {
return system( return system(
"pkexec modprobe v4l2loopback exclusive_caps=1 card_label='OBS Virtual Camera' && sleep 0.5"); "PATH=\"$PATH:/sbin\" pkexec modprobe v4l2loopback exclusive_caps=1 card_label='OBS Virtual Camera' && sleep 0.5");
} }
static void *virtualcam_create(obs_data_t *settings, obs_output_t *output) static void *virtualcam_create(obs_data_t *settings, obs_output_t *output)