Opened 14 years ago

Closed 14 years ago

#197 closed defect (fixed)

Multi-threaded decoding with -threads results in seg fault

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

Description

Successful decoding with -threads 1:

$ ffmpeg -v 9 -loglevel 99 -vsync 0 -threads 1 -i test.mkv -f null -vcodec rawvideo -an -
ffmpeg version git-N-29906-ge3114a9, Copyright (c) 2000-2011 the FFmpeg developers
  built on May 13 2011 12:18:50 with gcc 4.5.2
  configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libvpx --enable-libvorbis --enable-libx264 --enable-x11grab --enable-shared
  libavutil    51.  2. 1 / 51.  2. 1
  libavcodec   53.  5. 0 / 53.  5. 0
  libavformat  53.  0. 3 / 53.  0. 3
  libavdevice  53.  0. 0 / 53.  0. 0
  libavfilter   2.  5. 0 /  2.  5. 0
  libswscale    0. 14. 0 /  0. 14. 0
  libpostproc  51.  2. 0 / 51.  2. 0
[NULL @ 0x1d0ed40] Format matroska,webm probed with size=2048 and score=100
st:0 removing common factor 1000000 from timebase
[h264 @ 0x1d11800] Unsupported bit depth: 0
[h264 @ 0x1d11800] no picture
    Last message repeated 1 times
[matroska,webm @ 0x1d0ed40] All info found
[matroska,webm @ 0x1d0ed40] Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 2000.00 (2000/1) -> 29.97 (30000/1001)
Input #0, matroska,webm, from 'test.mkv':
  Duration: 00:01:59.48, start: 0.000000, bitrate: N/A
    Stream #0.0(eng), 43, 1/1000: Video: h264 (High), yuv420p, 720x480, 1/2000, PAR 1:1 DAR 3:2, 29.97 tbr, 1k tbn, 2k tbc (default)
[buffer @ 0x1d170e0] w:720 h:480 pixfmt:yuv420p tb:1/1000000 sar:1/1
Output #0, null, to 'pipe:':
  Metadata:
    encoder         : Lavf53.0.3
    Stream #0.0(eng), 0, 1/90000: Video: rawvideo, yuv420p, 720x480 [PAR 1:1 DAR 3:2], 1001/30000, q=2-31, 200 kb/s, 90k tbn, 29.97 tbc (default)
Stream mapping:
  Stream #0.0 -> #0.0
Press [q] to stop encoding
[h264 @ 0x1d11800] no picture
    Last message repeated 1 times    -0kB time=114.61 bitrate=  -0.0kbits/s    
frame= 3582 fps=423 q=0.0 Lsize=      -0kB time=119.52 bitrate=  -0.0kbits/s    
video:0kB audio:0kB global headers:0kB muxing overhead -inf%

Decoding with anything above -threads 1 results seg fault:

$ ffmpeg -v 9 -loglevel 99 -vsync 0 -threads 2 -i test.mkv -f null -vcodec rawvideo -an -
ffmpeg version git-N-29906-ge3114a9, Copyright (c) 2000-2011 the FFmpeg developers
  built on May 13 2011 12:18:50 with gcc 4.5.2
  configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libvpx --enable-libvorbis --enable-libx264 --enable-x11grab --enable-shared
  libavutil    51.  2. 1 / 51.  2. 1
  libavcodec   53.  5. 0 / 53.  5. 0
  libavformat  53.  0. 3 / 53.  0. 3
  libavdevice  53.  0. 0 / 53.  0. 0
  libavfilter   2.  5. 0 /  2.  5. 0
  libswscale    0. 14. 0 /  0. 14. 0
  libpostproc  51.  2. 0 / 51.  2. 0
[NULL @ 0x223dd40] Format matroska,webm probed with size=2048 and score=100
st:0 removing common factor 1000000 from timebase
[h264 @ 0x2240800] Unsupported bit depth: 0
[h264 @ 0x2240800] no picture
    Last message repeated 1 times
[matroska,webm @ 0x223dd40] All info found
[matroska,webm @ 0x223dd40] Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 2000.00 (2000/1) -> 29.97 (30000/1001)
Input #0, matroska,webm, from 'test.mkv':
  Duration: 00:01:59.48, start: 0.000000, bitrate: N/A
    Stream #0.0(eng), 43, 1/1000: Video: h264 (High), yuv420p, 720x480, 1/2000, PAR 1:1 DAR 3:2, 29.97 tbr, 1k tbn, 2k tbc (default)
[buffer @ 0x22460e0] w:720 h:480 pixfmt:yuv420p tb:1/1000000 sar:1/1
Output #0, null, to 'pipe:':
  Metadata:
    encoder         : Lavf53.0.3
    Stream #0.0(eng), 0, 1/90000: Video: rawvideo, yuv420p, 720x480 [PAR 1:1 DAR 3:2], 1001/30000, q=2-31, 200 kb/s, 90k tbn, 29.97 tbc (default)
Stream mapping:
  Stream #0.0 -> #0.0
Press [q] to stop encoding
[h264 @ 0x22440e0] no picture
[h264 @ 0x22445c0] no picture
Segmentation fault

