obsproject / obs-studio

OBS Studio - Free and open source software for live streaming and screen recording
https://obsproject.com
GNU General Public License v2.0
60.24k stars 7.98k forks source link

v4l2: BRIO Ultra HD Webcam camera hangs #9418

Open pop13-13 opened 1 year ago

pop13-13 commented 1 year ago

Operating System Info

Other

Other OS

Manjaro

OBS Studio Version

Other

OBS Studio Version (Other)

29.1.3-1

OBS Studio Log URL

https://obsproject.com/logs/GQ7ja9u8yzDocJIe

OBS Studio Crash Log URL

No response

Expected Behavior

A USB UVC webcam can be added as a video source in OBS.

Current Behavior

The v4l device does not get detected by OBS, other apps detect it fine. After trying to add the device, it causes the /dev/videoX file to disappear, OBS hangs and must be killed to exit, and pipewire exits with a 245 status code.

OBS cannot be restarted without a full system reboot, running obs in the terminal causes it to hang after loading modules. log file when OBS hangs after the issue Restarting pipewire using systemctl restart --user pipewire causes the command to hang. Trying to shut down hangs, the system is waiting and trying to kill pipewire, which does not react to SIGTERM Running v4l2-ctl --list-devices results the following error code: Cannot open device /dev/video0, exiting.

Using any other app to test the device yields the expected result of the webcamera working.

Steps to Reproduce

  1. Run v4l2-ctl --list-devices (returns list of devices)
  2. Open OBS
  3. Add source
  4. Select Video Capture Device (V4L2)
  5. Select Create New and click OK
  6. Cannot select device
  7. Click Exit
  8. Kill OBS because it hangs
  9. Run v4l2-ctl --list-devices again (results in Cannot open device /dev/video0, exiting.)

Anything else we should know?

OBS was installed from the Manjaro linux repository

The offending USB UVC device: Bus 002 Device 003: ID 046d:085e Logitech, Inc. BRIO Ultra HD Webcam

Shortened output of neofetch:

OS: Manjaro Linux x86_64 
Kernel: 6.1.44-1-MANJARO 
DE: GNOME 44.3 
WM: Mutter 
CPU: Intel i7-7700K (8) @ 4.500GHz 
GPU: Intel HD Graphics 630 
GPU: AMD ATI Radeon RX Vega 56/64 
Memory: 4052MiB / 15866MiB 

Running v4l2-ctl --list-devices before opening OBS with the v4l source added yields:

Logitech BRIO (usb-0000:00:14.0-3.2):
    /dev/video0
    /dev/video1
    /dev/video2
    /dev/video3
    /dev/media0
kkartaltepe commented 1 year ago

please provide a complete backtrace of all threads after obs has hung. You can get this by running thread apply all bt in gdb.

pop13-13 commented 1 year ago

Here is the backtrace:

