[Bug 726020] avdec_h265: freezes when max-threads != 1

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Mon Mar 10 20:56:02 PDT 2014


https://bugzilla.gnome.org/show_bug.cgi?id=726020
  GStreamer | gst-libav | git

Thiago Sousa Santos <thiago.sousa.santos> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
                 CC|                            |thiago.sousa.santos at collabo
                   |                            |ra.co.uk
     Ever Confirmed|0                           |1

--- Comment #2 from Thiago Sousa Santos <thiago.sousa.santos at collabora.co.uk> 2014-03-11 04:19:21 UTC ---
The relevant threads:

Thread 4 (Thread 0x7ffff2b9f700 (LWP 18830)):
#0  __lll_lock_wait () at
../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135
#1  0x00007ffff6f6b482 in _L_lock_957 () from
/lib/x86_64-linux-gnu/libpthread.so.0
#2  0x00007ffff6f6b2ea in __GI___pthread_mutex_lock (mutex=0x7ec0c0) at
../nptl/pthread_mutex_lock.c:114
#3  0x00007ffff572667f in gst_video_decoder_get_frame (decoder=0x7ee3a0,
frame_number=frame_number at entry=0) at gstvideodecoder.c:3068
#4  0x00007ffff3eab264 in gst_ffmpegviddec_get_buffer (context=0x7fffec00f000,
picture=0x7fffec00f440) at gstavviddec.c:615
#5  0x00007ffff41f32d7 in ff_get_buffer (avctx=0x7fffec00f000,
frame=0x7fffec00f440, flags=flags at entry=1) at libavcodec/utils.c:646
#6  0x00007ffff409d0a1 in set_sps (s=s at entry=0x7f6800, sps=0x7fffec014b60) at
libavcodec/hevc.c:428
#7  0x00007ffff409ec67 in hls_slice_header (s=s at entry=0x7f6800) at
libavcodec/hevc.c:490
#8  0x00007ffff40a16dd in decode_nal_unit (length=<optimized out>,
nal=<optimized out>, s=0x7f6800) at libavcodec/hevc.c:2568
#9  decode_nal_units (s=s at entry=0x7f6800, buf=<optimized out>,
length=<optimized out>, length at entry=2205) at libavcodec/hevc.c:2819
#10 0x00007ffff40a2c19 in hevc_decode_frame (avctx=0x7fffec00f000,
data=0x7fffec00d500, got_output=0x7fffec00c178, avpkt=0x7fffec00c100) at
libavcodec/hevc.c:2924
#11 0x00007ffff418ce46 in frame_worker_thread (arg=0x7fffec00c000) at
libavcodec/pthread_frame.c:145
#12 0x00007ffff6f69062 in start_thread (arg=0x7ffff2b9f700) at
pthread_create.c:312
#13 0x00007ffff6c9da3d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 2 (Thread 0x7ffff3ba1700 (LWP 18828)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at
../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007ffff418c71b in submit_packet (avpkt=0x7ffff3ba00f0,
p=0x7fffec00c000) at libavcodec/pthread_frame.c:350
#2  ff_thread_decode_frame (avctx=avctx at entry=0x7f0760,
picture=picture at entry=0x7f0ba0,
got_picture_ptr=got_picture_ptr at entry=0x7ffff3ba00ec,
avpkt=avpkt at entry=0x7ffff3ba00f0) at libavcodec/pthread_frame.c:383
#3  0x00007ffff41f432d in avcodec_decode_video2 (avctx=0x7f0760,
picture=0x7f0ba0, got_picture_ptr=got_picture_ptr at entry=0x7ffff3ba00ec,
avpkt=avpkt at entry=0x7ffff3ba00f0) at libavcodec/utils.c:1477
#4  0x00007ffff3ea932b in gst_ffmpegviddec_video_frame
(ffmpegdec=ffmpegdec at entry=0x7ee3a0, data=<optimized out>,
data at entry=0x7fffec0c07c0 "", size=2205, frame=frame at entry=0x7fffec00a290, 
    ret=ret at entry=0x7ffff3ba05bc) at gstavviddec.c:1269
