Opened 11 years ago

Closed 10 years ago

#2760 closed defect (fixed)

prores_ks encoder segfaults encoding image with alpha

Reported by: MarkZV Owned by:
Priority: important Component: avcodec
Version: git-master Keywords: prores alpha crash SIGSEGV
Cc: christophe.gisquet@gmail.com Blocked By:
Blocking: Reproduced by developer: yes
Analyzed by developer: yes

Description

A segmentation fault is encountered encoding a png with alpha to prores using prores_ks. The issue can be reproduced using git master and this png input file (resized to 480x480): http://ffmpeg.org/favicon.png

$ ffmpeg -v 9 -loglevel 99 -i x.png -s 480x480 -c:v prores_ks -y out.mov
ffmpeg version 1.1.git-44d0e52 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jul  7 2013 21:14:56 with gcc 4.2.1 (GCC) (Apple Inc. build 5666) (dot 3)
  configuration: --prefix=/opt/local --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-libtheora --enable-libschroedinger --enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libspeex --enable-libass --enable-libbluray --enable-gnutls --enable-libfreetype --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/gcc-4.2 --arch=x86_64 --enable-yasm --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-nonfree --enable-libfdk-aac --enable-libfaac
  libavutil      52. 38.100 / 52. 38.100
  libavcodec     55. 18.102 / 55. 18.102
  libavformat    55. 11.101 / 55. 11.101
  libavdevice    55.  2.100 / 55.  2.100
  libavfilter     3. 78.103 /  3. 78.103
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  3.100 / 52.  3.100
Splitting the commandline.
Reading option '-v' ... matched as option 'v' (set logging level) with argument '9'.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument '99'.
Reading option '-i' ... matched as input file with argument 'x.png'.
Reading option '-s' ... matched as option 's' (set frame size (WxH or abbreviation)) with argument '480x480'.
Reading option '-c:v' ... matched as option 'c' (codec name) with argument 'prores_ks'.
Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
Reading option 'out.mov' ... matched as output file.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set logging level) with argument 9.
Applying option y (overwrite output files) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input file x.png.
Successfully parsed a group of options.
Opening an input file: x.png.
[AVIOContext @ 0x1025226a0] Statistics: 855 bytes read, 0 seeks
Input #0, image2, from 'x.png':
  Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
    Stream #0:0, 1, 1/25: Video: png, rgba, 16x16, 1/25, 25 tbr, 25 tbn, 25 tbc
Successfully opened the file.
Parsing a group of options: output file out.mov.
Applying option s (set frame size (WxH or abbreviation)) with argument 480x480.
Applying option c:v (codec name) with argument prores_ks.
Successfully parsed a group of options.
Opening an output file: out.mov.
Successfully opened the file.
detected 4 logical cores
[graph 0 input from stream 0:0 @ 0x1033003a0] Setting 'video_size' to value '16x16'
[graph 0 input from stream 0:0 @ 0x1033003a0] Setting 'pix_fmt' to value '28'
[graph 0 input from stream 0:0 @ 0x1033003a0] Setting 'time_base' to value '1/25'
[graph 0 input from stream 0:0 @ 0x1033003a0] Setting 'pixel_aspect' to value '0/1'
[graph 0 input from stream 0:0 @ 0x1033003a0] Setting 'sws_param' to value 'flags=2'
[graph 0 input from stream 0:0 @ 0x1033003a0] Setting 'frame_rate' to value '25/1'
[graph 0 input from stream 0:0 @ 0x1033003a0] w:16 h:16 pixfmt:rgba tb:1/25 fr:25/1 sar:0/1 sws_param:flags=2
[scaler for output stream 0:0 @ 0x103300960] Setting 'w' to value '480'
[scaler for output stream 0:0 @ 0x103300960] Setting 'h' to value '480'
[scaler for output stream 0:0 @ 0x103300960] Setting 'flags' to value '0x4'
[scaler for output stream 0:0 @ 0x103300960] w:480 h:480 flags:'0x4' interl:0
[format @ 0x103300e60] compat: called with args=[yuv422p10le|yuv444p10le|yuva444p10le]
[format @ 0x103300e60] Setting 'pix_fmts' to value 'yuv422p10le|yuv444p10le|yuva444p10le'
[AVFilterGraph @ 0x102521920] query_formats: 5 queried, 4 merged, 0 already done, 0 delayed
[scaler for output stream 0:0 @ 0x103300960] picking yuva444p10le out of 3 ref:rgba alpha:1
[scaler for output stream 0:0 @ 0x103300960] w:16 h:16 fmt:rgba sar:0/1 -> w:480 h:480 fmt:yuva444p10le sar:0/1 flags:0x4
[prores_ks @ 0x10280f400] profile 2, 150 slices, interlacing: no, 1050 bits per MB
[prores_ks @ 0x10280f400] frame size upper bound: 159200
Output #0, mov, to 'out.mov':
  Metadata:
    encoder         : Lavf55.11.101
    Stream #0:0, 0, 1/12800: Video: prores (prores_ks) (apcn / 0x6E637061), yuva444p10le, 480x480, 1/25, q=2-31, 200 kb/s, 12800 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png -> prores_ks)
