Summary: | [GStreamer][MSE] Replay hits an assertion | ||
---|---|---|---|
Product: | WebKit | Reporter: | Alicia Boya García <aboya> |
Component: | WebKitGTK | Assignee: | Enrique Ocaña <eocanha> |
Status: | RESOLVED FIXED | ||
Severity: | Normal | CC: | bugs-noreply, eocanha |
Priority: | P2 | ||
Version: | WebKit Nightly Build | ||
Hardware: | Unspecified | ||
OS: | Unspecified |
Description
Alicia Boya García
2018-09-27 13:15:22 PDT
The assert happens when you manually click "play" after the test has finished. It happens because the finish (EOS) of the video after the test sets the playback pipeline to READY, destroying almost all the elements. On the second playback (manual one), the pipeline is recreated and the "source-setup" signal ends up triggering MediaSource::setPrivateAndOpen() a second time, and the assert checks that it can only happen a single time. A second empty WebKitMediaSource is created when the second playback begins, and it's misconfigured (no player private pointer, no appsrcs linked to SourceBuffers). I need to find a way to re-create the Streams when WebKitMediaSource is re-created. I've coded a way to recreate the Streams and re-attach them on second playback but things still aren't working as they should, because nobody tries to put the pipeline on PAUSED or PLAYING the second time and the elements aren't in the same state as they were during the first playback. Debugged where does the change to PAUSED/PLAYING comes from the first time and why it doesn't happen on the second time. Added code to put the playback pipeline automatically in PAUSED the second time, but SourceBuffer isn't aware that it has to enqueue samples. Added code to reenqueue samples, but the state change doesn't complete. |