Changeset 254454 in webkit


Ignore:
Timestamp:
Jan 13, 2020 2:27:39 PM (4 years ago)
Author:
eric.carlson@apple.com
Message:

Expose audio tracks for media files in the GPUProcess
https://bugs.webkit.org/show_bug.cgi?id=206152
<rdar://problem/58513227>

Reviewed by youenn fablet.

Source/WebCore:

No new tests, un-skipped existing tests that pass because of this change.

  • platform/graphics/AudioTrackPrivate.h:
  • platform/graphics/TrackPrivateBase.h:

Source/WebKit:

  • GPUProcess/media/RemoteAudioTrackProxy.cpp: Added.

(WebKit::RemoteAudioTrackProxy::RemoteAudioTrackProxy):
(WebKit::RemoteAudioTrackProxy::configuration):
(WebKit::RemoteAudioTrackProxy::configurationChanged):
(WebKit::RemoteAudioTrackProxy::willRemove):
(WebKit::RemoteAudioTrackProxy::enabledChanged):
(WebKit::RemoteAudioTrackProxy::idChanged):
(WebKit::RemoteAudioTrackProxy::labelChanged):
(WebKit::RemoteAudioTrackProxy::languageChanged):

  • GPUProcess/media/RemoteAudioTrackProxy.h: Added.
  • GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:

(WebKit::RemoteMediaPlayerManagerProxy::setRate):
(WebKit::RemoteMediaPlayerManagerProxy::audioTrackSetEnabled):

  • GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
  • GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
  • GPUProcess/media/RemoteMediaPlayerProxy.cpp:

(WebKit::RemoteMediaPlayerProxy::mediaPlayerDidAddAudioTrack):
(WebKit::RemoteMediaPlayerProxy::mediaPlayerDidRemoveAudioTrack):
(WebKit::RemoteMediaPlayerProxy::audioTrackSetEnabled):

  • GPUProcess/media/RemoteMediaPlayerProxy.h:
  • GPUProcess/media/TrackPrivateRemoteConfiguration.h: Added.

(WebKit::TrackPrivateRemoteConfiguration::encode const):
(WebKit::TrackPrivateRemoteConfiguration::decode):

  • GPUProcess/media/TrackPrivateRemoteIdentifier.h: Added.
  • Scripts/webkit/messages.py:
  • Sources.txt:
  • WebKit.xcodeproj/project.pbxproj:
  • WebProcess/GPU/media/AudioTrackPrivateRemote.cpp: Added.

(WebKit::AudioTrackPrivateRemote::AudioTrackPrivateRemote):
(WebKit::AudioTrackPrivateRemote::setEnabled):
(WebKit::AudioTrackPrivateRemote::updateConfiguration):

  • WebProcess/GPU/media/AudioTrackPrivateRemote.h: Added.

(WebKit::AudioTrackPrivateRemote::create):

  • WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:

(WebKit::MediaPlayerPrivateRemote::addRemoteAudioTrack):
(WebKit::MediaPlayerPrivateRemote::removeRemoteAudioTrack):
(WebKit::MediaPlayerPrivateRemote::remoteAudioTrackConfigurationChanged):

  • WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
  • WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:

(WebKit::RemoteMediaPlayerManager::timeChanged):
(WebKit::RemoteMediaPlayerManager::durationChanged):
(WebKit::RemoteMediaPlayerManager::engineFailedToLoad):
(WebKit::RemoteMediaPlayerManager::characteristicChanged):
(WebKit::RemoteMediaPlayerManager::sizeChanged):
(WebKit::RemoteMediaPlayerManager::addRemoteAudioTrack):
(WebKit::RemoteMediaPlayerManager::removeRemoteAudioTrack):
(WebKit::RemoteMediaPlayerManager::remoteAudioTrackConfigurationChanged):
(WebKit::RemoteMediaPlayerManager::updateCachedState):

  • WebProcess/GPU/media/RemoteMediaPlayerManager.h:
  • WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in:
  • WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:

LayoutTests:

  • gpu-process/TestExpectations:
