After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 777735 - urisourcebin: Push EOS if slot is still eos state
urisourcebin: Push EOS if slot is still eos state
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-base
git master
Other Linux
: Normal normal
: 1.12.3
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2017-01-25 10:34 UTC by Seungha Yang
Modified: 2017-08-17 10:42 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
urisourcebin: Push EOS if slot is still eos state (2.33 KB, patch)
2017-01-25 10:34 UTC, Seungha Yang
committed Details | Review
decodebin3: Push EOS to output stream if they are all drained (2.88 KB, patch)
2017-01-25 11:01 UTC, Seungha Yang
committed Details | Review

Description Seungha Yang 2017-01-25 10:34:03 UTC
linked input of slot can be old input, so urisourcebin should check
eos state to figure out whether it's new one or not.
If not, urisourcebin never ever forwards EOS to downstream at the end
of presentation, because the old input is still there without removal
Comment 1 Seungha Yang 2017-01-25 10:34:55 UTC
Created attachment 344206 [details] [review]
urisourcebin: Push EOS if slot is still eos state
Comment 2 Seungha Yang 2017-01-25 11:01:56 UTC
Created attachment 344207 [details] [review]
decodebin3: Push EOS to output stream if they are all drained

decodebin3 checks input streams and pushes EOS if all input streams
are EOSed. If not, fake EOS is pushed to the corresponding slot.
    
When adaptivedemux is used with multi-track configuration,
adaptivedemux never ever push EOS to non-selected track
because streaming thread for the slot stops with not-linked flow return.
So, decodebin3 should generate EOS itself to finish playback.
Comment 3 Seungha Yang 2017-01-25 11:06:47 UTC
When adaptivedemux is used, current playbin3 never post EOS message to application by 2 reasons.

- urisourcebin drop EOS at the end of presentation. This is not restricted to multi-track.
- non-selected track never pushes EOS unlike usual demuxer. So, actual EOS condition cannot be satisfied.

I tested with following mpd and several multi-track hls streams.
http://dash.akamaized.net/dash264/TestCases/10a/1/iis_forest_short_poem_multi_lang_480p_single_adapt_aaclc_sidx.mpd
Comment 4 Edward Hervey 2017-07-14 07:48:02 UTC
commit 60cae68c4e243e461ecd3eff011c0cb988235521
Author: Seungha Yang <sh.yang@lge.com>
Date:   Wed Jan 25 19:51:17 2017 +0900

    decodebin3: Push EOS to output stream if they are all drained
    
    decodebin3 checks input streams and pushes EOS if all input streams
    are EOSed. If not, fake EOS is pushed to the corresponding slot.
    
    When adaptivedemux is used with multi-track configuration,
    adaptivedemux never ever push EOS to non-selected track
    because streaming thread for the slot stops with not-linked flow return.
    So, decodebin3 should generate EOS itself to finish playback.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777735

commit fc67a689aff22f183598e5aed6599efb68d5516b
Author: Seungha Yang <sh.yang@lge.com>
Date:   Wed Jan 25 19:20:44 2017 +0900

    urisourcebin: Push EOS if slot is still eos state
    
    linked input of slot can be old input, so urisourcebin should check
    eos state to figure out whether it's new one or not.
    If not, urisourcebin never ever forwards EOS to downstream at the end
    of presentation, because the old input is still there without removal
    
    https://bugzilla.gnome.org/show_bug.cgi?id=777735