Thread 22 (Thread 0x7fff94cb56c0 (LWP 8428) "threaded-ml"):
#0  0x00007ffff3d0365f in poll () at /usr/lib/libc.so.6
#1  0x00007fffe8f0d8c7 in poll (__timeout=30000, __nfds=2, __fds=0x7fff74009720) at /usr/include/bits/poll2.h:39
#2  poll_func (ufds=0x7fff74009720, nfds=2, timeout=30000, userdata=0x555556220e20) at ../pulseaudio/src/pulse/thread-mainloop.c:70
#3  0x00007fffe8ef746c in pa_mainloop_poll (m=m@entry=0x5555576382c0) at ../pulseaudio/src/pulse/mainloop.c:863
#4  0x00007fffe8f0142c in pa_mainloop_iterate (m=m@entry=0x5555576382c0, block=block@entry=1, retval=retval@entry=0x0) at ../pulseaudio/src/pulse/mainloop.c:945
#5  0x00007fffe8f014e1 in pa_mainloop_run (m=0x5555576382c0, retval=0x0) at ../pulseaudio/src/pulse/mainloop.c:963
#6  0x00007fffe8f11c02 in thread (userdata=0x555557638270) at ../pulseaudio/src/pulse/thread-mainloop.c:101
#7  0x00007fffe5985c67 in internal_thread_func (userdata=0x555556220d80) at ../pulseaudio/src/pulsecore/thread-posix.c:81
#8  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#9  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 19 (Thread 0x7fff96ffd6c0 (LWP 8407) "scripting: defe"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c94980 in  () at /usr/lib/libc.so.6
--Type <RET> for more, q to quit, c to continue without paging--c
#2  0x00007fffbbf24546 in defer_thread(void*) (unused=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/deps/obs-scripting/obs-scripting.c:89
#3  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#4  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 18 (Thread 0x7fff977fe6c0 (LWP 8402) "libobs: graphic"):
#0  0x00007ffff3cd58f5 in clock_nanosleep () at /usr/lib/libc.so.6
#1  0x00007ffff3ce7fb7 in nanosleep () at /usr/lib/libc.so.6
#2  0x00007ffff65b5195 in os_sleepto_ns (time_target=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/util/platform-nix.c:233
#3  0x00007ffff6581aa3 in video_sleep (interval_ns=33333333, p_time=0x555555be86b0, video=0x555555be8648) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/obs-video.c:847
#4  obs_graphics_thread_loop (context=context@entry=0x7fff977fd680) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/obs-video.c:1177
#5  0x00007ffff65830f9 in obs_graphics_thread (param=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/obs-video.c:1232
#6  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#7  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 17 (Thread 0x7fff97fff6c0 (LWP 8401) "video-io: video"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c94980 in  () at /usr/lib/libc.so.6
#2  0x00007ffff65aa268 in video_thread (param=0x5555564ddaa0) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/media-io/video-io.c:181
#3  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#4  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 16 (Thread 0x7fffb8bfd6c0 (LWP 8400) "obs:gl0"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffb9ec781c in  () at /usr/lib/dri/radeonsi_dri.so
#3  0x00007fffb9f1472c in  () at /usr/lib/dri/radeonsi_dri.so
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 15 (Thread 0x7fffb93fe6c0 (LWP 8399) "obs:gdrv0"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffb9ec781c in  () at /usr/lib/dri/radeonsi_dri.so
#3  0x00007fffb9f1472c in  () at /usr/lib/dri/radeonsi_dri.so
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 14 (Thread 0x7fffb9dff6c0 (LWP 8398) "obs:shlo0"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffb9ec781c in  () at /usr/lib/dri/radeonsi_dri.so
#3  0x00007fffb9f1472c in  () at /usr/lib/dri/radeonsi_dri.so
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 13 (Thread 0x7fffc8a066c0 (LWP 8397) "obs:sh0"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffb9ec781c in  () at /usr/lib/dri/radeonsi_dri.so
#3  0x00007fffb9f1472c in  () at /usr/lib/dri/radeonsi_dri.so
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 12 (Thread 0x7fffc92076c0 (LWP 8396) "obs:disk$0"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffb9ec781c in  () at /usr/lib/dri/radeonsi_dri.so
#3  0x00007fffb9f1472c in  () at /usr/lib/dri/radeonsi_dri.so
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 11 (Thread 0x7fffc9b496c0 (LWP 8395) "obs:cs0"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffb9ec781c in  () at /usr/lib/dri/radeonsi_dri.so
#3  0x00007fffb9f1472c in  () at /usr/lib/dri/radeonsi_dri.so
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 10 (Thread 0x7fffca3fd6c0 (LWP 8394) "audio-io: audio"):
#0  0x00007ffff3cd58f5 in clock_nanosleep () at /usr/lib/libc.so.6
#1  0x00007ffff3ce7fb7 in nanosleep () at /usr/lib/libc.so.6
#2  0x00007ffff3d10a39 in usleep () at /usr/lib/libc.so.6
#3  0x00007ffff65b5209 in os_sleepto_ns_fast (time_target=2702810597190) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/util/platform-nix.c:250
#4  0x00007ffff65a641a in audio_thread (param=0x555556227a20) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/media-io/audio-io.c:236
#5  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#6  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 9 (Thread 0x7fffcabfe6c0 (LWP 8393) "tiny_tubular_ta"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c94980 in  () at /usr/lib/libc.so.6
#2  0x00007ffff65bc8a3 in tiny_tubular_task_thread (param=0x555555c8ada0) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/util/task.c:139
#3  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#4  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 8 (Thread 0x7fffcb3ff6c0 (LWP 8392) "libobs: hotkey "):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8c055 in pthread_cond_timedwait () at /usr/lib/libc.so.6
#2  0x00007ffff65b4d6a in os_event_timedwait (event=0x555555c70f60, milliseconds=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/util/threading-posix.c:121
#3  0x00007ffff654be65 in obs_hotkey_thread (arg=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/obs-hotkey.c:1252
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 7 (Thread 0x7fffcbfff6c0 (LWP 8391) "gdbus"):
#0  0x00007ffff3d0365f in poll () at /usr/lib/libc.so.6
#1  0x00007ffff2f80c2f in g_main_context_poll (priority=<optimized out>, n_fds=2, fds=0x7fffc4000b90, timeout=<optimized out>, context=0x555555abf8d0) at ../glib/glib/gmain.c:4584
#2  g_main_context_iterate.isra.0 (context=0x555555abf8d0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4271
#3  0x00007ffff2f22fef in g_main_loop_run (loop=0x555555abfa00) at ../glib/glib/gmain.c:4479
#4  0x00007fffe6f2028c in gdbus_shared_thread_func (user_data=0x555555ab64a0) at ../glib/gio/gdbusprivate.c:284
#5  0x00007ffff2f55d75 in g_thread_proxy (data=0x555555abba40) at ../glib/glib/gthread.c:831
#6  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#7  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 6 (Thread 0x7fffe0bb16c0 (LWP 8390) "gmain"):
#0  0x00007ffff3d0365f in poll () at /usr/lib/libc.so.6
#1  0x00007ffff2f80c2f in g_main_context_poll (priority=<optimized out>, n_fds=1, fds=0x555555ab2840, timeout=<optimized out>, context=0x555555ab2620) at ../glib/glib/gmain.c:4584
#2  g_main_context_iterate.isra.0 (context=context@entry=0x555555ab2620, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4271
#3  0x00007ffff2f210e2 in g_main_context_iteration (context=0x555555ab2620, may_block=may_block@entry=1) at ../glib/glib/gmain.c:4343
#4  0x00007ffff2f21132 in glib_worker_main (data=<optimized out>) at ../glib/glib/gmain.c:6455
#5  0x00007ffff2f55d75 in g_thread_proxy (data=0x555555ab27e0) at ../glib/glib/gthread.c:831
#6  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#7  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 5 (Thread 0x7fffe13b26c0 (LWP 8389) "pool-spawner"):
#0  0x00007ffff3d0ee2d in syscall () at /usr/lib/libc.so.6
#1  0x00007ffff2f78ca7 in g_cond_wait (cond=0x555555aac858, mutex=0x555555aac850) at ../glib/glib/gthread-posix.c:1475
#2  0x00007ffff2eee144 in g_async_queue_pop_intern_unlocked (queue=0x555555aac850, wait=1, end_time=-1) at ../glib/glib/gasyncqueue.c:425
#3  0x00007ffff2f582fe in g_thread_pool_spawn_thread (data=<optimized out>) at ../glib/glib/gthreadpool.c:311
#4  0x00007ffff2f55d75 in g_thread_proxy (data=0x555555ab22a0) at ../glib/glib/gthread.c:831
#5  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#6  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 4 (Thread 0x7fffe1bd66c0 (LWP 8387) "WaylandEventThr"):
#0  0x00007ffff3d0365f in poll () at /usr/lib/libc.so.6
#1  0x00007fffe3430a68 in poll (__timeout=-1, __nfds=2, __fds=0x7fffe1bd55f0) at /usr/include/bits/poll2.h:39
#2  QtWaylandClient::EventThread::run() (this=0x555555a10180) at /usr/src/debug/qt6-wayland/qtwayland-everywhere-src-6.5.2/src/client/qwaylanddisplay.cpp:189
#3  0x00007ffff4673352 in operator() (__closure=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:321
#4  (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:257
#5  QThreadPrivate::start(void*) (arg=0x555555a10180) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:280
#6  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#7  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 3 (Thread 0x7fffe23d76c0 (LWP 8386) "WaylandEventThr"):
#0  0x00007ffff3d0365f in poll () at /usr/lib/libc.so.6
#1  0x00007fffe3430a68 in poll (__timeout=-1, __nfds=2, __fds=0x7fffe23d65f0) at /usr/include/bits/poll2.h:39
#2  QtWaylandClient::EventThread::run() (this=0x5555559ffa50) at /usr/src/debug/qt6-wayland/qtwayland-everywhere-src-6.5.2/src/client/qwaylanddisplay.cpp:189
#3  0x00007ffff4673352 in operator() (__closure=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:321
#4  (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:257
#5  QThreadPrivate::start(void*) (arg=0x5555559ffa50) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:280
#6  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#7  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 2 (Thread 0x7fffe2dff6c0 (LWP 8385) "QDBusConnection"):
#0  0x00007ffff3d0365f in poll () at /usr/lib/libc.so.6
#1  0x00007ffff2f80c2f in g_main_context_poll (priority=<optimized out>, n_fds=3, fds=0x555555a06a20, timeout=<optimized out>, context=0x7fffdc000c80) at ../glib/glib/gmain.c:4584
#2  g_main_context_iterate.isra.0 (context=context@entry=0x7fffdc000c80, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4271
#3  0x00007ffff2f210e2 in g_main_context_iteration (context=0x7fffdc000c80, may_block=1) at ../glib/glib/gmain.c:4343
#4  0x00007ffff4732794 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fffdc000b70, flags=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qeventdispatcher_glib.cpp:393
#5  0x00007ffff4545623 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (flags=..., this=0x7fffe2dfe5b0) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qeventloop.cpp:100
#6  QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fffe2dfe5b0, flags=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qeventloop.cpp:182
#7  0x00007ffff462d14f in QThread::exec() (this=this@entry=0x7fffe6e0f980 <_ZZN13QGlobalStaticIN14QtGlobalStatic6HolderIN12_GLOBAL__N_116Q_QGS__q_managerEEEE8instanceEvE6holder.lto_priv.0>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/global/qflags.h:74
#8  0x00007fffe6d88aef in QDBusConnectionManager::run() (this=0x7fffe6e0f980 <_ZZN13QGlobalStaticIN14QtGlobalStatic6HolderIN12_GLOBAL__N_116Q_QGS__q_managerEEEE8instanceEvE6holder.lto_priv.0>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/dbus/qdbusconnection.cpp:123
#9  0x00007ffff4673352 in operator() (__closure=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:321
#10 (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:257
#11 QThreadPrivate::start(void*) (arg=0x7fffe6e0f980 <_ZZN13QGlobalStaticIN14QtGlobalStatic6HolderIN12_GLOBAL__N_116Q_QGS__q_managerEEEE8instanceEvE6holder.lto_priv.0>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:280
#12 0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#13 0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 1 (Thread 0x7fffe34b1f40 (LWP 8384) "obs"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffe59821cc in pa_cond_wait (c=<optimized out>, m=<optimized out>) at ../pulseaudio/src/pulsecore/mutex-posix.c:146
#3  0x00007fffe8f0eaad in pa_threaded_mainloop_wait (m=0x555557638270) at ../pulseaudio/src/pulse/thread-mainloop.c:216
#4  0x00007fffb3efb5b1 in pulse_wait () at /usr/src/debug/obs-studio/obs-studio-29.1.3/plugins/linux-pulseaudio/pulse-wrapper.c:153
#5  0x00007fffb3efb5ee in pulse_context_ready () at /usr/src/debug/obs-studio/obs-studio-29.1.3/plugins/linux-pulseaudio/pulse-wrapper.c:94
#6  pulse_context_ready () at /usr/src/debug/obs-studio/obs-studio-29.1.3/plugins/linux-pulseaudio/pulse-wrapper.c:84
#7  0x00007fffb3efbd97 in pulse_get_server_info (cb=cb@entry=0x7fffb3efb7d0 <pulse_server_info>, userdata=userdata@entry=0x5555559dd780) at /usr/src/debug/obs-studio/obs-studio-29.1.3/plugins/linux-pulseaudio/pulse-wrapper.c:235
#8  0x00007fffb3efbf8c in pulse_start_recording (data=0x5555559dd780) at /usr/src/debug/obs-studio/obs-studio-29.1.3/plugins/linux-pulseaudio/pulse-input.c:329
#9  pulse_update (vptr=vptr@entry=0x5555559dd780, settings=settings@entry=0x5555577347e0) at /usr/src/debug/obs-studio/obs-studio-29.1.3/plugins/linux-pulseaudio/pulse-input.c:566
#10 0x00007fffb3efc3e3 in pulse_create (input=false, source=0x5555576337a0, settings=0x5555577347e0) at /usr/src/debug/obs-studio/obs-studio-29.1.3/plugins/linux-pulseaudio/pulse-input.c:581
#11 pulse_output_create (settings=0x5555577347e0, source=0x5555576337a0) at /usr/src/debug/obs-studio/obs-studio-29.1.3/plugins/linux-pulseaudio/pulse-input.c:593
#12 0x00007ffff656b62c in obs_source_create_internal (id=0x5555577347a0 "pulse_output_capture", name=0x555555d76000 "Desktop Audio", uuid=<optimized out>, settings=<optimized out>, hotkey_data=<optimized out>, private=<optimized out>, last_obs_ver=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/obs-source.c:401
#13 0x00007ffff65320c3 in obs_load_source_type (source_data=0x555557d4d400, is_private=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/obs.c:2324
#14 0x000055555568340b in LoadAudioDevice(char const*, int, obs_data_t*) (name=<optimized out>, channel=channel@entry=1, parent=parent@entry=0x555557d4e440) at /usr/src/debug/obs-studio/obs-studio-29.1.3/UI/window-basic-main.cpp:838
#15 0x000055555568aaa5 in OBSBasic::LoadData(obs_data*, char const*) (this=0x555555bdc460, data=0x555557d4e440, file=0x7fffffffce10 "/home/dave/.config/obs-studio/basic/scenes/Untitled.json") at /usr/src/debug/obs-studio/obs-studio-29.1.3/UI/window-basic-main.cpp:1129
#16 0x0000555555691971 in OBSBasic::OBSInit() (this=0x555555bdc460) at /usr/src/debug/obs-studio/obs-studio-29.1.3/UI/window-basic-main.cpp:2033
#17 0x00005555555f4afa in OBSApp::OBSInit() (this=0x7fffffffd5b0) at /usr/src/debug/obs-studio/obs-studio-29.1.3/UI/obs-app.cpp:1731
#18 run_program (argv=<optimized out>, argc=<optimized out>, logFile=...) at /usr/src/debug/obs-studio/obs-studio-29.1.3/UI/obs-app.cpp:2519
#19 main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/UI/obs-app.cpp:3435
kkartaltepe commented 1 year ago

If obs was frozen when you ran this then it doesnt seem related to v4l2, instead it looks like your audio server is busted. Since you mention pipewire being affected maybe that is the case.

Switch back to pulseaudio and see if the issue still occurs if not then its not our bug. If it does still occur provide a new set of backtraces from the hang when using pulseaudio

pop13-13 commented 1 year ago

Switching to pulseaudio is sadly not feasible, too many dependencies would break.

Switched from wireplumber to pipewire-media-session, and the issue still occurs.

Audio works fine, up until the moment OBS hangs, then it takes pipewire down with it. But only if I have the V4L2 source added. No other app causes pipewire issues, even when using the webcam besides OBS.

I also tried removing the pipewire-v4l2 package, sadly nothing changed.

kkartaltepe commented 1 year ago

Audio works fine, up until the moment OBS hangs, then it takes pipewire down with it. But only if I have the V4L2 source added.

v4l2 should have 0 influence on anything audio related... given the traces provided I can only assume this is a pipewire issue we have no control over. You can try letting obs hang longer and then getting backtraces again, but without our v4l2 code on the stack it just looks like we are waiting for pipewire which would be a pipewire bug.

pop13-13 commented 1 year ago

Thank you for the help.

It seems that there was a bug with pipewire with the exact same symptoms, where certain video devices cause pipewire to hang.

It seems to be a combination of pipewire having a bug, and OBS doing something weird with the camera/audio which causes this. Other apps work fine.

This needs more investigation from multiple sides (pipewire, v4l2), so feel free to close or mark the issue with the appropriate label.

kkartaltepe commented 1 year ago

sure feel free to link the pipewire bug and i can take a look to see if its obvious we can do anything differently, but im not aware of anything we do weird in the audio side at least.

pop13-13 commented 1 year ago

Tested it a bit more. It's a combination of how OBS handles video devices, and a bug in pipewire in libcamera (it seems).

It seems that OBS keeps trying to apply some setting, and spam restarts the camera (LED on the camera blinks).

Was able to reproduce this with Cheese (gnome webcam app), which also spams a camera restart command (LED blinks), but it only crashed with about a 50% probability.

For some reason if you click default, OBS tries to open then IR camera on the Brio, that works for about a second and then OBS freezes. Due to the whole UI freezing up when the camera does not initialize properly, it is difficult to change the device to prevent the issue.

The freezing also seems to happen with really high resolutions when using the visible light camera.

kkartaltepe commented 1 year ago

Due to the whole UI freezing up when the camera does not initialize properly, it is difficult to change the device to prevent the issue.

I would expect to see a different backtrace if this occured, are you sure the stacks you provided are from after that point?

pop13-13 commented 1 year ago

OBS cannot be restarted without a full system reboot, running obs in the terminal causes it to hang after loading modules. log file when OBS hangs after the issue

It's from the above mentioned point, when OBS was not even launching properly, due to a frozen pipewire server...

Lemme just grab a backtrace from the exact moment when it hangs, with the webcam menu open: (intentionally left part of the log in there, so the context when I interrupted is clear)

info: v4l2-input: /dev/video1 seems to not support video capture
info: v4l2-input: Found device 'Logitech BRIO' at /dev/video2                                                                               
info: v4l2-input: Found device 'Logitech BRIO' at /dev/video0                                                                               
info: v4l2-input: Found input 'Input 1' (Index 0)                                                                                           
info: v4l2-controls: setting default for Power Line Frequency to 2
info: v4l2-controls: setting default for Auto Exposure to 3
info: v4l2-input: Pixelformat: 8-bit Greyscale (unavailable)                                                                                
info: v4l2-input: Pixelformat: RGB3 (Emulated) (unavailable)
info: v4l2-input: Pixelformat: BGR3 (Emulated) (available)
info: v4l2-input: Pixelformat: YU12 (Emulated) (available)
info: v4l2-input: Pixelformat: YV12 (Emulated) (available)
info: v4l2-input: Pixelformat: 8-bit Greyscale (unavailable)                                                                                
info: v4l2-input: Pixelformat: RGB3 (Emulated) (unavailable)
info: v4l2-input: Pixelformat: BGR3 (Emulated) (available)
info: v4l2-input: Pixelformat: YU12 (Emulated) (available)
info: v4l2-input: Pixelformat: YV12 (Emulated) (available)
^Cinfo: v4l2-input: /dev/video3 seems to not support video capture                                                                          
info: v4l2-input: /dev/video1 seems to not support video capture                                                                            
info: v4l2-input: Found device 'Logitech BRIO' at /dev/video2                                                                               
info: v4l2-input: Found device 'Logitech BRIO' at /dev/video0                                                                               
info: v4l2-input: Found input 'Input 1' (Index 0)                                                                                           
info: v4l2-controls: setting default for Power Line Frequency to 2
info: v4l2-controls: setting default for Auto Exposure to 3
info: v4l2-input: Pixelformat: 8-bit Greyscale (unavailable)                                                                                
info: v4l2-input: Pixelformat: RGB3 (Emulated) (unavailable)
info: v4l2-input: Pixelformat: BGR3 (Emulated) (available)
info: v4l2-input: Pixelformat: YU12 (Emulated) (available)
info: v4l2-input: Pixelformat: YV12 (Emulated) (available)
info: v4l2-input: Pixelformat: 8-bit Greyscale (unavailable)                                                                                
info: v4l2-input: Pixelformat: RGB3 (Emulated) (unavailable)
info: v4l2-input: Pixelformat: BGR3 (Emulated) (available)
info: v4l2-input: Pixelformat: YU12 (Emulated) (available)
info: v4l2-input: Pixelformat: YV12 (Emulated) (available)
info: v4l2-input: /dev/video3 seems to not support video capture                                                                            
info: v4l2-input: /dev/video1 seems to not support video capture                                                                            
info: v4l2-input: Found device 'Logitech BRIO' at /dev/video2                                                                               
info: v4l2-input: Found device 'Logitech BRIO' at /dev/video0                                                                               
info: v4l2-input: Found input 'Input 1' (Index 0)                                                                                           
info: v4l2-controls: setting default for Power Line Frequency to 2
info: v4l2-controls: setting default for Auto Exposure to 3
info: v4l2-input: Pixelformat: 8-bit Greyscale (unavailable)                                                                                
info: v4l2-input: Pixelformat: RGB3 (Emulated) (unavailable)
info: v4l2-input: Pixelformat: BGR3 (Emulated) (available)
info: v4l2-input: Pixelformat: YU12 (Emulated) (available)
info: v4l2-input: Pixelformat: YV12 (Emulated) (available)
info: v4l2-input: Pixelformat: 8-bit Greyscale (unavailable)                                                                                
info: v4l2-input: Pixelformat: RGB3 (Emulated) (unavailable)
info: v4l2-input: Pixelformat: BGR3 (Emulated) (available)
info: v4l2-input: Pixelformat: YU12 (Emulated) (available)
info: v4l2-input: Pixelformat: YV12 (Emulated) (available)
info: v4l2-input: /dev/video3 seems to not support video capture                                                                            
info: v4l2-input: /dev/video1 seems to not support video capture                                                                            
info: v4l2-input: Found device 'Logitech BRIO' at /dev/video2                                                                               
info: v4l2-input: Found device 'Logitech BRIO' at /dev/video0                                                                               
info: v4l2-input: Found input 'Input 1' (Index 0)                                                                                           
info: v4l2-controls: setting default for Power Line Frequency to 2
info: v4l2-controls: setting default for Auto Exposure to 3
info: v4l2-input: Pixelformat: 8-bit Greyscale (unavailable)                                                                                
info: v4l2-input: Pixelformat: RGB3 (Emulated) (unavailable)
info: v4l2-input: Pixelformat: BGR3 (Emulated) (available)
info: v4l2-input: Pixelformat: YU12 (Emulated) (available)
info: v4l2-input: Pixelformat: YV12 (Emulated) (available)
info: v4l2-input: Pixelformat: 8-bit Greyscale (unavailable)                                                                                
info: v4l2-input: Pixelformat: RGB3 (Emulated) (unavailable)
info: v4l2-input: Pixelformat: BGR3 (Emulated) (available)
info: v4l2-input: Pixelformat: YU12 (Emulated) (available)
info: v4l2-input: Pixelformat: YV12 (Emulated) (available)

Thread 2 "QDBusConnection" received signal SIGINT, Interrupt.
[Switching to Thread 0x7fffe2dff6c0 (LWP 7078)]
0x00007ffff3d0365f in poll () from /usr/lib/libc.so.6

Thread 34 (Thread 0x7fff94cb56c0 (LWP 7226) "v4l2: capture"):
#0  0x00007ffff3d0e89c in select () at /usr/lib/libc.so.6
#1  0x00007fffb3ef3d58 in v4l2_thread (vptr=0x555556139120) at /usr/src/debug/obs-studio/obs-studio-29.1.3/plugins/linux-v4l2/v4l2-input.c:214
#2  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#3  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 30 (Thread 0x7fff810ae6c0 (LWP 7144) "obs:sh2"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffb9ec781c in  () at /usr/lib/dri/radeonsi_dri.so
#3  0x00007fffb9f1472c in  () at /usr/lib/dri/radeonsi_dri.so
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 27 (Thread 0x7fff670206c0 (LWP 7134) "obs:sh1"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffb9ec781c in  () at /usr/lib/dri/radeonsi_dri.so
#3  0x00007fffb9f1472c in  () at /usr/lib/dri/radeonsi_dri.so
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 26 (Thread 0x7fff6dedd6c0 (LWP 7132) "PipeWire thread"):
#0  0x00007ffff3d112e6 in epoll_wait () at /usr/lib/libc.so.6
#1  0x00007fffb8021c59 in impl_pollfd_wait (object=<optimized out>, pfd=<optimized out>, ev=0x7fff6dedc480, n_ev=<optimized out>, timeout=<optimized out>) at ../pipewire/spa/plugins/support/system.c:137
#2  0x00007fffb80144fd in loop_iterate (object=0x555557a31988, timeout=-1) at ../pipewire/spa/plugins/support/loop.c:458
#3  0x00007fff9642a86d in do_loop (user_data=0x555557aa73d0) at ../pipewire/src/pipewire/thread-loop.c:295
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 25 (Thread 0x7fff6e6de6c0 (LWP 7131) "obs"):
#0  0x00007ffff3d112e6 in epoll_wait () at /usr/lib/libc.so.6
#1  0x00007fffb8021c59 in impl_pollfd_wait (object=<optimized out>, pfd=<optimized out>, ev=0x7fff6e6dd470, n_ev=<optimized out>, timeout=<optimized out>) at ../pipewire/spa/plugins/support/system.c:137
#2  0x00007fffb80144fd in loop_iterate (object=0x555557a39ad8, timeout=-1) at ../pipewire/spa/plugins/support/loop.c:458
#3  0x00007fff963e8b12 in do_loop (user_data=0x555557aa80d0) at ../pipewire/src/pipewire/data-loop.c:65
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 24 (Thread 0x7fff6ffff6c0 (LWP 7124) "v4l2: udev"):
#0  0x00007ffff3d0365f in poll () at /usr/lib/libc.so.6
#1  0x00007fffb3ef0d81 in poll (__timeout=1000, __nfds=2, __fds=0x7fff6fffe680) at /usr/include/bits/poll2.h:39
#2  udev_event_thread (vptr=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/plugins/linux-v4l2/v4l2-udev.c:140
--Type <RET> for more, q to quit, c to continue without paging--c
#3  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#4  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 22 (Thread 0x7fff81bff6c0 (LWP 7121) "threaded-ml"):
#0  0x00007ffff3d0365f in poll () at /usr/lib/libc.so.6
#1  0x00007fffe8f0d8c7 in poll (__timeout=-1, __nfds=2, __fds=0x7fff780071d0) at /usr/include/bits/poll2.h:39
#2  poll_func (ufds=0x7fff780071d0, nfds=2, timeout=-1, userdata=0x55555620f6b0) at ../pulseaudio/src/pulse/thread-mainloop.c:70
#3  0x00007fffe8ef746c in pa_mainloop_poll (m=m@entry=0x55555613c090) at ../pulseaudio/src/pulse/mainloop.c:863
#4  0x00007fffe8f0142c in pa_mainloop_iterate (m=m@entry=0x55555613c090, block=block@entry=1, retval=retval@entry=0x0) at ../pulseaudio/src/pulse/mainloop.c:945
#5  0x00007fffe8f014e1 in pa_mainloop_run (m=0x55555613c090, retval=0x0) at ../pulseaudio/src/pulse/mainloop.c:963
#6  0x00007fffe8f11c02 in thread (userdata=0x55555613c040) at ../pulseaudio/src/pulse/thread-mainloop.c:101
#7  0x00007fffe5985c67 in internal_thread_func (userdata=0x55555620e8f0) at ../pulseaudio/src/pulsecore/thread-posix.c:81
#8  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#9  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 19 (Thread 0x7fff96ffd6c0 (LWP 7100) "scripting: defe"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c94980 in  () at /usr/lib/libc.so.6
#2  0x00007fffbbf24546 in defer_thread(void*) (unused=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/deps/obs-scripting/obs-scripting.c:89
#3  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#4  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 18 (Thread 0x7fff977fe6c0 (LWP 7095) "libobs: graphic"):
#0  0x00007ffff3cd58f5 in clock_nanosleep () at /usr/lib/libc.so.6
#1  0x00007ffff3ce7fb7 in nanosleep () at /usr/lib/libc.so.6
#2  0x00007ffff65b5195 in os_sleepto_ns (time_target=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/util/platform-nix.c:233
#3  0x00007ffff6581aa3 in video_sleep (interval_ns=33333333, p_time=0x555555be9c70, video=0x555555be9c08) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/obs-video.c:847
#4  obs_graphics_thread_loop (context=context@entry=0x7fff977fd680) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/obs-video.c:1177
#5  0x00007ffff65830f9 in obs_graphics_thread (param=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/obs-video.c:1232
#6  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#7  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 17 (Thread 0x7fff97fff6c0 (LWP 7094) "video-io: video"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c94980 in  () at /usr/lib/libc.so.6
#2  0x00007ffff65aa268 in video_thread (param=0x555556c35a20) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/media-io/video-io.c:181
#3  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#4  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 16 (Thread 0x7fffb8bfd6c0 (LWP 7093) "obs:gl0"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffb9ec781c in  () at /usr/lib/dri/radeonsi_dri.so
#3  0x00007fffb9f1472c in  () at /usr/lib/dri/radeonsi_dri.so
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 15 (Thread 0x7fffb93fe6c0 (LWP 7092) "obs:gdrv0"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffb9ec781c in  () at /usr/lib/dri/radeonsi_dri.so
#3  0x00007fffb9f1472c in  () at /usr/lib/dri/radeonsi_dri.so
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 14 (Thread 0x7fffb9dff6c0 (LWP 7091) "obs:shlo0"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffb9ec781c in  () at /usr/lib/dri/radeonsi_dri.so
#3  0x00007fffb9f1472c in  () at /usr/lib/dri/radeonsi_dri.so
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 13 (Thread 0x7fffc8a066c0 (LWP 7090) "obs:sh0"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffb9ec781c in  () at /usr/lib/dri/radeonsi_dri.so
#3  0x00007fffb9f1472c in  () at /usr/lib/dri/radeonsi_dri.so
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 12 (Thread 0x7fffc92076c0 (LWP 7089) "obs:disk$0"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffb9ec781c in  () at /usr/lib/dri/radeonsi_dri.so
#3  0x00007fffb9f1472c in  () at /usr/lib/dri/radeonsi_dri.so
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 11 (Thread 0x7fffc9b496c0 (LWP 7088) "obs:cs0"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007fffb9ec781c in  () at /usr/lib/dri/radeonsi_dri.so
#3  0x00007fffb9f1472c in  () at /usr/lib/dri/radeonsi_dri.so
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 10 (Thread 0x7fffca3fd6c0 (LWP 7087) "audio-io: audio"):
#0  0x00007ffff3cd58f5 in clock_nanosleep () at /usr/lib/libc.so.6
#1  0x00007ffff3ce7fb7 in nanosleep () at /usr/lib/libc.so.6
#2  0x00007ffff3d10a39 in usleep () at /usr/lib/libc.so.6
#3  0x00007ffff65b5209 in os_sleepto_ns_fast (time_target=2239802453397) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/util/platform-nix.c:250
#4  0x00007ffff65a641a in audio_thread (param=0x555556216540) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/media-io/audio-io.c:236
#5  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#6  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 9 (Thread 0x7fffcabfe6c0 (LWP 7086) "tiny_tubular_ta"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c94980 in  () at /usr/lib/libc.so.6
#2  0x00007ffff65bc8a3 in tiny_tubular_task_thread (param=0x555555c8e5a0) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/util/task.c:139
#3  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#4  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 8 (Thread 0x7fffcb3ff6c0 (LWP 7085) "libobs: hotkey "):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8c055 in pthread_cond_timedwait () at /usr/lib/libc.so.6
#2  0x00007ffff65b4d6a in os_event_timedwait (event=0x555555c72f60, milliseconds=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/util/threading-posix.c:121
#3  0x00007ffff654be65 in obs_hotkey_thread (arg=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/obs-hotkey.c:1252
#4  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#5  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 7 (Thread 0x7fffcbfff6c0 (LWP 7084) "gdbus"):
#0  0x00007ffff3d0365f in poll () at /usr/lib/libc.so.6
#1  0x00007ffff2f80c2f in g_main_context_poll (priority=<optimized out>, n_fds=2, fds=0x7fffc4000b90, timeout=<optimized out>, context=0x555555ac1340) at ../glib/glib/gmain.c:4584
#2  g_main_context_iterate.isra.0 (context=0x555555ac1340, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4271
#3  0x00007ffff2f22fef in g_main_loop_run (loop=0x555555ac1470) at ../glib/glib/gmain.c:4479
#4  0x00007fffe6f2028c in gdbus_shared_thread_func (user_data=0x555555ab7f10) at ../glib/gio/gdbusprivate.c:284
#5  0x00007ffff2f55d75 in g_thread_proxy (data=0x555555abd4b0) at ../glib/glib/gthread.c:831
#6  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#7  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 6 (Thread 0x7fffe0bb16c0 (LWP 7083) "gmain"):
#0  0x00007ffff3d0365f in poll () at /usr/lib/libc.so.6
#1  0x00007ffff2f80c2f in g_main_context_poll (priority=<optimized out>, n_fds=1, fds=0x555555ab4300, timeout=<optimized out>, context=0x555555ab40e0) at ../glib/glib/gmain.c:4584
#2  g_main_context_iterate.isra.0 (context=context@entry=0x555555ab40e0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4271
#3  0x00007ffff2f210e2 in g_main_context_iteration (context=0x555555ab40e0, may_block=may_block@entry=1) at ../glib/glib/gmain.c:4343
#4  0x00007ffff2f21132 in glib_worker_main (data=<optimized out>) at ../glib/glib/gmain.c:6455
#5  0x00007ffff2f55d75 in g_thread_proxy (data=0x555555ab42a0) at ../glib/glib/gthread.c:831
#6  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#7  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 5 (Thread 0x7fffe13b26c0 (LWP 7082) "pool-spawner"):
#0  0x00007ffff3d0ee2d in syscall () at /usr/lib/libc.so.6
#1  0x00007ffff2f78ca7 in g_cond_wait (cond=0x555555a23938, mutex=0x555555a23930) at ../glib/glib/gthread-posix.c:1475
#2  0x00007ffff2eee144 in g_async_queue_pop_intern_unlocked (queue=0x555555a23930, wait=1, end_time=-1) at ../glib/glib/gasyncqueue.c:425
#3  0x00007ffff2f582fe in g_thread_pool_spawn_thread (data=<optimized out>) at ../glib/glib/gthreadpool.c:311
#4  0x00007ffff2f55d75 in g_thread_proxy (data=0x555555ab3d60) at ../glib/glib/gthread.c:831
#5  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#6  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 4 (Thread 0x7fffe1bd66c0 (LWP 7080) "WaylandEventThr"):
#0  0x00007ffff3d0365f in poll () at /usr/lib/libc.so.6
#1  0x00007fffe3430a68 in poll (__timeout=-1, __nfds=2, __fds=0x7fffe1bd55f0) at /usr/include/bits/poll2.h:39
#2  QtWaylandClient::EventThread::run() (this=0x555555a101b0) at /usr/src/debug/qt6-wayland/qtwayland-everywhere-src-6.5.2/src/client/qwaylanddisplay.cpp:189
#3  0x00007ffff4673352 in operator() (__closure=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:321
#4  (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:257
#5  QThreadPrivate::start(void*) (arg=0x555555a101b0) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:280
#6  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#7  0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 3 (Thread 0x7fffe23d76c0 (LWP 7079) "WaylandEventThr"):
#0  0x00007ffff3c894ae in  () at /usr/lib/libc.so.6
#1  0x00007ffff3c8bd40 in pthread_cond_wait () at /usr/lib/libc.so.6
#2  0x00007ffff4676ea4 in QWaitConditionPrivate::wait(QDeadlineTimer) (deadline=..., this=0x555555a26910) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qwaitcondition_unix.cpp:87
#3  QWaitCondition::wait(QMutex*, QDeadlineTimer) (this=this@entry=0x5555559ffa90, mutex=mutex@entry=0x5555559ffa88, deadline=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qwaitcondition_unix.cpp:160
#4  0x00007fffe34309ee in QtWaylandClient::EventThread::waitForReading() (this=0x5555559ffa50) at /usr/src/debug/qt6-wayland/qtwayland-everywhere-src-6.5.2/src/client/qwaylanddisplay.cpp:223
#5  QtWaylandClient::EventThread::run() (this=0x5555559ffa50) at /usr/src/debug/qt6-wayland/qtwayland-everywhere-src-6.5.2/src/client/qwaylanddisplay.cpp:184
#6  0x00007ffff4673352 in operator() (__closure=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:321
#7  (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:257
#8  QThreadPrivate::start(void*) (arg=0x5555559ffa50) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:280
#9  0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#10 0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 2 (Thread 0x7fffe2dff6c0 (LWP 7078) "QDBusConnection"):
#0  0x00007ffff3d0365f in poll () at /usr/lib/libc.so.6
#1  0x00007ffff2f80c2f in g_main_context_poll (priority=<optimized out>, n_fds=4, fds=0x7fffdc017bc0, timeout=<optimized out>, context=0x7fffdc000c80) at ../glib/glib/gmain.c:4584
#2  g_main_context_iterate.isra.0 (context=context@entry=0x7fffdc000c80, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4271
#3  0x00007ffff2f210e2 in g_main_context_iteration (context=0x7fffdc000c80, may_block=1) at ../glib/glib/gmain.c:4343
#4  0x00007ffff4732794 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fffdc000b70, flags=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qeventdispatcher_glib.cpp:393
#5  0x00007ffff4545623 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (flags=..., this=0x7fffe2dfe5b0) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qeventloop.cpp:100
#6  QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fffe2dfe5b0, flags=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qeventloop.cpp:182
#7  0x00007ffff462d14f in QThread::exec() (this=this@entry=0x7fffe6e0f980 <_ZZN13QGlobalStaticIN14QtGlobalStatic6HolderIN12_GLOBAL__N_116Q_QGS__q_managerEEEE8instanceEvE6holder.lto_priv.0>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/global/qflags.h:74
#8  0x00007fffe6d88aef in QDBusConnectionManager::run() (this=0x7fffe6e0f980 <_ZZN13QGlobalStaticIN14QtGlobalStatic6HolderIN12_GLOBAL__N_116Q_QGS__q_managerEEEE8instanceEvE6holder.lto_priv.0>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/dbus/qdbusconnection.cpp:123
#9  0x00007ffff4673352 in operator() (__closure=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:321
#10 (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:257
#11 QThreadPrivate::start(void*) (arg=0x7fffe6e0f980 <_ZZN13QGlobalStaticIN14QtGlobalStatic6HolderIN12_GLOBAL__N_116Q_QGS__q_managerEEEE8instanceEvE6holder.lto_priv.0>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/thread/qthread_unix.cpp:280
#12 0x00007ffff3c8c9eb in  () at /usr/lib/libc.so.6
#13 0x00007ffff3d10ebc in  () at /usr/lib/libc.so.6

Thread 1 (Thread 0x7fffe34b1f40 (LWP 7066) "obs"):
#0  0x00007ffff7fd64ff in  () at /lib64/ld-linux-x86-64.so.2
#1  0x00007ffff7fcb4e1 in _dl_catch_exception () at /lib64/ld-linux-x86-64.so.2
#2  0x00007ffff7fd5a7a in  () at /lib64/ld-linux-x86-64.so.2
#3  0x00007ffff7fcb4e1 in _dl_catch_exception () at /lib64/ld-linux-x86-64.so.2
#4  0x00007ffff7fd5e4c in  () at /lib64/ld-linux-x86-64.so.2
#5  0x00007ffff3c889ec in  () at /usr/lib/libc.so.6
#6  0x00007ffff7fcb4e1 in _dl_catch_exception () at /lib64/ld-linux-x86-64.so.2
#7  0x00007ffff7fcb603 in  () at /lib64/ld-linux-x86-64.so.2
#8  0x00007ffff3c884f7 in  () at /usr/lib/libc.so.6
#9  0x00007ffff3c88aa1 in dlopen () at /usr/lib/libc.so.6
#10 0x00007fffb3ee1302 in v4l2_plugin_init (dev_ops_ret=<synthetic pointer>, plugin_priv_ret=<synthetic pointer>, plugin_lib_ret=<synthetic pointer>, fd=37) at /usr/src/debug/v4l-utils/v4l-utils-1.24.1/lib/libv4l2/v4l2-plugin.c:75
#11 v4l2_fd_open (fd=fd@entry=37, v4l2_flags=v4l2_flags@entry=0) at /usr/src/debug/v4l-utils/v4l-utils-1.24.1/lib/libv4l2/libv4l2.c:668
#12 0x00007fffb3ee1c3a in v4l2_open (file=<optimized out>, oflag=oflag@entry=2050) at /usr/src/debug/v4l-utils/v4l-utils-1.24.1/lib/libv4l2/libv4l2.c:644
#13 0x00007fffb3ef0147 in v4l2_control_changed (data=0x9a0908, props=<optimized out>, prop=0x555557dadb80, settings=0x555557571b00) at /usr/src/debug/obs-studio/obs-studio-29.1.3/plugins/linux-v4l2/v4l2-controls.c:38
#14 0x00007ffff65584b8 in obs_properties_apply_settings_internal (props=<optimized out>, settings=0x555557571b00, realprops=0x555557c09520) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/obs-properties.c:377
#15 0x00007ffff65584d7 in obs_properties_apply_settings_internal (props=<optimized out>, settings=0x555557571b00, realprops=0x555557c09520) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/obs-properties.c:370
#16 0x00007ffff6571d8e in obs_source_properties (source=0x5555575e28e0) at /usr/src/debug/obs-studio/obs-studio-29.1.3/libobs/obs-source.c:953
#17 0x000055555564a6c6 in OBSPropertiesView::ReloadProperties() (this=0x555557e88ab0) at /usr/src/debug/obs-studio/obs-studio-29.1.3/UI/properties-view.cpp:96
#18 0x00007ffff457d147 in QObject::event(QEvent*) (this=0x555557e88ab0, e=0x7fff68001d40) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qobject.cpp:1391
#19 0x00007ffff564f8f6 in QFrame::event(QEvent*) (this=0x555557e88ab0, e=0x7fff68001d40) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/widgets/widgets/qframe.cpp:515
#20 0x00007ffff557136b in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x555557e88ab0, e=0x7fff68001d40) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/widgets/kernel/qapplication.cpp:3287
#21 0x00007ffff453b718 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x555557e88ab0, event=event@entry=0x7fff68001d40) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qcoreapplication.cpp:1118
#22 0x00007ffff453ba9b in QCoreApplication::sendEvent(QObject*, QEvent*) (event=0x7fff68001d40, receiver=<optimized out>) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qcoreapplication.cpp:1536
#23 QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) (receiver=0x0, event_type=0, data=0x5555559d6330) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qcoreapplication.cpp:1898
#24 0x00007ffff4734854 in QCoreApplication::sendPostedEvents(QObject*, int) (receiver=0x0, event_type=0) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qcoreapplication.cpp:1757
#25 postEventSourceDispatch(GSource*, GSourceFunc, gpointer) (s=0x5555559be8d0) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qeventdispatcher_glib.cpp:243
#26 0x00007ffff2f23a31 in g_main_dispatch (context=0x7fffdc000f10) at ../glib/glib/gmain.c:3460
#27 g_main_context_dispatch (context=0x7fffdc000f10) at ../glib/glib/gmain.c:4200
#28 0x00007ffff2f80cc9 in g_main_context_iterate.isra.0 (context=context@entry=0x7fffdc000f10, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4276
#29 0x00007ffff2f210e2 in g_main_context_iteration (context=0x7fffdc000f10, may_block=1) at ../glib/glib/gmain.c:4343
#30 0x00007ffff4732794 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x5555559d5ad0, flags=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qeventdispatcher_glib.cpp:393
#31 0x00007ffff4545623 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (flags=..., this=0x7fffffffd210) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qeventloop.cpp:100
#32 QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fffffffd210, flags=...) at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/kernel/qeventloop.cpp:182
#33 0x00007ffff453f1f8 in QCoreApplication::exec() () at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/corelib/global/qflags.h:74
#34 0x00007ffff556defa in QApplication::exec() () at /usr/src/debug/qt6-base/qtbase-everywhere-src-6.5.2/src/widgets/kernel/qapplication.cpp:2566
#35 0x00005555555f4ba8 in run_program (argv=<optimized out>, argc=<optimized out>, logFile=...) at /usr/src/debug/obs-studio/obs-studio-29.1.3/UI/obs-app.cpp:2524
#36 main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/obs-studio/obs-studio-29.1.3/UI/obs-app.cpp:3435
kkartaltepe commented 1 year ago

Got it this is interesting, can you provide the list of files in /usr/lib64/libv4l/plugins/ ?

pop13-13 commented 1 year ago

One file: libv4l-mplane.so

Also, lemme add that the more you mess with settings, the higher likehood of a crash or freezing.

kkartaltepe commented 1 year ago

And for the log part you show, you flipped the device like 3 times in settings to produce the hang? Can you provide the log up to the scene collection just so its clear what happened after scenes loaded?

pop13-13 commented 1 year ago

https://obsproject.com/logs/q5puXOaOXvdbcJBE

And nope, that's the part where the LED blinks and the camera restarts a few times. I just selected the IR cam, waited, and interrupted when the image froze for a bit.

kkartaltepe commented 1 year ago

Its not clear to me what precisely the device is, from your v4l2 ctrl

Logitech BRIO (usb-0000:00:14.0-3.2):
    /dev/video0
    /dev/video1
    /dev/video2
    /dev/video3
    /dev/media0

and you mentioning it has an IR cam, does this device have multiple cameras (Color/IR/Other)? Is the device only supposed to use one camera at a time?

From our logs video0 and video2 support video output, are these the color and IR cams you mention?

pop13-13 commented 1 year ago

From our logs video0 and video2 support video output, are these the color and IR cams you mention?

Yes image

The input drop down does not do anything, and I have no clue what those other devices are image

From experience, it only supports one stream at a time.

kkartaltepe commented 1 year ago

Alright then i know what is going on now.

The device exposes two separate cameras, but they are actually not separate at all. So in OBS we try and open one and it works great. Then you try and open the settings tab and we try and open your next webcam (but its not the next one its the same one).

Now for terrible devices we have to sometimes retry the camera as it might disconnect randomly and no one wants their webcam to be frozen. But in this case opening your webcam a second time doesnt fail instead it kills the old connection. So we reconnect. But since the 2nd webcam opened we also reconnect there.

So we just ping back and forth opening your device. This is also a known issue and hangs most webcams and we have a sort of reasonable wait between reopening the device... but that only works for actually separate devices not the case of your single device masquerading as two devices.

Its sort of possible to try to detect this and work around it but with the current state of our v4l2 code is really unlikely to happen.

cbirchinger commented 2 months ago

I found this issue because my Logitech BRIO flickers and turns off and on quickly by default.

The reason is because OBS defaults to the IR camera (/dev/video3) and not the "normal" one (/dev/video1) (/dev/video0 is already occupied by the loopback one in case someone is wondering why it starts at 1 not 0)

As previously mentioned the BRIO exposes 2 cameras. A "normal" YUYV and MJPG capable one and a IR one with GREY 340x340

v4l2-ctl --list-devices

Logitech BRIO (usb-0000:11:00.0-4):
        /dev/video1
        /dev/video2
        /dev/video3
        /dev/video4
        /dev/media1

v4l2-ctl -d /dev/video1 --list-formats

ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture

        [0]: 'YUYV' (YUYV 4:2:2)
        [1]: 'MJPG' (Motion-JPEG, compressed)

v4l2-ctl -d /dev/video3 --list-formats

ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture

        [0]: 'GREY' (8-bit Greyscale)

With the V4L Plugin the device can be changed from the default. People can also think there's a bug because it's hard to notice that there are 2 identical camera devices in the drop down menu.

With the new Pipewire Video Plugin, the same problem exists, but there is no way of changing from the IR to the "normal" camera one using OBS. Using qpwgraph and manually re-wiring works to get it working though. At least until you restart OBS and it will default back to the "wrong IR device"

OBS should really not default to the IR camera device. In 99% of the cases a BRIO user wants the "normal" camera image.