Opened 7 years ago

Closed 6 years ago

#6764 closed defect (fixed)

encoding mono audio with opus codec segfaults

Reported by: James Cowgill Owned by:
Priority: important Component: avcodec
Version: git-master Keywords: opus regression crash
Cc: Blocked By:
Blocking: Reproduced by developer: yes
Analyzed by developer: no

Description

Attempting to encode any mono audio with the opus codec (any mux) causes ffmpeg to segfault. This is a regression in 3.4 (3.3 works).

gdb --args ./ffmpeg_g -f lavfi -i sine=d=0.1 -strict -2 -c:a opus -f null /dev/null
GNU gdb (Debian 7.12-6+b1) 7.12.0.20161007-git
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./ffmpeg_g...done.
(gdb) r
Starting program: /home/jcowgill/deb-pkg/ffmpeg/upstream/ffmpeg_g -f lavfi -i sine=d=0.1 -strict -2 -c:a opus -f null /dev/null
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
ffmpeg version N-87950-g53eea3a569 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 7 (Debian 7.2.0-11)
  configuration: --disable-doc --disable-optimizations --enable-debug --disable-autodetect
  libavutil      55. 79.100 / 55. 79.100
  libavcodec     57.108.101 / 57.108.101
  libavformat    57. 84.101 / 57. 84.101
  libavdevice    57. 11.101 / 57. 11.101
  libavfilter     6.108.100 /  6.108.100
  libswscale      4.  9.100 /  4.  9.100
  libswresample   2. 10.100 /  2. 10.100
[New Thread 0x7ffff6e01700 (LWP 25127)]
[New Thread 0x7ffff6600700 (LWP 25128)]
[New Thread 0x7ffff5dff700 (LWP 25129)]
[New Thread 0x7ffff55fe700 (LWP 25130)]
Input #0, lavfi, from 'sine=d=0.1':
  Duration: N/A, start: 0.000000, bitrate: 705 kb/s
    Stream #0:0: Audio: pcm_s16le, 44100 Hz, mono, s16, 705 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> opus (native))
Press [q] to stop, [?] for help
[New Thread 0x7ffff4dfd700 (LWP 25131)]
[New Thread 0x7ffff45fc700 (LWP 25132)]
[New Thread 0x7ffff3dfb700 (LWP 25133)]
[New Thread 0x7ffff35fa700 (LWP 25134)]
Output #0, null, to '/dev/null':
  Metadata:
    encoder         : Lavf57.84.101
    Stream #0:0: Audio: opus, 48000 Hz, mono, fltp, 48 kb/s
    Metadata:
      encoder         : Lavc57.108.101 opus
[Parsed_sine_0 @ 0x55555772de20] EOF timestamp not reliable

Thread 1 "ffmpeg_g" received signal SIGSEGV, Segmentation fault.
0x000055555652c855 in pvq_band_cost (pvq=0x555557770660, f=0x7ffff7e24040, rc=0x7fffffffd160, band=0, bits=0x7fffffffd15c, lambda=1)
    at libavcodec/opus_pvq.c:928
928	        err_y += (Y[i] - Y_orig[i])*(Y[i] - Y_orig[i]);
(gdb) p Y
$1 = (float *) 0x0
(gdb) bt
#0  0x000055555652c855 in pvq_band_cost (pvq=0x555557770660, f=0x7ffff7e24040, rc=0x7fffffffd160, band=0, bits=0x7fffffffd15c, lambda=1)
    at libavcodec/opus_pvq.c:928
#1  0x0000555555dc7c42 in bands_dist (s=0x555557742e40, f=0x7ffff7e24040, total_dist=0x7fffffffd70c) at libavcodec/opusenc_psy.c:323
#2  0x0000555555dc7d85 in celt_search_for_intensity (s=0x555557742e40, f=0x7ffff7e24040) at libavcodec/opusenc_psy.c:354
#3  0x0000555555dc82b6 in ff_opus_psy_celt_frame_process (s=0x555557742e40, f=0x7ffff7e24040, index=0) at libavcodec/opusenc_psy.c:408
#4  0x0000555555dc3b3b in celt_encode_frame (s=0x555557742e20, rc=0x5555578cc780, f=0x7ffff7e24040, index=0) at libavcodec/opusenc.c:869
#5  0x0000555555dc421b in opus_encode_frame (avctx=0x555557742940, avpkt=0x55555774c180, frame=0x0, got_packet_ptr=0x7fffffffd9ac)
    at libavcodec/opusenc.c:997
#6  0x0000555555b297c8 in avcodec_encode_audio2 (avctx=0x555557742940, avpkt=0x55555774c180, frame=0x0, got_packet_ptr=0x7fffffffd9ac)
    at libavcodec/encode.c:198
#7  0x0000555555b2a312 in do_encode (avctx=0x555557742940, frame=0x0, got_packet=0x7fffffffd9ac) at libavcodec/encode.c:381
#8  0x0000555555b2a4be in avcodec_send_frame (avctx=0x555557742940, frame=0x0) at libavcodec/encode.c:427
#9  0x0000555555636b74 in flush_encoders () at fftools/ffmpeg.c:1931
#10 0x0000555555640d80 in transcode () at fftools/ffmpeg.c:4647
#11 0x0000555555641447 in main (argc=12, argv=0x7fffffffe0f8) at fftools/ffmpeg.c:4830

Change History (4)

comment:1 by Carl Eugen Hoyos, 7 years ago

Keywords: opus regression crash added
Priority: normalimportant
Reproduced by developer: set

comment:2 by colin ng, 6 years ago

It still crashes with the commit "6e0723470bea258ceb72ee4c4916cf8f80337f92" which is supposed to fix the issue.

It crashes at ff_pvq_search_exact_avx () with the above commit.

comment:3 by colin ng, 6 years ago

It still crashes with the commit "6e0723470bea258ceb72ee4c4916cf8f80337f92" which is supposed to fix the issue.

It crashes at ff_pvq_search_exact_avx () with the above commit.

comment:4 by Carl Eugen Hoyos, 6 years ago

Resolution: fixed
Status: newclosed

Swiftly fixed by Rostislav in f141b353e60f1081185927a1e74a9ab46cae8bef

Note: See TracTickets for help on using tickets.