gdb with ffmpeg_g:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff5b03436 in vfprintf () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) bt
#0  0x00007ffff5b03436 in vfprintf () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007ffff5bb8780 in __vsnprintf_chk () from /lib/x86_64-linux-gnu/libc.so.6
#2  0x00007ffff62fe466 in av_log_default_callback () from /usr/local/lib/libavutil.so.51
#3  0x00007ffff62fe8d6 in av_log () from /usr/local/lib/libavutil.so.51
#4  0x00007ffff79b5ca1 in av_vsrc_buffer_add_frame2 () from /usr/local/lib/libavfilter.so.2
#5  0x0000000000406075 in output_packet (ist=<value optimized out>, ist_index=0, ost_table=0x640420, 
    nb_ostreams=1, pkt=<value optimized out>) at ffmpeg.c:1653
#6  0x000000000040b22e in transcode (nb_output_files=1, nb_input_files=1, stream_maps=0x0, 
    nb_stream_maps=-11728, input_files=0x619b20, output_files=0x619800) at ffmpeg.c:2710
#7  0x000000000041057c in main (argc=<value optimized out>, argv=<value optimized out>) at ffmpeg.c:4514
(gdb) disass $pc-32 $pc+32
A syntax error in expression, near `$pc+32'.
(gdb) info all-registers
rax            0x0	0
rbx            0x7fffffffc420	140737488340000
rcx            0xffffffffffffffff	-1
rdx            0x7fffffffcaf8	140737488341752
rsi            0x7ffff79bd3e5	140737347572709
rdi            0x43800000780	4638564681600
rbp            0x7fffffffc410	0x7fffffffc410
rsp            0x7fffffffbd90	0x7fffffffbd90
r8             0x7fffffffc2c8	140737488339656
r9             0x0	0
r10            0x206d6f7266206465	2336646318805509221
r11            0x7ffff5bb8650	140737316095568
r12            0x49	73
r13            0x7fffffffca00	140737488341504
r14            0x7ffff79bd3a0	140737347572640
r15            0xffffffffffffff80	-128
rip            0x7ffff5b03436	0x7ffff5b03436 <vfprintf+7126>
eflags         0x10246	[ PF ZF IF RF ]
cs             0x33	51
ss             0x2b	43
ds             0x0	0
es             0x0	0
fs             0x0	0
gs             0x0	0
st0            -inf	(raw 0xffff0000000000000000)
st1            -inf	(raw 0xffff0000000000000000)
st2            -inf	(raw 0xffff0000000000000000)
st3            -inf	(raw 0xffff0000000000000000)
st4            -inf	(raw 0xffff0000000000000000)
st5            -nan(0x606060606060606)	(raw 0xffff0606060606060606)
st6            -nan(0x303030303030303)	(raw 0xffff0303030303030303)
st7            -nan(0x101010101010101)	(raw 0xffff0101010101010101)
fctrl          0x37f	895
fstat          0x0	0
ftag           0xffff	65535
fiseg          0x0	0
fioff          0x0	0
foseg          0x0	0
---Type <return> to continue, or q <return> to quit---
fooff          0x0	0
fop            0x0	0
xmm0           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0, 0x0, 0x0, 0x0, 
    0xff, 0x0 <repeats 11 times>}, v8_int16 = {0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 
    0xff, 0x0, 0x0}, v2_int64 = {0xff00000000, 0x0}, uint128 = 0x0000000000000000000000ff00000000}
xmm1           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {
    0x25 <repeats 16 times>}, v8_int16 = {0x2525, 0x2525, 0x2525, 0x2525, 0x2525, 0x2525, 0x2525, 0x2525}, 
  v4_int32 = {0x25252525, 0x25252525, 0x25252525, 0x25252525}, v2_int64 = {0x2525252525252525, 
    0x2525252525252525}, uint128 = 0x25252525252525252525252525252525}
xmm2           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {
    0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 
    0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}
xmm3           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x8000000000000000, 0x0}, v16_int8 = {0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 
    0xff00, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0xff000000, 0x0, 0x0}, v2_int64 = {0xff00000000000000, 
    0x0}, uint128 = 0x0000000000000000ff00000000000000}
xmm4           {v4_float = {0x0, 0x7, 0x0, 0x0}, v2_double = {0x15f90, 0x8000000000000000}, v16_int8 = {0x0, 
    0x0, 0x0, 0x0, 0x0, 0xf9, 0xf5, 0x40, 0x20, 0x62, 0x69, 0x63, 0x75, 0x62, 0x69, 0x63}, v8_int16 = {0x0, 
    0x0, 0xf900, 0x40f5, 0x6220, 0x6369, 0x6275, 0x6369}, v4_int32 = {0x0, 0x40f5f900, 0x63696220, 
    0x63696275}, v2_int64 = {0x40f5f90000000000, 0x6369627563696220}, 
  uint128 = 0x636962756369622040f5f90000000000}
xmm5           {v4_float = {0x0, 0x1, 0x0, 0x0}, v2_double = {0x1, 0x0}, v16_int8 = {0x6d, 0x7d, 0xbf, 0xbb, 
    0x27, 0xaf, 0xf5, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x7d6d, 0xbbbf, 0xaf27, 
    0x3ff5, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0xbbbf7d6d, 0x3ff5af27, 0x0, 0x0}, v2_int64 = {
    0x3ff5af27bbbf7d6d, 0x0}, uint128 = 0x00000000000000003ff5af27bbbf7d6d}
xmm6           {v4_float = {0x0, 0xfffffffd, 0x0, 0x0}, v2_double = {0xffffffffffffffd2, 0x0}, v16_int8 = {
    0x5b, 0xaa, 0xa2, 0x2a, 0x9e, 0x6, 0x47, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {
    0xaa5b, 0x2aa2, 0x69e, 0xc047, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x2aa2aa5b, 0xc047069e, 0x0, 0x0}, 
  v2_int64 = {0xc047069e2aa2aa5b, 0x0}, uint128 = 0x0000000000000000c047069e2aa2aa5b}
xmm7           {v4_float = {0x0, 0x1, 0x0, 0x0}, v2_double = {0x1, 0x0}, v16_int8 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0xf0, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x3ff0, 0x0, 
    0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x3ff00000, 0x0, 0x0}, v2_int64 = {0x3ff0000000000000, 0x0}, 
  uint128 = 0x00000000000000003ff0000000000000}
xmm8           {v4_float = {0x0, 0xfffffffd, 0x0, 0x0}, v2_double = {0xffffffffffffffd2, 0x0}, v16_int8 = {
    0xe0, 0xe6, 0x35, 0x67, 0x9e, 0x6, 0x47, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {
    0xe6e0, 0x6735, 0x69e, 0xc047, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x6735e6e0, 0xc047069e, 0x0, 0x0}, 
  v2_int64 = {0xc047069e6735e6e0, 0x0}, uint128 = 0x0000000000000000c047069e6735e6e0}
xmm9           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0, 0x0, 0x0, 0x0, 
---Type <return> to continue, or q <return> to quit---
    0x68, 0xc8, 0xbc, 0x3b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 0xc868, 0x3bbc, 
    0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x3bbcc868, 0x0, 0x0}, v2_int64 = {0x3bbcc86800000000, 0x0}, 
  uint128 = 0x00000000000000003bbcc86800000000}
xmm10          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0, 0x0, 0x46, 0x84, 
    0x24, 0x59, 0xd6, 0x3e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x8446, 0x5924, 
    0x3ed6, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x84460000, 0x3ed65924, 0x0, 0x0}, v2_int64 = {
    0x3ed6592484460000, 0x0}, uint128 = 0x00000000000000003ed6592484460000}
xmm11          {v4_float = {0x9689a800, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x6a, 0xa2, 
    0x65, 0x50, 0xf2, 0xea, 0x8f, 0xbd, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0}, v8_int16 = {0xa26a, 
    0x5065, 0xeaf2, 0xbd8f, 0x0, 0xff00, 0xff, 0x0}, v4_int32 = {0x5065a26a, 0xbd8feaf2, 0xff000000, 0xff}, 
  v2_int64 = {0xbd8feaf25065a26a, 0xffff000000}, uint128 = 0x000000ffff000000bd8feaf25065a26a}
xmm12          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0xc4, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x3cc4, 0x0, 
    0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x3cc40000, 0x0, 0x0}, v2_int64 = {0x3cc4000000000000, 0x0}, 
  uint128 = 0x00000000000000003cc4000000000000}
xmm13          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x80, 0x59, 0xbc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 0x8000, 0xbc59, 
    0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0xbc598000, 0x0, 0x0}, v2_int64 = {0xbc59800000000000, 0x0}, 
  uint128 = 0x0000000000000000bc59800000000000}
xmm14          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x8e, 0x85, 0x83, 0xe8, 
    0xf0, 0x24, 0x53, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x858e, 0xe883, 0x24f0, 
    0x3c53, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0xe883858e, 0x3c5324f0, 0x0, 0x0}, v2_int64 = {
    0x3c5324f0e883858e, 0x0}, uint128 = 0x00000000000000003c5324f0e883858e}
xmm15          {v4_float = {0x0, 0x3, 0x0, 0x0}, v2_double = {0x2d, 0x0}, v16_int8 = {0xc0, 0x9, 0xf2, 0x16, 
    0xb5, 0xdf, 0x46, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x9c0, 0x16f2, 0xdfb5, 
    0x4046, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x16f209c0, 0x4046dfb5, 0x0, 0x0}, v2_int64 = {
    0x4046dfb516f209c0, 0x0}, uint128 = 0x00000000000000004046dfb516f209c0}
mxcsr          0x1fa5	[ IE ZE PE IM DM ZM OM UM PM ]

Change History (2)

comment:1 by Carl Eugen Hoyos, 14 years ago

Keywords: regression added
Priority: normalimportant
Reproduced by developer: set
Status: newopen
Version: unspecifiedgit-master

comment:2 by Michael Niedermayer, 14 years ago

Component: undeterminedavcodec
Resolution: fixed
Status: openclosed
Note: See TracTickets for help on using tickets.