Giter VIP home page Giter VIP logo

Comments (7)

zlice avatar zlice commented on August 28, 2024 2

-.- well it looks like they dont care

can fix up with a patch for the dumb logic (plus add hardcoded system directories i guess, see 'second' below)

https://github.com/obsproject/obs-studio/blob/master/libobs/obs-nix.c#L92

  struct stat stat_info;

  for (int i = 0; i < module_patterns_size; i++) {
    if ((stat(module_bin[i], &stat_info) == 0 && !!S_ISDIR(stat_info.st_mode) )
        && (stat(module_data[i], &stat_info) == 0 && !!S_ISDIR(stat_info.st_mode) ) )
      obs_add_module_path(module_bin[i], module_data[i]);
  }

first problem is bad plugins/dirs wipe old plugins. check if they exist

second problem they wont fix or say is a void issue for cmake vars

third is, shouldn't user supplied env vars override current plugins? basically the above fixed loop should go first, then the user provided stuff

add:

fwiw - this doesn't fix the double loaded plugins segfaulting on exit. it actually makes it more common because your plugins actually fukin load :)

WIP patch
--- a/libobs/obs-nix.c
+++ b/libobs/obs-nix.c
@@ -33,6 +33,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <unistd.h>
+#include <sys/stat.h>
 #if defined(__FreeBSD__) || defined(__OpenBSD__)
 #include <sys/sysctl.h>
 #endif
@@ -68,28 +69,18 @@
 
 void add_default_module_paths(void)
 {
-	char *module_bin_path =
-		os_get_executable_path_ptr("../" OBS_PLUGIN_PATH);
-	char *module_data_path = os_get_executable_path_ptr(
-		"../" OBS_DATA_PATH "/obs-plugins/%module%");
-
-	if (module_bin_path && module_data_path) {
-		char *abs_module_bin_path =
-			os_get_abs_path_ptr(module_bin_path);
-
-		if (abs_module_bin_path &&
-		    strcmp(abs_module_bin_path, OBS_INSTALL_PREFIX
-			   "/" OBS_PLUGIN_DESTINATION) != 0) {
+	char *module_bin_path = "/usr/lib/obs-plugins";
+	char *module_data_path = OBS_DATA_PATH "/obs-plugins/%module%";
+			printf("TRYING DIRS\nBIN=%s\nDATA=%s\n",
+              module_bin_path, module_data_path);
 			obs_add_module_path(module_bin_path, module_data_path);
-		}
-		bfree(abs_module_bin_path);
-	}
 
-	bfree(module_bin_path);
-	bfree(module_data_path);
+	struct stat stat_info;
 
 	for (int i = 0; i < module_patterns_size; i++) {
-		obs_add_module_path(module_bin[i], module_data[i]);
+		if ((stat(module_bin[i], &stat_info) == 0 && !!S_ISDIR(stat_info.st_mode) )
+				&& (stat(module_data[i], &stat_info) == 0 && !!S_ISDIR(stat_info.st_mode) ) )
+			obs_add_module_path(module_bin[i], module_data[i]);
 	}
 }

from void-packages.

zlice avatar zlice commented on August 28, 2024 1

Updated the comment on that issue. OBS_PLUGINS_PATH=/lib/obs-plugins OBS_PLUGINS_DATA_PATH=/usr/share/obs/obs-plugins/ obs gets fade and cut to work - but segfaults on exit...

from void-packages.

Luciogi avatar Luciogi commented on August 28, 2024

Logs

debug: Found portal inhibitor
debug: Attempted path: /usr/bin/..//usr/share/obs/obs-studio/locale/en-US.ini
debug: Attempted path: /usr/share/obs/obs-studio/locale/en-US.ini
debug: Attempted path: /usr/bin/..//usr/share/obs/obs-studio/locale.ini
debug: Attempted path: /usr/share/obs/obs-studio/locale.ini
debug: Attempted path: /usr/bin/..//usr/share/obs/obs-studio/themes
debug: Attempted path: /usr/share/obs/obs-studio/themes
debug: Attempted path: /usr/bin/..//usr/share/obs/obs-studio/themes/
debug: Attempted path: /usr/share/obs/obs-studio/themes/
warning: ReadOne on org.freedesktop.portal.Settings returned an invalid reply
warning: ================================
warning: Warning: OBS is already running!
warning: ================================
warning: User is now running multiple instances of OBS!
info: Using EGL/X11
info: CPU Name: Intel(R) Core(TM) i5-10300H CPU @ 2.50GHz
info: CPU Speed: 899.961MHz
info: Physical Cores: 4, Logical Cores: 8
info: Physical Memory: 7746MB Total, 999MB Free
info: Kernel Version: Linux 6.1.101_1
info: Distribution: "Void" Unknown
info: Desktop Environment: KDE
info: Session Type: x11
info: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.21.1
info: Qt Version: 6.7.2 (runtime), 6.7.2 (compiled)
info: Portable mode: false
info: OBS 30.2.1 (linux)
info: ---------------------------------
info: ---------------------------------
info: audio settings reset:
        samples per sec: 48000
        speakers:        2
        max buffering:   960 milliseconds
        buffering type:  dynamically increasing
