omxvideodec: Stuck after several seeks on Raspberry Pi3
Submitted by Yuji Kuwabara
Link to original bug (#787290)
Description
On Raspberry Pi3, a QuickTime movie (h264, AAC) can be played by omxh264dec (glimagesink, alsasink).
However, once PAUSED, then after several flushing seek (without PLAYING),
the pipeline stuck within gst_element_seek().
This is well reproducible.
(gdb) info th
Id Target Id Frame
21 Thread 0x68eff450 (LWP 1348) "audiosink-ringb" syscall ()
at ../ports/sysdeps/unix/sysv/linux/arm/syscall.S:37
20 Thread 0x698ff450 (LWP 1347) "omxh264dec-omxh" syscall ()
at ../ports/sysdeps/unix/sysv/linux/arm/syscall.S:37
19 Thread 0x6a21b450 (LWP 1346) "ILCS_HOST" 0x76a7ca40 in do_futex_wait (
isem=isem@entry=0x6cf16c7c)
at ../nptl/sysdeps/unix/sysv/linux/sem_wait.c:48
18 Thread 0x6aa1b450 (LWP 1345) "multiqueue0:src" 0x76a7a7a4 in __pthread_cond_wait (cond=cond@entry=0x6cf16ae8, mutex=mutex@entry=0x6cf16acc)
at pthread_cond_wait.c:187
17 Thread 0x6b2ea450 (LWP 1344) "multiqueue0:src" syscall ()
at ../ports/sysdeps/unix/sysv/linux/arm/syscall.S:37
16 Thread 0x6bbdd450 (LWP 1343) "multiqueue0:src" syscall ()
at ../ports/sysdeps/unix/sysv/linux/arm/syscall.S:37
15 Thread 0x6c3dd450 (LWP 1342) "qtdemux0:sink" syscall ()
at ../ports/sysdeps/unix/sysv/linux/arm/syscall.S:37
14 Thread 0x6cdff450 (LWP 1341) "aqueue:src" syscall ()
at ../ports/sysdeps/unix/sysv/linux/arm/syscall.S:37
13 Thread 0x6d7ff450 (LWP 1340) "typefind:sink" syscall ()
at ../ports/sysdeps/unix/sysv/linux/arm/syscall.S:37
* 12 Thread 0x6dfff450 (LWP 1339) "vqueue:src" syscall ()
at ../ports/sysdeps/unix/sysv/linux/arm/syscall.S:37
11 Thread 0x6e9ff450 (LWP 1338) "gstglcontext" 0x7670fb80 in poll ()
at ../sysdeps/unix/syscall-template.S:81
10 Thread 0x6f376450 (LWP 1337) "gldisplay-event" 0x7670fb80 in poll ()
at ../sysdeps/unix/syscall-template.S:81
9 Thread 0x6fc77450 (LWP 1336) "Valencia" 0x76a7a7a4 in __pthread_cond_wait (cond=0x21f780, mutex=0x21f7b4) at pthread_cond_wait.c:187
8 Thread 0x731e3450 (LWP 1335) "Valencia" 0x76712964 in select ()
at ../sysdeps/unix/syscall-template.S:81
7 Thread 0x739e3450 (LWP 1334) "Valencia" 0x76a7a7a4 in __pthread_cond_wait (cond=0x1ada90, mutex=0x1adac4) at pthread_cond_wait.c:187
6 Thread 0x743ff450 (LWP 1333) "Valencia" 0x7670fb80 in poll ()
at ../sysdeps/unix/syscall-template.S:81
5 Thread 0x74bff450 (LWP 1332) "HCEC Notify" 0x76a7ca40 in do_futex_wait (
isem=isem@entry=0x769335ec <cecservice_notify_available_event+24>)
at ../nptl/sysdeps/unix/sysv/linux/sem_wait.c:48
4 Thread 0x753ff450 (LWP 1331) "HTV Notify" 0x76a7ca40 in do_futex_wait (
isem=isem@entry=0x76932864 <tvservice_notify_available_event+24>)
at ../nptl/sysdeps/unix/sysv/linux/sem_wait.c:48
3 Thread 0x75bff450 (LWP 1330) "HDispmanx Notif" 0x76a7ca40 in do_futex_wait (isem=isem@entry=0x769336e8 <dispmanx_notify_available_event+24>)
at ../nptl/sysdeps/unix/sysv/linux/sem_wait.c:48
2 Thread 0x7656f450 (LWP 1329) "VCHIQ completio" 0x76711f2c in ioctl ()
at ../sysdeps/unix/syscall-template.S:81
1 Thread 0x76ff1000 (LWP 1328) "Valencia" 0x76a7d780 in __lll_lock_wait (
futex=futex@entry=0x22f2b8, private=<optimized out>)
at ../ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c:46
--------------------------------------
Below is a backtrace of main thread (issuing gst_element_seek())
It is just after GST_EVENT_FLUSH_START is forwarded on video stream at multiqueue.
#0 0x76a7d780 in __lll_lock_wait (futex=futex@entry=0x22f2b8,
private=<optimized out>)
at ../ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c:46
#1 0x76a783c4 in __GI___pthread_mutex_lock (mutex=0x22f2b8)
at pthread_mutex_lock.c:114
#2 0x76d278fc in gst_pad_pause_task (pad=0x6ce28818) at gstpad.c:6059
#3 0x6fe896a4 in gst_single_queue_flush (mq=mq@entry=0x6ce286a8,
sq=sq@entry=0x230100, flush=flush@entry=1, full=full@entry=0)
at gstmultiqueue.c:1072
#4 0x6fe8bc7c in gst_multi_queue_sink_event (pad=pad@entry=0x1e7bd8,
parent=parent@entry=0x6ce286a8, event=event@entry=0x1f9f68)
at gstmultiqueue.c:2233
#5 0x76d193ac in gst_pad_send_event_unchecked (pad=pad@entry=0x1e7bd8,
event=event@entry=0x1f9f68, type=<optimized out>, type@entry=2130696604)
at gstpad.c:5607
#6 0x76d19b1c in gst_pad_push_event_unchecked (pad=pad@entry=0x6ce28578,
event=event@entry=0x1f9f68, type=2130696604,
type@entry=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at gstpad.c:5264
#7 0x76d26128 in gst_pad_push_event (pad=pad@entry=0x6ce28578, event=0x1f9f68)
at gstpad.c:5401
#8 0x6c4142d0 in gst_qtdemux_push_event (qtdemux=qtdemux@entry=0x6ce26088,
event=event@entry=0x1f9f68) at qtdemux.c:1028
#9 0x6c439d34 in gst_qtdemux_do_seek (event=<optimized out>,
pad=<optimized out>, qtdemux=<optimized out>) at qtdemux.c:1662
#10 gst_qtdemux_handle_src_event (pad=<optimized out>, parent=0x6ce26088,
event=0x1f9f20) at qtdemux.c:1794
#11 0x76d19660 in gst_pad_send_event_unchecked (pad=pad@entry=0x6ce28ea8,
event=event@entry=0x1f9f20, type=<optimized out>,
type@entry=GST_PAD_PROBE_TYPE_IDLE) at gstpad.c:5608
#12 0x76d19b1c in gst_pad_push_event_unchecked (pad=pad@entry=0x1e7d30,
event=event@entry=0x1f9f20, type=GST_PAD_PROBE_TYPE_IDLE,
type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) at gstpad.c:5264
#13 0x76d26128 in gst_pad_push_event (pad=0x1e7d30, event=0x1f9f20)
at gstpad.c:5401
#14 0x76d19660 in gst_pad_send_event_unchecked (pad=pad@entry=0x260030,
event=event@entry=0x1f9f20, type=<optimized out>, type@entry=1986571400)
at gstpad.c:5608
#15 0x76d19b1c in gst_pad_push_event_unchecked (pad=pad@entry=0x260180,
event=event@entry=0x1f9f20, type=1986571400,
type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) at gstpad.c:5264
#16 0x76d26128 in gst_pad_push_event (pad=pad@entry=0x260180, event=0x1f9f20)
at gstpad.c:5401
#17 0x76e58258 in gst_base_parse_handle_seek (event=0x1f9f20, parse=0x2623a8)
at gstbaseparse.c:4472
#18 gst_base_parse_src_event_default (parse=0x2623a8, event=0x1f9f20)
at gstbaseparse.c:1635
#19 0x76d19660 in gst_pad_send_event_unchecked (pad=pad@entry=0x2602d0,
event=event@entry=0x1f9f20, type=<optimized out>,
type@entry=GST_PAD_PROBE_TYPE_INVALID) at gstpad.c:5608
#20 0x76d19b1c in gst_pad_push_event_unchecked (pad=pad@entry=0x260420,
event=event@entry=0x1f9f20, type=GST_PAD_PROBE_TYPE_INVALID,
type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) at gstpad.c:5264
#21 0x76d26128 in gst_pad_push_event (pad=0x260420, event=event@entry=0x1f9f20)
at gstpad.c:5401
#22 0x6ff5fa1c in gst_audio_decoder_src_eventfunc (dec=0x265a50,
event=0x1f9f20) at gstaudiodecoder.c:2428
#23 0x76d19660 in gst_pad_send_event_unchecked (pad=pad@entry=0x260570,
event=event@entry=0x1f9f20, type=<optimized out>,
type@entry=GST_PAD_PROBE_TYPE_INVALID) at gstpad.c:5608
#24 0x76d19b1c in gst_pad_push_event_unchecked (pad=pad@entry=0x215d18,
---Type <return> to continue, or q <return> to quit---
event=event@entry=0x1f9f20, type=GST_PAD_PROBE_TYPE_INVALID,
type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) at gstpad.c:5264
#25 0x76d26128 in gst_pad_push_event (pad=pad@entry=0x215d18, event=0x1f9f20)
at gstpad.c:5401
#26 0x76d26640 in event_forward_func (pad=0x215d18, data=0x7effe394)
at gstpad.c:2992
#27 0x76d21118 in gst_pad_forward (pad=pad@entry=0x6ce16658,
forward=0x7effe36c, user_data=0x7effe394, user_data@entry=0x7effe38c)
at gstpad.c:2946
#28 0x76d212d4 in gst_pad_event_default (pad=0x6ce16658,
parent=<optimized out>, event=0x1f9f20) at gstpad.c:3043
#29 0x76d19660 in gst_pad_send_event_unchecked (pad=pad@entry=0x6ce16658,
event=event@entry=0x1f9f20, type=<optimized out>, type@entry=2130700704)
at gstpad.c:5608
#30 0x76d19b1c in gst_pad_push_event_unchecked (pad=pad@entry=0x208ab0,
event=event@entry=0x1f9f20, type=2130700704,
type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) at gstpad.c:5264
#31 0x76d26128 in gst_pad_push_event (pad=0x208ab0, event=event@entry=0x1f9f20)
at gstpad.c:5401
#32 0x76e80b34 in gst_base_transform_src_eventfunc (trans=0x20e9a0,
event=0x1f9f20) at gstbasetransform.c:1953
#33 0x76d19660 in gst_pad_send_event_unchecked (pad=pad@entry=0x208c00,
event=event@entry=0x1f9f20, type=<optimized out>,
type@entry=GST_PAD_PROBE_TYPE_INVALID) at gstpad.c:5608
#34 0x76d19b1c in gst_pad_push_event_unchecked (pad=pad@entry=0x208810,
event=event@entry=0x1f9f20, type=GST_PAD_PROBE_TYPE_INVALID,
type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) at gstpad.c:5264
#35 0x76d26128 in gst_pad_push_event (pad=pad@entry=0x208810, event=0x1f9f20)
at gstpad.c:5401
#36 0x76d26640 in event_forward_func (pad=0x208810, data=0x7effe744)
at gstpad.c:2992
#37 0x76d21118 in gst_pad_forward (pad=pad@entry=0x208960, forward=0x53554150,
user_data=0x7effe744, user_data@entry=0x7effe73c) at gstpad.c:2946
#38 0x76d212d4 in gst_pad_event_default (pad=0x208960, parent=<optimized out>,
event=0x1f9f20) at gstpad.c:3043
#39 0x76d19660 in gst_pad_send_event_unchecked (pad=pad@entry=0x208960,
event=event@entry=0x1f9f20, type=<optimized out>,
type@entry=GST_PAD_PROBE_TYPE_INVALID) at gstpad.c:5608
#40 0x76d19b1c in gst_pad_push_event_unchecked (pad=pad@entry=0x1dd9d0,
event=event@entry=0x1f9f20, type=GST_PAD_PROBE_TYPE_INVALID,
type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) at gstpad.c:5264
#41 0x76d26128 in gst_pad_push_event (pad=pad@entry=0x1dd9d0, event=0x1f9f20)
at gstpad.c:5401
#42 0x76d26640 in event_forward_func (pad=0x1dd9d0, data=0x7effe964)
at gstpad.c:2992
#43 0x76d21118 in gst_pad_forward (pad=pad@entry=0x1dca40, forward=0x7effea42,
user_data=0x7effe964, user_data@entry=0x7effe95c) at gstpad.c:2946
#44 0x76d212d4 in gst_pad_event_default (pad=0x1dca40, parent=<optimized out>,
event=0x1f9f20) at gstpad.c:3043
#45 0x76d19660 in gst_pad_send_event_unchecked (pad=pad@entry=0x1dca40,
event=event@entry=0x1f9f20, type=<optimized out>, type@entry=33)
at gstpad.c:5608
#46 0x76d19b1c in gst_pad_push_event_unchecked (pad=pad@entry=0x2086c0,
event=event@entry=0x1f9f20, type=33,
type@entry=GST_PAD_PROBE_TYPE_EVENT_UPSTREAM) at gstpad.c:5264
#47 0x76d26128 in gst_pad_push_event (pad=pad@entry=0x2086c0,
event=event@entry=0x1f9f20) at gstpad.c:5401
#48 0x76e67c04 in gst_base_sink_send_event (element=0x20b820, event=0x1f9f20)
at gstbasesink.c:4514
#49 0x76cfcbc8 in gst_element_send_event (element=element@entry=0x20b820,
---Type <return> to continue, or q <return> to quit---
event=event@entry=0x1f9f20) at gstelement.c:1650
#50 0x76cd6374 in gst_bin_send_event (element=0x1b34a8, event=0x1f9f20)
at gstbin.c:3134
#51 0x76cfcbc8 in gst_element_send_event (element=0x1b34a8, event=0x1f9f20)
at gstelement.c:1650
#52 0x000c141c in CTrkDataPlayer_gs::Task (this=0x1f2600)
at /Volumes/work/devx/Valencia/CSources/Gst/CTrkDataPlayer_gs.cpp:550
#53 0x000c000c in CTrkDataPlayer_gs::CmdSchCB (aRef=0x1f2600)
at /Volumes/work/devx/Valencia/CSources/Gst/CTrkDataPlayer_gs.h:129
#54 0x000b18c0 in CScheduler::Dispatch (this=0x1ad938, aModal=false)
at /Volumes/work/devx/Emb/eSys/CScheduler.cpp:162
#55 0x000b0778 in CSchedulerTimer::TmoFunc (user_data=0x1ad91c)
at /Volumes/work/devx/Emb/Linux/CSchedulerTimer_Lnx.cpp:24
#56 0x000b08e8 in Dispatch (source=0x1ada08,
callback=0xb0720 <CSchedulerTimer::TmoFunc(void*)>, user_data=0x1ad91c)
at /Volumes/work/devx/Emb/Linux/CSchedulerTimer_Lnx.cpp:65
#57 0x76b6b1c4 in g_main_context_dispatch ()
from /lib/arm-linux-gnueabihf/libglib-2.0.so.0
Cannot access memory at address 0x1
#58 0x76b6b588 in ?? () from /lib/arm-linux-gnueabihf/libglib-2.0.so.0
Cannot access memory at address 0x1
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
--------------------------------------
Below is a backtrace of
- 16 Thread 0x6bbdd450 (LWP 1343) "multiqueue0:src" syscall ()
at ../ports/sysdeps/unix/sysv/linux/arm/syscall.S:37
(gdb) bt
#0 syscall () at ../ports/sysdeps/unix/sysv/linux/arm/syscall.S:37
#1 0x76bb543c in g_cond_wait () from /lib/arm-linux-gnueabihf/libglib-2.0.so.0
#2 0x6aa376c0 in gst_omx_component_wait_message (comp=comp@entry=0x6cf05b68,
timeout=<optimized out>) at gstomx.c:441
#3 0x6aa3abd0 in gst_omx_port_acquire_buffer (port=port@entry=0x251e10,
buf=0xffffffff, buf@entry=0x77e29902) at gstomx.c:1364
#4 0x6aa42524 in gst_omx_video_dec_handle_frame (decoder=0x6cf12140,
frame=0x1fd228a) at gstomxvideodec.c:2215
#5 0x76ee6d38 in gst_video_decoder_decode_frame (
decoder=decoder@entry=0x6cf12140, frame=0x68f2dde8)
at gstvideodecoder.c:3410
#6 0x76ee9714 in gst_video_decoder_chain_forward (
decoder=decoder@entry=0x6cf12140, buf=buf@entry=0x2c38f0,
at_eos=at_eos@entry=0) at gstvideodecoder.c:2137
#7 0x76ee9e3c in gst_video_decoder_chain (pad=<optimized out>,
parent=0x6cf12140, buf=0x2c38f0) at gstvideodecoder.c:2451
#8 0x76d1aef0 in gst_pad_chain_data_unchecked (data=0x2c38f0, type=4112,
pad=0x260ab0) at gstpad.c:4205
#9 gst_pad_push_data (pad=pad@entry=0x6ce28d58, type=type@entry=4112,
data=<optimized out>, data@entry=0x2c38f0) at gstpad.c:4457
#10 0x76d24cf0 in gst_pad_push (pad=0x6ce28d58, buffer=0x2c38f0)
at gstpad.c:4576
#11 0x76e7a834 in gst_base_transform_chain (pad=<optimized out>,
parent=0x25c1c8, buffer=<optimized out>) at gstbasetransform.c:2312
#12 0x76d1aef0 in gst_pad_chain_data_unchecked (data=0x2c38f0, type=4112,
pad=0x6ce28c08) at gstpad.c:4205
#13 gst_pad_push_data (pad=pad@entry=0x6ce28ab8, type=type@entry=4112,
data=<optimized out>, data@entry=0x2c38f0) at gstpad.c:4457
#14 0x76d24cf0 in gst_pad_push (pad=0x6ce28ab8, buffer=buffer@entry=0x2c38f0)
at gstpad.c:4576
#15 0x76e5bfd0 in gst_base_parse_push_frame (parse=parse@entry=0x149a10,
frame=frame@entry=0x6cf07608) at gstbaseparse.c:2521
#16 0x76e5eee0 in gst_base_parse_handle_and_push_frame (frame=0x6cf07608,
parse=0x149a10) at gstbaseparse.c:2338
#17 gst_base_parse_finish_frame (parse=0x149a10, frame=0x6cf07608,
size=<optimized out>) at gstbaseparse.c:2679
#18 0x6b39e044 in gst_h264_parse_handle_frame_packetized (parse=0x149a10,
frame=0x6cf07608) at gsth264parse.c:1025
#19 0x6b39e3dc in gst_h264_parse_handle_frame (parse=0x149a10,
frame=0x6cf07608, skipsize=0x6bbdcb24) at gsth264parse.c:1078
#20 0x76e5650c in gst_base_parse_handle_buffer (parse=parse@entry=0x149a10,
buffer=<optimized out>, skip=0x6bbdcb24, skip@entry=0x6bbdcb1c,
flushed=0x6bbdcb28, flushed@entry=0x6bbdcb20) at gstbaseparse.c:2146
#21 0x76e5ce44 in gst_base_parse_chain (pad=<optimized out>, parent=0x149a10,
buffer=<optimized out>) at gstbaseparse.c:3228
#22 0x76d1aef0 in gst_pad_chain_data_unchecked (data=0x2498e8, type=4112,
pad=0x6ce28968) at gstpad.c:4205
#23 gst_pad_push_data (pad=pad@entry=0x6ce28818, type=type@entry=4112,
data=<optimized out>, data@entry=0x2498e8) at gstpad.c:4457
#24 0x76d24cf0 in gst_pad_push (pad=0x6ce28818, buffer=buffer@entry=0x2498e8)
at gstpad.c:4576
#25 0x6fe8e050 in gst_single_queue_push_one (allow_drop=<synthetic pointer>,
object=0x2498e8, sq=0x230100, mq=<optimized out>) at gstmultiqueue.c:1608
#26 gst_multi_queue_loop (pad=<optimized out>) at gstmultiqueue.c:1920
#27 0x76d59244 in gst_task_func (task=0x6ce2ac18) at gsttask.c:335
#28 0x76b9545c in ?? () from /lib/arm-linux-gnueabihf/libglib-2.0.so.0
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
--------------------------------------
It seems to me that omxvideodec and its ancestors (GstVideoDecoder and GstElement)
does not handle GST_EVENT_FLUSH_START.
Can this problem be fixed if omxvideodec handles GST_EVENT_FLUSH_START ?
Version: 1.12.2