Don't switch track and use future list if active stream is not ready
Submitted by HoonHee Lee
Link to original bug (#778164)
Description
Created attachment 344911
Log for decodebin3
Hello All.
Segmentation fault is happened sometimes when audio track is changed immediately after initial prerolling(async-done) is completed.
Collection information.
0:00:01.978901460 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1459:handle_stream_collection:<decodebin3-0>
Setting collection 0x72b12928 on input 0x178470
0:00:01.978947501 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1467:handle_stream_collection: Received Stream Collection. Upstream_id : 700b33270de0626842783cd41367760d89e939be6afa274c89f726e21284095d
0:00:01.978968251 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1468:handle_stream_collection: From input 0x178470
0:00:01.979002043 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1469:handle_stream_collection: 3 streams
0:00:01.979026126 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1475:handle_stream_collection: Stream '700b33270de0626842783cd41367760d89e939be6afa274c89f726e21284095d/001'
0:00:01.979048001 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1477:handle_stream_collection: type : video
0:00:01.979067460 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1478:handle_stream_collection: flags : 0x0
0:00:01.979131168 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1480:handle_stream_collection: tags : taglist, video-codec=(string)"H.264\ /\ AVC", track-id=(uint)1;
0:00:01.979178210 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1482:handle_stream_collection: caps : video/x-h264, stream-format=(string)avc, alignment=(string)au, container=(string)"ISO\ MP4/M4A", format=(string)avc1, timestamptype=(boolean)true, level=(string)4, profile=(string)high, codec_data=(buffer)01640028ffe1002f67640028ac2ce5014016ec0502000007d0000186a1d180043280017d7d7bdf1a30008650002fafaf7be1f08844858001000468ffbcb0fdf8f800, width=(int)1280, height=(int)720, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)1/1
0:00:01.979302293 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1475:handle_stream_collection: Stream '700b33270de0626842783cd41367760d89e939be6afa274c89f726e21284095d/002'
0:00:01.979323751 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1477:handle_stream_collection: type : audio
0:00:01.979342626 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1478:handle_stream_collection: flags : 0x0
0:00:01.979362168 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1480:handle_stream_collection: tags : taglist, audio-codec=(string)"EAC-3\ audio", language-code=(string)de, track-id=(uint)2;
0:00:01.979397251 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1482:handle_stream_collection: caps : audio/x-eac3, framed=(boolean)true, rate=(int)48000, channels=(int)2
0:00:01.979447418 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1475:handle_stream_collection: Stream '700b33270de0626842783cd41367760d89e939be6afa274c89f726e21284095d/003'
0:00:01.979469918 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1477:handle_stream_collection: type : audio
0:00:01.979489085 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1478:handle_stream_collection: flags : 0x0
0:00:01.979508335 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1480:handle_stream_collection: tags : taglist, audio-codec=(string)"EAC-3\ audio", language-code=(string)en, track-id=(uint)3;
0:00:01.979543376 4249 0x2f9c60 DEBUG decodebin3 gstdecodebin3.c:1482:handle_stream_collection: caps : audio/x-eac3, framed=(boolean)true, rate=(int)48000, channels=(int)2
cat gst.log | grep "gstdecodebin3.c" | grep "handle_stream_collection"Active stream of multiqueue0:src_2(2nd audio track) is ready after changing audio track. Thus, Crash is happened.
multiqueue0:src_2 Got event 0x721aee70 stream-start
0:00:02.261315293 4249 0x241d80 DEBUG decodebin3 gstdecodebin3.c:1768:multiqueue_src_probe:multiqueue0:src_2 Stream Start '700b33270de0626842783cd41367760d89e939be6afa274c89f726e21284095d/003'
0:00:02.261372293 4249 0x241d80 DEBUG decodebin3 gstdecodebin3.c:1754:multiqueue_src_probe:multiqueue0:src_2 Got event 0x71706188 caps
0:00:02.261227918 4249 0x241d80 DEBUG decodebin3 gstdecodebin3.c:1754:multiqueue_src_probe:
cat gst.log | grep "gstdecodebin3.c" | grep "handle_stream_switch"
0:00:02.228173001 4249 0x8cac0 DEBUG decodebin3 gstdecodebin3.c:2555:handle_stream_switch:<decodebin3-0>
Checking stream '700b33270de0626842783cd41367760d89e939be6afa274c89f726e21284095d/001'
0:00:02.228201335 4249 0x8cac0 DEBUG decodebin3 gstdecodebin3.c:2572:handle_stream_switch:<decodebin3-0>
Stream '700b33270de0626842783cd41367760d89e939be6afa274c89f726e21284095d/001' from slot 0x721b9510 is already active on output 0x71700d40
0:00:02.228231543 4249 0x8cac0 DEBUG decodebin3 gstdecodebin3.c:2555:handle_stream_switch:<decodebin3-0>
Checking stream '700b33270de0626842783cd41367760d89e939be6afa274c89f726e21284095d/003'
0:00:02.228256668 4249 0x8cac0 DEBUG decodebin3 gstdecodebin3.c:2567:handle_stream_switch:<decodebin3-0>
We need to activate slot 0x721bb8c0 for stream '700b33270de0626842783cd41367760d89e939be6afa274c89f726e21284095d/003')
0:00:02.228379793 4249 0x8cac0 DEBUG decodebin3 gstdecodebin3.c:2599:handle_stream_switch:<decodebin3-0>
Slot 0x721b9cd0 (700b33270de0626842783cd41367760d89e939be6afa274c89f726e21284095d/002) should be deactivated, no longer used
0:00:02.228405710 4249 0x8cac0 DEBUG decodebin3 gstdecodebin3.c:2606:handle_stream_switch:<decodebin3-0>
Check if we can reassign slots
0:00:02.228424543 4249 0x8cac0 DEBUG decodebin3 gstdecodebin3.c:2618:handle_stream_switch:<decodebin3-0>
Checking if slot to deactivate (0x721b9cd0) has a candidate slot to activate
0:00:02.228446918 4249 0x8cac0 DEBUG decodebin3 gstdecodebin3.c:2621:handle_stream_switch:<decodebin3-0>
Comparing to slot 0x721bb8c0
0:00:02.228467668 4249 0x8cac0 DEBUG decodebin3 gstdecodebin3.c:2623:handle_stream_switch:<decodebin3-0>
Re-using
========================================================Following code is crash point in handle_stream_switch ().
gst_stream_get_stream_id (slot_to_activate->active_stream));
to_reassign = g_list_append (to_reassign, (gchar *)Attachment 344911, "Log for decodebin3":
gst.log
Version: 1.11.1