info: ---------------------------------
info: Initializing OpenGL...
info: Loading up OpenGL on adapter Intel Mesa Intel(R) UHD Graphics (CML GT2)
info: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 24.1.4, shading language 4.60
info: ---------------------------------
info: video settings reset:
        base resolution:   1920x1080
        output resolution: 1280x720
        downscale filter:  Bicubic
        fps:               60/1
        format:            NV12
        YUV mode:          Rec. 709/Partial
info: NV12 texture support enabled
info: P010 texture support not available
info: Audio monitoring device:
        name: Default
        id: default
info: ---------------------------------
warning: Failed to load 'en-US' text for module: 'decklink-captions.so'
warning: Failed to load 'en-US' text for module: 'decklink-output-ui.so'
warning: Failed to load 'en-US' text for module: 'decklink.so'
libDeckLinkAPI.so: cannot open shared object file: No such file or directory
warning: A DeckLink iterator could not be created.  The DeckLink drivers may not be installed
warning: Failed to initialize module 'decklink.so'
warning: Failed to load 'en-US' text for module: 'frontend-tools.so'
warning: Failed to load 'en-US' text for module: 'image-source.so'
warning: Failed to load 'en-US' text for module: 'linux-alsa.so'
warning: Failed to load 'en-US' text for module: 'linux-capture.so'
warning: Failed to load 'en-US' text for module: 'linux-jack.so'
warning: Failed to load 'en-US' text for module: 'linux-pipewire.so'
info: [pipewire] Available capture sources:
info: [pipewire]     - Monitor source
info: [pipewire]     - Window source
warning: Failed to load 'en-US' text for module: 'linux-pulseaudio.so'
warning: Failed to load 'en-US' text for module: 'linux-v4l2.so'
warning: v4l2loopback not installed, virtual camera not registered
warning: Failed to load 'en-US' text for module: 'obs-ffmpeg.so'
error: os_dlopen(libnvidia-encode.so.1->libnvidia-encode.so.1): libnvidia-encode.so.1: cannot open shared object file: No such file or directory

