[FFmpeg-trac] #4897(undetermined:new): decklink output driver segfaults

FFmpeg trac at avcodec.org
Thu Oct 1 00:20:54 CEST 2015


#4897: decklink output driver segfaults
-------------------------------------+-------------------------------------
             Reporter:  Sesse        |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:               |                  Version:  git-
  undetermined                       |  master
             Keywords:               |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 Hi,

 I'm using ffmpeg git as of Sep 19 (e3cf97), compiled with --enable-nonfree
 --enable-gpl --enable-decklink --enable-shared --enable-debug --disable-
 stripping. I'm using this command line to try to play files on my SDI
 card:

 {{{
 ./ffmpeg -i file.mp4 -f decklink -pix_fmt uyvy422 -s 1280x720 -r
 60000/1001 -ar 48000 -ac 2 'DeckLink Studio 2'
 }}}

 It works fine with some files, but with most it segfaults. An example of a
 file that segfaults is http://cdn.capped.tv/vhq/cncd_fairlight-
 ceasefire_all_falls_down.mp4. The stack trace looks like this:

 {{{
 Program terminated with signal SIGSEGV, Segmentation fault.
 #0  __memcpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/memcpy-
 sse2-unaligned.S:33
 33      ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S: No such file
 or directory.
 (gdb) bt
 #0  __memcpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/memcpy-
 sse2-unaligned.S:33
 #1  0x00007f4dcd8cb24e in av_image_copy_plane (dst=<optimized out>,
 dst_linesize=2560, src=<optimized out>,
     src_linesize=2560, bytewidth=2560, height=720) at
 libavutil/imgutils.c:282
 #2  0x00007f4dcd8cb3d3 in av_image_copy (dst_data=0x1f15440,
 dst_linesizes=0x1f15480,
     src_data=src_data at entry=0x2035280,
 src_linesizes=src_linesizes at entry=0x20352c0, pix_fmt=AV_PIX_FMT_UYVY422,
     width=1280, height=720) at libavutil/imgutils.c:320
 #3  0x00007f4dcfcbfbcc in decklink_write_video_packet (pkt=0x7ffc6047baa0,
 pkt=0x7ffc6047baa0, avctx=0x1ec3f80)
     at libavdevice/decklink_enc.cpp:237
 #4  ff_decklink_write_packet (avctx=0x1ec3f80, pkt=0x7ffc6047baa0) at
 libavdevice/decklink_enc.cpp:419
 #5  0x00007f4dcf630a1e in write_packet (pkt=0x7ffc6047baa0, s=0x1ec3f80)
 at libavformat/mux.c:660
 #6  av_interleaved_write_frame (s=s at entry=0x1ec3f80, pkt=0x0,
 pkt at entry=0x7ffc6047bdd0) at libavformat/mux.c:970
 #7  0x000000000042018f in write_frame (s=s at entry=0x1ec3f80,
 pkt=pkt at entry=0x7ffc6047bdd0, ost=ost at entry=0x1ec5be0)
     at ffmpeg.c:780
 #8  0x000000000042359b in do_audio_out (frame=<optimized out>,
 ost=0x1ec5be0, s=0x1ec3f80) at ffmpeg.c:858
 #9  reap_filters (flush=flush at entry=0) at ffmpeg.c:1391
 #10 0x0000000000407f61 in transcode_step () at ffmpeg.c:3931
 #11 transcode () at ffmpeg.c:3974
 #12 main (argc=<optimized out>, argv=<optimized out>) at ffmpeg.c:4157
 }}}

 valgrind complains, among others, about these (I've snipped away many more
 that seem less relevant):

 {{{
 ==22881== Source and destination overlap in memcpy(0x2ef2e840, 0x2ef2e840,
 2560)
 ==22881==    at 0x4C2D75D: memcpy@@GLIBC_2.14 (vg_replace_strmem.c:915)
 ==22881==    by 0x741524D: av_image_copy_plane (imgutils.c:282)
 ==22881==    by 0x74153D2: av_image_copy (imgutils.c:320)
 ==22881==    by 0x5051BCB: decklink_write_video_packet
 (decklink_enc.cpp:237)
 ==22881==    by 0x5051BCB: ff_decklink_write_packet (decklink_enc.cpp:419)
 ==22881==    by 0x56B2A1D: write_packet (mux.c:660)
 ==22881==    by 0x56B2A1D: av_interleaved_write_frame (mux.c:970)
 ==22881==    by 0x42018E: write_frame (ffmpeg.c:780)
 ==22881==    by 0x42359A: do_audio_out (ffmpeg.c:858)
 ==22881==    by 0x42359A: reap_filters (ffmpeg.c:1391)
 ==22881==    by 0x407F60: transcode_step (ffmpeg.c:3931)
 ==22881==    by 0x407F60: transcode (ffmpeg.c:3974)
 ==22881==    by 0x407F60: main (ffmpeg.c:4157)
 ==22881== Invalid read of size 8
 ==22881==    at 0x4C2D940: memcpy@@GLIBC_2.14 (vg_replace_strmem.c:915)
 ==22881==    by 0x741524D: av_image_copy_plane (imgutils.c:282)
 ==22881==    by 0x74153D2: av_image_copy (imgutils.c:320)
 ==22881==    by 0x5051BCB: decklink_write_video_packet
 (decklink_enc.cpp:237)
 ==22881==    by 0x5051BCB: ff_decklink_write_packet (decklink_enc.cpp:419)
 ==22881==    by 0x56B2A1D: write_packet (mux.c:660)
 ==22881==    by 0x56B2A1D: av_interleaved_write_frame (mux.c:970)
 ==22881==    by 0x42018E: write_frame (ffmpeg.c:780)
 ==22881==    by 0x42359A: do_audio_out (ffmpeg.c:858)
 ==22881==    by 0x42359A: reap_filters (ffmpeg.c:1391)
 ==22881==    by 0x407F60: transcode_step (ffmpeg.c:3931)
 ==22881==    by 0x407F60: transcode (ffmpeg.c:3974)
 ==22881==    by 0x407F60: main (ffmpeg.c:4157)
 ==22881==  Address 0x2f210220 is 0 bytes inside a block of size 1,884,191
 free'd
 ==22881==    at 0x4C29E90: free (vg_replace_malloc.c:473)
 ==22881==    by 0x7407FCE: buffer_replace (buffer.c:119)
 ==22881==    by 0x7407FCE: av_buffer_unref (buffer.c:129)
 ==22881==    by 0x7412463: av_frame_unref (frame.c:479)
 ==22881==    by 0x420ED0: do_video_out (ffmpeg.c:1241)
 ==22881==    by 0x42332A: reap_filters (ffmpeg.c:1382)
 ==22881==    by 0x407F60: transcode_step (ffmpeg.c:3931)
 ==22881==    by 0x407F60: transcode (ffmpeg.c:3974)
 ==22881==    by 0x407F60: main (ffmpeg.c:4157)
 }}}

 Do you think you could have a look?

--
Ticket URL: <https://trac.ffmpeg.org/ticket/4897>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list