Bug#973441: obs-studio: Adding the noise canceling filter causes a segmentation fault
Dear Maintainer,
I tried to have a look at this crash and could it reproduce it
inside a minimal testing amd64 VM.
A backtrace with full debug symbols in [1].
The crash itself happens because of a stack exhaustion, because in
_celt_autocorr a 2015 MB array should be constructed.
But this seems to be just a consequence of function compute_frame_features
calling function pitch_downsample, which is unfortunately first found by
the dynamic linker in libcodec2.so.0.9 instead of obs-filters.so.
And the function signatures are quite different.
Therefore a cheap workaround currently might be to start obs-studio with
obs-filters preloaded. That way at least the denoise filter can be added.
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/obs-plugins/obs-filters.so obs
But might break when libcodec2.so.0.9 wants to call its function pitch_downsample.
Another more reliable option might be to rename
that and the other common functions.
The last part of the attached file shows all common function
between obs-filters.so and libcodec2.so.0.9.
Kind regards,
Bernhard
[1]
(gdb) bt
#0 0x00007f1bee6e4b71 in _celt_autocorr (x=x@entry=0x7f1aacfee8e8, ac=ac@entry=0x7f1aacfee7c0, window=window@entry=0x0, overlap=overlap@entry=0, lag=lag@entry=4, n=n@entry=-1392576048) at ./lpcnet/src/celt_lpc.c:216
#1 0x00007f1bee6e4d2a in pitch_downsample (x_lp=x_lp@entry=0x7f1aacfee8e8, len=len@entry=-1392576048) at ./lpcnet/src/pitch.c:160
#2 0x00007f1b30293006 in compute_frame_features (in=0x7f1aacfeeac0, features=0x7f1aacfeea10, Exp=0x7f1aacfee9b0, Ep=0x7f1aacfee950, Ex=0x7f1aacfee8f0, P=0x7f1aacff2560, X=0x7f1aacff1650, st=0x562d5f38cff0) at ./plugins/obs-filters/rnnoise/src/denoise.c:326
#3 rnnoise_process_frame (st=0x562d5f38cff0, out=<optimized out>, in=<optimized out>) at ./plugins/obs-filters/rnnoise/src/denoise.c:471
#4 0x00007f1b302a5f4c in process_rnnoise (ng=0x562d5f373f40) at ./plugins/obs-filters/noise-suppress-filter.c:343
#5 process (ng=<optimized out>) at ./plugins/obs-filters/noise-suppress-filter.c:392
#6 noise_suppress_filter_audio (data=0x562d5f373f40, audio=<optimized out>) at ./plugins/obs-filters/noise-suppress-filter.c:468
#7 0x00007f1bf1beab8b in filter_async_audio (in=<optimized out>, source=0x562d5f26bf00) at ./libobs/obs-source.c:3068
#8 obs_source_output_audio (source=0x562d5f26bf00, audio=audio@entry=0x7f1aacff81f0) at ./libobs/obs-source.c:3246
#9 0x00007f1bcc002774 in _alsa_listen (attr=0x7f1be000dc20) at ./plugins/linux-alsa/alsa-input.c:574
#10 0x00007f1bf0c26ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#11 0x00007f1bf0b56d4f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
# Bullseye/testing amd64 qemu VM 2020-11-14
apt update
apt dist-upgrade
apt install systemd-coredump mc htop psmisc net-tools strace xdm xserver-xorg openbox xterm gdb obs-studio obs-studio-dbgsym obs-plugins-dbgsym libobs0-dbgsym libcodec2-0.9-dbgsym
apt build-dep libcodec2-0.9
apt build-dep obs-studio
reboot
mkdir /home/benutzer/source/libcodec2-0.9/orig -p
cd /home/benutzer/source/libcodec2-0.9/orig
apt source libcodec2-0.9
cd
mkdir /home/benutzer/source/obs-studio/orig -p
cd /home/benutzer/source/obs-studio/orig
apt source obs-studio
cd
export LANG=C
export DISPLAY=:0
obs
- Cancel autoconfiguration
- Sources: Add source, Audio Capture Device Alsa
- Sources: Right click new entry - "Filters"
- Audio Filters: Add "Noise suppresion"
benutzer@debian:~$ obs
...
info: alsa-input: PCM 'default' rate set to 44100
info: alsa-input: PCM 'default' channels set to 2
info: User added source 'Audio Capture Device (ALSA)' (alsa_input_capture) to scene 'Scene'
info: adding 64 milliseconds of audio buffering, total audio buffering is now 64 milliseconds (source: Audio Capture Device (ALSA))
info: User added filter 'Noise Suppression' (noise_suppress_filter_v2) to source 'Audio Capture Device (ALSA)'
Segmentation fault (core dumped)
root@debian:~# journalctl --no-pager
...
Nov 14 14:37:13 debian kernel: obs[891]: segfault at 7f1bf902fff8 ip 00007f1bee6e4b71 sp 00007f1bf9030000 error 6 in libcodec2.so.0.9[7f1bee6b4000+38000]
Nov 14 14:37:13 debian kernel: Code: d9 00 00 00 48 8d 35 8e 01 01 00 48 8d 3d 0b 02 01 00 e8 12 f4 ff ff ba d8 00 00 00 48 8d 35 76 01 01 00 48 8d 3d dd 01 01 00 <e8> fa f3 ff ff e8 95 fa fc ff 0f 1f 44 00 00 48 b8 00 00 00 00 01
Nov 14 14:37:13 debian systemd[1]: Created slice system-systemd\x2dcoredump.slice.
Nov 14 14:37:13 debian systemd[1]: Started Process Core Dump (PID 896/UID 0).
Nov 14 14:37:15 debian kernel: snd_hda_intel 0000:00:05.0: IRQ timing workaround is activated for card #0. Suggest a bigger bdl_pos_adj.
Nov 14 14:37:17 debian systemd-coredump[897]: [🡕] Process 705 (obs) of user 1000 dumped core.
Stack trace of thread 891:
#0 0x00007f1bee6e4b71 _celt_autocorr (libcodec2.so.0.9 + 0x3cb71)
#1 0x00007f1bee6e4d2a pitch_downsample (libcodec2.so.0.9 + 0x3cd2a)
#2 0x00007f1b30293006 rnnoise_process_frame (obs-filters.so + 0x9006)
#3 0x00007f1b302a5f4c n/a (obs-filters.so + 0x1bf4c)
#4 0x00007f1bf1beab8b obs_source_output_audio (libobs.so.0 + 0x74b8b)
#5 0x00007f1bcc002774 n/a (linux-alsa.so + 0x2774)
#6 0x00007f1bf0c26ea7 start_thread (libpthread.so.0 + 0x8ea7)
#7 0x00007f1bf0b56d4f __clone (libc.so.6 + 0xfdd4f)
...
Stack trace of thread 727:
#0 0x00007f1bf0c2d7b2 pthread_cond_wait@@GLIBC_2.3.2 (libpthread.so.0 + 0xf7b2)
#1 0x00007f1bcdaef80b n/a (swrast_dri.so + 0x69b80b)
#2 0x00007f1bcdaef1a7 n/a (swrast_dri.so + 0x69b1a7)
#3 0x00007f1bf0c26ea7 start_thread (libpthread.so.0 + 0x8ea7)
#4 0x00007f1bf0b56d4f __clone (libc.so.6 + 0xfdd4f)
Nov 14 14:37:17 debian systemd[1]: systemd-coredump@0-896-0.service: Succeeded.
root@debian:~# coredumpctl list
TIME PID UID GID SIG COREFILE EXE
Sat 2020-11-14 14:37:17 CET 705 1000 1000 11 present /usr/bin/obs
root@debian:~# coredumpctl gdb 705
PID: 705 (obs)
UID: 1000 (benutzer)
GID: 1000 (benutzer)
Signal: 11 (SEGV)
Timestamp: Sat 2020-11-14 14:37:13 CET (1min 52s ago)
Command Line: obs
Executable: /usr/bin/obs
Control Group: /user.slice/user-1000.slice/session-4.scope
Unit: session-4.scope
Slice: user-1000.slice
Session: 4
Owner UID: 1000 (benutzer)
Boot ID: f5db46c8509344d280e4efdb1cd5ecda
Machine ID: 33f18f39d2a9438eb75b0ed52848afcd
Hostname: debian
Storage: /var/lib/systemd/coredump/core.obs.1000.f5db46c8509344d280e4efdb1cd5ecda.705.1605361033000000.zst
Message: Process 705 (obs) of user 1000 dumped core.
Stack trace of thread 891:
...
Core was generated by `obs'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00007f1bee6e4b71 in _celt_autocorr () from /lib/x86_64-linux-gnu/libcodec2.so.0.9
[Current thread is 1 (Thread 0x7f1aacff9700 (LWP 891))]
(gdb) set width 0
(gdb) set pagination off
(gdb) bt
#0 0x00007f1bee6e4b71 in _celt_autocorr () from /lib/x86_64-linux-gnu/libcodec2.so.0.9
#1 0x00007f1bee6e4d2a in pitch_downsample () from /lib/x86_64-linux-gnu/libcodec2.so.0.9
#2 0x00007f1b30293006 in rnnoise_process_frame () from /usr//lib/x86_64-linux-gnu/obs-plugins/obs-filters.so
#3 0x00007f1b302a5f4c in ?? () from /usr//lib/x86_64-linux-gnu/obs-plugins/obs-filters.so
#4 0x00007f1bf1beab8b in obs_source_output_audio () from /lib/x86_64-linux-gnu/libobs.so.0
#5 0x00007f1bcc002774 in ?? () from /usr//lib/x86_64-linux-gnu/obs-plugins/linux-alsa.so
#6 0x00007f1bf0c26ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#7 0x00007f1bf0b56d4f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
(gdb)
Core was generated by `obs'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00007f1bee6e4b71 in _celt_autocorr (x=x@entry=0x7f1aacfee8e8, ac=ac@entry=0x7f1aacfee7c0, window=window@entry=0x0, overlap=overlap@entry=0, lag=lag@entry=4, n=n@entry=-1392576048)
at ./lpcnet/src/celt_lpc.c:216
216 ./lpcnet/src/celt_lpc.c: Datei oder Verzeichnis nicht gefunden.
[Current thread is 1 (Thread 0x7f1aacff9700 (LWP 891))]
(gdb) set width 0
(gdb) set pagination off
(gdb) bt
#0 0x00007f1bee6e4b71 in _celt_autocorr (x=x@entry=0x7f1aacfee8e8, ac=ac@entry=0x7f1aacfee7c0, window=window@entry=0x0, overlap=overlap@entry=0, lag=lag@entry=4, n=n@entry=-1392576048) at ./lpcnet/src/celt_lpc.c:216
#1 0x00007f1bee6e4d2a in pitch_downsample (x_lp=x_lp@entry=0x7f1aacfee8e8, len=len@entry=-1392576048) at ./lpcnet/src/pitch.c:160
#2 0x00007f1b30293006 in compute_frame_features (in=0x7f1aacfeeac0, features=0x7f1aacfeea10, Exp=0x7f1aacfee9b0, Ep=0x7f1aacfee950, Ex=0x7f1aacfee8f0, P=0x7f1aacff2560, X=0x7f1aacff1650, st=0x562d5f38cff0) at ./plugins/obs-filters/rnnoise/src/denoise.c:326
#3 rnnoise_process_frame (st=0x562d5f38cff0, out=<optimized out>, in=<optimized out>) at ./plugins/obs-filters/rnnoise/src/denoise.c:471
#4 0x00007f1b302a5f4c in process_rnnoise (ng=0x562d5f373f40) at ./plugins/obs-filters/noise-suppress-filter.c:343
#5 process (ng=<optimized out>) at ./plugins/obs-filters/noise-suppress-filter.c:392
#6 noise_suppress_filter_audio (data=0x562d5f373f40, audio=<optimized out>) at ./plugins/obs-filters/noise-suppress-filter.c:468
#7 0x00007f1bf1beab8b in filter_async_audio (in=<optimized out>, source=0x562d5f26bf00) at ./libobs/obs-source.c:3068
#8 obs_source_output_audio (source=0x562d5f26bf00, audio=audio@entry=0x7f1aacff81f0) at ./libobs/obs-source.c:3246
#9 0x00007f1bcc002774 in _alsa_listen (attr=0x7f1be000dc20) at ./plugins/linux-alsa/alsa-input.c:574
#10 0x00007f1bf0c26ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#11 0x00007f1bf0b56d4f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
(gdb) display/i $pc
1: x/i $pc
=> 0x7f1bee6e4b71 <_celt_autocorr+449>: call 0x7f1bee6e3f70 <_celt_fatal>
segfault at 7f1bf902fff8 ip 00007f1bee6e4b71 sp 00007f1bf9030000 error 6
https://wiki.debian.org/InterpretingKernelOutputAtProcessCrash
decimal 6 == binary 110
1: user-mode access
1: write access
0: no page found
.
(gdb) print/x $rsp
$1 = 0x7f1bf9030000
(gdb) up
#1 0x00007f1bee6e4d2a in pitch_downsample (x_lp=x_lp@entry=0x7f1aacfee8e8, len=len@entry=-1392576048) at ./lpcnet/src/pitch.c:160
160 ./lpcnet/src/pitch.c: Datei oder Verzeichnis nicht gefunden.
(gdb) print/x $rsp
$2 = 0x7f1aacfee7a0
(gdb) up
#2 0x00007f1b30293006 in compute_frame_features (in=0x7f1aacfeeac0, features=0x7f1aacfeea10, Exp=0x7f1aacfee9b0, Ep=0x7f1aacfee950, Ex=0x7f1aacfee8f0, P=0x7f1aacff2560, X=0x7f1aacff1650, st=0x562d5f38cff0) at ./plugins/obs-filters/rnnoise/src/denoise.c:326
326 ./plugins/obs-filters/rnnoise/src/denoise.c: Datei oder Verzeichnis nicht gefunden.
(gdb) print/x $rsp
$3 = 0x7f1aacfee810
(gdb) up
#3 rnnoise_process_frame (st=0x562d5f38cff0, out=<optimized out>, in=<optimized out>) at ./plugins/obs-filters/rnnoise/src/denoise.c:471
471 in ./plugins/obs-filters/rnnoise/src/denoise.c
(gdb) print/x $rsp
$4 = 0x7f1aacfee810
(gdb) up
#4 0x00007f1b302a5f4c in process_rnnoise (ng=0x562d5f373f40) at ./plugins/obs-filters/noise-suppress-filter.c:343
343 ./plugins/obs-filters/noise-suppress-filter.c: Datei oder Verzeichnis nicht gefunden.
(gdb) print/x $rsp
$5 = 0x7f1aacff7fb0
(gdb) up
#5 process (ng=<optimized out>) at ./plugins/obs-filters/noise-suppress-filter.c:392
392 in ./plugins/obs-filters/noise-suppress-filter.c
(gdb) print/x $rsp
$6 = 0x7f1aacff7fb0
(gdb) up
#6 noise_suppress_filter_audio (data=0x562d5f373f40, audio=<optimized out>) at ./plugins/obs-filters/noise-suppress-filter.c:468
468 in ./plugins/obs-filters/noise-suppress-filter.c
(gdb) print/x $rsp
$7 = 0x7f1aacff7fb0
(gdb) up
#7 0x00007f1bf1beab8b in filter_async_audio (in=<optimized out>, source=0x562d5f26bf00) at ./libobs/obs-source.c:3068
3068 ./libobs/obs-source.c: Datei oder Verzeichnis nicht gefunden.
(gdb) print/x $rsp
$8 = 0x7f1aacff8080
(gdb) up
#8 obs_source_output_audio (source=0x562d5f26bf00, audio=audio@entry=0x7f1aacff81f0) at ./libobs/obs-source.c:3246
3246 in ./libobs/obs-source.c
(gdb) print/x $rsp
$9 = 0x7f1aacff8080
(gdb) up
#9 0x00007f1bcc002774 in _alsa_listen (attr=0x7f1be000dc20) at ./plugins/linux-alsa/alsa-input.c:574
574 ./plugins/linux-alsa/alsa-input.c: Datei oder Verzeichnis nicht gefunden.
(gdb) print/x $rsp
$10 = 0x7f1aacff81f0
(gdb) up
#10 0x00007f1bf0c26ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
477 pthread_create.c: Datei oder Verzeichnis nicht gefunden.
(gdb) print/x $rsp
$11 = 0x7f1aacff8280
(gdb) up
#11 0x00007f1bf0b56d4f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
95 ../sysdeps/unix/sysv/linux/x86_64/clone.S: Datei oder Verzeichnis nicht gefunden.
(gdb) print/x $rsp
$12 = 0x7f1aacff8340
(gdb) up
Initial frame selected; you cannot go up.
--> bogus value in $rsp ???
gdb -q --args obs
set width 0
set pagination off
directory /home/benutzer/source/libcodec2-0.9/orig/codec2-0.9.2
directory /home/benutzer/source/obs-studio/orig/obs-studio-26.0.2+dfsg1
display/i $pc
display/x $rsp
b pitch_downsample
y
run
next
step
160 _celt_autocorr(x_lp, ac, NULL, 0,
1: x/i $pc
=> 0x7ffff277ed1d <pitch_downsample+45>: lea 0x20(%rsp),%r12
2: /x $rsp = 0x7fff1f7f37a0
(gdb) step
0x00007ffff277e9be in _celt_autocorr (x=<optimized out>, ac=<optimized out>, window=<optimized out>, overlap=<optimized out>, lag=<optimized out>, n=<optimized out>) at ./lpcnet/src/celt_lpc.c:209
209 {
1: x/i $pc
=> 0x7ffff277e9be <_celt_autocorr+14>: push %r13
2: /x $rsp = 0x7fff1f7f3780
(gdb) next
[Thread 0x7fffe9187700 (LWP 5610) exited]
[Thread 0x7fffe9988700 (LWP 5609) exited]
[Thread 0x7fffea189700 (LWP 5608) exited]
[Thread 0x7fffea98a700 (LWP 5607) exited]
215 opus_val16 xx[n];
1: x/i $pc
=> 0x7ffff277e9e3 <_celt_autocorr+51>: lea 0xf(%rdx),%rax
2: /x $rsp = 0x7fff1f7f3740
(gdb) stepi
0x00007ffff277e9e7 215 opus_val16 xx[n];
1: x/i $pc
=> 0x7ffff277e9e7 <_celt_autocorr+55>: and $0xfffffffffffffff0,%rax
2: /x $rsp = 0x7fff1f7f3740
(gdb) bt
#0 0x00007ffff277e9e7 in _celt_autocorr (x=<optimized out>, ac=<optimized out>, window=<optimized out>, overlap=<optimized out>, lag=<optimized out>, n=<optimized out>) at ./lpcnet/src/celt_lpc.c:215
#1 0x00007ffff277ed2a in pitch_downsample (x_lp=x_lp@entry=0x7fff1f7f38e8, len=len@entry=528435664) at ./lpcnet/src/pitch.c:160
#2 0x00007fff24330006 in compute_frame_features (in=0x7fff1f7f3ac0, features=0x7fff1f7f3a10, Exp=0x7fff1f7f39b0, Ep=0x7fff1f7f3950, Ex=0x7fff1f7f38f0, P=0x7fff1f7f7560, X=0x7fff1f7f6650, st=0x555556cac720) at ./plugins/obs-filters/rnnoise/src/denoise.c:326
#3 rnnoise_process_frame (st=0x555556cac720, out=<optimized out>, in=<optimized out>) at ./plugins/obs-filters/rnnoise/src/denoise.c:471
#4 0x00007fff24342f4c in process_rnnoise (ng=0x555556c4e980) at ./plugins/obs-filters/noise-suppress-filter.c:343
#5 process (ng=<optimized out>) at ./plugins/obs-filters/noise-suppress-filter.c:392
#6 noise_suppress_filter_audio (data=0x555556c4e980, audio=<optimized out>) at ./plugins/obs-filters/noise-suppress-filter.c:468
#7 0x00007ffff5c84b8b in filter_async_audio (in=<optimized out>, source=0x55555691a480) at ./libobs/obs-source.c:3068
#8 obs_source_output_audio (source=0x55555691a480, audio=audio@entry=0x7fff1f7fd1f0) at ./libobs/obs-source.c:3246
#9 0x00007fffd0006774 in _alsa_listen (attr=0x5555565a4b20) at ./plugins/linux-alsa/alsa-input.c:574
#10 0x00007ffff4cc0ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#11 0x00007ffff4bf0d4f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
(gdb) stepi
0x00007ffff277e9eb 215 opus_val16 xx[n];
1: x/i $pc
=> 0x7ffff277e9eb <_celt_autocorr+59>: sub %rax,%rsp
2: /x $rsp = 0x7fff1f7f3740
(gdb)
216 celt_assert(n>0);
1: x/i $pc
=> 0x7ffff277e9ee <_celt_autocorr+62>: test %r12d,%r12d
2: /x $rsp = 0x7ffea1821000
(gdb) print/x $rax
$1 = 0x7dfd2740
(gdb) disassemble _celt_autocorr
Dump of assembler code for function _celt_autocorr:
0x00007ffff277e9b0 <+0>: push %rbp
0x00007ffff277e9b1 <+1>: mov %rsp,%rbp
0x00007ffff277e9b4 <+4>: push %r15
0x00007ffff277e9b6 <+6>: push %r14
0x00007ffff277e9b8 <+8>: mov %rdx,%r14
0x00007ffff277e9bb <+11>: movslq %r9d,%rdx
0x00007ffff277e9be <+14>: push %r13
0x00007ffff277e9c0 <+16>: mov %edx,%r15d
0x00007ffff277e9c3 <+19>: push %r12
0x00007ffff277e9c5 <+21>: mov %rdx,%r12
0x00007ffff277e9c8 <+24>: shl $0x2,%rdx
0x00007ffff277e9cc <+28>: sub %r8d,%r15d
0x00007ffff277e9cf <+31>: push %rbx
0x00007ffff277e9d0 <+32>: sub $0x28,%rsp
0x00007ffff277e9d4 <+36>: mov %fs:0x28,%rax
0x00007ffff277e9dd <+45>: mov %rax,-0x38(%rbp)
0x00007ffff277e9e1 <+49>: xor %eax,%eax
0x00007ffff277e9e3 <+51>: lea 0xf(%rdx),%rax
0x00007ffff277e9e7 <+55>: and $0xfffffffffffffff0,%rax
0x00007ffff277e9eb <+59>: sub %rax,%rsp
=> 0x00007ffff277e9ee <+62>: test %r12d,%r12d
0x00007ffff277e9f1 <+65>: jle 0x7ffff277eb5e <_celt_autocorr+430>
0x00007ffff277e9f7 <+71>: test %ecx,%ecx
.
(gdb) list
201
202 int _celt_autocorr(
203 const opus_val16 *x, /* in: [0...n-1] samples x */
204 opus_val32 *ac, /* out: [0...lag-1] ac values */
205 const opus_val16 *window,
206 int overlap,
207 int lag,
208 int n)
209 {
210 opus_val32 d;
211 int i, k;
212 int fastN=n-lag;
213 int shift;
214 const opus_val16 *xptr;
215 opus_val16 xx[n];
216 celt_assert(n>0);
217 celt_assert(overlap>=0);
218 if (overlap == 0)
219 {
220 xptr = x;
221 } else {
222 for (i=0;i<n;i++)
223 xx[i] = x[i];
224 for (i=0;i<overlap;i++)
225 {
226 xx[i] = MULT16_16_Q15(x[i],window[i]);
227 xx[n-i-1] = MULT16_16_Q15(x[n-i-1],window[i]);
228 }
229 xptr = xx;
230 }
231 shift=0;
232 celt_pitch_xcorr(xptr, xptr, ac, fastN, lag+1);
233 for (k=0;k<=lag;k++)
234 {
235 for (i = k+fastN, d = 0; i < n; i++)
236 d = MAC16_16(d, xptr[i], xptr[i-k]);
237 ac[k] += d;
238 }
239 return shift;
240 }
(gdb) up
#1 0x00007ffff277ed2a in pitch_downsample (x_lp=x_lp@entry=0x7fff1f7f38e8, len=len@entry=528435664) at ./lpcnet/src/pitch.c:160
160 _celt_autocorr(x_lp, ac, NULL, 0,
(gdb) print len
$2 = 528435664
(gdb) print/x len
$3 = 0x1f7f49d0
(gdb) down
#0 _celt_autocorr (x=<optimized out>, ac=<optimized out>, window=<optimized out>, overlap=<optimized out>, lag=<optimized out>, n=<optimized out>) at ./lpcnet/src/celt_lpc.c:216
216 celt_assert(n>0);
(gdb) print/x sizeof(opus_val16)
$4 = 0x4
(gdb) print/x sizeof(opus_val16) * 0x1f7f49d0
$5 = 0x7dfd2740
(gdb) print sizeof(opus_val16) * 0x1f7f49d0
$6 = 2113742656
(gdb) print sizeof(opus_val16) * 0x1f7f49d0 / 1024
$7 = 2064201
(gdb) print sizeof(opus_val16) * 0x1f7f49d0 / 1024 / 1024
$8 = 2015
... tries to allocate 2015 MB on the stack in line 215 ???
(gdb) list lpcnet/src/pitch.c:149
144 mem[3]=mem3;
145 mem[4]=mem4;
146 }
147
148
149 void pitch_downsample(opus_val16 *x_lp,
150 int len)
151 {
152 int i;
153 opus_val32 ac[5];
(gdb) list plugins/obs-filters/rnnoise/src/denoise.c:307,327
307
308 static int compute_frame_features(DenoiseState *st, kiss_fft_cpx *X, kiss_fft_cpx *P,
309 float *Ex, float *Ep, float *Exp, float *features, const float *in) {
310 int i;
311 float E = 0;
312 float *ceps_0, *ceps_1, *ceps_2;
313 float spec_variability = 0;
314 float Ly[NB_BANDS];
315 float p[WINDOW_SIZE];
316 float pitch_buf[PITCH_BUF_SIZE>>1];
317 int pitch_index;
318 float gain;
319 float *(pre[1]);
320 float tmp[NB_BANDS];
321 float follow, logMax;
322 frame_analysis(st, X, Ex, in);
323 RNN_MOVE(st->pitch_buf, &st->pitch_buf[FRAME_SIZE], PITCH_BUF_SIZE-FRAME_SIZE);
324 RNN_COPY(&st->pitch_buf[PITCH_BUF_SIZE-FRAME_SIZE], in, FRAME_SIZE);
325 pre[0] = &st->pitch_buf[0];
326 pitch_downsample(pre, pitch_buf, PITCH_BUF_SIZE, 1);
327 pitch_search(pitch_buf+(PITCH_MAX_PERIOD>>1), pitch_buf, PITCH_FRAME_SIZE,
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/obs-plugins/obs-filters.so obs
nm -D /lib/x86_64-linux-gnu/libcodec2.so.0.9 | cut -c 20- | sort > /tmp/libcodec2.so.txt
nm -D /usr/lib/x86_64-linux-gnu/obs-plugins/obs-filters.so | cut -c 20- | sort > /tmp/obs-filters.so.txt
comm -12 /tmp/obs-filters.so.txt /tmp/libcodec2.so.txt | grep -v GLIBC_
_celt_autocorr
celt_fir
celt_iir
_celt_lpc
celt_pitch_xcorr
common
compute_band_corr
compute_band_energy
__gmon_start__
interp_band_gain
_ITM_deregisterTMCloneTable
_ITM_registerTMCloneTable
opus_fft_alloc
opus_fft_alloc_arch_c
opus_fft_alloc_twiddles
opus_fft_c
opus_fft_free
opus_fft_free_arch_c
opus_fft_impl
opus_ifft_c
pitch_downsample
pitch_search
remove_doubling
Reply to: