Opened 6 years ago

Closed 6 years ago

Last modified 6 years ago

#7241 closed defect (fixed)

DNxHD segfault on completion in dnxhd_encode_end when using 34 or more threads

Reported by: gammie Owned by:
Priority: important Component: avcodec
Version: git-master Keywords: DNxHD crash SIGSEGV regression
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:
If you run an encode to DNxHD with 34 or more threads, you cause a segfault on attempting av_freep(&ctx->thread[33]). I believe this is related to #6592 and its solution 28e9ba951d1a0b0aca53b242aa64f484ca75e874 which are both associated with the addition of frame threading in the DNxHD encoder. I have reproduced this issue on today's git-master (04b570817b2b38e35675b17328239746212f4c3f) and n4.0. This issue does not occur in n3.0 where the encoder works fine with 48 threads.

How to reproduce:

ffmpeg -f lavfi -i testsrc=duration=1:size=1280x720:rate=60000/1001 -vcodec dnxhd -b:v 145M -pix_fmt yuv422p -threads 34 -f mxf /dev/null

ffmpeg version N-91202-g04b5708 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  configuration: --enable-static --disable-shared --disable-ffplay --disable-doc --extra-cflags=-static --extra-libs='-lpng -lm -ldl -lpthread' --enable-gpl --enable-bzlib --enable-zlib --enable-postproc --enable-runtime-cpudetect --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-version3 --extra-ldflags=-static --pkg-config-flags=--static
  libavutil      56. 18.102 / 56. 18.102
  libavcodec     58. 19.104 / 58. 19.104
  libavformat    58. 17.100 / 58. 17.100
  libavdevice    58.  4.100 / 58.  4.100
  libavfilter     7. 24.100 /  7. 24.100
  libswscale      5.  2.100 /  5.  2.100
  libswresample   3.  2.100 /  3.  2.100
  libpostproc    55.  2.100 / 55.  2.100
Input #0, lavfi, from 'testsrc=duration=1:size=1280x720:rate=60000/1001':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 1280x720 [SAR 1:1 DAR 16:9], 59.94 tbr, 59.94 tbn, 59.94 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> dnxhd (native))
Press [q] to stop, [?] for help
Output #0, mxf, to '/dev/null':
  Metadata:
    encoder         : Lavf58.17.100
    Stream #0:0: Video: dnxhd (DNXHD), yuv422p, 1280x720 [SAR 1:1 DAR 16:9], q=2-1024, 145000 kb/s, 59.94 fps, 59.94 tbn, 59.94 tbc
    Metadata:
      encoder         : Lavc58.19.104 dnxhd
[Parsed_testsrc_0 @ 0x4531f00] EOF timestamp not reliable
frame=   60 fps= 57 q=1.0 Lsize=   17826kB time=00:00:01.00 bitrate=145885.1kbits/s speed=0.95x    
video:17760kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.371869%
Segmentation fault
Program received signal SIGSEGV, Segmentation fault.
0x00000000012b0449 in free ()
(gdb) bt
#0  0x00000000012b0449 in free ()
#1  0x0000000001095942 in av_free (ptr=<optimized out>) at libavutil/mem.c:223
#2  av_freep (arg=<optimized out>) at libavutil/mem.c:233
#3  0x0000000000421a71 in dnxhd_encode_end (avctx=0x2629bc0) at libavcodec/dnxhdenc.c:1373
#4  0x0000000000449740 in avcodec_close (avctx=avctx@entry=0x2629bc0) at libavcodec/utils.c:1077
#5  0x00000000009fd569 in avcodec_free_context (pavctx=0x26299e0) at libavcodec/options.c:178
#6  0x00000000004a42e0 in ffmpeg_cleanup (ret=0) at fftools/ffmpeg.c:571
#7  0x0000000000492f71 in exit_program (ret=0) at fftools/cmdutils.c:139
#8  0x0000000000484af8 in main (argc=<optimized out>, argv=0x7fffffffe598) at fftools/ffmpeg.c:4855

Change History (2)

comment:1 by Elon Musk, 6 years ago

Resolution: fixed
Status: newclosed

comment:2 by Carl Eugen Hoyos, 6 years ago

Keywords: crash SIGSEGV regression added
Priority: normalimportant
Note: See TracTickets for help on using tickets.