Git Product home page Git Product logo

obs-lv2's Introduction

OBS-LV2

LV2 plugin host for OBS.

Screenshot

Warning

This plugin is in alpha state - some features may not work. It also may and probably will crash your OBS. Backup your profile.

Building && Installing

$ meson --prefix=/usr build/
$ ninja -C build

System-wide installation:

$ sudo ninja -C build install

Single user (works with OBS 25 on Arch):

$ meson -Dlocal_install=true build/
$ meson -C build install

or manually:

mkdir -p ~/.config/obs-studio/plugins/obs-lv2/bin/64bit/
cp -v build/obs-lv2.so ~/.config/obs-studio/plugins/obs-lv2/bin/64bit/

Paths may depend on your installation.

Wayland

You may see the following in your logs:

QWindow::fromWinId(): platform plugin does not support foreign windows.

Nesting windows from different toolkits is not possible on Wayland the way we currently do it.

You can force OBS to run via XWayland to work around this limitation:

$ unset XDG_SESSION_TYPE WAYLAND_DISPLAY
$ obs

Links

obs-lv2's People

Contributors

ivyl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

obs-lv2's Issues

"Nothing to install"

Everything builds fine, but when I go to do a system wide install, it just tells me there is nothing to install.

segfault when switching scene collections

after updating to OBS 27.2.0, switching scene collections to or from a scene collection which contains an LV2 filter causes a segmentation fault to occur. The issue only occurs while the plugin is installed.

log: https://obsproject.com/logs/YterwycFVTA3NzKC

backtrace:

#0  0x00007ffff539638e in QGuiApplicationPrivate::sendQWindowEventToQPlatformWindow(QWindow*, QEvent*) () at /usr/lib/libQt5Gui.so.5
#1  0x00007ffff5b344dc in QApplication::notify(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5
#2  0x00007ffff4fc7b9a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/libQt5Core.so.5
#3  0x00007ffff5013335 in QTimerInfoList::activateTimers() () at /usr/lib/libQt5Core.so.5
#4  0x00007ffff501391a in  () at /usr/lib/libQt5Core.so.5
#5  0x00007ffff348ff13 in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#6  0x00007ffff34e60d9 in  () at /usr/lib/libglib-2.0.so.0
#7  0x00007ffff348d485 in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#8  0x00007ffff5013ada in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5
#9  0x00007ffff4fbfe6b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5
#10 0x00007ffff4fcb5c7 in QCoreApplication::exec() () at /usr/lib/libQt5Core.so.5
#11 0x00005555555db3cc in run_program (argv=0x7fffffffe238, argc=<optimized out>, logFile=...) at /usr/src/debug/obs-studio/UI/obs-app.cpp:2202
#12 main(int, char**) (argc=<optimized out>, argv=0x7fffffffe238) at /usr/src/debug/obs-studio/UI/obs-app.cpp:2898

How to make it work on OpenSUSE Leap

On OpenSUSE Leap 15.1 to compile I had to:

Inspired by https://discourse.zynthian.org/t/cannot-start-dexed-jalv/2994/3 doing those links

ln -s /usr/lib64/lv2/options.lv2 /usr/local/include/lv2/options
ln -s /usr/lib64/lv2/ui.lv2 /usr/local/include/lv2/ui
ln -s /usr/lib64/lv2/lv2core.lv2 /usr/local/include/lv2/core
ln -s /usr/lib64/lv2/urid.lv2 /usr/local/include/lv2/urid
ln -s /usr/lib64/lv2/atom.lv2 /usr/local/include/lv2/atom
ln -s /usr/lib64/lv2/state.lv2 /usr/local/include/lv2/state
ln -s /usr/lib64/lv2/instance-access.lv2 /usr/local/include/lv2/instance-access
ln -s /usr/lib64/lv2/data-access.lv2 /usr/local/include/lv2/data-access

On gcc 7.5 compilation fails, so used 9
sudo zypper in gcc9-c++

