vaapih265dec on i965 aborts when a delta frame is missing
Backtrace
#0 0x00007ffff7b359d5 in raise () at /lib64/libc.so.6
#1 0x00007ffff7b1e8a4 in abort () at /lib64/libc.so.6
#2 0x00007ffff7b1e789 in _nl_load_domain.cold () at /lib64/libc.so.6
#3 0x00007ffff7b2e026 in annobin_assert.c_end () at /lib64/libc.so.6
#4 0x00007ffff5863f2c in gen9_hcpd_get_reference_picture_frame_id (ref_pic=<optimized out>, frame_store=frame_store@entry=0x7fffe01e5f00) at gen9_mfd.c:649
#5 0x00007ffff58666e1 in gen9_hcpd_ref_idx_state_1 (batch=batch@entry=0x7fffe00b7630, list=list@entry=0, pic_param=pic_param@entry=0x7fffe0034c00, slice_param=slice_param@entry=0x7fffe00c2d40, frame_store=frame_store@entry=0x7fffe01e5f00) at gen9_mfd.c:676
#6 0x00007ffff586b176 in gen9_hcpd_ref_idx_state (ctx=0x7635b0, gen9_hcpd_context=0x7fffe01e5ed0, slice_param=0x7fffe00c2d40, pic_param=0x7fffe0034c00) at gen9_mfd.c:703
#7 gen9_hcpd_hevc_decode_picture (gen9_hcpd_context=0x7fffe01e5ed0, decode_state=0x7679f8, ctx=0x7635b0) at gen9_mfd.c:1028
#8 gen9_hcpd_decode_picture (ctx=0x7635b0, profile=<optimized out>, codec_state=0x7679f8, hw_context=0x7fffe01e5ed0) at gen9_mfd.c:1901
#9 0x00007ffff6433da8 in vaEndPicture (dpy=dpy@entry=0x764220, context=33554433) at va.c:1616
#10 0x00007ffff65bcdee in gst_vaapi_picture_decode (picture=picture@entry=0x7fffd00138d0) at ../subprojects/gstreamer-vaapi/gst-libs/gst/vaapi/gstvaapidecoder_objects.c:308
#11 0x00007ffff65b1f90 in decode_current_picture (decoder=0x7fffe00a8e90) at ../subprojects/gstreamer-vaapi/gst-libs/gst/vaapi/gstvaapidecoder_h265.c:1381
#12 0x00007ffff65a6ece in do_decode_1 (decoder=decoder@entry=0x7fffe00a8e90, frame=frame@entry=0x7fffb4050b90) at ../subprojects/gstreamer-vaapi/gst-libs/gst/vaapi/gstvaapidecoder.c:259
#13 0x00007ffff65a882b in do_decode (base_frame=0x6c3c00, decoder=0x7fffe00a8e90) at ../subprojects/gstreamer-vaapi/gst-libs/gst/vaapi/gstvaapidecoder.c:287
#14 gst_vaapi_decoder_decode (decoder=0x7fffe00a8e90, frame=frame@entry=0x6c3c00) at ../subprojects/gstreamer-vaapi/gst-libs/gst/vaapi/gstvaapidecoder.c:1026
#15 0x00007ffff658872e in gst_vaapidecode_handle_frame (vdec=0x7fffe00bd1c0, frame=0x6c3c00) at ../subprojects/gstreamer-vaapi/gst/vaapi/gstvaapidecode.c:764
#16 0x00007ffff6910c77 in gst_video_decoder_decode_frame (decoder=decoder@entry=0x7fffe00bd1c0, frame=0x6c3c00) at ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c:3697
#17 0x00007ffff6913ef8 in gst_video_decoder_have_frame (decoder=decoder@entry=0x7fffe00bd1c0) at ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c:3606
#18 0x00007ffff6586a33 in gst_vaapidecode_parse_frame (at_eos=0, adapter=0x7fffb4085240, frame=0x6c3c00, vdec=0x7fffe00bd1c0) at ../subprojects/gstreamer-vaapi/gst/vaapi/gstvaapidecode.c:1181
#19 gst_vaapidecode_parse (vdec=0x7fffe00bd1c0, frame=0x6c3c00, adapter=0x7fffb4085240, at_eos=0) at ../subprojects/gstreamer-vaapi/gst/vaapi/gstvaapidecode.c:1218
#20 0x00007ffff690c4e9 in gst_video_decoder_parse_available (dec=dec@entry=0x7fffe00bd1c0, at_eos=at_eos@entry=0, new_buffer=0, new_buffer@entry=1) at ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c:1055
#21 0x00007ffff691102c in gst_video_decoder_chain_forward (decoder=decoder@entry=0x7fffe00bd1c0, buf=buf@entry=0x7fffe00cc6c0, at_eos=at_eos@entry=0) at ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c:2348
#22 0x00007ffff69125c9 in gst_video_decoder_chain (pad=<optimized out>, parent=<optimized out>, buf=0x7fffe00cc6c0) at ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c:2647
#23 0x00007ffff7f01f5d in gst_pad_chain_data_unchecked (pad=pad@entry=0x7fffb00078f0, type=type@entry=4112, data=data@entry=0x7fffe00cc6c0) at ../subprojects/gstreamer/gst/gstpad.c:4399
#24 0x00007ffff7f04141 in gst_pad_push_data (pad=pad@entry=0x7fffb000aab0, type=type@entry=4112, data=data@entry=0x7fffe00cc6c0) at ../subprojects/gstreamer/gst/gstpad.c:4655
#25 0x00007ffff7f0b3c2 in gst_pad_push (pad=pad@entry=0x7fffb000aab0, buffer=buffer@entry=0x7fffe00cc6c0) at ../subprojects/gstreamer/gst/gstpad.c:4774
#26 0x00007ffff7eef34b in gst_proxy_pad_chain_default (pad=<optimized out>, parent=<optimized out>, buffer=0x7fffe00cc6c0) at ../subprojects/gstreamer/gst/gstghostpad.c:127
#27 0x00007ffff7f01f5d in gst_pad_chain_data_unchecked (pad=pad@entry=0x6edd90, type=type@entry=4112, data=data@entry=0x7fffe00cc6c0) at ../subprojects/gstreamer/gst/gstpad.c:4399
#28 0x00007ffff7f04141 in gst_pad_push_data (pad=pad@entry=0x7fffb00076a0, type=type@entry=4112, data=data@entry=0x7fffe00cc6c0) at ../subprojects/gstreamer/gst/gstpad.c:4655
#29 0x00007ffff7f0b3c2 in gst_pad_push (pad=0x7fffb00076a0, buffer=0x7fffe00cc6c0) at ../subprojects/gstreamer/gst/gstpad.c:4774
#30 0x00007ffff6a8cf69 in gst_base_transform_chain (pad=<optimized out>, parent=0x734f00, buffer=0x7fffeeffbce8) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:2377
#31 0x00007ffff7f01f5d in gst_pad_chain_data_unchecked (pad=pad@entry=0x7fffb0007450, type=type@entry=4112, data=data@entry=0x7fffe00cc6c0) at ../subprojects/gstreamer/gst/gstpad.c:4399
#32 0x00007ffff7f04141 in gst_pad_push_data (pad=pad@entry=0x7fffb0007200, type=type@entry=4112, data=data@entry=0x7fffe00cc6c0) at ../subprojects/gstreamer/gst/gstpad.c:4655
#33 0x00007ffff7f0b3c2 in gst_pad_push (pad=0x7fffb0007200, buffer=buffer@entry=0x7fffe00cc6c0) at ../subprojects/gstreamer/gst/gstpad.c:4774
#34 0x00007ffff6a6d6ff in gst_base_parse_push_frame (parse=parse@entry=0x7fffe00804c0, frame=frame@entry=0x7fffe0160050) at ../subprojects/gstreamer/libs/gst/base/gstbaseparse.c:2590
#35 0x00007ffff6a7026f in gst_base_parse_handle_and_push_frame (frame=0x7fffe0160050, parse=0x7fffe00804c0) at ../subprojects/gstreamer/libs/gst/base/gstbaseparse.c:2441
#36 0x00007ffff411a39b in gst_h265_parse_handle_frame_packetized (frame=0x7fffe0160050, parse=0x7fffe00804c0) at ../subprojects/gst-plugins-bad/gst/videoparsers/gsth265parse.c:1106
#37 gst_h265_parse_handle_frame (parse=0x7fffe00804c0, frame=0x7fffe0160050, skipsize=0x7fffeeffc13c) at ../subprojects/gst-plugins-bad/gst/videoparsers/gsth265parse.c:1150
#38 0x00007ffff6a68500 in gst_base_parse_handle_buffer (parse=parse@entry=0x7fffe00804c0, buffer=<optimized out>, skip=skip@entry=0x7fffeeffc13c, flushed=flushed@entry=0x7fffeeffc140) at ../subprojects/gstreamer/libs/gst/base/gstbaseparse.c:2249
#39 0x00007ffff6a6e287 in gst_base_parse_chain (pad=<optimized out>, parent=<optimized out>, buffer=<optimized out>) at ../subprojects/gstreamer/libs/gst/base/gstbaseparse.c:3296
#40 0x00007ffff7f01f5d in gst_pad_chain_data_unchecked (pad=pad@entry=0x7fffb0006fb0, type=type@entry=4112, data=data@entry=0x7fffe00b2d80) at ../subprojects/gstreamer/gst/gstpad.c:4399
#41 0x00007ffff7f04141 in gst_pad_push_data (pad=pad@entry=0x7fffb0006d60, type=type@entry=4112, data=data@entry=0x7fffe00b2d80) at ../subprojects/gstreamer/gst/gstpad.c:4655
#42 0x00007ffff7f0b3c2 in gst_pad_push (pad=0x7fffb0006d60, buffer=0x7fffe00b2d80) at ../subprojects/gstreamer/gst/gstpad.c:4774
#43 0x00007ffff6d1cd99 in gst_rtp_base_depayload_push (filter=0x7fffe00700c0, out_buf=<optimized out>) at ../subprojects/gst-plugins-base/gst-libs/gst/rtp/gstrtpbasedepayload.c:1271
#44 0x00007ffff578cd9b in gst_rtp_h265_depay_push (rtph265depay=rtph265depay@entry=0x7fffe00700c0, outbuf=<optimized out>, outbuf@entry=0x7fffe00b2d80, keyframe=<optimized out>, timestamp=<optimized out>, marker=marker@entry=1) at ../subprojects/gst-plugins-good/gst/rtp/gstrtph265depay.c:1107
#45 0x00007ffff578e962 in gst_rtp_h265_depay_handle_nal (rtph265depay=rtph265depay@entry=0x7fffe00700c0, nal=nal@entry=0x7fffb40857e0, in_timestamp=7337354563, marker=1) at ../subprojects/gst-plugins-good/gst/rtp/gstrtph265depay.c:1204
#46 0x00007ffff578ecc2 in gst_rtp_h265_finish_fragmentation_unit (rtph265depay=rtph265depay@entry=0x7fffe00700c0) at ../subprojects/gst-plugins-good/gst/rtp/gstrtph265depay.c:1244
#47 0x00007ffff578f56b in gst_rtp_h265_depay_process (depayload=depayload@entry=0x7fffe00700c0, rtp=rtp@entry=0x7fffeeffc690) at ../subprojects/gst-plugins-good/gst/rtp/gstrtph265depay.c:1541
#48 0x00007ffff6d1d458 in gst_rtp_base_depayload_handle_buffer (filter=0x7fffe00700c0, bclass=<optimized out>, in=0x7fffe00c55a0) at ../subprojects/gst-plugins-base/gst-libs/gst/rtp/gstrtpbasedepayload.c:719
#49 0x00007ffff7f01f5d in gst_pad_chain_data_unchecked (pad=pad@entry=0x7fffb0006b10, type=type@entry=4112, data=data@entry=0x7fffe00c55a0) at ../subprojects/gstreamer/gst/gstpad.c:4399
#50 0x00007ffff7f04141 in gst_pad_push_data (pad=pad@entry=0x6de7d0, type=type@entry=4112, data=data@entry=0x7fffe00c55a0) at ../subprojects/gstreamer/gst/gstpad.c:4655
#51 0x00007ffff7f0b3c2 in gst_pad_push (pad=0x6de7d0, buffer=0x7fffe00c55a0) at ../subprojects/gstreamer/gst/gstpad.c:4774
#52 0x00007ffff7f01f5d in gst_pad_chain_data_unchecked (pad=pad@entry=0x6de580, type=type@entry=4112, data=data@entry=0x7fffe00c55a0) at ../subprojects/gstreamer/gst/gstpad.c:4399
#53 0x00007ffff7f04141 in gst_pad_push_data (pad=pad@entry=0x6ee090, type=type@entry=4112, data=data@entry=0x7fffe00c55a0) at ../subprojects/gstreamer/gst/gstpad.c:4655
#54 0x00007ffff7f0b3c2 in gst_pad_push (pad=pad@entry=0x6ee090, buffer=buffer@entry=0x7fffe00c55a0) at ../subprojects/gstreamer/gst/gstpad.c:4774
#55 0x00007ffff7eef34b in gst_proxy_pad_chain_default (pad=<optimized out>, parent=<optimized out>, buffer=0x7fffe00c55a0) at ../subprojects/gstreamer/gst/gstghostpad.c:127
#56 0x00007ffff7f01f5d in gst_pad_chain_data_unchecked (pad=pad@entry=0x6ec050, type=type@entry=4112, data=data@entry=0x7fffe00c55a0) at ../subprojects/gstreamer/gst/gstpad.c:4399
#57 0x00007ffff7f04141 in gst_pad_push_data (pad=pad@entry=0x6de330, type=type@entry=4112, data=data@entry=0x7fffe00c55a0) at ../subprojects/gstreamer/gst/gstpad.c:4655
#58 0x00007ffff7f0b3c2 in gst_pad_push (pad=0x6de330, buffer=buffer@entry=0x7fffe00c55a0) at ../subprojects/gstreamer/gst/gstpad.c:4774
#59 0x00007ffff67219eb in gst_queue_push_one (queue=0x6dc070) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1388
#60 gst_queue_loop (pad=<optimized out>) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1541
#61 0x00007ffff7f3991f in gst_task_func (task=0x6e9950) at ../subprojects/gstreamer/gst/gsttask.c:328
#62 0x00007ffff7d46e54 in g_thread_pool_thread_proxy (data=<optimized out>) at ../glib/gthreadpool.c:354
#63 0x00007ffff7d442b2 in g_thread_proxy (data=0x6e8920) at ../glib/gthread.c:820
#64 0x00007ffff78d43f9 in start_thread () at /lib64/libpthread.so.0
#65 0x00007ffff7bf9903 in clone () at /lib64/libc.so.6
Easiest way to reproduce this is:
videotestsrc ! vaapih265enc ! queue ! identity drop-probability=0.01 silent=false ! queue ! vaapih265dec ! queue ! vaapisink sync=false
This abort doesn't happen when decoding h264, and can happen very easily on packet loss over the network.
It seems a similar issue has been reported in the past and was fixed partially. However, that issue was about delta frames arriving before an i-frame, while in this case the abort seems to happen in the middle of playback: after an i-frame has arrived, and seemingly after any delta-frame is dropped.
identity output on abort
chain ******* (identity0:sink) (3827 bytes, dts: 0:00:05.000000000, pts: 0:00:05.000000000, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00000200 marker , meta: none) 0x7ff898009000
chain ******* (identity0:sink) (3243 bytes, dts: 0:00:05.033333333, pts: 0:00:05.033333333, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a8017ea0
chain ******* (identity0:sink) (3166 bytes, dts: 0:00:05.066666666, pts: 0:00:05.066666666, duration: 0:00:00.033333334, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a002a6c0
chain ******* (identity0:sink) (3149 bytes, dts: 0:00:05.100000000, pts: 0:00:05.100000000, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a8017b40
chain ******* (identity0:sink) (3175 bytes, dts: 0:00:05.133333333, pts: 0:00:05.133333333, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a80177e0
chain ******* (identity0:sink) (3116 bytes, dts: 0:00:05.166666666, pts: 0:00:05.166666666, duration: 0:00:00.033333334, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff898009120
chain ******* (identity0:sink) (3125 bytes, dts: 0:00:05.200000000, pts: 0:00:05.200000000, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff898009240
chain ******* (identity0:sink) (3154 bytes, dts: 0:00:05.233333333, pts: 0:00:05.233333333, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a002aa20
chain ******* (identity0:sink) (3097 bytes, dts: 0:00:05.266666666, pts: 0:00:05.266666666, duration: 0:00:00.033333334, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a8017c60
chain ******* (identity0:sink) (3141 bytes, dts: 0:00:05.300000000, pts: 0:00:05.300000000, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a8017d80
chain ******* (identity0:sink) (3137 bytes, dts: 0:00:05.333333333, pts: 0:00:05.333333333, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a002a7e0
chain ******* (identity0:sink) (3114 bytes, dts: 0:00:05.366666666, pts: 0:00:05.366666666, duration: 0:00:00.033333334, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a002a900
chain ******* (identity0:sink) (3141 bytes, dts: 0:00:05.400000000, pts: 0:00:05.400000000, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a002ab40
chain ******* (identity0:sink) (3108 bytes, dts: 0:00:05.433333333, pts: 0:00:05.433333333, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a80176c0
chain ******* (identity0:sink) (3078 bytes, dts: 0:00:05.466666666, pts: 0:00:05.466666666, duration: 0:00:00.033333334, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a80175a0
chain ******* (identity0:sink) (3092 bytes, dts: 0:00:05.500000000, pts: 0:00:05.500000000, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff898009120
chain ******* (identity0:sink) (3095 bytes, dts: 0:00:05.533333333, pts: 0:00:05.533333333, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff898009000
chain ******* (identity0:sink) (3101 bytes, dts: 0:00:05.566666666, pts: 0:00:05.566666666, duration: 0:00:00.033333334, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a8017ea0
chain ******* (identity0:sink) (3153 bytes, dts: 0:00:05.600000000, pts: 0:00:05.600000000, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a002a6c0
chain ******* (identity0:sink) (3132 bytes, dts: 0:00:05.633333333, pts: 0:00:05.633333333, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff898009360
chain ******* (identity0:sink) (3113 bytes, dts: 0:00:05.666666666, pts: 0:00:05.666666666, duration: 0:00:00.033333334, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff898009240
chain ******* (identity0:sink) (3122 bytes, dts: 0:00:05.700000000, pts: 0:00:05.700000000, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a002aa20
dropping ******* (identity0:sink) (3139 bytes, dts: 0:00:05.733333333, pts: 0:00:05.733333333, duration: 0:00:00.033333333, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a8017c60
chain ******* (identity0:sink) (3096 bytes, dts: 0:00:05.766666666, pts: 0:00:05.766666666, duration: 0:00:00.033333334, offset: -1, offset_end: -1, flags: 00002200 marker delta-unit , meta: none) 0x7ff8a8017b40
gst-launch-1.0: gen9_mfd.c:649: gen9_hcpd_get_reference_picture_frame_id: Assertion `0' failed.
Aborted (core dumped)
The same abort also happens with vah265dec
.