#5  0x00007ffff3eaa0c8 in gst_ffmpegviddec_frame
(ffmpegdec=ffmpegdec at entry=0x7ee3a0, data=data at entry=0x7fffec0c07c0 "",
size=size at entry=2205, got_data=got_data at entry=0x7ffff3ba05b8, 
---Type <return> to continue, or q <return> to quit---
    frame=frame at entry=0x7fffec00a290, ret=ret at entry=0x7ffff3ba05bc) at
gstavviddec.c:1441
#6  0x00007ffff3eaa75c in gst_ffmpegviddec_handle_frame (decoder=0x7ee3a0,
frame=0x7fffec00a290) at gstavviddec.c:1564
#7  0x00007ffff571e6f9 in gst_video_decoder_decode_frame
(decoder=decoder at entry=0x7ee3a0, frame=0x7fffec00a290) at
gstvideodecoder.c:2936
#8  0x00007ffff5721163 in gst_video_decoder_chain_forward
(decoder=decoder at entry=0x7ee3a0, buf=buf at entry=0x7fffec00ac20,
at_eos=at_eos at entry=0) at gstvideodecoder.c:1826
#9  0x00007ffff5722d28 in gst_video_decoder_chain (pad=<optimized out>,
parent=<optimized out>, buf=0x7fffec00ac20) at gstvideodecoder.c:2111
#10 0x00007ffff7b39fe5 in gst_pad_chain_data_unchecked (data=0x7fffec00ac20,
type=4112, pad=0x79a6d0) at gstpad.c:3776
#11 gst_pad_push_data (pad=0x79a4a0, type=type at entry=4112, data=<optimized
out>, data at entry=0x7fffec00ac20) at gstpad.c:4009
#12 0x00007ffff7b41066 in gst_pad_push (pad=<optimized out>,
buffer=buffer at entry=0x7fffec00ac20) at gstpad.c:4112
#13 0x00007ffff5fe7dc9 in gst_base_parse_push_frame
(parse=parse at entry=0x7a2230, frame=frame at entry=0x6a36d0) at gstbaseparse.c:2299
#14 0x00007ffff5feb57b in gst_base_parse_handle_and_push_frame (frame=0x6a36d0,
parse=0x7a2230) at gstbaseparse.c:2131
#15 gst_base_parse_finish_frame (parse=parse at entry=0x7a2230,
frame=frame at entry=0x6a36d0, size=size at entry=2205) at gstbaseparse.c:2453
#16 0x00007ffff5dc68d6 in gst_h265_parse_handle_frame (parse=0x7a2230,
frame=0x6a36d0, skipsize=0x7ffff3ba0dc4) at gsth265parse.c:988
#17 0x00007ffff5fe5454 in gst_base_parse_handle_buffer
(parse=parse at entry=0x7a2230, buffer=<optimized out>,
skip=skip at entry=0x7ffff3ba0dc4, flushed=flushed at entry=0x7ffff3ba0dc0) at
gstbaseparse.c:1959
#18 0x00007ffff5fe5a12 in gst_base_parse_scan_frame
(parse=parse at entry=0x7a2230, klass=0x7a06a0) at gstbaseparse.c:3101
#19 0x00007ffff5fe9971 in gst_base_parse_loop (pad=<optimized out>) at
gstbaseparse.c:3174
#20 0x00007ffff7b68349 in gst_task_func (task=0x828050) at gsttask.c:319
#21 0x00007ffff73efa4c in g_thread_pool_thread_proxy (data=<optimized out>) at
/tmp/buildd/glib2.0-2.38.2/./glib/gthreadpool.c:309
#22 0x00007ffff73ef095 in g_thread_proxy (data=0x6a3630) at
/tmp/buildd/glib2.0-2.38.2/./glib/gthread.c:798
#23 0x00007ffff6f69062 in start_thread (arg=0x7ffff3ba1700) at
pthread_create.c:312
#24 0x00007ffff6c9da3d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:111


Video decoder handle_frame is called with the STREAM_LOCK while libav is
calling get_buffer that also needs the STREAM_LOCK

-- 
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list