Inspired by https://stackoverflow.com/questions/7832892/how-to-change-the-default-gcc-compiler-in-ubuntu

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-9 9
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-7 7

you can switch later using: sudo update-alternatives --config g++

compiling as in readme:

meson build
ninja -C build

system-wide installation does nothing, so copying library manually:
sudo cp ./build/obs-lv2.so /usr/lib/obs-plugins/

Only Calf and Guitarix Plugin visible

I have installed also tap, lsp and other lv2 plugin to my machine. I see it with Carla and also with Ardour, but not with This plugin. I do something wrong?

OS: Linux Mint 20.1
OBS: 26.1.1

Non-trivial designated initializers not supported

When trying to build with openSUSE Leap 15.4:

ninja -C build
ninja: Entering directory `build'
[1/8] Compiling C++ object obs-lv2.so.p/obs-lv2.cpp.o
FAILED: obs-lv2.so.p/obs-lv2.cpp.o 
c++ -Iobs-lv2.so.p -I. -I.. -I/usr/local/include -I/usr/local/include/lilv-0 -I/usr/local/include/sratom-0 -I/usr/local/include/sord-0 -I/usr/local/include/serd-0 -I/usr/local/include/suil-0 -I/usr/include/qt5/QtWidgets -I/usr/include/qt5 -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -g -fPIC -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -MD -MQ obs-lv2.so.p/obs-lv2.cpp.o -MF obs-lv2.so.p/obs-lv2.cpp.o.d -o obs-lv2.so.p/obs-lv2.cpp.o -c ../obs-lv2.cpp
../obs-lv2.cpp:160:1: sorry, unimplemented: non-trivial designated initializers not supported
 };
 ^
../obs-lv2.cpp:160:1: sorry, unimplemented: non-trivial designated initializers not supported
../obs-lv2.cpp:160:1: sorry, unimplemented: non-trivial designated initializers not supported
../obs-lv2.cpp:160:1: sorry, unimplemented: non-trivial designated initializers not supported

GCC version:

gcc (SUSE Linux) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Higher GCC versions (10 and above) build OK.
Seems that it is a good reason to implement backward compatibility with GCC 7.

OBS Crashes when trying to open Calf Plugins GUI

System info: Running Pop!_OS 22.04, with OBS Studio version 27.2.3+dfsg1-1. All dependencies were installed via apt.

Here's the terminal output from OBS:

msxdotgay@pop-os:~/obs-lv2$ obs 
Attempted path: share/obs/obs-studio/locale/en-US.ini
Attempted path: /usr/share/obs/obs-studio/locale/en-US.ini
Attempted path: share/obs/obs-studio/locale.ini
Attempted path: /usr/share/obs/obs-studio/locale.ini
Attempted path: share/obs/obs-studio/themes/Dark.qss
Attempted path: /usr/share/obs/obs-studio/themes/Dark.qss
info: CPU Name: Intel(R) Core(TM) i5-4250U CPU @ 1.30GHz
info: CPU Speed: 2300.874MHz
info: Physical Cores: 2, Logical Cores: 4
info: Physical Memory: 3863MB Total, 189MB Free
info: Kernel Version: Linux 6.1.11-76060111-generic
info: Distribution: "Pop!_OS" "22.04"
info: Session Type: x11
info: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.21.1
info: Qt Version: 5.15.3 (runtime), 5.15.2 (compiled)
info: Portable mode: false
Attempted path: share/obs/obs-studio/themes/Dark/no_sources.svg
Attempted path: /usr/share/obs/obs-studio/themes/Dark/no_sources.svg
QMetaObject::connectSlotsByName: No matching signal for on_tbar_position_valueChanged(int)
QMetaObject::connectSlotsByName: No matching signal for on_actionShowTransitionProperties_triggered()
QMetaObject::connectSlotsByName: No matching signal for on_actionHideTransitionProperties_triggered()
info: OBS 27.2.3+dfsg1-1 (linux)
info: ---------------------------------
info: ---------------------------------
info: audio settings reset:
	samples per sec: 48000
	speakers:        2
info: ---------------------------------
info: Initializing OpenGL...
info: Loading up OpenGL on adapter Intel Mesa Intel(R) HD Graphics 5000 (HSW GT3)
info: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 22.3.5, shading language 4.60
info: ---------------------------------
info: video settings reset:
	base resolution:   1440x900
	output resolution: 820x514
	downscale filter:  Bicubic
	fps:               30/1
	format:            NV12
	YUV mode:          709/Partial
info: NV12 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-ouput-ui.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
info: No blackmagic support
warning: v4l2loopback not installed, virtual camera disabled
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: FFMPEG VAAPI supported
info: [vlc-video]: VLC 3.0.16 Vetinari found, VLC video source enabled
info: ---------------------------------
info:   Loaded Modules:
info:     obs-lv2.so
info:     vlc-video.so
info:     text-freetype2.so
info:     rtmp-services.so
info:     obs-x264.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-jack.so
info:     linux-decklink.so
info:     linux-capture.so
info:     linux-alsa.so
info:     image-source.so
info:     frontend-tools.so
info:     decklink-ouput-ui.so
info:     decklink-captions.so
info: ---------------------------------
info: ==== Startup complete ===============================================
info: All scene data cleared
info: ------------------------------------------------
info: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.66) 15.0.0'
info: pulse-input: Audio format: s32le, 88200 Hz, 2 channels
info: pulse-input: Started recording from 'alsa_output.pci-0000_00_1b.0.analog-stereo.monitor'
info: [Loaded global audio device]: 'Desktop Audio'
info: pulse-input: Server name: 'PulseAudio (on PipeWire 0.3.66) 15.0.0'
info: pulse-input: Audio format: float32le, 88200 Hz, 2 channels
info: pulse-input: Started recording from 'easyeffects_sink.monitor'
info: [Loaded global audio device]: 'Mic/Aux'
info: pulse-am: Server name: 'PulseAudio (on PipeWire 0.3.66) 15.0.0'
info: pulse-am: Audio format: s32le, 88200 Hz, 2 channels
info: pulse-am: Started Monitoring in 'alsa_output.pci-0000_00_1b.0.analog-stereo.monitor'
Calf Fluidsynth filtered out - supports only 0 input and 2 output channels, while OBS audio uses 2
Calf Mono Compressor filtered out - supports only 1 input and 1 output channels, while OBS audio uses 2
Calf Mono Input filtered out - supports only 1 input and 2 output channels, while OBS audio uses 2
Calf Monosynth filtered out - supports only 0 input and 2 output channels, while OBS audio uses 2
Calf Organ filtered out - supports only 0 input and 2 output channels, while OBS audio uses 2
Calf Wavetable filtered out - supports only 0 input and 2 output channels, while OBS audio uses 2
failed to get plugin by uri
info: Switched to scene 'Scene 2'
info: ------------------------------------------------
info: Loaded scenes:
info: - scene 'Scene':
info:     - source: 'Window Capture (Xcomposite)' (xcomposite_input)
info: - scene 'Scene 2':
info:     - source: 'VLC Video Source' (vlc_source)
info:         - monitoring: monitor and output
info:         - filter: 'Scaling/Aspect Ratio' (scale_filter)
info:         - filter: 'LV2' (lv2_filter)
info: ------------------------------------------------
info: adding 42 milliseconds of audio buffering, total audio buffering is now 42 milliseconds (source: Desktop Audio)

Attempted path: share/obs/obs-studio/images/overflow.png
Attempted path: /usr/share/obs/obs-studio/images/overflow.png

(obs:1246027): GLib-GObject-WARNING **: 22:56:42.765: cannot register existing type 'GdkDisplayManager'

(obs:1246027): GLib-CRITICAL **: 22:56:42.765: g_once_init_leave: assertion 'result != 0' failed

(obs:1246027): GLib-GObject-CRITICAL **: 22:56:42.765: g_object_new_with_properties: assertion 'G_TYPE_IS_OBJECT (object_type)' failed

(obs:1246027): GLib-GObject-WARNING **: 22:56:42.765: invalid (NULL) pointer instance

(obs:1246027): GLib-GObject-CRITICAL **: 22:56:42.765: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(obs:1246027): GLib-GObject-WARNING **: 22:56:42.765: invalid (NULL) pointer instance

(obs:1246027): GLib-GObject-CRITICAL **: 22:56:42.765: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(obs:1246027): GLib-GObject-WARNING **: 22:56:42.779: cannot register existing type 'GdkDisplay'

(obs:1246027): GLib-CRITICAL **: 22:56:42.779: g_once_init_leave: assertion 'result != 0' failed

(obs:1246027): GLib-GObject-CRITICAL **: 22:56:42.779: g_type_register_static: assertion 'parent_type > 0' failed

(obs:1246027): GLib-CRITICAL **: 22:56:42.779: g_once_init_leave: assertion 'result != 0' failed

(obs:1246027): GLib-GObject-CRITICAL **: 22:56:42.779: g_object_new_with_properties: assertion 'G_TYPE_IS_OBJECT (object_type)' failed
Segmentation fault (core dumped)

The audio plugin works, OBS just crashes when trying to open the plugin GUI. I used Calf Compressor for this log, but other plugins have the same effect.

Implement dedicated UI

I'm on Arch, and I have installed https://github.com/lucianodato/speech-denoiser via yay speech-denoiser-git. I have your plugin loaded in OBS, but it's not finding any LV2 plugins at all.

I would love to have this working, have I done something wrong here? Does the LV2 plugin need to be in a special location aside from the default?

Bad plugin class filtering

At this moment while discovering the issue lsp-plugins/lsp-plugins#256 I see the following messages in the log:

LSP Compressor LeftRight filtered out - class not supported
LSP Compressor Mono filtered out - class not supported
LSP Compressor MidSide filtered out - class not supported
LSP Compressor Stereo filtered out - class not supported
...
LSP Parametric Equalizer x16 LeftRight filtered out - class not supported
LSP Parametric Equalizer x16 Mono filtered out - class not supported
LSP Parametric Equalizer x16 MidSide filtered out - class not supported
LSP Parametric Equalizer x16 Stereo filtered out - class not supported
LSP Parametric Equalizer x32 LeftRight filtered out - class not supported
LSP Parametric Equalizer x32 Mono filtered out - class not supported
LSP Parametric Equalizer x32 MidSide filtered out - class not supported
LSP Parametric Equalizer x32 Stereo filtered out - class not supported

According to the code, I see that plugins are filtered by the plugin class:

        std::vector<LilvNode*> supported_classes;
        supported_classes.push_back(lilv_new_uri(this->world, LV2_CORE__FilterPlugin));
        supported_classes.push_back(lilv_new_uri(this->world, LV2_CORE__DelayPlugin));
        supported_classes.push_back(lilv_new_uri(this->world, LV2_CORE__DistortionPlugin));
        supported_classes.push_back(lilv_new_uri(this->world, LV2_CORE__DynamicsPlugin));
        supported_classes.push_back(lilv_new_uri(this->world, LV2_CORE__EQPlugin));
        supported_classes.push_back(lilv_new_uri(this->world, LV2_CORE__ModulatorPlugin));
        supported_classes.push_back(lilv_new_uri(this->world, LV2_CORE__SpatialPlugin));
        supported_classes.push_back(lilv_new_uri(this->world, LV2_CORE__SpectralPlugin));

This is VERY small subset of plugins that actually can be supported by the host.
At least, following additional plugin types are not supported but looks like should be:

Anyway, I find the filtering of the strict list a bad practice that should be avoided. Instead of this, it is much better to specify plugin class selector as an additional combo or checkbox list.

So I would like to suggest to change the way the plugin list is formed.

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.