Press [q] to stop, [?] for help
Segmentation fault
$

A debug version of ffmpeg with assertions enabled produces the following assertion:

Assertion s->buf_ptr+3<s->buf_end failed at libavcodec/put_bits.h:168

Program received signal SIGABRT, Aborted.
0x00007fff87f720b6 in __kill ()
(gdb) bt
#0  0x00007fff87f720b6 in __kill ()
#1  0x00007fff880129f6 in abort ()
#2  0x0000000100876368 in put_bits (s=0x7fff5fbfeb30, n=9, value=493) at put_bits.h:168
#3  0x0000000100876bef in encode_vlc_codeword (pb=0x7fff5fbfeb30, codebook=112, val=493) at libavcodec/proresenc_kostya.c:344
#4  0x0000000100876b09 in encode_dcs (pb=0x7fff5fbfeb30, blocks=0x103065510, blocks_per_slice=8, scale=24) at libavcodec/proresenc_kostya.c:377
#5  0x0000000100876e88 in encode_slice_plane (ctx=0x103065400, pb=0x7fff5fbfeb30, src=0x103b49b80, linesize=960, mbs_per_slice=2, blocks=0x103065410, blocks_per_mb=4, plane_size_factor=3, qmat=0x103069910) at libavcodec/proresenc_kostya.c:430
#6  0x0000000100877555 in encode_slice (avctx=0x10300f400, pic=0x103d00000, pb=0x7fff5fbfeb30, sizes=0x7fff5fbfeb60, x=28, y=18, quant=6, mbs_per_slice=2) at libavcodec/proresenc_kostya.c:560
#7  0x00000001008792d3 in encode_frame (avctx=0x10300f400, pkt=0x7fff5fbfee50, pic=0x103d00000, got_packet=0x7fff5fbfeef8) at libavcodec/proresenc_kostya.c:1022
#8  0x0000000100951026 in avcodec_encode_video2 (avctx=0x10300f400, avpkt=0x7fff5fbfee50, frame=0x103d00000, got_packet_ptr=0x7fff5fbfeef8) at libavcodec/utils.c:1756
#9  0x0000000100012001 in do_video_out (s=0x10300ee00, ost=0x102b22b40, in_picture=0x103d00000) at ffmpeg.c:946
#10 0x000000010001297d in reap_filters () at ffmpeg.c:1090
#11 0x000000010001c649 in transcode_step () at ffmpeg.c:3168
#12 0x000000010001c705 in transcode () at ffmpeg.c:3211
#13 0x000000010001cbef in main (argc=13, argv=0x7fff5fbff158) at ffmpeg.c:3389

Change History (2)

comment:1 by Carl Eugen Hoyos, 11 years ago

Keywords: SIGSEGV added
Priority: normalimportant
Reproduced by developer: set
Status: newopen

comment:2 by Christophe, 10 years ago

Analyzed by developer: set
Cc: christophe.gisquet@gmail.com added
Resolution: fixed
Status: openclosed
Note: See TracTickets for help on using tickets.