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 785120 - playbin3: Supporting subtitle only input is unstable
playbin3: Supporting subtitle only input is unstable
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-base
git master
Other Linux
: Normal normal
: 1.13.1
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2017-07-19 11:36 UTC by Seungha Yang
Modified: 2017-07-19 15:15 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
playbin3: Delay linking text output until video stream is shown (1.33 KB, patch)
2017-07-19 11:39 UTC, Seungha Yang
committed Details | Review
parsebin: Ensure StreamType and Caps of GstStream object before exposing it (1.82 KB, patch)
2017-07-19 11:40 UTC, Seungha Yang
committed Details | Review
decodebin3: Remove FIXME and do remove_input_stream() only for the corresponding parsebin (2.34 KB, patch)
2017-07-19 11:41 UTC, Seungha Yang
committed Details | Review

Description Seungha Yang 2017-07-19 11:36:51 UTC
DASH + subtitle playback using playbin3 has multiple issues.
- Too early unblocking of decodebin3 srcpad depending on collection arrival time.
==> Assume the mpd has A/V/T streams. If the collection of video arrives before Text, is ok. But if Text came first and then Audio does (not yet video), playbin3 unblock and link them without video. Current playsink doesn't support text only sink.
- Unexpected DecodebinInputStream removal. 
==> Before configuration of A/V input, Text input can be configured with EOS. Then, when A/V is configured, it removes the Text's streams. We shouldn't remove other parsebin's input.
- Premature GstStream object is exposed.
Comment 1 Seungha Yang 2017-07-19 11:37:39 UTC
I tested using following stream on playbin3.
http://dash.edgesuite.net/akamai/test/caption_test/ElephantsDream/elephants_dream_480p_heaac5_1.mpd
Comment 2 Seungha Yang 2017-07-19 11:39:57 UTC
Created attachment 355933 [details] [review]
playbin3: Delay linking text output until video stream is shown

We are not sure that which stream's collection arrives first
when there are multiple parsebins such as adaptive streaming.
Comment 3 Seungha Yang 2017-07-19 11:40:40 UTC
Created attachment 355934 [details] [review]
parsebin: Ensure StreamType and Caps of GstStream object before exposing it

The final StreamType and Caps might not be set yet on GstStream at exposing the pads.
Comment 4 Seungha Yang 2017-07-19 11:41:37 UTC
Created attachment 355935 [details] [review]
decodebin3: Remove FIXME and do remove_input_stream() only for the corresponding parsebin

Do not remove other parsebin's input streams. It will cause unexpected
removal of any input streams in multi-parsebin use case.

Basically, the purpose of blocking buffers is similar to checking
no-more-pads of chain/group. That is, it gives hint to know the timing
to remove old (EOSed) streams of the parsebin and to add/reuse slots
for new input streams. But, that doesn't mean that we need to remove
other parsebin's EOSed stream. Each parsebin has most likely its
own streaming thread and therefore EOSed time can be much different.
(i.e., much early EOS of subtitle only parsebin)
Comment 5 Edward Hervey 2017-07-19 15:14:37 UTC
Thanks !

commit bf32c0b3b00b7f60d9ea9afd078be9cb090d9eb7 (HEAD -> master, origin/master, origin/HEAD)
Author: Seungha Yang <sh.yang@lge.com>
Date:   Wed Jul 19 19:58:28 2017 +0900

    decodebin3: Remove FIXME and do remove_input_stream() only for the corresponding parsebin
    
    Do not remove other parsebin's input streams. It will cause unexpected
    removal of any input streams in multi-parsebin use case.
    
    Basically, the purpose of blocking buffers is similar to checking
    no-more-pads of chain/group. That is, it gives hint to know the timing
    to remove old (EOSed) streams of the parsebin and to add/reuse slots
    for new input streams. But, that doesn't mean that we need to remove
    other parsebin's EOSed stream. Each parsebin has most likely its
    own streaming thread and therefore EOSed time can be much different.
    (i.e., much early EOS of subtitle only parsebin)
    
    https://bugzilla.gnome.org/show_bug.cgi?id=785120

commit abe1183c1704a284983bb0cfe4d5132dbdc5ed3a
Author: Seungha Yang <sh.yang@lge.com>
Date:   Wed Jul 19 18:47:29 2017 +0900

    parsebin: Ensure StreamType and Caps of GstStream object before exposing it
    
    The final StreamType and Caps might not be set yet on GstStream at exposing the pads.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=785120

commit 7a236e23022b26b3afc1eb4f718dc4978c34a747
Author: Seungha Yang <sh.yang@lge.com>
Date:   Wed Jul 19 13:39:52 2017 +0900

    playbin3: Delay linking text output until video stream is shown
    
    We are not sure that which stream's collection arrives first
    when there are multiple parsebins such as adaptive streaming.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=785120