Location:
trunk
Files:
6 added
21 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r254453 r254454  
     12020-01-13  Eric Carlson  <eric.carlson@apple.com>
     2
     3        Expose audio tracks for media files in the GPUProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=206152
     5        <rdar://problem/58513227>
     6
     7        Reviewed by youenn fablet.
     8
     9        * gpu-process/TestExpectations:
     10
    1112020-01-13  Zalan Bujtas  <zalan@apple.com>
    212
  • trunk/LayoutTests/gpu-process/TestExpectations

    r254392 r254454  
    219219media/video-controls-visible-audio-only.html [ Pass ]
    220220media/video-play-audio-require-user-gesture.html [ Pass ]
     221media/track/audio-track.html [ Pass ]
     222media/audio-track-add-remove.html [ Pass ]
    221223
    222224accessibility/media-element.html [ Skip ]
  • trunk/Source/WebCore/ChangeLog

    r254446 r254454  
     12020-01-13  Eric Carlson  <eric.carlson@apple.com>
     2
     3        Expose audio tracks for media files in the GPUProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=206152
     5        <rdar://problem/58513227>
     6
     7        Reviewed by youenn fablet.
     8
     9        No new tests, un-skipped existing tests that pass because of this change.
     10
     11        * platform/graphics/AudioTrackPrivate.h:
     12        * platform/graphics/TrackPrivateBase.h:
     13
    1142020-01-13  youenn fablet  <youenn@apple.com>
    215
  • trunk/Source/WebCore/platform/graphics/AudioTrackPrivate.h

    r222091 r254454  
    7777} // namespace WebCore
    7878
     79namespace WTF {
     80
     81template<> struct EnumTraits<WebCore::AudioTrackPrivate::Kind> {
     82    using values = EnumValues<
     83        WebCore::AudioTrackPrivate::Kind,
     84        WebCore::AudioTrackPrivate::Kind::Alternative,
     85        WebCore::AudioTrackPrivate::Kind::Description,
     86        WebCore::AudioTrackPrivate::Kind::Main,
     87        WebCore::AudioTrackPrivate::Kind::MainDesc,
     88        WebCore::AudioTrackPrivate::Kind::Translation,
     89        WebCore::AudioTrackPrivate::Kind::Commentary,
     90        WebCore::AudioTrackPrivate::Kind::None
     91    >;
     92};
     93
     94} // namespace WTF
     95
    7996#endif
  • trunk/Source/WebCore/platform/graphics/TrackPrivateBase.h

    r254446 r254454  
    4646};
    4747
    48 class TrackPrivateBase
     48class WEBCORE_EXPORT TrackPrivateBase
    4949    : public ThreadSafeRefCounted<TrackPrivateBase, WTF::DestructionThread::Main>
    5050#if !RELEASE_LOG_DISABLED
  • trunk/Source/WebKit/ChangeLog

    r254439 r254454  
     12020-01-13  Eric Carlson  <eric.carlson@apple.com>
     2
     3        Expose audio tracks for media files in the GPUProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=206152
     5        <rdar://problem/58513227>
     6
     7        Reviewed by youenn fablet.
     8
     9        * GPUProcess/media/RemoteAudioTrackProxy.cpp: Added.
     10        (WebKit::RemoteAudioTrackProxy::RemoteAudioTrackProxy):
     11        (WebKit::RemoteAudioTrackProxy::configuration):
     12        (WebKit::RemoteAudioTrackProxy::configurationChanged):
     13        (WebKit::RemoteAudioTrackProxy::willRemove):
     14        (WebKit::RemoteAudioTrackProxy::enabledChanged):
     15        (WebKit::RemoteAudioTrackProxy::idChanged):
     16        (WebKit::RemoteAudioTrackProxy::labelChanged):
     17        (WebKit::RemoteAudioTrackProxy::languageChanged):
     18        * GPUProcess/media/RemoteAudioTrackProxy.h: Added.
     19        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
     20        (WebKit::RemoteMediaPlayerManagerProxy::setRate):
     21        (WebKit::RemoteMediaPlayerManagerProxy::audioTrackSetEnabled):
     22        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
     23        * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
     24        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
     25        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDidAddAudioTrack):
     26        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDidRemoveAudioTrack):
     27        (WebKit::RemoteMediaPlayerProxy::audioTrackSetEnabled):
     28        * GPUProcess/media/RemoteMediaPlayerProxy.h:
     29        * GPUProcess/media/TrackPrivateRemoteConfiguration.h: Added.
     30        (WebKit::TrackPrivateRemoteConfiguration::encode const):
     31        (WebKit::TrackPrivateRemoteConfiguration::decode):
     32        * GPUProcess/media/TrackPrivateRemoteIdentifier.h: Added.
     33        * Scripts/webkit/messages.py:
     34        * Sources.txt:
     35        * WebKit.xcodeproj/project.pbxproj:
     36        * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp: Added.
     37        (WebKit::AudioTrackPrivateRemote::AudioTrackPrivateRemote):
     38        (WebKit::AudioTrackPrivateRemote::setEnabled):
     39        (WebKit::AudioTrackPrivateRemote::updateConfiguration):
     40        * WebProcess/GPU/media/AudioTrackPrivateRemote.h: Added.
     41        (WebKit::AudioTrackPrivateRemote::create):
     42        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
     43        (WebKit::MediaPlayerPrivateRemote::addRemoteAudioTrack):
     44        (WebKit::MediaPlayerPrivateRemote::removeRemoteAudioTrack):
     45        (WebKit::MediaPlayerPrivateRemote::remoteAudioTrackConfigurationChanged):
     46        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
     47        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
     48        (WebKit::RemoteMediaPlayerManager::timeChanged):
     49        (WebKit::RemoteMediaPlayerManager::durationChanged):
     50        (WebKit::RemoteMediaPlayerManager::engineFailedToLoad):
     51        (WebKit::RemoteMediaPlayerManager::characteristicChanged):
     52        (WebKit::RemoteMediaPlayerManager::sizeChanged):
     53        (WebKit::RemoteMediaPlayerManager::addRemoteAudioTrack):
     54        (WebKit::RemoteMediaPlayerManager::removeRemoteAudioTrack):
     55        (WebKit::RemoteMediaPlayerManager::remoteAudioTrackConfigurationChanged):
     56        (WebKit::RemoteMediaPlayerManager::updateCachedState):
     57        * WebProcess/GPU/media/RemoteMediaPlayerManager.h:
     58        * WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in:
     59        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
     60
    1612020-01-06  Jiewen Tan  <jiewen_tan@apple.com>
    262
  • trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp

    r254392 r254454  
    324324}
    325325
    326 void RemoteMediaPlayerManagerProxy::setRate(WebKit::MediaPlayerPrivateRemoteIdentifier id, double rate)
     326void RemoteMediaPlayerManagerProxy::setRate(MediaPlayerPrivateRemoteIdentifier id, double rate)
    327327{
    328328    if (auto player = m_proxies.get(id))
    329329        player->setRate(rate);
     330}
     331
     332void RemoteMediaPlayerManagerProxy::audioTrackSetEnabled(MediaPlayerPrivateRemoteIdentifier playerID, TrackPrivateRemoteIdentifier trackID, bool enabled)
     333{
     334    if (auto player = m_proxies.get(playerID))
     335        player->audioTrackSetEnabled(trackID, enabled);
    330336}
    331337
  • trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.h

    r254392 r254454  
    3232#include "MessageReceiver.h"
    3333#include "SandboxExtension.h"
     34#include "TrackPrivateRemoteIdentifier.h"
    3435#include <WebCore/MediaPlayer.h>
    3536#include <wtf/LoggerHelper.h>
     
    110111    void acceleratedRenderingStateChanged(MediaPlayerPrivateRemoteIdentifier, bool);
    111112    void setShouldDisableSleep(MediaPlayerPrivateRemoteIdentifier, bool);
    112     void setRate(WebKit::MediaPlayerPrivateRemoteIdentifier, double);
     113    void setRate(MediaPlayerPrivateRemoteIdentifier, double);
     114
     115    void audioTrackSetEnabled(MediaPlayerPrivateRemoteIdentifier, TrackPrivateRemoteIdentifier, bool);
    113116
    114117    HashMap<MediaPlayerPrivateRemoteIdentifier, std::unique_ptr<RemoteMediaPlayerProxy>> m_proxies;
  • trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in

    r254392 r254454  
    6565    SetShouldDisableSleep(WebKit::MediaPlayerPrivateRemoteIdentifier id, bool disable)
    6666    SetRate(WebKit::MediaPlayerPrivateRemoteIdentifier id, double rate)
     67
     68    AudioTrackSetEnabled(WebKit::MediaPlayerPrivateRemoteIdentifier playerID, WebKit::TrackPrivateRemoteIdentifier trackID, bool enabled)
    6769}
    6870
  • trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp

    r254392 r254454  
    365365}
    366366
     367void RemoteMediaPlayerProxy::mediaPlayerDidAddAudioTrack(WebCore::AudioTrackPrivate& track)
     368{
     369    m_audioTracks.set(&track, RemoteAudioTrackProxy::create(*this, TrackPrivateRemoteIdentifier::generate(), m_webProcessConnection.copyRef(), track));
     370}
     371
     372void RemoteMediaPlayerProxy::mediaPlayerDidRemoveAudioTrack(WebCore::AudioTrackPrivate& track)
     373{
     374    ASSERT(m_audioTracks.contains(&track));
     375    m_audioTracks.remove(&track);
     376}
     377
     378void RemoteMediaPlayerProxy::audioTrackSetEnabled(TrackPrivateRemoteIdentifier trackID, bool enabled)
     379{
     380    for (auto& track : m_audioTracks.values()) {
     381        if (track->identifier() == trackID) {
     382            track->setEnabled(enabled);
     383            return;
     384        }
     385    }
     386
     387    ASSERT_NOT_REACHED();
     388}
     389
    367390// FIXME: Unimplemented
    368391void RemoteMediaPlayerProxy::mediaPlayerResourceNotSupported()
     
    493516
    494517#if ENABLE(VIDEO_TRACK)
    495 void RemoteMediaPlayerProxy::mediaPlayerDidAddAudioTrack(AudioTrackPrivate&)
    496 {
    497     notImplemented();
    498 }
    499 
    500518void RemoteMediaPlayerProxy::mediaPlayerDidAddTextTrack(InbandTextTrackPrivate&)
    501519{
     
    504522
    505523void RemoteMediaPlayerProxy::mediaPlayerDidAddVideoTrack(VideoTrackPrivate&)
    506 {
    507     notImplemented();
    508 }
    509 
    510 void RemoteMediaPlayerProxy::mediaPlayerDidRemoveAudioTrack(AudioTrackPrivate&)
    511524{
    512525    notImplemented();
  • trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h

    r254392 r254454  
    4444#include <wtf/WeakPtr.h>
    4545
     46namespace WebCore {
     47class AudioTrackPrivate;
     48}
     49
    4650namespace WebKit {
    4751
     
    5660    ~RemoteMediaPlayerProxy();
    5761
     62    MediaPlayerPrivateRemoteIdentifier idendifier() const { return m_id; }
    5863    void invalidate();
    5964
     
    8994    void setShouldDisableSleep(bool);
    9095    void setRate(double);
     96
     97    void audioTrackSetEnabled(TrackPrivateRemoteIdentifier, bool);
    9198
    9299    Ref<WebCore::PlatformMediaResource> requestResource(WebCore::ResourceRequest&&, WebCore::PlatformMediaResourceLoader::LoadOptions);
     
    107114    void mediaPlayerSeekableTimeRangesChanged() final;
    108115    bool mediaPlayerRenderingCanBeAccelerated() final;
     116
     117    void mediaPlayerDidAddAudioTrack(WebCore::AudioTrackPrivate&) final;
     118    void mediaPlayerDidRemoveAudioTrack(WebCore::AudioTrackPrivate&) final;
    109119
    110120    // Not implemented
     
    148158    const String& mediaPlayerMediaCacheDirectory() const final;
    149159
    150     void mediaPlayerDidAddAudioTrack(WebCore::AudioTrackPrivate&) final;
    151160    void mediaPlayerDidAddTextTrack(WebCore::InbandTextTrackPrivate&) final;
    152161    void mediaPlayerDidAddVideoTrack(WebCore::VideoTrackPrivate&) final;
    153     void mediaPlayerDidRemoveAudioTrack(WebCore::AudioTrackPrivate&) final;
    154162    void mediaPlayerDidRemoveTextTrack(WebCore::InbandTextTrackPrivate&) final;
    155163    void mediaPlayerDidRemoveVideoTrack(WebCore::VideoTrackPrivate&) final;
     
    187195#endif
    188196
     197    HashMap<AudioTrackPrivate*, Ref<RemoteAudioTrackProxy>> m_audioTracks;
    189198    MediaPlayerPrivateRemoteIdentifier m_id;
    190199    RefPtr<SandboxExtension> m_sandboxExtension;
  • trunk/Source/WebKit/Scripts/webkit/messages.py

    r254383 r254454  
    228228        'WebKit::StorageAreaImplIdentifier',
    229229        'WebKit::StorageNamespaceIdentifier',
     230        'WebKit::TrackPrivateRemoteIdentifier',
    230231        'WebKit::TransactionID',
    231232        'WebKit::UserContentControllerIdentifier',
  • trunk/Source/WebKit/Sources.txt

    r254194 r254454  
    2727GPUProcess/webrtc/RemoteMediaRecorder.cpp
    2828GPUProcess/webrtc/RemoteMediaRecorderManager.cpp
     29GPUProcess/media/RemoteAudioTrackProxy.cpp
    2930GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp
    3031GPUProcess/media/RemoteMediaPlayerProxy.cpp
     
    511512
    512513WebProcess/GPU/GPUProcessConnection.cpp
     514WebProcess/GPU/media/AudioTrackPrivateRemote.cpp
    513515WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp
    514516WebProcess/GPU/media/RemoteMediaPlayerManager.cpp
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r254360 r254454  
    20522052                0701789B23BAE261005F0FAA /* RemoteMediaPlayerMIMETypeCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteMediaPlayerMIMETypeCache.cpp; sourceTree = "<group>"; };
    20532053                0701789C23BAE262005F0FAA /* RemoteMediaPlayerMIMETypeCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteMediaPlayerMIMETypeCache.h; sourceTree = "<group>"; };
     2054                071BC57723C93BB700680D7C /* AudioTrackPrivateRemote.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioTrackPrivateRemote.h; sourceTree = "<group>"; };
     2055                071BC57923C93BB900680D7C /* AudioTrackPrivateRemote.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AudioTrackPrivateRemote.cpp; sourceTree = "<group>"; };
     2056                071BC57B23CA532400680D7C /* TrackPrivateRemoteConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TrackPrivateRemoteConfiguration.h; sourceTree = "<group>"; };
     2057                071BC57D23CA56D200680D7C /* TrackPrivateRemoteIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TrackPrivateRemoteIdentifier.h; sourceTree = "<group>"; };
     2058                071BC57E23CA5DB100680D7C /* RemoteAudioTrackProxy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteAudioTrackProxy.cpp; sourceTree = "<group>"; };
     2059                071BC57F23CA5DB100680D7C /* RemoteAudioTrackProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteAudioTrackProxy.h; sourceTree = "<group>"; };
    20542060                0725EFAB239AE38400A538A9 /* RemoteMediaPlayerManagerProxy.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = RemoteMediaPlayerManagerProxy.messages.in; sourceTree = "<group>"; };
    20552061                0725EFAC239AE38500A538A9 /* RemoteMediaPlayerManagerProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteMediaPlayerManagerProxy.h; sourceTree = "<group>"; };
     
    51705176                        isa = PBXGroup;
    51715177                        children = (
     5178                                071BC57923C93BB900680D7C /* AudioTrackPrivateRemote.cpp */,
     5179                                071BC57723C93BB700680D7C /* AudioTrackPrivateRemote.h */,
    51725180                                07923131239B3B0C009598E2 /* MediaPlayerPrivateRemote.cpp */,
    51735181                                07923132239B3B0C009598E2 /* MediaPlayerPrivateRemote.h */,
     
    51895197                        isa = PBXGroup;
    51905198                        children = (
     5199                                071BC57E23CA5DB100680D7C /* RemoteAudioTrackProxy.cpp */,
     5200                                071BC57F23CA5DB100680D7C /* RemoteAudioTrackProxy.h */,
    51915201                                0725EFAD239B024500A538A9 /* RemoteMediaPlayerManagerProxy.cpp */,
    51925202                                0725EFAC239AE38500A538A9 /* RemoteMediaPlayerManagerProxy.h */,
     
    52035213                                1DA4089423A80A3E0058C950 /* RemoteMediaResourceManager.h */,
    52045214                                1D32F8A623A8601900B1EA6A /* RemoteMediaResourceManager.messages.in */,
     5215                                071BC57B23CA532400680D7C /* TrackPrivateRemoteConfiguration.h */,
     5216                                071BC57D23CA56D200680D7C /* TrackPrivateRemoteIdentifier.h */,
    52055217                        );
    52065218                        path = media;
  • trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp

    r254392 r254454  
    2929#include "MediaPlayerPrivateRemote.h"
    3030
     31#include "AudioTrackPrivateRemote.h"
    3132#include "Logging.h"
    3233#include "RemoteMediaPlayerManagerProxyMessages.h"
     
    8788void MediaPlayerPrivateRemote::prepareForPlayback(bool privateMode, MediaPlayer::Preload preload, bool preservesPitch, bool prepare)
    8889{
    89     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::PrepareForPlayback(m_id, privateMode, preload, preservesPitch, prepare), 0);
     90    connection().send(Messages::RemoteMediaPlayerManagerProxy::PrepareForPlayback(m_id, privateMode, preload, preservesPitch, prepare), 0);
    9091}
    9192
    9293void MediaPlayerPrivateRemote::MediaPlayerPrivateRemote::load(const URL& url, const ContentType& contentType, const String& keySystem)
    9394{
    94     auto& connection = m_manager.gpuProcessConnection().connection();
    9595    Optional<SandboxExtension::Handle> sandboxExtensionHandle;
    9696    if (url.isLocalFile()) {
     
    118118    }
    119119
    120     connection.sendWithAsyncReply(Messages::RemoteMediaPlayerManagerProxy::Load(m_id, url, sandboxExtensionHandle, contentType, keySystem), [weakThis = makeWeakPtr(*this)](auto&& configuration) {
     120    connection().sendWithAsyncReply(Messages::RemoteMediaPlayerManagerProxy::Load(m_id, url, sandboxExtensionHandle, contentType, keySystem), [weakThis = makeWeakPtr(*this)](auto&& configuration) {
    121121        if (weakThis)
    122122            weakThis->m_configuration = configuration;
     
    126126void MediaPlayerPrivateRemote::cancelLoad()
    127127{
    128     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::CancelLoad(m_id), 0);
     128    connection().send(Messages::RemoteMediaPlayerManagerProxy::CancelLoad(m_id), 0);
    129129}
    130130
    131131void MediaPlayerPrivateRemote::prepareToPlay()
    132132{
    133     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::PrepareToPlay(m_id), 0);
     133    connection().send(Messages::RemoteMediaPlayerManagerProxy::PrepareToPlay(m_id), 0);
    134134}
    135135
     
    137137{
    138138    m_cachedState.paused = false;
    139     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::Play(m_id), 0);
     139    connection().send(Messages::RemoteMediaPlayerManagerProxy::Play(m_id), 0);
    140140}
    141141
     
    143143{
    144144    m_cachedState.paused = true;
    145     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::Pause(m_id), 0);
     145    connection().send(Messages::RemoteMediaPlayerManagerProxy::Pause(m_id), 0);
    146146}
    147147
    148148void MediaPlayerPrivateRemote::setPreservesPitch(bool preservesPitch)
    149149{
    150     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::SetPreservesPitch(m_id, preservesPitch), 0);
     150    connection().send(Messages::RemoteMediaPlayerManagerProxy::SetPreservesPitch(m_id, preservesPitch), 0);
    151151}
    152152
    153153void MediaPlayerPrivateRemote::setVolumeDouble(double volume)
    154154{
    155     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::SetVolume(m_id, volume), 0);
     155    connection().send(Messages::RemoteMediaPlayerManagerProxy::SetVolume(m_id, volume), 0);
    156156}
    157157
    158158void MediaPlayerPrivateRemote::setMuted(bool muted)
    159159{
    160     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::SetMuted(m_id, muted), 0);
     160    connection().send(Messages::RemoteMediaPlayerManagerProxy::SetMuted(m_id, muted), 0);
    161161}
    162162
    163163void MediaPlayerPrivateRemote::setPreload(MediaPlayer::Preload preload)
    164164{
    165     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::SetPreload(m_id, preload), 0);
     165    connection().send(Messages::RemoteMediaPlayerManagerProxy::SetPreload(m_id, preload), 0);
    166166}
    167167
    168168void MediaPlayerPrivateRemote::setPrivateBrowsingMode(bool privateMode)
    169169{
    170     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::SetPrivateBrowsingMode(m_id, privateMode), 0);
     170    connection().send(Messages::RemoteMediaPlayerManagerProxy::SetPrivateBrowsingMode(m_id, privateMode), 0);
    171171}
    172172
     
    179179{
    180180    m_seeking = true;
    181     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::Seek(m_id, time), 0);
     181    connection().send(Messages::RemoteMediaPlayerManagerProxy::Seek(m_id, time), 0);
    182182}
    183183
     
    185185{
    186186    m_seeking = true;
    187     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::SeekWithTolerance(m_id, time, negativeTolerance, positiveTolerance), 0);
     187    connection().send(Messages::RemoteMediaPlayerManagerProxy::SeekWithTolerance(m_id, time, negativeTolerance, positiveTolerance), 0);
    188188}
    189189
     
    342342void MediaPlayerPrivateRemote::prepareForRendering()
    343343{
    344     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::PrepareForRendering(m_id), 0);
     344    connection().send(Messages::RemoteMediaPlayerManagerProxy::PrepareForRendering(m_id), 0);
    345345}
    346346
    347347void MediaPlayerPrivateRemote::setSize(const WebCore::IntSize& size)
    348348{
    349     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::SetSize(m_id, size), 0);
     349    connection().send(Messages::RemoteMediaPlayerManagerProxy::SetSize(m_id, size), 0);
    350350}
    351351
    352352void MediaPlayerPrivateRemote::setVisible(bool visible)
    353353{
    354     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::SetVisible(m_id, visible), 0);
     354    connection().send(Messages::RemoteMediaPlayerManagerProxy::SetVisible(m_id, visible), 0);
    355355}
    356356
    357357void MediaPlayerPrivateRemote::setShouldMaintainAspectRatio(bool maintainRatio)
    358358{
    359     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::SetShouldMaintainAspectRatio(m_id, maintainRatio), 0);
     359    connection().send(Messages::RemoteMediaPlayerManagerProxy::SetShouldMaintainAspectRatio(m_id, maintainRatio), 0);
    360360}
    361361
    362362void MediaPlayerPrivateRemote::setVideoFullscreenFrame(WebCore::FloatRect rect)
    363363{
    364     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::SetVideoFullscreenFrame(m_id, rect), 0);
     364    connection().send(Messages::RemoteMediaPlayerManagerProxy::SetVideoFullscreenFrame(m_id, rect), 0);
    365365}
    366366
    367367void MediaPlayerPrivateRemote::setVideoFullscreenGravity(WebCore::MediaPlayerEnums::VideoGravity gravity)
    368368{
    369     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::SetVideoFullscreenGravity(m_id, gravity), 0);
     369    connection().send(Messages::RemoteMediaPlayerManagerProxy::SetVideoFullscreenGravity(m_id, gravity), 0);
    370370}
    371371
    372372void MediaPlayerPrivateRemote::acceleratedRenderingStateChanged()
    373373{
    374     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::AcceleratedRenderingStateChanged(m_id, m_player->supportsAcceleratedRendering()), 0);
     374    connection().send(Messages::RemoteMediaPlayerManagerProxy::AcceleratedRenderingStateChanged(m_id, m_player->supportsAcceleratedRendering()), 0);
    375375}
    376376
    377377void MediaPlayerPrivateRemote::setShouldDisableSleep(bool disable)
    378378{
    379     m_manager.gpuProcessConnection().connection().send(Messages::RemoteMediaPlayerManagerProxy::SetShouldDisableSleep(m_id, disable), 0);
     379    connection().send(Messages::RemoteMediaPlayerManagerProxy::SetShouldDisableSleep(m_id, disable), 0);
    380380}
    381381
     
    383383{
    384384    return m_cachedState.naturalSize;
     385}
     386
     387void MediaPlayerPrivateRemote::addRemoteAudioTrack(TrackPrivateRemoteIdentifier identifier, TrackPrivateRemoteConfiguration&& configuration)
     388{
     389    ASSERT(!m_audioTracks.contains(identifier));
     390    if (m_audioTracks.contains(identifier))
     391        return;
     392
     393    auto track = AudioTrackPrivateRemote::create(*this, identifier, WTFMove(configuration));
     394    m_player->addAudioTrack(m_audioTracks.add(identifier, WTFMove(track)).iterator->value);
     395}
     396
     397void MediaPlayerPrivateRemote::removeRemoteAudioTrack(TrackPrivateRemoteIdentifier id)
     398{
     399    ASSERT(m_audioTracks.contains(id));
     400
     401    if (auto* track = m_audioTracks.get(id)) {
     402        m_player->removeAudioTrack(*track);
     403        m_audioTracks.remove(id);
     404    }
     405}
     406
     407void MediaPlayerPrivateRemote::remoteAudioTrackConfigurationChanged(TrackPrivateRemoteIdentifier id, TrackPrivateRemoteConfiguration&& configuration)
     408{
     409    ASSERT(m_audioTracks.contains(id));
     410
     411    if (const auto& track = m_audioTracks.get(id))
     412        track->updateConfiguration(WTFMove(configuration));
    385413}
    386414
     
    842870    auto resource = m_mediaResourceLoader->requestResource(WTFMove(request), options);
    843871    // PlatformMediaResource owns the PlatformMediaResourceClient
    844     resource->setClient(makeUnique<RemoteMediaResourceProxy>(m_manager.gpuProcessConnection().connection(), *resource, remoteMediaResourceIdentifier));
     872    resource->setClient(makeUnique<RemoteMediaResourceProxy>(connection(), *resource, remoteMediaResourceIdentifier));
    845873    m_mediaResources.add(remoteMediaResourceIdentifier, WTFMove(resource));
    846874}
  • trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h

    r254392 r254454  
    3333#include "RemoteMediaResourceIdentifier.h"
    3434#include "RemoteMediaResourceProxy.h"
     35#include "TrackPrivateRemoteIdentifier.h"
    3536#include <WebCore/MediaPlayerPrivate.h>
    3637#include <wtf/LoggerHelper.h>
     
    3940
    4041namespace WebKit {
     42
     43class AudioTrackPrivateRemote;
     44struct TrackPrivateRemoteConfiguration;
    4145
    4246class MediaPlayerPrivateRemote final
     
    5963    void invalidate() { m_invalid = true; }
    6064    WebCore::MediaPlayerEnums::MediaEngineIdentifier remoteEngineIdentifier() const { return m_remoteEngineIdentifier; }
    61     MediaPlayerPrivateRemoteIdentifier playerItentifier() const { return m_id; }
     65    MediaPlayerPrivateRemoteIdentifier itentifier() const { return m_id; }
     66    IPC::Connection& connection() const { return m_manager.gpuProcessConnection().connection(); }
    6267
    6368    void networkStateChanged(RemoteMediaPlayerState&&);
     
    7479    void sizeChanged(WebCore::FloatSize);
    7580
     81    void addRemoteAudioTrack(TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
     82    void removeRemoteAudioTrack(TrackPrivateRemoteIdentifier);
     83    void remoteAudioTrackConfigurationChanged(TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
     84
    7685    void requestResource(RemoteMediaResourceIdentifier, WebCore::ResourceRequest&&, WebCore::PlatformMediaResourceLoader::LoadOptions);
    7786    void removeResource(RemoteMediaResourceIdentifier);
     
    312321
    313322    HashMap<RemoteMediaResourceIdentifier, RefPtr<WebCore::PlatformMediaResource>> m_mediaResources;
     323    HashMap<TrackPrivateRemoteIdentifier, Ref<AudioTrackPrivateRemote>> m_audioTracks;
    314324
    315325    double m_volume { 1 };
  • trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp

    r254392 r254454  
    11/*
    2  * Copyright (C) 2019 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019-2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    262262}
    263263
    264 void RemoteMediaPlayerManager::timeChanged(WebKit::MediaPlayerPrivateRemoteIdentifier id, RemoteMediaPlayerState&& state)
     264void RemoteMediaPlayerManager::timeChanged(MediaPlayerPrivateRemoteIdentifier id, RemoteMediaPlayerState&& state)
    265265{
    266266    if (const auto& player = m_players.get(id))
     
    268268}
    269269
    270 void RemoteMediaPlayerManager::durationChanged(WebKit::MediaPlayerPrivateRemoteIdentifier id, RemoteMediaPlayerState&& state)
     270void RemoteMediaPlayerManager::durationChanged(MediaPlayerPrivateRemoteIdentifier id, RemoteMediaPlayerState&& state)
    271271{
    272272    if (const auto& player = m_players.get(id))
     
    286286}
    287287
    288 void RemoteMediaPlayerManager::engineFailedToLoad(WebKit::MediaPlayerPrivateRemoteIdentifier id, long platformErrorCode)
     288void RemoteMediaPlayerManager::engineFailedToLoad(MediaPlayerPrivateRemoteIdentifier id, long platformErrorCode)
    289289{
    290290    if (const auto& player = m_players.get(id))
     
    292292}
    293293
    294 void RemoteMediaPlayerManager::characteristicChanged(WebKit::MediaPlayerPrivateRemoteIdentifier id, bool hasAudio, bool hasVideo, WebCore::MediaPlayerEnums::MovieLoadType loadType)
     294void RemoteMediaPlayerManager::characteristicChanged(MediaPlayerPrivateRemoteIdentifier id, bool hasAudio, bool hasVideo, WebCore::MediaPlayerEnums::MovieLoadType loadType)
    295295{
    296296    if (auto player = m_players.get(id))
     
    298298}
    299299
    300 void RemoteMediaPlayerManager::sizeChanged(WebKit::MediaPlayerPrivateRemoteIdentifier id, WebCore::FloatSize naturalSize)
     300void RemoteMediaPlayerManager::sizeChanged(MediaPlayerPrivateRemoteIdentifier id, WebCore::FloatSize naturalSize)
    301301{
    302302    if (auto player = m_players.get(id))
    303303        player->sizeChanged(naturalSize);
     304}
     305
     306void RemoteMediaPlayerManager::addRemoteAudioTrack(MediaPlayerPrivateRemoteIdentifier playerID, TrackPrivateRemoteIdentifier trackID, TrackPrivateRemoteConfiguration&& configuration)
     307{
     308    if (const auto& player = m_players.get(playerID))
     309        player->addRemoteAudioTrack(trackID, WTFMove(configuration));
     310}
     311
     312void RemoteMediaPlayerManager::removeRemoteAudioTrack(MediaPlayerPrivateRemoteIdentifier playerID, TrackPrivateRemoteIdentifier trackID)
     313{
     314    if (const auto& player = m_players.get(playerID))
     315        player->removeRemoteAudioTrack(trackID);
     316}
     317
     318void RemoteMediaPlayerManager::remoteAudioTrackConfigurationChanged(MediaPlayerPrivateRemoteIdentifier playerID, TrackPrivateRemoteIdentifier trackID, TrackPrivateRemoteConfiguration&& configuration)
     319{
     320    if (const auto& player = m_players.get(playerID))
     321        player->remoteAudioTrackConfigurationChanged(trackID, WTFMove(configuration));
    304322}
    305323
     
    327345}
    328346
    329 void RemoteMediaPlayerManager::updateCachedState(WebKit::MediaPlayerPrivateRemoteIdentifier id, RemoteMediaPlayerState&& state)
     347void RemoteMediaPlayerManager::updateCachedState(MediaPlayerPrivateRemoteIdentifier id, RemoteMediaPlayerState&& state)
    330348{
    331349    if (auto player = m_players.get(id))
  • trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.h

    r254392 r254454  
    3434#include "RemoteMediaResourceIdentifier.h"
    3535#include "SharedMemory.h"
     36#include "TrackPrivateRemoteIdentifier.h"
    3637#include "WebProcessSupplement.h"
    3738#include <WebCore/MediaPlayer.h>
     
    4849class RemoteMediaPlayerMIMETypeCache;
    4950class WebProcess;
     51struct TrackPrivateRemoteConfiguration;
    5052
    5153class RemoteMediaPlayerManager : public WebProcessSupplement, public IPC::MessageReceiver {
     
    7880    void networkStateChanged(MediaPlayerPrivateRemoteIdentifier, RemoteMediaPlayerState&&);
    7981    void readyStateChanged(MediaPlayerPrivateRemoteIdentifier, RemoteMediaPlayerState&&);
    80     void volumeChanged(WebKit::MediaPlayerPrivateRemoteIdentifier, double);
    81     void muteChanged(WebKit::MediaPlayerPrivateRemoteIdentifier, bool);
    82     void timeChanged(WebKit::MediaPlayerPrivateRemoteIdentifier, RemoteMediaPlayerState&&);
    83     void durationChanged(WebKit::MediaPlayerPrivateRemoteIdentifier, RemoteMediaPlayerState&&);
    84     void rateChanged(WebKit::MediaPlayerPrivateRemoteIdentifier, double);
    85     void playbackStateChanged(WebKit::MediaPlayerPrivateRemoteIdentifier, bool);
    86     void engineFailedToLoad(WebKit::MediaPlayerPrivateRemoteIdentifier, long);
    87     void updateCachedState(WebKit::MediaPlayerPrivateRemoteIdentifier, RemoteMediaPlayerState&&);
    88     void characteristicChanged(WebKit::MediaPlayerPrivateRemoteIdentifier, bool hasAudio, bool hasVideo, WebCore::MediaPlayerEnums::MovieLoadType);
    89     void sizeChanged(WebKit::MediaPlayerPrivateRemoteIdentifier, WebCore::FloatSize);
     82    void volumeChanged(MediaPlayerPrivateRemoteIdentifier, double);
     83    void muteChanged(MediaPlayerPrivateRemoteIdentifier, bool);
     84    void timeChanged(MediaPlayerPrivateRemoteIdentifier, RemoteMediaPlayerState&&);
     85    void durationChanged(MediaPlayerPrivateRemoteIdentifier, RemoteMediaPlayerState&&);
     86    void rateChanged(MediaPlayerPrivateRemoteIdentifier, double);
     87    void playbackStateChanged(MediaPlayerPrivateRemoteIdentifier, bool);
     88    void engineFailedToLoad(MediaPlayerPrivateRemoteIdentifier, long);
     89    void updateCachedState(MediaPlayerPrivateRemoteIdentifier, RemoteMediaPlayerState&&);
     90    void characteristicChanged(MediaPlayerPrivateRemoteIdentifier, bool hasAudio, bool hasVideo, WebCore::MediaPlayerEnums::MovieLoadType);
     91    void sizeChanged(MediaPlayerPrivateRemoteIdentifier, WebCore::FloatSize);
     92    void addRemoteAudioTrack(MediaPlayerPrivateRemoteIdentifier, TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
     93    void removeRemoteAudioTrack(MediaPlayerPrivateRemoteIdentifier, TrackPrivateRemoteIdentifier);
     94    void remoteAudioTrackConfigurationChanged(MediaPlayerPrivateRemoteIdentifier, TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
    9095
    9196    void requestResource(MediaPlayerPrivateRemoteIdentifier, RemoteMediaResourceIdentifier, WebCore::ResourceRequest&&, WebCore::PlatformMediaResourceLoader::LoadOptions, CompletionHandler<void()>&&);
  • trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in

    r254098 r254454  
    3838    SizeChanged(WebKit::MediaPlayerPrivateRemoteIdentifier id, WebCore::FloatSize naturalSize)
    3939
     40    AddRemoteAudioTrack(WebKit::MediaPlayerPrivateRemoteIdentifier playerID, WebKit::TrackPrivateRemoteIdentifier trackID, struct WebKit::TrackPrivateRemoteConfiguration configuration)
     41    RemoveRemoteAudioTrack(WebKit::MediaPlayerPrivateRemoteIdentifier playerID, WebKit::TrackPrivateRemoteIdentifier trackID)
     42    RemoteAudioTrackConfigurationChanged(WebKit::MediaPlayerPrivateRemoteIdentifier playerID, WebKit::TrackPrivateRemoteIdentifier trackID, struct WebKit::TrackPrivateRemoteConfiguration configuration)
     43
    4044    RequestResource(WebKit::MediaPlayerPrivateRemoteIdentifier mediaPlayerPrivateRemoteIdentifier, WebKit::RemoteMediaResourceIdentifier remoteMediaResourceIdentifier, WebCore::ResourceRequest request, enum:uint8_t WebCore::PlatformMediaResourceLoader::LoadOptions options) -> () Async
    4145    RemoveResource(WebKit::MediaPlayerPrivateRemoteIdentifier mediaPlayerPrivateRemoteIdentifier, WebKit::RemoteMediaResourceIdentifier remoteMediaResourceIdentifier)
  • trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp

    r254050 r254454  
    2929#if USE(LIBWEBRTC) && PLATFORM(COCOA) && ENABLE(GPU_PROCESS)
    3030
     31#include "DataReference.h"
    3132#include "GPUProcessConnection.h"
    3233#include "LibWebRTCCodecsProxyMessages.h"
    33 #include "SharedBufferDataReference.h"
    3434#include "WebProcess.h"
    3535#include <WebCore/LibWebRTCMacros.h>
     
    4242
    4343namespace WebKit {
     44using namespace WebCore;
    4445
    4546static webrtc::WebKitVideoDecoder createVideoDecoder(const webrtc::SdpVideoFormat& format)
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/ios/WebPreviewLoaderClient.cpp

    r251765 r254454  
    3030
    3131#include "Logging.h"
     32#include "WebPage.h"
    3233#include "WebPageProxyMessages.h"
    3334#include "WebProcess.h"
Note: See TracChangeset for help on using the changeset viewer.