Changeset 275571 in webkit


Ignore:
Timestamp:
Apr 6, 2021 4:51:54 PM (3 years ago)
Author:
jer.noble@apple.com
Message:

[MediaSession] Add optional mediaTime and hostTime arguments to the playSession() command.
https://bugs.webkit.org/show_bug.cgi?id=224173

Reviewed by Eric Carlson.

Source/WebCore:

When receiving a playSession() method that has an optional mediaTime argument, perform a
seekAction before the matching playAction if the current media time is not already approximately
equal to the mediaTime argument.

  • Modules/mediasession/MediaSessionCoordinator.cpp:

(WebCore::MediaSessionCoordinator::playSession):
(WebCore::MediaSessionCoordinator::currentPositionApproximatelyEqualTo):

  • Modules/mediasession/MediaSessionCoordinator.h:
  • Modules/mediasession/MediaSessionCoordinatorPrivate.h:

Source/WebKit:

  • UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:

(WebKit::RemoteMediaSessionCoordinatorProxy::playSession):

  • UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h:
  • WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp:

(WebKit::RemoteMediaSessionCoordinator::playSession):

  • WebProcess/MediaSession/RemoteMediaSessionCoordinator.h:
  • WebProcess/MediaSession/RemoteMediaSessionCoordinator.messages.in:
Location:
trunk/Source
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r275570 r275571  
     12021-04-06  Jer Noble  <jer.noble@apple.com>
     2
     3        [MediaSession] Add optional mediaTime and hostTime arguments to the playSession() command.
     4        https://bugs.webkit.org/show_bug.cgi?id=224173
     5
     6        Reviewed by Eric Carlson.
     7
     8        When receiving a playSession() method that has an optional mediaTime argument, perform a
     9        seekAction before the matching playAction if the current media time is not already approximately
     10        equal to the mediaTime argument.
     11
     12        * Modules/mediasession/MediaSessionCoordinator.cpp:
     13        (WebCore::MediaSessionCoordinator::playSession):
     14        (WebCore::MediaSessionCoordinator::currentPositionApproximatelyEqualTo):
     15        * Modules/mediasession/MediaSessionCoordinator.h:
     16        * Modules/mediasession/MediaSessionCoordinatorPrivate.h:
     17
    1182021-04-06  Said Abou-Hallawa  <said@apple.com>
    219
  • trunk/Source/WebCore/Modules/mediasession/MediaSessionCoordinator.cpp

    r275458 r275571  
    3636#include "MediaSessionCoordinatorPrivate.h"
    3737#include <wtf/Logger.h>
     38#include <wtf/Seconds.h>
     39
     40static const Seconds CommandTimeTolerance = 50_ms;
    3841
    3942namespace WebCore {
     
    297300}
    298301
    299 void MediaSessionCoordinator::playSession(CompletionHandler<void(bool)>&& completionHandler)
    300 {
     302void MediaSessionCoordinator::playSession(Optional<double> atTime, Optional<double> hostTime, CompletionHandler<void(bool)>&& completionHandler)
     303{
     304    UNUSED_PARAM(hostTime);
    301305    ALWAYS_LOG(LOGIDENTIFIER, m_state);
    302306
     
    305309        return;
    306310    }
     311
     312    if (atTime && !currentPositionApproximatelyEqualTo(*atTime))
     313        m_session->callActionHandler({ .action = MediaSessionAction::Seekto, .seekTime = *atTime });
    307314
    308315    m_session->callActionHandler({ .action = MediaSessionAction::Play });
     
    336343}
    337344
     345bool MediaSessionCoordinator::currentPositionApproximatelyEqualTo(double time)
     346{
     347    if (!m_session)
     348        return false;
     349
     350    auto currentPosition = m_session->currentPosition();
     351    if (!currentPosition)
     352        return false;
     353
     354    auto delta = Seconds(abs(*currentPosition - time));
     355    return delta <= CommandTimeTolerance;
     356}
     357
    338358WTFLogChannel& MediaSessionCoordinator::logChannel()
    339359{
  • trunk/Source/WebCore/Modules/mediasession/MediaSessionCoordinator.h

    r275458 r275571  
    7373    // MediaSessionCoordinatorClient
    7474    void seekSessionToTime(double, CompletionHandler<void(bool)>&&) final;
    75     void playSession(CompletionHandler<void(bool)>&&) final;
     75    void playSession(Optional<double> atTime, Optional<double> hostTime, CompletionHandler<void(bool)>&&) final;
    7676    void pauseSession(CompletionHandler<void(bool)>&&) final;
    7777    void setSessionTrack(const String&, CompletionHandler<void(bool)>&&) final;
  • trunk/Source/WebCore/Modules/mediasession/MediaSessionCoordinatorPrivate.h

    r275458 r275571  
    4747
    4848    virtual void seekSessionToTime(double, CompletionHandler<void(bool)>&&) = 0;
    49     virtual void playSession(CompletionHandler<void(bool)>&&) = 0;
     49    virtual void playSession(Optional<double> atTime, Optional<double> hostTime, CompletionHandler<void(bool)>&&) = 0;
    5050    virtual void pauseSession(CompletionHandler<void(bool)>&&) = 0;
    5151    virtual void setSessionTrack(const String&, CompletionHandler<void(bool)>&&) = 0;
  • trunk/Source/WebKit/ChangeLog

    r275563 r275571  
     12021-04-06  Jer Noble  <jer.noble@apple.com>
     2
     3        [MediaSession] Add optional mediaTime and hostTime arguments to the playSession() command.
     4        https://bugs.webkit.org/show_bug.cgi?id=224173
     5
     6        Reviewed by Eric Carlson.
     7
     8        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:
     9        (WebKit::RemoteMediaSessionCoordinatorProxy::playSession):
     10        * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h:
     11        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp:
     12        (WebKit::RemoteMediaSessionCoordinator::playSession):
     13        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.h:
     14        * WebProcess/MediaSession/RemoteMediaSessionCoordinator.messages.in:
     15
    1162021-04-06  Brent Fulgham  <bfulgham@apple.com>
    217
  • trunk/Source/WebKit/UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp

    r275537 r275571  
    160160}
    161161
    162 void RemoteMediaSessionCoordinatorProxy::playSession(CompletionHandler<void(bool)>&& callback)
     162void RemoteMediaSessionCoordinatorProxy::playSession(Optional<double> atTime, Optional<double> hostTime, CompletionHandler<void(bool)>&& callback)
    163163{
    164     m_webPageProxy.sendWithAsyncReply(Messages::RemoteMediaSessionCoordinator::PlaySession { }, callback);
     164    m_webPageProxy.sendWithAsyncReply(Messages::RemoteMediaSessionCoordinator::PlaySession { WTFMove(atTime), WTFMove(hostTime) }, callback);
    165165}
    166166
  • trunk/Source/WebKit/UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h

    r275537 r275571  
    7878    // MediaSessionCoordinatorClient
    7979    void seekSessionToTime(double, CompletionHandler<void(bool)>&&) final;
    80     void playSession(CompletionHandler<void(bool)>&&) final;
     80    void playSession(Optional<double> atTime, Optional<double> hostTime, CompletionHandler<void(bool)>&&) final;
    8181    void pauseSession(CompletionHandler<void(bool)>&&) final;
    8282    void setSessionTrack(const String&, CompletionHandler<void(bool)>&&) final;
  • trunk/Source/WebKit/WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp

    r275537 r275571  
    191191}
    192192
    193 void RemoteMediaSessionCoordinator::playSession(CompletionHandler<void(bool)>&& completionHandler)
    194 {
    195     ALWAYS_LOG_IF_POSSIBLE(LOGIDENTIFIER);
    196     if (auto coordinatorClient = client())
    197         coordinatorClient->playSession(WTFMove((completionHandler)));
     193void RemoteMediaSessionCoordinator::playSession(Optional<double> atTime, Optional<double> hostTime, CompletionHandler<void(bool)>&& completionHandler)
     194{
     195    ALWAYS_LOG_IF_POSSIBLE(LOGIDENTIFIER);
     196    if (auto coordinatorClient = client())
     197        coordinatorClient->playSession(WTFMove(atTime), WTFMove(hostTime), WTFMove((completionHandler)));
    198198    else
    199199        completionHandler(false);
  • trunk/Source/WebKit/WebProcess/MediaSession/RemoteMediaSessionCoordinator.h

    r275314 r275571  
    5656    // MessageReceivers.
    5757    void seekSessionToTime(double, CompletionHandler<void(bool)>&&);
    58     void playSession(CompletionHandler<void(bool)>&&);
     58    void playSession(Optional<double>, Optional<double>, CompletionHandler<void(bool)>&&);
    5959    void pauseSession(CompletionHandler<void(bool)>&&);
    6060    void setSessionTrack(const String&, CompletionHandler<void(bool)>&&);
  • trunk/Source/WebKit/WebProcess/MediaSession/RemoteMediaSessionCoordinator.messages.in

    r275210 r275571  
    3030    SeekSessionToTime(double time) -> (bool result) Async
    3131
    32     PlaySession() -> (bool result) Async
     32    PlaySession(Optional<double> atTime, Optional<double> hostTime) -> (bool result) Async
    3333
    3434    PauseSession() -> (bool result) Async
Note: See TracChangeset for help on using the changeset viewer.