info: VAAPI: API version 1.22
info: FFmpeg VAAPI H264 encoding supported
info: FFmpeg VAAPI AV1 encoding not supported
info: FFmpeg VAAPI HEVC encoding not supported
warning: Failed to load 'en-US' text for module: 'obs-filters.so'
warning: Failed to load 'en-US' text for module: 'obs-outputs.so'
warning: Failed to load 'en-US' text for module: 'obs-transitions.so'
warning: Failed to load 'en-US' text for module: 'obs-webrtc.so'
warning: Failed to load 'en-US' text for module: 'obs-x264.so'
warning: Failed to load 'en-US' text for module: 'rtmp-services.so'
warning: Failed to load 'en-US' text for module: 'text-freetype2.so'
warning: Failed to load 'en-US' text for module: 'vlc-video.so'
info: [vlc-video]: VLC 3.0.21 Vetinari found, VLC video source enabled
info: ---------------------------------
info:   Loaded Modules:
info:     vlc-video.so
info:     text-freetype2.so
info:     rtmp-services.so
info:     obs-x264.so
info:     obs-webrtc.so
info:     obs-transitions.so
info:     obs-outputs.so
info:     obs-filters.so
info:     obs-ffmpeg.so
info:     linux-v4l2.so
info:     linux-pulseaudio.so
info:     linux-pipewire.so
info:     linux-jack.so
info:     linux-capture.so
info:     linux-alsa.so
info:     image-source.so
info:     frontend-tools.so
info:     decklink-output-ui.so
info:     decklink-captions.so
info: ---------------------------------
info: ---------------------------------
info: Available Encoders:
info:   Video Encoders:
info:   - ffmpeg_svt_av1 (SVT-AV1)
info:   - ffmpeg_aom_av1 (AOM AV1)
info:   - ffmpeg_vaapi_tex (FFmpeg VAAPI H.264)
info:   - obs_x264 (x264)
info:   Audio Encoders:
info:   - ffmpeg_aac (FFmpegAAC)
info:   - ffmpeg_opus (FFmpegOpus)
info:   - ffmpeg_pcm_s16le (FFmpegPCM16Bit)
info:   - ffmpeg_pcm_s24le (FFmpegPCM24Bit)
info:   - ffmpeg_pcm_f32le (FFmpegPCM32BitFloat)
info:   - ffmpeg_alac (FFmpegALAC)
info:   - ffmpeg_flac (FFmpegFLAC)
info: ==== Startup complete ===============================================
info: All scene data cleared
info: ------------------------------------------------
error: Could not find fade_transition.effect
error: Failed to create source 'FadeTransition'!
info: pulse-input: Server name: 'PulseAudio (on PipeWire 1.2.2) 15.0.0'
info: pulse-input: Audio format: s32le, 48000 Hz, 2 channels
info: pulse-input: Started recording from 'alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Speaker__sink.monitor' (default)
info: [Loaded global audio device]: 'Desktop Audio'
info: pulse-input: Server name: 'PulseAudio (on PipeWire 1.2.2) 15.0.0'
info: pulse-input: Audio format: s32le, 48000 Hz, 2 channels
info: pulse-input: Started recording from 'alsa_input.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Mic1__source' (default)
info: [Loaded global audio device]: 'Mic/Aux'
info: PipeWire initialized
info: xshm-input: Geometry 1920x1080 @ 0,0
info: [window-capture: 'XCCapture'] update settings:
        title: OBS only shows black output · Issue #51629 · void-linux/void-packages — Mozilla Firefox
        class: Navigator

info: Switched to scene 'Scene'
info: ------------------------------------------------
info: Loaded scenes:
info: - scene 'Scene':
info:     - source: 'Screen Capture (PipeWire)' (pipewire-desktop-capture-source)
info:     - source: 'X11SharedMemoryDisplayInput' (xshm_input)
info:     - source: 'XCCapture' (xcomposite_input)
info: ------------------------------------------------
warning: [pipewire] Failed to create session, denied or cancelled by user
info: adding 42 milliseconds of audio buffering, total audio buffering is now 42 milliseconds (source: Desktop Audio)

info: xshm-input: Geometry 1920x1080 @ 0,0
info: xshm-input: Geometry 1920x1080 @ 0,0
info: xshm-input: Geometry 1920x1080 @ 0,0
info: ---------------------------------
info: [x264 encoder: 'simple_video_recording'] preset: ultrafast
info: [x264 encoder: 'simple_video_recording'] profile: high
info: [x264 encoder: 'simple_video_recording'] settings:
        rate_control: CRF
        bitrate:      0
        buffer size:  0
        crf:          19
        fps_num:      60
        fps_den:      1
        width:        1280
        height:       720
        keyint:       250

info: ---------------------------------
info: [FFmpeg aac encoder: 'simple_aac_recording0'] bitrate: 192, channels: 2, channel_layout: stereo

info: ==== Recording Start ===============================================
info: [ffmpeg muxer: 'simple_file_output'] Writing file '/home/oggy/2024-08-04 16-19-00.mkv'...
info: [ffmpeg muxer: 'simple_file_output'] Output of file '/home/oggy/2024-08-04 16-19-00.mkv' stopped
info: Output 'simple_file_output': stopping
info: Output 'simple_file_output': Total frames output: 169
info: Output 'simple_file_output': Total drawn frames: 128 (182 attempted)
info: Output 'simple_file_output': Number of lagged frames due to rendering lag/stalls: 54 (29.7%)
[aac @ 0x559da52b2bc0] Qavg: 65536.000
[aac @ 0x559da52b2bc0] 2 frames left in the queue on closing
info: ==== Recording Stop ================================================

from void-packages.

classabbyamp avatar classabbyamp commented on August 28, 2024

change "FadeTransition" to "CutTransition" in the "Scene Transitions" section

from void-packages.

classabbyamp avatar classabbyamp commented on August 28, 2024
error: Could not find fade_transition.effect
error: Failed to create source 'FadeTransition'!

from void-packages.

classabbyamp avatar classabbyamp commented on August 28, 2024

https://obsproject.com/forum/threads/obs-no-longer-capturing-display-after-system-update.177102/

obsproject/obs-studio#10852 (comment)

from void-packages.

zlice avatar zlice commented on August 28, 2024

@sgn thoughts?

Hardcodes plugin dir that's set at build instead of fixing cmake vars. Fixes loading duplicate plugin paths instead of on the deletion side.

This message is a bit misleading here: I do not have a .config/obs-studio/plugins. Also it's clobbered to extra / and %module%/data which can't really exist.

OBS_PLUGINS_PATH=/lib/obs-plugins OBS_PLUGINS_DATA_PATH=/usr/share/obs/obs-plugins/ obs --verbose
(^this is a symlink dupe of /bin/lib/ and literal dupe of /usr/share)

warning: Skipping duplicate module path: bin: '/lib/obs-plugins', data: '/usr/share/obs/obs-plugins//%module%'
warning: Skipping duplicate module path: bin: '/home/zlice/.config/obs-studio/plugins/%module%/bin/64bit', data: '/home/zlice/.config/obs-studio/plugins/%module%/data'
--- a/libobs/obs-module.c
+++ b/libobs/obs-module.c
@@ -22,6 +22,8 @@
 #include "obs-internal.h"
 #include "obs-module.h"

+#include <sys/stat.h>
+
 extern const char *get_module_extension(void);

 static inline int req_func_not_found(const char *name, const char *path)
@@ -269,6 +271,29 @@
 	if (!obs || !bin || !data)
 		return;

+	char tmp_data[255] = {0}; // shouldn't hit paths 255 big?
+	for (size_t i = 0; i < obs->module_paths.num; i++) {
+		struct obs_module_path *old_omp = obs->module_paths.array + i;
+		char *mod_loc = 0;
+		struct stat old_bin, new_bin, old_data, new_data;
+		memcpy(tmp_data, old_omp->data, strlen(old_omp->data) );
+		mod_loc = strstr(tmp_data, "%module%");
+		if (mod_loc) *mod_loc = 0;
+		stat(old_omp->bin, &old_bin);
+		stat(bin, &new_bin);
+		stat(tmp_data, &old_data);
+		stat(data, &new_data);
+		if ((old_bin.st_dev == new_bin.st_dev
+			&& old_bin.st_ino == new_bin.st_ino)
+			|| (old_data.st_dev == new_data.st_dev
+				&& old_data.st_ino == new_data.st_ino) )
+      {
+			blog(LOG_WARNING, "Skipping duplicate module path: bin: '%s', data: '%s'"
+				,bin, data);
+			return;
+			}
+	}
+
 	omp.bin = bstrdup(bin);
 	omp.data = bstrdup(data);
 	da_push_back(obs->module_paths, &omp);
--- a/libobs/obs-nix.c
+++ b/libobs/obs-nix.c
@@ -33,6 +33,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <unistd.h>
+#include <sys/stat.h>
 #if defined(__FreeBSD__) || defined(__OpenBSD__)
 #include <sys/sysctl.h>
 #endif
@@ -68,28 +69,16 @@

 void add_default_module_paths(void)
 {
-	char *module_bin_path =
-		os_get_executable_path_ptr("../" OBS_PLUGIN_PATH);
-	char *module_data_path = os_get_executable_path_ptr(
-		"../" OBS_DATA_PATH "/obs-plugins/%module%");
-
-	if (module_bin_path && module_data_path) {
-		char *abs_module_bin_path =
-			os_get_abs_path_ptr(module_bin_path);
-
-		if (abs_module_bin_path &&
-		    strcmp(abs_module_bin_path, OBS_INSTALL_PREFIX
-			   "/" OBS_PLUGIN_DESTINATION) != 0) {
-			obs_add_module_path(module_bin_path, module_data_path);
-		}
-		bfree(abs_module_bin_path);
-	}
+	char *module_bin_path = "/usr/lib/obs-plugins";
+	char *module_data_path = OBS_DATA_PATH "/obs-plugins/%module%";
+	obs_add_module_path(module_bin_path, module_data_path);

-	bfree(module_bin_path);
-	bfree(module_data_path);
+	struct stat stat_info;

 	for (int i = 0; i < module_patterns_size; i++) {
-		obs_add_module_path(module_bin[i], module_data[i]);
+		if ((stat(module_bin[i], &stat_info) == 0 && !!S_ISDIR(stat_info.st_mode) )
+				&& (stat(module_data[i], &stat_info) == 0 && !!S_ISDIR(stat_info.st_mode) ) )
+			obs_add_module_path(module_bin[i], module_data[i]);
 	}
 }

from void-packages.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.