Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MSE][GStreamer] Pause after seek is not working #465

Draft
wants to merge 1 commit into
base: lgi-wpe-2.38-23Q4
Choose a base branch
from

Conversation

tomasz-karczewski-red
Copy link

https://bugs.webkit.org/show_bug.cgi?id=263317

Reviewed by Philippe Normand.

When issuing seeks and play or pauses close to each other, there can be race conditions. To solve then first we need to avoid changing the pipeline state while seeking. Then we need to ensure we know if the pipeline change was rejected or failed, so the function signature was changed. We also need to consider that when a pause is requested by the element and the player issues it to the pipeline, we are paused because it can take some time for the pipeline to pause and if the element queries too fast, it can lead to more race conditions.

  • LayoutTests/media/media-controller-play-then-pause-expected.txt:
  • LayoutTests/media/media-controller-play-then-pause.html:
  • LayoutTests/media/media-source/media-controller-media-source-play-then-pause-expected.txt: Added.
  • LayoutTests/media/media-source/media-controller-media-source-play-then-pause.html: Added.
  • LayoutTests/media/media-source/media-source-seek-and-play-expected.txt: Added.
  • LayoutTests/media/media-source/media-source-seek-and-play.html: Added.
  • LayoutTests/media/media-source/media-source-video-seek-pause-expected.txt: Added.
  • LayoutTests/media/media-source/media-source-video-seek-pause.html: Added.
  • LayoutTests/media/video-seek-pause-expected.txt: Added.
  • LayoutTests/media/video-seek-pause.html: Added.
  • LayoutTests/media/video-test.js: (return.new.Promise):
  • LayoutTests/platform/glib/TestExpectations:
  • LayoutTests/platform/ios/TestExpectations:
  • Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: (WebCore::MediaPlayerPrivateGStreamer::isPipelineSeeking const): (WebCore::MediaPlayerPrivateGStreamer::play):
    (WebCore::MediaPlayerPrivateGStreamer::pause):
    (WebCore::MediaPlayerPrivateGStreamer::paused const): (WebCore::MediaPlayerPrivateGStreamer::seekToTarget): (WebCore::MediaPlayerPrivateGStreamer::changePipelineState): (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
  • Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
  • Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp: (WebCore::MediaPlayerPrivateGStreamerMSE::updateStates):
  • Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
  • Source/WebCore/testing/Internals.cpp: (WebCore::Internals::isPlayerPaused const):
  • Source/WebCore/testing/Internals.h:
  • Source/WebCore/testing/Internals.idl:

Canonical link: https://commits.webkit.org/273977@main

https://bugs.webkit.org/show_bug.cgi?id=263317

Reviewed by Philippe Normand.

When issuing seeks and play or pauses close to each other, there can be race conditions. To solve then first we need to
avoid changing the pipeline state while seeking. Then we need to ensure we know if the pipeline change was rejected or
failed, so the function signature was changed. We also need to consider that when a pause is requested by the element
and the player issues it to the pipeline, we are paused because it can take some time for the pipeline to pause and if
the element queries too fast, it can lead to more race conditions.

* LayoutTests/media/media-controller-play-then-pause-expected.txt:
* LayoutTests/media/media-controller-play-then-pause.html:
* LayoutTests/media/media-source/media-controller-media-source-play-then-pause-expected.txt: Added.
* LayoutTests/media/media-source/media-controller-media-source-play-then-pause.html: Added.
* LayoutTests/media/media-source/media-source-seek-and-play-expected.txt: Added.
* LayoutTests/media/media-source/media-source-seek-and-play.html: Added.
* LayoutTests/media/media-source/media-source-video-seek-pause-expected.txt: Added.
* LayoutTests/media/media-source/media-source-video-seek-pause.html: Added.
* LayoutTests/media/video-seek-pause-expected.txt: Added.
* LayoutTests/media/video-seek-pause.html: Added.
* LayoutTests/media/video-test.js:
(return.new.Promise):
* LayoutTests/platform/glib/TestExpectations:
* LayoutTests/platform/ios/TestExpectations:
* Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::MediaPlayerPrivateGStreamer::isPipelineSeeking const):
(WebCore::MediaPlayerPrivateGStreamer::play):
(WebCore::MediaPlayerPrivateGStreamer::pause):
(WebCore::MediaPlayerPrivateGStreamer::paused const):
(WebCore::MediaPlayerPrivateGStreamer::seekToTarget):
(WebCore::MediaPlayerPrivateGStreamer::changePipelineState):
(WebCore::MediaPlayerPrivateGStreamer::handleMessage):
* Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
* Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
(WebCore::MediaPlayerPrivateGStreamerMSE::updateStates):
* Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
* Source/WebCore/testing/Internals.cpp:
(WebCore::Internals::isPlayerPaused const):
* Source/WebCore/testing/Internals.h:
* Source/WebCore/testing/Internals.idl:

Canonical link: https://commits.webkit.org/273977@main
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants