Changeset 287576 in webkit


Ignore:
Timestamp:
Jan 4, 2022, 10:21:44 AM (4 years ago)
Author:
Russell Epstein
Message:

Cherry-pick r287574. rdar://problem/86855896

[Cocoa] Hang in AVTrackPrivateAVFObjCImpl::bitrate()
https://bugs.webkit.org/show_bug.cgi?id=234753

Reviewed by Eric Carlson.

Source/WebCore:

In r286908, WebCore added new queries onto existing AVAssetTrack objects; however, querying
those properties will block if data for those properties is not yet available. The media element
could block moving to the HAVE_METADATA state until those properties are fully loaded, however
this might regress PLT, so instead, we will check the load state of those properties before returning
values.

However, to make the properties exposed through VideoTrackConfiguration.idl/AudioTrackConfiguration.idl
dynamic, changes need to be signaled and propagated upward through the layers between AVAssetTrack and
the DOM. Rather than make individual notifications for each property in a Configuration struct, make one
notification that handles any change to the Configuration struct at all and push that upward to clients.

Since these properties are being grouped together at a lower-level, they do not need to be tracked
individually, and Video/AudioTrackConfigurationInit can just be aliased to a platform-defined struct.

  • html/track/AudioTrack.cpp: (WebCore::AudioTrack::configurationChanged): (WebCore::AudioTrack::updateConfigurationFromPrivate):
  • html/track/AudioTrack.h:
  • html/track/AudioTrackConfiguration.h: (WebCore::AudioTrackConfiguration::setState): (): Deleted.
  • html/track/VideoTrack.cpp: (WebCore::VideoTrack::configurationChanged): (WebCore::VideoTrack::updateConfigurationFromPrivate):
  • html/track/VideoTrack.h:
  • html/track/VideoTrackConfiguration.h: (WebCore::VideoTrackConfiguration::setState): (WebCore::VideoTrackConfiguration::colorSpace const): (WebCore::VideoTrackConfiguration::setColorSpace): (WebCore::VideoTrackConfiguration::VideoTrackConfiguration): (): Deleted.
  • platform/graphics/AudioTrackPrivate.h: (WebCore::AudioTrackPrivate::configuration const): (WebCore::AudioTrackPrivate::setConfiguration): (WebCore::AudioTrackPrivate::codec const): Deleted. (WebCore::AudioTrackPrivate::setCodec): Deleted. (WebCore::AudioTrackPrivate::sampleRate const): Deleted. (WebCore::AudioTrackPrivate::setSampleRate): Deleted. (WebCore::AudioTrackPrivate::numberOfChannels const): Deleted. (WebCore::AudioTrackPrivate::setNumberOfChannels): Deleted. (WebCore::AudioTrackPrivate::bitrate const): Deleted. (WebCore::AudioTrackPrivate::setBitrate): Deleted.
  • platform/graphics/AudioTrackPrivateClient.h:
  • platform/graphics/PlatformVideoColorSpace.h: (WebCore::operator==): (WebCore::operator!=):
  • platform/graphics/VideoTrackPrivate.h: (WebCore::VideoTrackPrivate::configuration const): (WebCore::VideoTrackPrivate::setConfiguration): (WebCore::VideoTrackPrivate::codec const): Deleted. (WebCore::VideoTrackPrivate::setCodec): Deleted. (WebCore::VideoTrackPrivate::width const): Deleted. (WebCore::VideoTrackPrivate::setWidth): Deleted. (WebCore::VideoTrackPrivate::height const): Deleted. (WebCore::VideoTrackPrivate::setHeight): Deleted. (WebCore::VideoTrackPrivate::colorSpace const): Deleted. (WebCore::VideoTrackPrivate::setColorSpace): Deleted. (WebCore::VideoTrackPrivate::framerate const): Deleted. (WebCore::VideoTrackPrivate::setFramerate): Deleted. (WebCore::VideoTrackPrivate::bitrate const): Deleted. (WebCore::VideoTrackPrivate::setBitrate): Deleted.
  • platform/graphics/VideoTrackPrivateClient.h:
  • platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h: (WebCore::AVTrackPrivateAVFObjCImpl::setVideoTrackConfigurationObserver): (WebCore::AVTrackPrivateAVFObjCImpl::setAudioTrackConfigurationObserver):
  • platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm: (WebCore::assetTrackConfigurationKeyNames): (WebCore::AVTrackPrivateAVFObjCImpl::AVTrackPrivateAVFObjCImpl): (WebCore::AVTrackPrivateAVFObjCImpl::initializeAssetTrack): (WebCore::AVTrackPrivateAVFObjCImpl::videoTrackConfiguration const): (WebCore::AVTrackPrivateAVFObjCImpl::audioTrackConfiguration const):
  • platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h:
  • platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm: (WebCore::AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC): (WebCore::AudioTrackPrivateAVFObjC::resetPropertiesFromTrack): (WebCore::AudioTrackPrivateAVFObjC::audioTrackConfigurationChanged):
  • platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp: (WebCore::VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC): (WebCore::VideoTrackPrivateAVFObjC::resetPropertiesFromTrack): (WebCore::VideoTrackPrivateAVFObjC::videoTrackConfigurationChanged):
  • platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:
  • platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm: (WebCore::VideoTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
  • platform/graphics/cocoa/VideoTrackPrivateWebM.cpp: (WebCore::VideoTrackPrivateWebM::VideoTrackPrivateWebM): (WebCore::VideoTrackPrivateWebM::updateConfiguration):
  • platform/graphics/cocoa/VideoTrackPrivateWebM.h:

Source/WebKit:

Propagate changes to TrackConfigurations upwards from the GPU process -> WebContent process.

  • GPUProcess/media/AudioTrackPrivateRemoteConfiguration.h: (WebKit::AudioTrackPrivateRemoteConfiguration::encode const): (WebKit::AudioTrackPrivateRemoteConfiguration::decode):
  • GPUProcess/media/RemoteAudioTrackProxy.cpp: (WebKit::RemoteAudioTrackProxy::configuration): (WebKit::RemoteAudioTrackProxy::configurationChanged):
  • GPUProcess/media/RemoteAudioTrackProxy.h:
  • GPUProcess/media/RemoteVideoTrackProxy.cpp: (WebKit::RemoteVideoTrackProxy::configuration):
  • GPUProcess/media/RemoteVideoTrackProxy.h:
  • GPUProcess/media/TrackPrivateRemoteConfiguration.h: (WebKit::TrackPrivateRemoteConfiguration::encode const): (WebKit::TrackPrivateRemoteConfiguration::decode):
  • GPUProcess/media/VideoTrackPrivateRemoteConfiguration.h: (WebKit::VideoTrackPrivateRemoteConfiguration::encode const): (WebKit::VideoTrackPrivateRemoteConfiguration::decode):
  • WebKit.xcodeproj/project.pbxproj:
  • WebProcess/GPU/media/AudioTrackPrivateRemote.cpp: (WebKit::AudioTrackPrivateRemote::AudioTrackPrivateRemote): (WebKit::AudioTrackPrivateRemote::updateConfiguration):
  • WebProcess/GPU/media/AudioTrackPrivateRemote.h:
  • WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp: (WebKit::MediaPlayerPrivateRemote::addRemoteAudioTrack): (WebKit::MediaPlayerPrivateRemote::remoteAudioTrackConfigurationChanged): (WebKit::MediaPlayerPrivateRemote::addRemoteVideoTrack): (WebKit::MediaPlayerPrivateRemote::remoteVideoTrackConfigurationChanged):
  • WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
  • WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in:
  • WebProcess/GPU/media/VideoTrackPrivateRemote.cpp: (WebKit::VideoTrackPrivateRemote::VideoTrackPrivateRemote): (WebKit::VideoTrackPrivateRemote::updateConfiguration):
  • WebProcess/GPU/media/VideoTrackPrivateRemote.h: (WebKit::VideoTrackPrivateRemote::create):

LayoutTests:

Now that these properties are dynamic, test them with testExpectedEventually.

  • media/track/audio-track-configuration.html:
  • media/track/video-track-alternate-groups-expected.txt:
  • media/track/video-track-configuration.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@287574 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Location:
branches/safari-613.1.12.1-branch
Files:
42 edited
5 copied

Legend:

Unmodified
Added
Removed
  • branches/safari-613.1.12.1-branch/LayoutTests/ChangeLog

    r286944 r287576  
     12022-01-04  Alan Coon  <alancoon@apple.com>
     2
     3        Cherry-pick r287574. rdar://problem/86855896
     4
     5    [Cocoa] Hang in AVTrackPrivateAVFObjCImpl::bitrate()
     6    https://bugs.webkit.org/show_bug.cgi?id=234753
     7   
     8    Reviewed by Eric Carlson.
     9   
     10    Source/WebCore:
     11   
     12    In r286908, WebCore added new queries onto existing AVAssetTrack objects; however, querying
     13    those properties will block if data for those properties is not yet available. The media element
     14    could block moving to the HAVE_METADATA state until those properties are fully loaded, however
     15    this might regress PLT, so instead, we will check the load state of those properties before returning
     16    values.
     17   
     18    However, to make the properties exposed through VideoTrackConfiguration.idl/AudioTrackConfiguration.idl
     19    dynamic, changes need to be signaled and propagated upward through the layers between AVAssetTrack and
     20    the DOM. Rather than make individual notifications for each property in a Configuration struct, make one
     21    notification that handles any change to the Configuration struct at all and push that upward to clients.
     22   
     23    Since these properties are being grouped together at a lower-level, they do not need to be tracked
     24    individually, and Video/AudioTrackConfigurationInit can just be aliased to a platform-defined struct.
     25   
     26    * html/track/AudioTrack.cpp:
     27    (WebCore::AudioTrack::configurationChanged):
     28    (WebCore::AudioTrack::updateConfigurationFromPrivate):
     29    * html/track/AudioTrack.h:
     30    * html/track/AudioTrackConfiguration.h:
     31    (WebCore::AudioTrackConfiguration::setState):
     32    (): Deleted.
     33    * html/track/VideoTrack.cpp:
     34    (WebCore::VideoTrack::configurationChanged):
     35    (WebCore::VideoTrack::updateConfigurationFromPrivate):
     36    * html/track/VideoTrack.h:
     37    * html/track/VideoTrackConfiguration.h:
     38    (WebCore::VideoTrackConfiguration::setState):
     39    (WebCore::VideoTrackConfiguration::colorSpace const):
     40    (WebCore::VideoTrackConfiguration::setColorSpace):
     41    (WebCore::VideoTrackConfiguration::VideoTrackConfiguration):
     42    (): Deleted.
     43    * platform/graphics/AudioTrackPrivate.h:
     44    (WebCore::AudioTrackPrivate::configuration const):
     45    (WebCore::AudioTrackPrivate::setConfiguration):
     46    (WebCore::AudioTrackPrivate::codec const): Deleted.
     47    (WebCore::AudioTrackPrivate::setCodec): Deleted.
     48    (WebCore::AudioTrackPrivate::sampleRate const): Deleted.
     49    (WebCore::AudioTrackPrivate::setSampleRate): Deleted.
     50    (WebCore::AudioTrackPrivate::numberOfChannels const): Deleted.
     51    (WebCore::AudioTrackPrivate::setNumberOfChannels): Deleted.
     52    (WebCore::AudioTrackPrivate::bitrate const): Deleted.
     53    (WebCore::AudioTrackPrivate::setBitrate): Deleted.
     54    * platform/graphics/AudioTrackPrivateClient.h:
     55    * platform/graphics/PlatformVideoColorSpace.h:
     56    (WebCore::operator==):
     57    (WebCore::operator!=):
     58    * platform/graphics/VideoTrackPrivate.h:
     59    (WebCore::VideoTrackPrivate::configuration const):
     60    (WebCore::VideoTrackPrivate::setConfiguration):
     61    (WebCore::VideoTrackPrivate::codec const): Deleted.
     62    (WebCore::VideoTrackPrivate::setCodec): Deleted.
     63    (WebCore::VideoTrackPrivate::width const): Deleted.
     64    (WebCore::VideoTrackPrivate::setWidth): Deleted.
     65    (WebCore::VideoTrackPrivate::height const): Deleted.
     66    (WebCore::VideoTrackPrivate::setHeight): Deleted.
     67    (WebCore::VideoTrackPrivate::colorSpace const): Deleted.
     68    (WebCore::VideoTrackPrivate::setColorSpace): Deleted.
     69    (WebCore::VideoTrackPrivate::framerate const): Deleted.
     70    (WebCore::VideoTrackPrivate::setFramerate): Deleted.
     71    (WebCore::VideoTrackPrivate::bitrate const): Deleted.
     72    (WebCore::VideoTrackPrivate::setBitrate): Deleted.
     73    * platform/graphics/VideoTrackPrivateClient.h:
     74    * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
     75    (WebCore::AVTrackPrivateAVFObjCImpl::setVideoTrackConfigurationObserver):
     76    (WebCore::AVTrackPrivateAVFObjCImpl::setAudioTrackConfigurationObserver):
     77    * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
     78    (WebCore::assetTrackConfigurationKeyNames):
     79    (WebCore::AVTrackPrivateAVFObjCImpl::AVTrackPrivateAVFObjCImpl):
     80    (WebCore::AVTrackPrivateAVFObjCImpl::initializeAssetTrack):
     81    (WebCore::AVTrackPrivateAVFObjCImpl::videoTrackConfiguration const):
     82    (WebCore::AVTrackPrivateAVFObjCImpl::audioTrackConfiguration const):
     83    * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h:
     84    * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
     85    (WebCore::AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC):
     86    (WebCore::AudioTrackPrivateAVFObjC::resetPropertiesFromTrack):
     87    (WebCore::AudioTrackPrivateAVFObjC::audioTrackConfigurationChanged):
     88    * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
     89    (WebCore::VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC):
     90    (WebCore::VideoTrackPrivateAVFObjC::resetPropertiesFromTrack):
     91    (WebCore::VideoTrackPrivateAVFObjC::videoTrackConfigurationChanged):
     92    * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:
     93    * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm:
     94    (WebCore::VideoTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
     95    * platform/graphics/cocoa/VideoTrackPrivateWebM.cpp:
     96    (WebCore::VideoTrackPrivateWebM::VideoTrackPrivateWebM):
     97    (WebCore::VideoTrackPrivateWebM::updateConfiguration):
     98    * platform/graphics/cocoa/VideoTrackPrivateWebM.h:
     99   
     100    Source/WebKit:
     101   
     102    Propagate changes to TrackConfigurations upwards from the GPU process -> WebContent process.
     103   
     104    * GPUProcess/media/AudioTrackPrivateRemoteConfiguration.h:
     105    (WebKit::AudioTrackPrivateRemoteConfiguration::encode const):
     106    (WebKit::AudioTrackPrivateRemoteConfiguration::decode):
     107    * GPUProcess/media/RemoteAudioTrackProxy.cpp:
     108    (WebKit::RemoteAudioTrackProxy::configuration):
     109    (WebKit::RemoteAudioTrackProxy::configurationChanged):
     110    * GPUProcess/media/RemoteAudioTrackProxy.h:
     111    * GPUProcess/media/RemoteVideoTrackProxy.cpp:
     112    (WebKit::RemoteVideoTrackProxy::configuration):
     113    * GPUProcess/media/RemoteVideoTrackProxy.h:
     114    * GPUProcess/media/TrackPrivateRemoteConfiguration.h:
     115    (WebKit::TrackPrivateRemoteConfiguration::encode const):
     116    (WebKit::TrackPrivateRemoteConfiguration::decode):
     117    * GPUProcess/media/VideoTrackPrivateRemoteConfiguration.h:
     118    (WebKit::VideoTrackPrivateRemoteConfiguration::encode const):
     119    (WebKit::VideoTrackPrivateRemoteConfiguration::decode):
     120    * WebKit.xcodeproj/project.pbxproj:
     121    * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp:
     122    (WebKit::AudioTrackPrivateRemote::AudioTrackPrivateRemote):
     123    (WebKit::AudioTrackPrivateRemote::updateConfiguration):
     124    * WebProcess/GPU/media/AudioTrackPrivateRemote.h:
     125    * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
     126    (WebKit::MediaPlayerPrivateRemote::addRemoteAudioTrack):
     127    (WebKit::MediaPlayerPrivateRemote::remoteAudioTrackConfigurationChanged):
     128    (WebKit::MediaPlayerPrivateRemote::addRemoteVideoTrack):
     129    (WebKit::MediaPlayerPrivateRemote::remoteVideoTrackConfigurationChanged):
     130    * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
     131    * WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in:
     132    * WebProcess/GPU/media/VideoTrackPrivateRemote.cpp:
     133    (WebKit::VideoTrackPrivateRemote::VideoTrackPrivateRemote):
     134    (WebKit::VideoTrackPrivateRemote::updateConfiguration):
     135    * WebProcess/GPU/media/VideoTrackPrivateRemote.h:
     136    (WebKit::VideoTrackPrivateRemote::create):
     137   
     138    LayoutTests:
     139   
     140    Now that these properties are dynamic, test them with `testExpectedEventually`.
     141   
     142    * media/track/audio-track-configuration.html:
     143    * media/track/video-track-alternate-groups-expected.txt:
     144    * media/track/video-track-configuration.html:
     145   
     146   
     147    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@287574 268f45cc-cd09-0410-ab3c-d52691b4dbfc
     148
     149    2022-01-04  Jer Noble  <jer.noble@apple.com>
     150
     151            [Cocoa] Hang in AVTrackPrivateAVFObjCImpl::bitrate()
     152            https://bugs.webkit.org/show_bug.cgi?id=234753
     153
     154            Reviewed by Eric Carlson.
     155
     156            Now that these properties are dynamic, test them with `testExpectedEventually`.
     157
     158            * media/track/audio-track-configuration.html:
     159            * media/track/video-track-alternate-groups-expected.txt:
     160            * media/track/video-track-configuration.html:
     161
    11622021-12-13  Youenn Fablet  <youenn@apple.com>
    2163
  • branches/safari-613.1.12.1-branch/LayoutTests/media/track/audio-track-configuration.html

    r286908 r287576  
    1010                        run('video.src = "../content/audio-tracks.mp4"');
    1111                        await waitFor(video, 'canplay');
    12                         testExpected('video.audioTracks.length', 0, '>');
    13                         testExpected('video.audioTracks[0].configuration', null, '!=');
    14                         testExpected('video.audioTracks[0].configuration.codec', 'mp4a.40.2');
    15                         testExpected('video.audioTracks[0].configuration.sampleRate', 44100);
    16                         testExpected('video.audioTracks[0].configuration.numberOfChannels', 2);
    17                         testExpected('video.audioTracks[0].configuration.bitrate', 100000, '>=');
     12                        await testExpectedEventually('video.audioTracks.length', 0, '>');
     13                        await testExpectedEventually('video.audioTracks[0].configuration', null, '!=');
     14                        await testExpectedEventually('video.audioTracks[0].configuration.codec', 'mp4a.40.2');
     15                        await testExpectedEventually('video.audioTracks[0].configuration.sampleRate', 44100);
     16                        await testExpectedEventually('video.audioTracks[0].configuration.numberOfChannels', 2);
     17                        await testExpectedEventually('video.audioTracks[0].configuration.bitrate', 100000, '>=');
    1818                        endTest();
    1919                });
  • branches/safari-613.1.12.1-branch/LayoutTests/media/track/video-track-alternate-groups-expected.txt

    r198703 r287576  
    1515EVENT(canplaythrough)
    1616EXPECTED (video.audioTracks.length == '2') OK
    17 TRACK id:2 kind:main language:en
    18 TRACK id:3 kind:main language:fr
     17TRACK id:2 kind:main language:eng
     18TRACK id:3 kind:main language:fra
    1919
    2020Test that media containing six audio tracks, with three audio tracks each referring to a separate track as a fallback track, all in one alternate group, results in three AudioTracks
     
    2222EVENT(canplaythrough)
    2323EXPECTED (video.audioTracks.length == '3') OK
    24 TRACK id:2 kind:main language:en
    25 TRACK id:4 kind:main language:fr
    26 TRACK id:6 kind:main language:es
     24TRACK id:3 kind:main language:eng
     25TRACK id:5 kind:main language:fra
     26TRACK id:7 kind:main language:spa
    2727END OF TEST
    2828
  • branches/safari-613.1.12.1-branch/LayoutTests/media/track/video-track-configuration.html

    r286908 r287576  
    1010                        run('video.src = "../content/test.mp4"');
    1111                        await waitFor(video, 'canplay');
    12                         testExpected('video.videoTracks.length', 1);
    13                         testExpected('video.videoTracks[0].configuration', null, '!=');
    14                         testExpected('video.videoTracks[0].configuration.codec', 'avc1.4D400D');
    15                         testExpected('video.videoTracks[0].configuration.width', 320);
    16                         testExpected('video.videoTracks[0].configuration.height', 240);
    17                         testExpected('video.videoTracks[0].configuration.bitrate', 240000, '>=');
    18                         testExpected('video.videoTracks[0].configuration.framerate', 30, '>=');
    19                         testExpected('video.videoTracks[0].configuration.colorSpace', null, '!=');
    20                         testExpected('video.videoTracks[0].configuration.colorSpace.matrix', 'bt470bg');
    21                         testExpected('video.videoTracks[0].configuration.colorSpace.primaries', 'smpte170m');
    22                         testExpected('video.videoTracks[0].configuration.colorSpace.transfer', 'bt709');
     12                        await testExpectedEventually('video.videoTracks.length', 1);
     13                        await testExpectedEventually('video.videoTracks[0].configuration', null, '!=');
     14                        await testExpectedEventually('video.videoTracks[0].configuration.codec', 'avc1.4D400D');
     15                        await testExpectedEventually('video.videoTracks[0].configuration.width', 320);
     16                        await testExpectedEventually('video.videoTracks[0].configuration.height', 240);
     17                        await testExpectedEventually('video.videoTracks[0].configuration.bitrate', 240000, '>=');
     18                        await testExpectedEventually('video.videoTracks[0].configuration.framerate', 30, '>=');
     19                        await testExpectedEventually('video.videoTracks[0].configuration.colorSpace', null, '!=');
     20                        await testExpectedEventually('video.videoTracks[0].configuration.colorSpace.matrix', 'bt470bg');
     21                        await testExpectedEventually('video.videoTracks[0].configuration.colorSpace.primaries', 'smpte170m');
     22                        await testExpectedEventually('video.videoTracks[0].configuration.colorSpace.transfer', 'bt709');
    2323                        run('video.src = "../content/test-hevc.mp4"');
    2424                        await waitFor(video, 'canplay');
    25                         testExpected('video.videoTracks.length', 1);
    26                         testExpected('video.videoTracks[0].configuration', null, '!=');
    27                         testExpected('video.videoTracks[0].configuration.codec', 'hvc1.1.6.L93.B0');
    28                         testExpected('video.videoTracks[0].configuration.width', 320);
    29                         testExpected('video.videoTracks[0].configuration.height', 240);
    30                         testExpected('video.videoTracks[0].configuration.bitrate', 150000, '>=');
    31                         testExpected('video.videoTracks[0].configuration.framerate', 30, '>=');
    32                         testExpected('video.videoTracks[0].configuration.colorSpace', null, '!=');
    33                         testExpected('video.videoTracks[0].configuration.colorSpace.matrix', 'bt709');
    34                         testExpected('video.videoTracks[0].configuration.colorSpace.primaries', 'bt709');
    35                         testExpected('video.videoTracks[0].configuration.colorSpace.transfer', 'bt709');
     25                        await testExpectedEventually('video.videoTracks.length', 1);
     26                        await testExpectedEventually('video.videoTracks[0].configuration', null, '!=');
     27                        await testExpectedEventually('video.videoTracks[0].configuration.codec', 'hvc1.1.6.L93.B0');
     28                        await testExpectedEventually('video.videoTracks[0].configuration.width', 320);
     29                        await testExpectedEventually('video.videoTracks[0].configuration.height', 240);
     30                        await testExpectedEventually('video.videoTracks[0].configuration.bitrate', 150000, '>=');
     31                        await testExpectedEventually('video.videoTracks[0].configuration.framerate', 30, '>=');
     32                        await testExpectedEventually('video.videoTracks[0].configuration.colorSpace', null, '!=');
     33                        await testExpectedEventually('video.videoTracks[0].configuration.colorSpace.matrix', 'bt709');
     34                        await testExpectedEventually('video.videoTracks[0].configuration.colorSpace.primaries', 'bt709');
     35                        await testExpectedEventually('video.videoTracks[0].configuration.colorSpace.transfer', 'bt709');
    3636                        endTest();
    3737                });
  • branches/safari-613.1.12.1-branch/Source/WebCore/ChangeLog

    r287572 r287576  
     12022-01-04  Alan Coon  <alancoon@apple.com>
     2
     3        Cherry-pick r287574. rdar://problem/86855896
     4
     5    [Cocoa] Hang in AVTrackPrivateAVFObjCImpl::bitrate()
     6    https://bugs.webkit.org/show_bug.cgi?id=234753
     7   
     8    Reviewed by Eric Carlson.
     9   
     10    Source/WebCore:
     11   
     12    In r286908, WebCore added new queries onto existing AVAssetTrack objects; however, querying
     13    those properties will block if data for those properties is not yet available. The media element
     14    could block moving to the HAVE_METADATA state until those properties are fully loaded, however
     15    this might regress PLT, so instead, we will check the load state of those properties before returning
     16    values.
     17   
     18    However, to make the properties exposed through VideoTrackConfiguration.idl/AudioTrackConfiguration.idl
     19    dynamic, changes need to be signaled and propagated upward through the layers between AVAssetTrack and
     20    the DOM. Rather than make individual notifications for each property in a Configuration struct, make one
     21    notification that handles any change to the Configuration struct at all and push that upward to clients.
     22   
     23    Since these properties are being grouped together at a lower-level, they do not need to be tracked
     24    individually, and Video/AudioTrackConfigurationInit can just be aliased to a platform-defined struct.
     25   
     26    * html/track/AudioTrack.cpp:
     27    (WebCore::AudioTrack::configurationChanged):
     28    (WebCore::AudioTrack::updateConfigurationFromPrivate):
     29    * html/track/AudioTrack.h:
     30    * html/track/AudioTrackConfiguration.h:
     31    (WebCore::AudioTrackConfiguration::setState):
     32    (): Deleted.
     33    * html/track/VideoTrack.cpp:
     34    (WebCore::VideoTrack::configurationChanged):
     35    (WebCore::VideoTrack::updateConfigurationFromPrivate):
     36    * html/track/VideoTrack.h:
     37    * html/track/VideoTrackConfiguration.h:
     38    (WebCore::VideoTrackConfiguration::setState):
     39    (WebCore::VideoTrackConfiguration::colorSpace const):
     40    (WebCore::VideoTrackConfiguration::setColorSpace):
     41    (WebCore::VideoTrackConfiguration::VideoTrackConfiguration):
     42    (): Deleted.
     43    * platform/graphics/AudioTrackPrivate.h:
     44    (WebCore::AudioTrackPrivate::configuration const):
     45    (WebCore::AudioTrackPrivate::setConfiguration):
     46    (WebCore::AudioTrackPrivate::codec const): Deleted.
     47    (WebCore::AudioTrackPrivate::setCodec): Deleted.
     48    (WebCore::AudioTrackPrivate::sampleRate const): Deleted.
     49    (WebCore::AudioTrackPrivate::setSampleRate): Deleted.
     50    (WebCore::AudioTrackPrivate::numberOfChannels const): Deleted.
     51    (WebCore::AudioTrackPrivate::setNumberOfChannels): Deleted.
     52    (WebCore::AudioTrackPrivate::bitrate const): Deleted.
     53    (WebCore::AudioTrackPrivate::setBitrate): Deleted.
     54    * platform/graphics/AudioTrackPrivateClient.h:
     55    * platform/graphics/PlatformVideoColorSpace.h:
     56    (WebCore::operator==):
     57    (WebCore::operator!=):
     58    * platform/graphics/VideoTrackPrivate.h:
     59    (WebCore::VideoTrackPrivate::configuration const):
     60    (WebCore::VideoTrackPrivate::setConfiguration):
     61    (WebCore::VideoTrackPrivate::codec const): Deleted.
     62    (WebCore::VideoTrackPrivate::setCodec): Deleted.
     63    (WebCore::VideoTrackPrivate::width const): Deleted.
     64    (WebCore::VideoTrackPrivate::setWidth): Deleted.
     65    (WebCore::VideoTrackPrivate::height const): Deleted.
     66    (WebCore::VideoTrackPrivate::setHeight): Deleted.
     67    (WebCore::VideoTrackPrivate::colorSpace const): Deleted.
     68    (WebCore::VideoTrackPrivate::setColorSpace): Deleted.
     69    (WebCore::VideoTrackPrivate::framerate const): Deleted.
     70    (WebCore::VideoTrackPrivate::setFramerate): Deleted.
     71    (WebCore::VideoTrackPrivate::bitrate const): Deleted.
     72    (WebCore::VideoTrackPrivate::setBitrate): Deleted.
     73    * platform/graphics/VideoTrackPrivateClient.h:
     74    * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
     75    (WebCore::AVTrackPrivateAVFObjCImpl::setVideoTrackConfigurationObserver):
     76    (WebCore::AVTrackPrivateAVFObjCImpl::setAudioTrackConfigurationObserver):
     77    * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
     78    (WebCore::assetTrackConfigurationKeyNames):
     79    (WebCore::AVTrackPrivateAVFObjCImpl::AVTrackPrivateAVFObjCImpl):
     80    (WebCore::AVTrackPrivateAVFObjCImpl::initializeAssetTrack):
     81    (WebCore::AVTrackPrivateAVFObjCImpl::videoTrackConfiguration const):
     82    (WebCore::AVTrackPrivateAVFObjCImpl::audioTrackConfiguration const):
     83    * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h:
     84    * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
     85    (WebCore::AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC):
     86    (WebCore::AudioTrackPrivateAVFObjC::resetPropertiesFromTrack):
     87    (WebCore::AudioTrackPrivateAVFObjC::audioTrackConfigurationChanged):
     88    * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
     89    (WebCore::VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC):
     90    (WebCore::VideoTrackPrivateAVFObjC::resetPropertiesFromTrack):
     91    (WebCore::VideoTrackPrivateAVFObjC::videoTrackConfigurationChanged):
     92    * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:
     93    * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm:
     94    (WebCore::VideoTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
     95    * platform/graphics/cocoa/VideoTrackPrivateWebM.cpp:
     96    (WebCore::VideoTrackPrivateWebM::VideoTrackPrivateWebM):
     97    (WebCore::VideoTrackPrivateWebM::updateConfiguration):
     98    * platform/graphics/cocoa/VideoTrackPrivateWebM.h:
     99   
     100    Source/WebKit:
     101   
     102    Propagate changes to TrackConfigurations upwards from the GPU process -> WebContent process.
     103   
     104    * GPUProcess/media/AudioTrackPrivateRemoteConfiguration.h:
     105    (WebKit::AudioTrackPrivateRemoteConfiguration::encode const):
     106    (WebKit::AudioTrackPrivateRemoteConfiguration::decode):
     107    * GPUProcess/media/RemoteAudioTrackProxy.cpp:
     108    (WebKit::RemoteAudioTrackProxy::configuration):
     109    (WebKit::RemoteAudioTrackProxy::configurationChanged):
     110    * GPUProcess/media/RemoteAudioTrackProxy.h:
     111    * GPUProcess/media/RemoteVideoTrackProxy.cpp:
     112    (WebKit::RemoteVideoTrackProxy::configuration):
     113    * GPUProcess/media/RemoteVideoTrackProxy.h:
     114    * GPUProcess/media/TrackPrivateRemoteConfiguration.h:
     115    (WebKit::TrackPrivateRemoteConfiguration::encode const):
     116    (WebKit::TrackPrivateRemoteConfiguration::decode):
     117    * GPUProcess/media/VideoTrackPrivateRemoteConfiguration.h:
     118    (WebKit::VideoTrackPrivateRemoteConfiguration::encode const):
     119    (WebKit::VideoTrackPrivateRemoteConfiguration::decode):
     120    * WebKit.xcodeproj/project.pbxproj:
     121    * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp:
     122    (WebKit::AudioTrackPrivateRemote::AudioTrackPrivateRemote):
     123    (WebKit::AudioTrackPrivateRemote::updateConfiguration):
     124    * WebProcess/GPU/media/AudioTrackPrivateRemote.h:
     125    * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
     126    (WebKit::MediaPlayerPrivateRemote::addRemoteAudioTrack):
     127    (WebKit::MediaPlayerPrivateRemote::remoteAudioTrackConfigurationChanged):
     128    (WebKit::MediaPlayerPrivateRemote::addRemoteVideoTrack):
     129    (WebKit::MediaPlayerPrivateRemote::remoteVideoTrackConfigurationChanged):
     130    * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
     131    * WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in:
     132    * WebProcess/GPU/media/VideoTrackPrivateRemote.cpp:
     133    (WebKit::VideoTrackPrivateRemote::VideoTrackPrivateRemote):
     134    (WebKit::VideoTrackPrivateRemote::updateConfiguration):
     135    * WebProcess/GPU/media/VideoTrackPrivateRemote.h:
     136    (WebKit::VideoTrackPrivateRemote::create):
     137   
     138    LayoutTests:
     139   
     140    Now that these properties are dynamic, test them with `testExpectedEventually`.
     141   
     142    * media/track/audio-track-configuration.html:
     143    * media/track/video-track-alternate-groups-expected.txt:
     144    * media/track/video-track-configuration.html:
     145   
     146   
     147    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@287574 268f45cc-cd09-0410-ab3c-d52691b4dbfc
     148
     149    2022-01-04  Jer Noble  <jer.noble@apple.com>
     150
     151            [Cocoa] Hang in AVTrackPrivateAVFObjCImpl::bitrate()
     152            https://bugs.webkit.org/show_bug.cgi?id=234753
     153
     154            Reviewed by Eric Carlson.
     155
     156            In r286908, WebCore added new queries onto existing AVAssetTrack objects; however, querying
     157            those properties will block if data for those properties is not yet available. The media element
     158            could block moving to the HAVE_METADATA state until those properties are fully loaded, however
     159            this might regress PLT, so instead, we will check the load state of those properties before returning
     160            values.
     161
     162            However, to make the properties exposed through VideoTrackConfiguration.idl/AudioTrackConfiguration.idl
     163            dynamic, changes need to be signaled and propagated upward through the layers between AVAssetTrack and
     164            the DOM. Rather than make individual notifications for each property in a Configuration struct, make one
     165            notification that handles any change to the Configuration struct at all and push that upward to clients.
     166
     167            Since these properties are being grouped together at a lower-level, they do not need to be tracked
     168            individually, and Video/AudioTrackConfigurationInit can just be aliased to a platform-defined struct.
     169
     170            * html/track/AudioTrack.cpp:
     171            (WebCore::AudioTrack::configurationChanged):
     172            (WebCore::AudioTrack::updateConfigurationFromPrivate):
     173            * html/track/AudioTrack.h:
     174            * html/track/AudioTrackConfiguration.h:
     175            (WebCore::AudioTrackConfiguration::setState):
     176            (): Deleted.
     177            * html/track/VideoTrack.cpp:
     178            (WebCore::VideoTrack::configurationChanged):
     179            (WebCore::VideoTrack::updateConfigurationFromPrivate):
     180            * html/track/VideoTrack.h:
     181            * html/track/VideoTrackConfiguration.h:
     182            (WebCore::VideoTrackConfiguration::setState):
     183            (WebCore::VideoTrackConfiguration::colorSpace const):
     184            (WebCore::VideoTrackConfiguration::setColorSpace):
     185            (WebCore::VideoTrackConfiguration::VideoTrackConfiguration):
     186            (): Deleted.
     187            * platform/graphics/AudioTrackPrivate.h:
     188            (WebCore::AudioTrackPrivate::configuration const):
     189            (WebCore::AudioTrackPrivate::setConfiguration):
     190            (WebCore::AudioTrackPrivate::codec const): Deleted.
     191            (WebCore::AudioTrackPrivate::setCodec): Deleted.
     192            (WebCore::AudioTrackPrivate::sampleRate const): Deleted.
     193            (WebCore::AudioTrackPrivate::setSampleRate): Deleted.
     194            (WebCore::AudioTrackPrivate::numberOfChannels const): Deleted.
     195            (WebCore::AudioTrackPrivate::setNumberOfChannels): Deleted.
     196            (WebCore::AudioTrackPrivate::bitrate const): Deleted.
     197            (WebCore::AudioTrackPrivate::setBitrate): Deleted.
     198            * platform/graphics/AudioTrackPrivateClient.h:
     199            * platform/graphics/PlatformVideoColorSpace.h:
     200            (WebCore::operator==):
     201            (WebCore::operator!=):
     202            * platform/graphics/VideoTrackPrivate.h:
     203            (WebCore::VideoTrackPrivate::configuration const):
     204            (WebCore::VideoTrackPrivate::setConfiguration):
     205            (WebCore::VideoTrackPrivate::codec const): Deleted.
     206            (WebCore::VideoTrackPrivate::setCodec): Deleted.
     207            (WebCore::VideoTrackPrivate::width const): Deleted.
     208            (WebCore::VideoTrackPrivate::setWidth): Deleted.
     209            (WebCore::VideoTrackPrivate::height const): Deleted.
     210            (WebCore::VideoTrackPrivate::setHeight): Deleted.
     211            (WebCore::VideoTrackPrivate::colorSpace const): Deleted.
     212            (WebCore::VideoTrackPrivate::setColorSpace): Deleted.
     213            (WebCore::VideoTrackPrivate::framerate const): Deleted.
     214            (WebCore::VideoTrackPrivate::setFramerate): Deleted.
     215            (WebCore::VideoTrackPrivate::bitrate const): Deleted.
     216            (WebCore::VideoTrackPrivate::setBitrate): Deleted.
     217            * platform/graphics/VideoTrackPrivateClient.h:
     218            * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
     219            (WebCore::AVTrackPrivateAVFObjCImpl::setVideoTrackConfigurationObserver):
     220            (WebCore::AVTrackPrivateAVFObjCImpl::setAudioTrackConfigurationObserver):
     221            * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
     222            (WebCore::assetTrackConfigurationKeyNames):
     223            (WebCore::AVTrackPrivateAVFObjCImpl::AVTrackPrivateAVFObjCImpl):
     224            (WebCore::AVTrackPrivateAVFObjCImpl::initializeAssetTrack):
     225            (WebCore::AVTrackPrivateAVFObjCImpl::videoTrackConfiguration const):
     226            (WebCore::AVTrackPrivateAVFObjCImpl::audioTrackConfiguration const):
     227            * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h:
     228            * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
     229            (WebCore::AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC):
     230            (WebCore::AudioTrackPrivateAVFObjC::resetPropertiesFromTrack):
     231            (WebCore::AudioTrackPrivateAVFObjC::audioTrackConfigurationChanged):
     232            * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
     233            (WebCore::VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC):
     234            (WebCore::VideoTrackPrivateAVFObjC::resetPropertiesFromTrack):
     235            (WebCore::VideoTrackPrivateAVFObjC::videoTrackConfigurationChanged):
     236            * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:
     237            * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm:
     238            (WebCore::VideoTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
     239            * platform/graphics/cocoa/VideoTrackPrivateWebM.cpp:
     240            (WebCore::VideoTrackPrivateWebM::VideoTrackPrivateWebM):
     241            (WebCore::VideoTrackPrivateWebM::updateConfiguration):
     242            * platform/graphics/cocoa/VideoTrackPrivateWebM.h:
     243
    12442022-01-04  Russell Epstein  <repstein@apple.com>
    2245
  • branches/safari-613.1.12.1-branch/Source/WebCore/Headers.cmake

    r286943 r287576  
    15201520    platform/graphics/PixelBufferFormat.h
    15211521    platform/graphics/PixelFormat.h
     1522    platform/graphics/PlatformAudioTrackConfiguration.h
    15221523    platform/graphics/PlatformColorSpace.h
    15231524    platform/graphics/PlatformDisplay.h
     
    15291530    platform/graphics/PlatformTextTrack.h
    15301531    platform/graphics/PlatformTimeRanges.h
     1532    platform/graphics/PlatformTrackConfiguration.h
    15311533    platform/graphics/PlatformVideoColorPrimaries.h
    15321534    platform/graphics/PlatformVideoColorSpace.h
    15331535    platform/graphics/PlatformVideoMatrixCoefficients.h
     1536    platform/graphics/PlatformVideoTrackConfiguration.h
    15341537    platform/graphics/PlatformVideoTransferCharacteristics.h
    15351538    platform/graphics/Region.h
  • branches/safari-613.1.12.1-branch/Source/WebCore/Modules/webcodecs/VideoColorSpace.h

    r286908 r287576  
    4141public:
    4242    static Ref<VideoColorSpace> create() { return adoptRef(*new VideoColorSpace()); };
     43    static Ref<VideoColorSpace> create(const VideoColorSpaceInit& init) { return adoptRef(*new VideoColorSpace(init)); }
    4344    static Ref<VideoColorSpace> create(VideoColorSpaceInit&& init) { return adoptRef(*new VideoColorSpace(WTFMove(init))); }
     45
     46    void setState(const VideoColorSpaceInit& state) { m_state = state; }
    4447
    4548    const std::optional<VideoColorPrimaries>& primaries() const { return m_state.primaries; }
     
    5760private:
    5861    VideoColorSpace() = default;
     62    VideoColorSpace(const VideoColorSpaceInit& init)
     63        : m_state(init)
     64    {
     65    }
    5966    VideoColorSpace(VideoColorSpaceInit&& init)
    6067        : m_state(WTFMove(init))
  • branches/safari-613.1.12.1-branch/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r287145 r287576  
    45644564                CDCD41E81C3DDB0A00965D99 /* ParsedContentRange.h in Headers */ = {isa = PBXBuildFile; fileRef = CDCD41E61C3DDB0900965D99 /* ParsedContentRange.h */; settings = {ATTRIBUTES = (Private, ); }; };
    45654565                CDCFABBD18C0AF78006F8450 /* HighlightData.h in Headers */ = {isa = PBXBuildFile; fileRef = CDCFABBB18C0AE31006F8450 /* HighlightData.h */; settings = {ATTRIBUTES = (Private, ); }; };
     4566                CDD08ABD277E542600EA3755 /* PlatformTrackConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = CDD08ABC277E542600EA3755 /* PlatformTrackConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; };
     4567                CDD08AC0277E54F000EA3755 /* PlatformAudioTrackConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = CDD08ABF277E54F000EA3755 /* PlatformAudioTrackConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; };
     4568                CDD08AC2277E554E00EA3755 /* PlatformVideoTrackConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = CDD08AC1277E554E00EA3755 /* PlatformVideoTrackConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; };
    45664569                CDD7089718359F6F002B3DC6 /* SampleMap.h in Headers */ = {isa = PBXBuildFile; fileRef = CDD7089518359F6F002B3DC6 /* SampleMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
    45674570                CDDC1E7A18A952F30027A9D4 /* MediaSourcePrivateClient.h in Headers */ = {isa = PBXBuildFile; fileRef = CDDC1E7918A952F30027A9D4 /* MediaSourcePrivateClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    1610716110                CDCFABBB18C0AE31006F8450 /* HighlightData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HighlightData.h; sourceTree = "<group>"; };
    1610816111                CDCFABBC18C0AF19006F8450 /* HighlightData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HighlightData.cpp; sourceTree = "<group>"; };
     16112                CDD08ABC277E542600EA3755 /* PlatformTrackConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlatformTrackConfiguration.h; sourceTree = "<group>"; };
     16113                CDD08ABF277E54F000EA3755 /* PlatformAudioTrackConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlatformAudioTrackConfiguration.h; sourceTree = "<group>"; };
     16114                CDD08AC1277E554E00EA3755 /* PlatformVideoTrackConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlatformVideoTrackConfiguration.h; sourceTree = "<group>"; };
    1610916115                CDD1E525167BA56400CE820B /* TextTrackRepresentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextTrackRepresentation.h; sourceTree = "<group>"; };
    1611016116                CDD7089418359F6E002B3DC6 /* SampleMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SampleMap.cpp; sourceTree = "<group>"; };
     
    2881928825                                BC635E90264C469F000EF33A /* PixelFormat.cpp */,
    2882028826                                BCA55912263DBD79007F19B3 /* PixelFormat.h */,
     28827                                CDD08ABF277E54F000EA3755 /* PlatformAudioTrackConfiguration.h */,
    2882128828                                BC3E62422659791700548ACD /* PlatformColorSpace.h */,
    2882228829                                726D56E1253AE0430002EF90 /* PlatformImage.h */,
     
    2882828835                                074E82B818A69F0E007EF54C /* PlatformTimeRanges.cpp */,
    2882928836                                074E82B918A69F0E007EF54C /* PlatformTimeRanges.h */,
     28837                                CDD08ABC277E542600EA3755 /* PlatformTrackConfiguration.h */,
    2883028838                                CD1F9AFB26FD38C900617EB6 /* PlatformVideoColorPrimaries.h */,
    2883128839                                CD1F9AFA26FD385900617EB6 /* PlatformVideoColorSpace.h */,
    2883228840                                CD1F9AFD26FD38CB00617EB6 /* PlatformVideoMatrixCoefficients.h */,
     28841                                CDD08AC1277E554E00EA3755 /* PlatformVideoTrackConfiguration.h */,
    2883328842                                CD1F9AFC26FD38CA00617EB6 /* PlatformVideoTransferCharacteristics.h */,
    2883428843                                BCAB417F13E356E800D8AAF3 /* Region.cpp */,
     
    3631036319                                BCA55914263DBD79007F19B3 /* PixelFormat.h in Headers */,
    3631136320                                CDEFA2281E7669E8000AE99C /* PlatformAudioData.h in Headers */,
     36321                                CDD08AC0277E54F000EA3755 /* PlatformAudioTrackConfiguration.h in Headers */,
    3631236322                                499B3EDD128DB50200E726C2 /* PlatformCAAnimation.h in Headers */,
    3631336323                                0F5E200618E771FC003EC3E5 /* PlatformCAAnimationCocoa.h in Headers */,
     
    3634136351                                0F7D07331884C56C00B4AF86 /* PlatformTextTrack.h in Headers */,
    3634236352                                074E82BB18A69F0E007EF54C /* PlatformTimeRanges.h in Headers */,
     36353                                CDD08ABD277E542600EA3755 /* PlatformTrackConfiguration.h in Headers */,
    3634336354                                CD1F9B022700323D00617EB6 /* PlatformVideoColorPrimaries.h in Headers */,
    3634436355                                CD1F9B01270020B700617EB6 /* PlatformVideoColorSpace.h in Headers */,
    3634536356                                CD1F9B032700323D00617EB6 /* PlatformVideoMatrixCoefficients.h in Headers */,
     36357                                CDD08AC2277E554E00EA3755 /* PlatformVideoTrackConfiguration.h in Headers */,
    3634636358                                CD1F9B042700323D00617EB6 /* PlatformVideoTransferCharacteristics.h in Headers */,
    3634736359                                52B0D4BE1C57FD1E0077CE53 /* PlatformView.h in Headers */,
  • branches/safari-613.1.12.1-branch/Source/WebCore/html/track/AudioTrack.cpp

    r286908 r287576  
    172172}
    173173
     174void AudioTrack::configurationChanged(const PlatformAudioTrackConfiguration& configuration)
     175{
     176    m_configuration->setState(configuration);
     177}
     178
    174179void AudioTrack::idChanged(const AtomString& id)
    175180{
     
    232237void AudioTrack::updateConfigurationFromPrivate()
    233238{
    234     m_configuration->setCodec(m_private->codec());
    235     m_configuration->setSampleRate(m_private->sampleRate());
    236     m_configuration->setNumberOfChannels(m_private->numberOfChannels());
    237     m_configuration->setBitrate(m_private->bitrate());
     239    m_configuration->setState(m_private->configuration());
    238240}
    239241
  • branches/safari-613.1.12.1-branch/Source/WebCore/html/track/AudioTrack.h

    r286908 r287576  
    8080    // AudioTrackPrivateClient
    8181    void enabledChanged(bool) final;
     82    void configurationChanged(const PlatformAudioTrackConfiguration&) final;
    8283
    8384    // TrackPrivateBaseClient
  • branches/safari-613.1.12.1-branch/Source/WebCore/html/track/AudioTrackConfiguration.h

    r286908 r287576  
    2828#if ENABLE(VIDEO)
    2929
     30#include "PlatformAudioTrackConfiguration.h"
    3031#include <wtf/text/WTFString.h>
    3132
    3233namespace WebCore {
    3334
    34 struct AudioTrackConfigurationInit {
    35     String codec;
    36     uint32_t sampleRate { 0 };
    37     uint32_t numberOfChannels { 0 };
    38     uint64_t bitrate { 0 };
    39 };
     35using AudioTrackConfigurationInit = PlatformAudioTrackConfiguration;
    4036
    4137class AudioTrackConfiguration : public RefCounted<AudioTrackConfiguration> {
     
    4440    static Ref<AudioTrackConfiguration> create(AudioTrackConfigurationInit&& init) { return adoptRef(*new AudioTrackConfiguration(WTFMove(init))); }
    4541    static Ref<AudioTrackConfiguration> create() { return adoptRef(*new AudioTrackConfiguration()); }
     42
     43    void setState(const AudioTrackConfigurationInit& state) { m_state = state; }
    4644
    4745    String codec() const { return m_state.codec; }
  • branches/safari-613.1.12.1-branch/Source/WebCore/html/track/VideoTrack.cpp

    r286908 r287576  
    165165}
    166166
     167void VideoTrack::configurationChanged(const PlatformVideoTrackConfiguration& configuration)
     168{
     169    m_configuration->setState(configuration);
     170}
     171
    167172void VideoTrack::idChanged(const AtomString& id)
    168173{
     
    263268void VideoTrack::updateConfigurationFromPrivate()
    264269{
    265     m_configuration->setCodec(m_private->codec());
    266     m_configuration->setWidth(m_private->width());
    267     m_configuration->setHeight(m_private->height());
    268     m_configuration->setColorSpace(VideoColorSpace::create(m_private->colorSpace()));
    269     m_configuration->setFramerate(m_private->framerate());
    270     m_configuration->setBitrate(m_private->bitrate());
     270    m_configuration->setState(m_private->configuration());
    271271}
    272272
  • branches/safari-613.1.12.1-branch/Source/WebCore/html/track/VideoTrack.h

    r286908 r287576  
    8484    // VideoTrackPrivateClient
    8585    void selectedChanged(bool) final;
    86     void configurationChanged() final { updateConfigurationFromPrivate(); }
     86    void configurationChanged(const PlatformVideoTrackConfiguration&) final;
    8787
    8888    // TrackPrivateBaseClient
  • branches/safari-613.1.12.1-branch/Source/WebCore/html/track/VideoTrackConfiguration.h

    r286908 r287576  
    2828#if ENABLE(VIDEO)
    2929
     30#include "PlatformVideoTrackConfiguration.h"
    3031#include "VideoColorSpace.h"
    3132#include <wtf/text/WTFString.h>
     
    3334namespace WebCore {
    3435
    35 struct VideoTrackConfigurationInit {
    36     String codec;
    37     uint32_t width { 0 };
    38     uint32_t height { 0 };
    39     RefPtr<VideoColorSpace> colorSpace;
    40     double framerate { 0 };
    41     uint64_t bitrate { 0 };
    42 };
     36using VideoTrackConfigurationInit = PlatformVideoTrackConfiguration;
    4337
    4438class VideoTrackConfiguration : public RefCounted<VideoTrackConfiguration> {
     
    4741    static Ref<VideoTrackConfiguration> create(VideoTrackConfigurationInit&& init) { return adoptRef(*new VideoTrackConfiguration(WTFMove(init))); }
    4842    static Ref<VideoTrackConfiguration> create() { return adoptRef(*new VideoTrackConfiguration()); }
     43
     44    void setState(const VideoTrackConfigurationInit& state)
     45    {
     46        m_state = state;
     47        m_colorSpace->setState(m_state.colorSpace);
     48    }
    4949
    5050    String codec() const { return m_state.codec; }
     
    5757    void setHeight(uint32_t height) { m_state.height = height; }
    5858
    59     RefPtr<VideoColorSpace> colorSpace() const { return m_state.colorSpace; }
    60     void setColorSpace(RefPtr<VideoColorSpace>&& colorSpace) { m_state.colorSpace = WTFMove(colorSpace); }
     59    Ref<VideoColorSpace> colorSpace() const { return m_colorSpace; }
     60    void setColorSpace(Ref<VideoColorSpace>&& colorSpace) { m_colorSpace = WTFMove(colorSpace); }
    6161
    6262    double framerate() const { return m_state.framerate; }
     
    6969    VideoTrackConfiguration(VideoTrackConfigurationInit&& init)
    7070        : m_state(init)
     71        , m_colorSpace(VideoColorSpace::create(init.colorSpace))
    7172    {
    7273    }
    73     VideoTrackConfiguration() = default;
     74    VideoTrackConfiguration()
     75        : m_colorSpace(VideoColorSpace::create())
     76    {
     77    }
    7478
    7579    VideoTrackConfigurationInit m_state;
     80    Ref<VideoColorSpace> m_colorSpace;
    7681};
    7782
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/AudioTrackPrivate.h

    r286908 r287576  
    2727
    2828#include "AudioTrackPrivateClient.h"
     29#include "PlatformAudioTrackConfiguration.h"
    2930#include "TrackPrivateBase.h"
    3031#include <wtf/Function.h>
     
    6566    using EnabledChangedCallback = Function<void(AudioTrackPrivate&, bool enabled)>;
    6667    void setEnabledChangedCallback(EnabledChangedCallback&& callback) { m_enabledChangedCallback = WTFMove(callback); }
    67    
    68     String codec() const { return m_codec; }
    69     void setCodec(String&& codec) { m_codec = WTFMove(codec); }
    70    
    71     uint32_t sampleRate() const { return m_sampleRate; }
    72     void setSampleRate(uint32_t sampleRate) { m_sampleRate = sampleRate; }
    73    
    74     uint32_t numberOfChannels() const { return m_numberOfChannels; }
    75     void setNumberOfChannels(uint32_t numberOfChannels) { m_numberOfChannels = numberOfChannels; }
    76    
    77     uint64_t bitrate() const { return m_bitrate; }
    78     void setBitrate(uint64_t bitrate) { m_bitrate = bitrate; }
     68
     69    const PlatformAudioTrackConfiguration& configuration() const { return m_configuration; }
     70    void setConfiguration(PlatformAudioTrackConfiguration&& configuration)
     71    {
     72        if (configuration == m_configuration)
     73            return;
     74        m_configuration = WTFMove(configuration);
     75        if (m_client)
     76            m_client->configurationChanged(m_configuration);
     77    }
    7978
    8079#if !RELEASE_LOG_DISABLED
     
    8887    WeakPtr<AudioTrackPrivateClient> m_client;
    8988    bool m_enabled { false };
    90     String m_codec;
    91     uint32_t m_sampleRate { 0 };
    92     uint32_t m_numberOfChannels { 0 };
    93     uint64_t m_bitrate { 0 };
     89    PlatformAudioTrackConfiguration m_configuration;
    9490    EnabledChangedCallback m_enabledChangedCallback;
    9591};
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/AudioTrackPrivateClient.h

    r283237 r287576  
    3333
    3434class AudioTrackPrivate;
     35struct PlatformAudioTrackConfiguration;
    3536
    3637class AudioTrackPrivateClient : public TrackPrivateBaseClient {
    3738public:
    3839    virtual void enabledChanged(bool) = 0;
     40    virtual void configurationChanged(const PlatformAudioTrackConfiguration&) = 0;
    3941};
    4042
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/PlatformAudioTrackConfiguration.h

    r287572 r287576  
    2626#pragma once
    2727
    28 #include "PlatformVideoColorPrimaries.h"
    29 #include "PlatformVideoMatrixCoefficients.h"
    30 #include "PlatformVideoTransferCharacteristics.h"
    31 #include <wtf/FastMalloc.h>
     28#if ENABLE(VIDEO)
     29
     30#include "PlatformTrackConfiguration.h"
    3231
    3332namespace WebCore {
    3433
    35 struct PlatformVideoColorSpace {
    36     WTF_MAKE_STRUCT_FAST_ALLOCATED;
    37     std::optional<PlatformVideoColorPrimaries> primaries;
    38     std::optional<PlatformVideoTransferCharacteristics> transfer;
    39     std::optional<PlatformVideoMatrixCoefficients> matrix;
    40     std::optional<bool> fullRange;
     34struct PlatformAudioTrackConfiguration : PlatformTrackConfiguration {
     35    uint32_t sampleRate { 0 };
     36    uint32_t numberOfChannels { 0 };
     37    uint64_t bitrate { 0 };
     38
    4139    template <class Encoder> void encode(Encoder&) const;
    42     template <class Decoder> static WARN_UNUSED_RETURN bool decode(Decoder&, PlatformVideoColorSpace&);
     40    template <class Decoder> static WARN_UNUSED_RETURN bool decode(Decoder&, PlatformAudioTrackConfiguration&);
    4341};
    4442
     43inline bool operator==(const PlatformAudioTrackConfiguration& a, const PlatformAudioTrackConfiguration& b)
     44{
     45    return a.codec == b.codec
     46        && a.sampleRate == b.sampleRate
     47        && a.numberOfChannels == b.numberOfChannels
     48        && a.bitrate == b.bitrate;
     49}
     50
    4551template <class Encoder>
    46 void PlatformVideoColorSpace::encode(Encoder& encoder) const
     52void PlatformAudioTrackConfiguration::encode(Encoder& encoder) const
    4753{
    48     encoder << primaries;
    49     encoder << transfer;
    50     encoder << matrix;
    51     encoder << fullRange;
     54    encoder << codec;
     55    encoder << sampleRate;
     56    encoder << numberOfChannels;
     57    encoder << bitrate;
    5258}
    5359
    5460template <class Decoder>
    55 bool PlatformVideoColorSpace::decode(Decoder& decoder, PlatformVideoColorSpace& colorSpace)
     61bool PlatformAudioTrackConfiguration::decode(Decoder& decoder, PlatformAudioTrackConfiguration& configuration)
    5662{
    57     if (!decoder.decode(colorSpace.primaries))
    58         return false;
    59     if (!decoder.decode(colorSpace.transfer))
    60         return false;
    61     if (!decoder.decode(colorSpace.matrix))
    62         return false;
    63     if (!decoder.decode(colorSpace.fullRange))
    64         return false;
    65     return true;
     63    return decoder.decode(configuration.codec)
     64        && decoder.decode(configuration.sampleRate)
     65        && decoder.decode(configuration.numberOfChannels)
     66        && decoder.decode(configuration.bitrate);
    6667}
    6768
    6869}
     70
     71#endif
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/PlatformTrackConfiguration.h

    r287572 r287576  
    2626#pragma once
    2727
    28 #include "TrackPrivateBaseClient.h"
     28#if ENABLE(VIDEO)
    2929
    30 #if ENABLE(VIDEO)
     30#include <wtf/text/WTFString.h>
    3131
    3232namespace WebCore {
    3333
    34 class AudioTrackPrivate;
    35 
    36 class AudioTrackPrivateClient : public TrackPrivateBaseClient {
    37 public:
    38     virtual void enabledChanged(bool) = 0;
     34struct PlatformTrackConfiguration {
     35    String codec;
    3936};
    4037
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/PlatformVideoColorSpace.h

    r286908 r287576  
    4343};
    4444
     45inline bool operator==(const PlatformVideoColorSpace& a, const PlatformVideoColorSpace& b)
     46{
     47    return a.primaries == b.primaries
     48        && a.transfer == b.transfer
     49        && a.matrix == b.matrix
     50        && a.fullRange == b.fullRange;
     51}
     52
     53inline bool operator!=(const PlatformVideoColorSpace& a, const PlatformVideoColorSpace& b)
     54{
     55    return !(a == b);
     56}
     57
    4558template <class Encoder>
    4659void PlatformVideoColorSpace::encode(Encoder& encoder) const
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/PlatformVideoTrackConfiguration.h

    r287572 r287576  
    2626#pragma once
    2727
    28 #include "PlatformVideoColorPrimaries.h"
    29 #include "PlatformVideoMatrixCoefficients.h"
    30 #include "PlatformVideoTransferCharacteristics.h"
    31 #include <wtf/FastMalloc.h>
     28#if ENABLE(VIDEO)
     29
     30#include "PlatformTrackConfiguration.h"
     31#include "PlatformVideoColorSpace.h"
    3232
    3333namespace WebCore {
    3434
    35 struct PlatformVideoColorSpace {
    36     WTF_MAKE_STRUCT_FAST_ALLOCATED;
    37     std::optional<PlatformVideoColorPrimaries> primaries;
    38     std::optional<PlatformVideoTransferCharacteristics> transfer;
    39     std::optional<PlatformVideoMatrixCoefficients> matrix;
    40     std::optional<bool> fullRange;
     35struct PlatformVideoTrackConfiguration : PlatformTrackConfiguration {
     36    uint32_t width { 0 };
     37    uint32_t height { 0 };
     38    PlatformVideoColorSpace colorSpace;
     39    double framerate { 0 };
     40    uint64_t bitrate { 0 };
     41
    4142    template <class Encoder> void encode(Encoder&) const;
    42     template <class Decoder> static WARN_UNUSED_RETURN bool decode(Decoder&, PlatformVideoColorSpace&);
     43    template <class Decoder> static WARN_UNUSED_RETURN bool decode(Decoder&, PlatformVideoTrackConfiguration&);
    4344};
    4445
     46inline bool operator==(const PlatformVideoTrackConfiguration& a, const PlatformVideoTrackConfiguration& b)
     47{
     48    return a.codec == b.codec
     49        && a.width == b.width
     50        && a.height == b.height
     51        && a.colorSpace == b.colorSpace
     52        && a.framerate == b.framerate
     53        && a.bitrate == b.bitrate;
     54}
     55
    4556template <class Encoder>
    46 void PlatformVideoColorSpace::encode(Encoder& encoder) const
     57void PlatformVideoTrackConfiguration::encode(Encoder& encoder) const
    4758{
    48     encoder << primaries;
    49     encoder << transfer;
    50     encoder << matrix;
    51     encoder << fullRange;
     59    encoder << codec;
     60    encoder << width;
     61    encoder << height;
     62    encoder << colorSpace;
     63    encoder << framerate;
     64    encoder << bitrate;
    5265}
    5366
    5467template <class Decoder>
    55 bool PlatformVideoColorSpace::decode(Decoder& decoder, PlatformVideoColorSpace& colorSpace)
     68bool PlatformVideoTrackConfiguration::decode(Decoder& decoder, PlatformVideoTrackConfiguration& configuration)
    5669{
    57     if (!decoder.decode(colorSpace.primaries))
    58         return false;
    59     if (!decoder.decode(colorSpace.transfer))
    60         return false;
    61     if (!decoder.decode(colorSpace.matrix))
    62         return false;
    63     if (!decoder.decode(colorSpace.fullRange))
    64         return false;
    65     return true;
     70    return decoder.decode(configuration.codec)
     71        && decoder.decode(configuration.width)
     72        && decoder.decode(configuration.height)
     73        && decoder.decode(configuration.colorSpace)
     74        && decoder.decode(configuration.framerate)
     75        && decoder.decode(configuration.bitrate);
    6676}
    6777
    6878}
     79
     80#endif
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/VideoTrackPrivate.h

    r286908 r287576  
    2828#if ENABLE(VIDEO)
    2929
    30 #include "PlatformVideoColorSpace.h"
     30#include "PlatformVideoTrackConfiguration.h"
    3131#include "TrackPrivateBase.h"
    3232#include "VideoTrackPrivateClient.h"
     
    6363    void setSelectedChangedCallback(SelectedChangedCallback&& callback) { m_selectedChangedCallback = WTFMove(callback); }
    6464
    65     virtual String codec() const { return m_codec; }
    66     virtual void setCodec(String&& codec) { m_codec = WTFMove(codec); }
    67    
    68     virtual uint32_t width() const { return m_width; }
    69     virtual void setWidth(uint32_t width) { m_width = width; }
    70    
    71     virtual uint32_t height() const { return m_height; }
    72     virtual void setHeight(uint32_t height) { m_height = height; }
    73    
    74     virtual PlatformVideoColorSpace colorSpace() const { return m_colorSpace; }
    75     virtual void setColorSpace(PlatformVideoColorSpace&& colorSpace) { m_colorSpace = WTFMove(colorSpace); }
    76    
    77     virtual double framerate() const { return m_framerate; }
    78     virtual void setFramerate(double framerate) { m_framerate = framerate; }
    79    
    80     virtual uint64_t bitrate() const { return m_bitrate; }
    81     virtual void setBitrate(uint64_t bitrate) { m_bitrate = bitrate; }
    82    
     65    const PlatformVideoTrackConfiguration& configuration() const { return m_configuration; }
     66    void setConfiguration(PlatformVideoTrackConfiguration&& configuration)
     67    {
     68        if (configuration == m_configuration)
     69            return;
     70        m_configuration = WTFMove(configuration);
     71        if (m_client)
     72            m_client->configurationChanged(m_configuration);
     73    }
     74
    8375protected:
    8476    VideoTrackPrivate() = default;
     
    8779    WeakPtr<VideoTrackPrivateClient> m_client { nullptr };
    8880    bool m_selected { false };
    89     String m_codec;
    90     uint32_t m_width { 0 };
    91     uint32_t m_height { 0 };
    92     PlatformVideoColorSpace m_colorSpace;
    93     double m_framerate { 0 };
    94     uint64_t m_bitrate { 0 };
     81    PlatformVideoTrackConfiguration m_configuration;
    9582
    9683    SelectedChangedCallback m_selectedChangedCallback;
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h

    r286908 r287576  
    3232namespace WebCore {
    3333
     34struct PlatformVideoTrackConfiguration;
     35
    3436class VideoTrackPrivateClient : public TrackPrivateBaseClient {
    3537public:
    3638    virtual void selectedChanged(bool) = 0;
    37     virtual void configurationChanged() = 0;
     39    virtual void configurationChanged(const PlatformVideoTrackConfiguration&) = 0;
    3840};
    3941
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h

    r286908 r287576  
    3232#include "PlatformVideoColorSpace.h"
    3333#include "VideoTrackPrivate.h"
     34#include <wtf/Observer.h>
    3435#include <wtf/Ref.h>
    3536#include <wtf/RetainPtr.h>
     
    4647
    4748class MediaSelectionOptionAVFObjC;
     49struct PlatformVideoTrackConfiguration;
     50struct PlatformAudioTrackConfiguration;
    4851
    49 class AVTrackPrivateAVFObjCImpl {
     52class AVTrackPrivateAVFObjCImpl : public CanMakeWeakPtr<AVTrackPrivateAVFObjCImpl> {
    5053    WTF_MAKE_FAST_ALLOCATED;
    5154public:
     
    7275    int trackID() const;
    7376
     77    static String languageForAVAssetTrack(AVAssetTrack*);
     78    static String languageForAVMediaSelectionOption(AVMediaSelectionOption *);
     79
     80    PlatformVideoTrackConfiguration videoTrackConfiguration() const;
     81    using VideoTrackConfigurationObserver = Observer<void()>;
     82    void setVideoTrackConfigurationObserver(VideoTrackConfigurationObserver& observer) { m_videoTrackConfigurationObserver = observer; }
     83
     84    PlatformAudioTrackConfiguration audioTrackConfiguration() const;
     85    using AudioTrackConfigurationObserver = Observer<void()>;
     86    void setAudioTrackConfigurationObserver(AudioTrackConfigurationObserver& observer) { m_audioTrackConfigurationObserver = observer; }
     87
     88private:
     89    void initializeAssetTrack();
     90
    7491    String codec() const;
    7592    uint32_t width() const;
     
    8097    uint32_t sampleRate() const;
    8198    uint32_t numberOfChannels() const;
    82     static String languageForAVAssetTrack(AVAssetTrack*);
    83     static String languageForAVMediaSelectionOption(AVMediaSelectionOption *);
    8499
    85 private:
    86100    RetainPtr<AVPlayerItemTrack> m_playerItemTrack;
    87     RetainPtr<AVAssetTrack> m_assetTrack;
    88101    RetainPtr<AVPlayerItem> m_playerItem;
    89102    RefPtr<MediaSelectionOptionAVFObjC> m_mediaSelectionOption;
     103    RetainPtr<AVAssetTrack> m_assetTrack;
     104    WeakPtr<VideoTrackConfigurationObserver> m_videoTrackConfigurationObserver;
     105    WeakPtr<AudioTrackConfigurationObserver> m_audioTrackConfigurationObserver;
    90106};
    91107
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm

    r286908 r287576  
    3131#import "FormatDescriptionUtilities.h"
    3232#import "MediaSelectionGroupAVFObjC.h"
     33#import "PlatformAudioTrackConfiguration.h"
     34#import "PlatformVideoTrackConfiguration.h"
    3335#import "SharedBuffer.h"
    3436#import <AVFoundation/AVAssetTrack.h>
     
    3840#import <AVFoundation/AVPlayerItemTrack.h>
    3941#import <objc/runtime.h>
     42#import <wtf/RunLoop.h>
    4043
    4144#import <pal/cf/CoreMediaSoftLink.h>
     
    4952namespace WebCore {
    5053
     54static NSArray* assetTrackConfigurationKeyNames()
     55{
     56    static NSArray* keys = [[NSArray alloc] initWithObjects:@"formatDescriptions", @"estimatedDataRate", @"nominalFrameRate", nil];
     57    return keys;
     58}
     59
    5160AVTrackPrivateAVFObjCImpl::AVTrackPrivateAVFObjCImpl(AVPlayerItemTrack* track)
    5261    : m_playerItemTrack(track)
    5362    , m_assetTrack([track assetTrack])
    5463{
     64    initializeAssetTrack();
    5565}
    5666
     
    5868    : m_assetTrack(track)
    5969{
     70    initializeAssetTrack();
    6071}
    6172
    6273AVTrackPrivateAVFObjCImpl::AVTrackPrivateAVFObjCImpl(MediaSelectionOptionAVFObjC& option)
    6374    : m_mediaSelectionOption(&option)
    64 {
     75    , m_assetTrack(option.assetTrack())
     76{
     77    initializeAssetTrack();
    6578}
    6679
    6780AVTrackPrivateAVFObjCImpl::~AVTrackPrivateAVFObjCImpl()
    6881{
     82}
     83
     84void AVTrackPrivateAVFObjCImpl::initializeAssetTrack()
     85{
     86    if (!m_assetTrack)
     87        return;
     88
     89    [m_assetTrack loadValuesAsynchronouslyForKeys:assetTrackConfigurationKeyNames() completionHandler:[weakThis = WeakPtr(this)] () mutable {
     90        callOnMainRunLoop([weakThis = WTFMove(weakThis)] {
     91            if (weakThis && weakThis->m_audioTrackConfigurationObserver)
     92                (*weakThis->m_audioTrackConfigurationObserver)();
     93            if (weakThis && weakThis->m_videoTrackConfigurationObserver)
     94                (*weakThis->m_videoTrackConfigurationObserver)();
     95        });
     96    }];
    6997}
    7098   
     
    233261}
    234262
     263PlatformVideoTrackConfiguration AVTrackPrivateAVFObjCImpl::videoTrackConfiguration() const
     264{
     265    return {
     266        { codec() },
     267        width(),
     268        height(),
     269        colorSpace(),
     270        framerate(),
     271        bitrate(),
     272    };
     273}
     274
     275PlatformAudioTrackConfiguration AVTrackPrivateAVFObjCImpl::audioTrackConfiguration() const
     276{
     277    return {
     278        { codec() },
     279        sampleRate(),
     280        numberOfChannels(),
     281        bitrate(),
     282    };
     283}
     284
    235285int AVTrackPrivateAVFObjCImpl::trackID() const
    236286{
     
    257307{
    258308    auto assetTrack = assetTrackFor(impl);
    259     if (!assetTrack || !assetTrack.formatDescriptions.count)
     309    if (!assetTrack || [assetTrack statusOfValueForKey:@"formatDescriptions" error:nil] != AVKeyValueStatusLoaded || !assetTrack.formatDescriptions.count)
    260310        return nullptr;
    261311    return static_cast<CMFormatDescriptionRef>(assetTrack.formatDescriptions[0]);
     
    292342double AVTrackPrivateAVFObjCImpl::framerate() const
    293343{
    294     if (auto assetTrack = assetTrackFor(*this))
    295         return assetTrack.nominalFrameRate;
    296     ASSERT_NOT_REACHED();
    297     return 0;
     344    auto assetTrack = assetTrackFor(*this);
     345    if (!assetTrack)
     346        return 0;
     347    if ([assetTrack statusOfValueForKey:@"nominalFrameRate" error:nil] != AVKeyValueStatusLoaded)
     348        return 0;
     349    return assetTrack.nominalFrameRate;
    298350}
    299351
     
    329381    if (!assetTrack)
    330382        return 0;
     383    if ([assetTrack statusOfValueForKey:@"estimatedDataRate" error:nil] != AVKeyValueStatusLoaded)
     384        return 0;
    331385    if (!std::isfinite(assetTrack.estimatedDataRate))
    332386        return 0;
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h

    r262695 r287576  
    3030
    3131#include "AudioTrackPrivateAVF.h"
     32#include <wtf/Observer.h>
    3233
    3334OBJC_CLASS AVAssetTrack;
     
    7677    AudioTrackPrivateAVFObjC(AVAssetTrack*);
    7778    AudioTrackPrivateAVFObjC(MediaSelectionOptionAVFObjC&);
     79    AudioTrackPrivateAVFObjC(std::unique_ptr<AVTrackPrivateAVFObjCImpl>&&);
    7880
    7981    void resetPropertiesFromTrack();
     82    void audioTrackConfigurationChanged();
    8083    std::unique_ptr<AVTrackPrivateAVFObjCImpl> m_impl;
     84
     85    using AudioTrackConfigurationObserver = Observer<void()>;
     86    AudioTrackConfigurationObserver m_audioTrackConfigurationObserver;
    8187};
    8288
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm

    r286908 r287576  
    3434
    3535AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC(AVPlayerItemTrack* track)
    36     : m_impl(makeUnique<AVTrackPrivateAVFObjCImpl>(track))
     36    : AudioTrackPrivateAVFObjC(makeUnique<AVTrackPrivateAVFObjCImpl>(track))
    3737{
     38}
     39
     40AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC(AVAssetTrack* track)
     41    : AudioTrackPrivateAVFObjC(makeUnique<AVTrackPrivateAVFObjCImpl>(track))
     42{
     43}
     44
     45AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC(MediaSelectionOptionAVFObjC& option)
     46    : AudioTrackPrivateAVFObjC(makeUnique<AVTrackPrivateAVFObjCImpl>(option))
     47{
     48}
     49
     50AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC(std::unique_ptr<AVTrackPrivateAVFObjCImpl>&& impl)
     51    : m_impl(WTFMove(impl))
     52    , m_audioTrackConfigurationObserver([this] { audioTrackConfigurationChanged(); })
     53{
     54    m_impl->setAudioTrackConfigurationObserver(m_audioTrackConfigurationObserver);
    3855    resetPropertiesFromTrack();
    3956}
    4057
    41 AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC(MediaSelectionOptionAVFObjC& option)
    42     : m_impl(makeUnique<AVTrackPrivateAVFObjCImpl>(option))
    43 {
    44     resetPropertiesFromTrack();
    45 }
    4658
    4759void AudioTrackPrivateAVFObjC::resetPropertiesFromTrack()
     
    5668    setLabel(m_impl->label());
    5769    setLanguage(m_impl->language());
    58     setCodec(m_impl->codec());
    59     setSampleRate(m_impl->sampleRate());
    60     setNumberOfChannels(m_impl->numberOfChannels());
    61     setBitrate(m_impl->bitrate());
     70    setConfiguration(m_impl->audioTrackConfiguration());
     71}
    6272
     73void AudioTrackPrivateAVFObjC::audioTrackConfigurationChanged()
     74{
     75    setConfiguration(m_impl->audioTrackConfiguration());
    6376}
    6477
     
    7285{
    7386    return m_impl->playerItemTrack();
    74 }
    75 
    76 AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC(AVAssetTrack* track)
    77     : m_impl(makeUnique<AVTrackPrivateAVFObjCImpl>(track))
    78 {
    79     resetPropertiesFromTrack();
    8087}
    8188
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp

    r286908 r287576  
    3131#import "AVTrackPrivateAVFObjCImpl.h"
    3232#import "MediaSelectionGroupAVFObjC.h"
     33#import "PlatformVideoTrackConfiguration.h"
    3334
    3435namespace WebCore {
    3536
    3637VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC(AVPlayerItemTrack* track)
    37     : m_impl(makeUnique<AVTrackPrivateAVFObjCImpl>(track))
     38    : VideoTrackPrivateAVFObjC(makeUnique<AVTrackPrivateAVFObjCImpl>(track))
    3839{
    39     resetPropertiesFromTrack();
    4040}
    4141
    4242VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC(AVAssetTrack* track)
    43     : m_impl(makeUnique<AVTrackPrivateAVFObjCImpl>(track))
     43    : VideoTrackPrivateAVFObjC(makeUnique<AVTrackPrivateAVFObjCImpl>(track))
    4444{
    45     resetPropertiesFromTrack();
    4645}
    4746
    4847VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC(MediaSelectionOptionAVFObjC& option)
    49     : m_impl(makeUnique<AVTrackPrivateAVFObjCImpl>(option))
     48    : VideoTrackPrivateAVFObjC(makeUnique<AVTrackPrivateAVFObjCImpl>(option))
    5049{
     50}
     51
     52VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC(std::unique_ptr<AVTrackPrivateAVFObjCImpl>&& impl)
     53    : m_impl(WTFMove(impl))
     54    , m_videoTrackConfigurationObserver([this] { videoTrackConfigurationChanged(); })
     55{
     56    m_impl->setVideoTrackConfigurationObserver(m_videoTrackConfigurationObserver);
    5157    resetPropertiesFromTrack();
    5258}
     
    6369    setLabel(m_impl->label());
    6470    setLanguage(m_impl->language());
    65     setCodec(m_impl->codec());
    66     setWidth(m_impl->width());
    67     setHeight(m_impl->height());
    68     setColorSpace(m_impl->colorSpace());
    69     setFramerate(m_impl->framerate());
    70     setBitrate(m_impl->bitrate());
     71    setConfiguration(m_impl->videoTrackConfiguration());
     72}
    7173
    72     if (auto* client = this->client())
    73         client->configurationChanged();
     74void VideoTrackPrivateAVFObjC::videoTrackConfigurationChanged()
     75{
     76    setConfiguration(m_impl->videoTrackConfiguration());
    7477}
    7578
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h

    r284770 r287576  
    3030
    3131#include "VideoTrackPrivateAVF.h"
     32#include <wtf/Observer.h>
    3233
    3334OBJC_CLASS AVAssetTrack;
     
    7677    explicit VideoTrackPrivateAVFObjC(AVAssetTrack*);
    7778    explicit VideoTrackPrivateAVFObjC(MediaSelectionOptionAVFObjC&);
     79    explicit VideoTrackPrivateAVFObjC(std::unique_ptr<AVTrackPrivateAVFObjCImpl>&&);
    7880
    7981    void resetPropertiesFromTrack();
     82    void videoTrackConfigurationChanged();
    8083    std::unique_ptr<AVTrackPrivateAVFObjCImpl> m_impl;
     84
     85    using VideoTrackConfigurationObserver = Observer<void()>;
     86    VideoTrackConfigurationObserver m_videoTrackConfigurationObserver;
    8187};
    8288
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm

    r286908 r287576  
    5151    setLabel(m_impl->label());
    5252    setLanguage(m_impl->language());
    53     setCodec(m_impl->codec());
    54     setWidth(m_impl->width());
    55     setHeight(m_impl->height());
    56     setColorSpace(m_impl->colorSpace());
    57     setFramerate(m_impl->framerate());
    58     setBitrate(m_impl->bitrate());
     53    setConfiguration(m_impl->videoTrackConfiguration());
    5954}
    6055
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/cocoa/VideoTrackPrivateWebM.cpp

    r286908 r287576  
    4141    if (m_track.is_enabled.is_present())
    4242        setSelected(m_track.is_enabled.value());
     43
     44    updateConfiguration();
    4345}
    4446
     
    146148}
    147149
     150void VideoTrackPrivateWebM::updateConfiguration()
     151{
     152    PlatformVideoTrackConfiguration configuration {
     153        { .codec = codec() },
     154        .width = width(),
     155        .height = height(),
     156        .framerate = framerate(),
     157    };
     158    setConfiguration(WTFMove(configuration));
     159}
     160
    148161}
    149162
  • branches/safari-613.1.12.1-branch/Source/WebCore/platform/graphics/cocoa/VideoTrackPrivateWebM.h

    r286908 r287576  
    4444    std::optional<uint64_t> trackUID() const final;
    4545    std::optional<bool> defaultEnabled() const final;
    46     String codec() const final;
    47     uint32_t width() const final;
    48     uint32_t height() const final;
    49     double framerate() const final;
    5046
    5147private:
    5248    VideoTrackPrivateWebM(webm::TrackEntry&&);
     49
     50    String codec() const;
     51    uint32_t width() const;
     52    uint32_t height() const;
     53    double framerate() const;
     54    void updateConfiguration();
     55
    5356    webm::TrackEntry m_track;
    5457    mutable AtomString m_trackID;
  • branches/safari-613.1.12.1-branch/Source/WebKit/ChangeLog

    r287149 r287576  
     12022-01-04  Alan Coon  <alancoon@apple.com>
     2
     3        Cherry-pick r287574. rdar://problem/86855896
     4
     5    [Cocoa] Hang in AVTrackPrivateAVFObjCImpl::bitrate()
     6    https://bugs.webkit.org/show_bug.cgi?id=234753
     7   
     8    Reviewed by Eric Carlson.
     9   
     10    Source/WebCore:
     11   
     12    In r286908, WebCore added new queries onto existing AVAssetTrack objects; however, querying
     13    those properties will block if data for those properties is not yet available. The media element
     14    could block moving to the HAVE_METADATA state until those properties are fully loaded, however
     15    this might regress PLT, so instead, we will check the load state of those properties before returning
     16    values.
     17   
     18    However, to make the properties exposed through VideoTrackConfiguration.idl/AudioTrackConfiguration.idl
     19    dynamic, changes need to be signaled and propagated upward through the layers between AVAssetTrack and
     20    the DOM. Rather than make individual notifications for each property in a Configuration struct, make one
     21    notification that handles any change to the Configuration struct at all and push that upward to clients.
     22   
     23    Since these properties are being grouped together at a lower-level, they do not need to be tracked
     24    individually, and Video/AudioTrackConfigurationInit can just be aliased to a platform-defined struct.
     25   
     26    * html/track/AudioTrack.cpp:
     27    (WebCore::AudioTrack::configurationChanged):
     28    (WebCore::AudioTrack::updateConfigurationFromPrivate):
     29    * html/track/AudioTrack.h:
     30    * html/track/AudioTrackConfiguration.h:
     31    (WebCore::AudioTrackConfiguration::setState):
     32    (): Deleted.
     33    * html/track/VideoTrack.cpp:
     34    (WebCore::VideoTrack::configurationChanged):
     35    (WebCore::VideoTrack::updateConfigurationFromPrivate):
     36    * html/track/VideoTrack.h:
     37    * html/track/VideoTrackConfiguration.h:
     38    (WebCore::VideoTrackConfiguration::setState):
     39    (WebCore::VideoTrackConfiguration::colorSpace const):
     40    (WebCore::VideoTrackConfiguration::setColorSpace):
     41    (WebCore::VideoTrackConfiguration::VideoTrackConfiguration):
     42    (): Deleted.
     43    * platform/graphics/AudioTrackPrivate.h:
     44    (WebCore::AudioTrackPrivate::configuration const):
     45    (WebCore::AudioTrackPrivate::setConfiguration):
     46    (WebCore::AudioTrackPrivate::codec const): Deleted.
     47    (WebCore::AudioTrackPrivate::setCodec): Deleted.
     48    (WebCore::AudioTrackPrivate::sampleRate const): Deleted.
     49    (WebCore::AudioTrackPrivate::setSampleRate): Deleted.
     50    (WebCore::AudioTrackPrivate::numberOfChannels const): Deleted.
     51    (WebCore::AudioTrackPrivate::setNumberOfChannels): Deleted.
     52    (WebCore::AudioTrackPrivate::bitrate const): Deleted.
     53    (WebCore::AudioTrackPrivate::setBitrate): Deleted.
     54    * platform/graphics/AudioTrackPrivateClient.h:
     55    * platform/graphics/PlatformVideoColorSpace.h:
     56    (WebCore::operator==):
     57    (WebCore::operator!=):
     58    * platform/graphics/VideoTrackPrivate.h:
     59    (WebCore::VideoTrackPrivate::configuration const):
     60    (WebCore::VideoTrackPrivate::setConfiguration):
     61    (WebCore::VideoTrackPrivate::codec const): Deleted.
     62    (WebCore::VideoTrackPrivate::setCodec): Deleted.
     63    (WebCore::VideoTrackPrivate::width const): Deleted.
     64    (WebCore::VideoTrackPrivate::setWidth): Deleted.
     65    (WebCore::VideoTrackPrivate::height const): Deleted.
     66    (WebCore::VideoTrackPrivate::setHeight): Deleted.
     67    (WebCore::VideoTrackPrivate::colorSpace const): Deleted.
     68    (WebCore::VideoTrackPrivate::setColorSpace): Deleted.
     69    (WebCore::VideoTrackPrivate::framerate const): Deleted.
     70    (WebCore::VideoTrackPrivate::setFramerate): Deleted.
     71    (WebCore::VideoTrackPrivate::bitrate const): Deleted.
     72    (WebCore::VideoTrackPrivate::setBitrate): Deleted.
     73    * platform/graphics/VideoTrackPrivateClient.h:
     74    * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
     75    (WebCore::AVTrackPrivateAVFObjCImpl::setVideoTrackConfigurationObserver):
     76    (WebCore::AVTrackPrivateAVFObjCImpl::setAudioTrackConfigurationObserver):
     77    * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
     78    (WebCore::assetTrackConfigurationKeyNames):
     79    (WebCore::AVTrackPrivateAVFObjCImpl::AVTrackPrivateAVFObjCImpl):
     80    (WebCore::AVTrackPrivateAVFObjCImpl::initializeAssetTrack):
     81    (WebCore::AVTrackPrivateAVFObjCImpl::videoTrackConfiguration const):
     82    (WebCore::AVTrackPrivateAVFObjCImpl::audioTrackConfiguration const):
     83    * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h:
     84    * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
     85    (WebCore::AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC):
     86    (WebCore::AudioTrackPrivateAVFObjC::resetPropertiesFromTrack):
     87    (WebCore::AudioTrackPrivateAVFObjC::audioTrackConfigurationChanged):
     88    * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
     89    (WebCore::VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC):
     90    (WebCore::VideoTrackPrivateAVFObjC::resetPropertiesFromTrack):
     91    (WebCore::VideoTrackPrivateAVFObjC::videoTrackConfigurationChanged):
     92    * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:
     93    * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm:
     94    (WebCore::VideoTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
     95    * platform/graphics/cocoa/VideoTrackPrivateWebM.cpp:
     96    (WebCore::VideoTrackPrivateWebM::VideoTrackPrivateWebM):
     97    (WebCore::VideoTrackPrivateWebM::updateConfiguration):
     98    * platform/graphics/cocoa/VideoTrackPrivateWebM.h:
     99   
     100    Source/WebKit:
     101   
     102    Propagate changes to TrackConfigurations upwards from the GPU process -> WebContent process.
     103   
     104    * GPUProcess/media/AudioTrackPrivateRemoteConfiguration.h:
     105    (WebKit::AudioTrackPrivateRemoteConfiguration::encode const):
     106    (WebKit::AudioTrackPrivateRemoteConfiguration::decode):
     107    * GPUProcess/media/RemoteAudioTrackProxy.cpp:
     108    (WebKit::RemoteAudioTrackProxy::configuration):
     109    (WebKit::RemoteAudioTrackProxy::configurationChanged):
     110    * GPUProcess/media/RemoteAudioTrackProxy.h:
     111    * GPUProcess/media/RemoteVideoTrackProxy.cpp:
     112    (WebKit::RemoteVideoTrackProxy::configuration):
     113    * GPUProcess/media/RemoteVideoTrackProxy.h:
     114    * GPUProcess/media/TrackPrivateRemoteConfiguration.h:
     115    (WebKit::TrackPrivateRemoteConfiguration::encode const):
     116    (WebKit::TrackPrivateRemoteConfiguration::decode):
     117    * GPUProcess/media/VideoTrackPrivateRemoteConfiguration.h:
     118    (WebKit::VideoTrackPrivateRemoteConfiguration::encode const):
     119    (WebKit::VideoTrackPrivateRemoteConfiguration::decode):
     120    * WebKit.xcodeproj/project.pbxproj:
     121    * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp:
     122    (WebKit::AudioTrackPrivateRemote::AudioTrackPrivateRemote):
     123    (WebKit::AudioTrackPrivateRemote::updateConfiguration):
     124    * WebProcess/GPU/media/AudioTrackPrivateRemote.h:
     125    * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
     126    (WebKit::MediaPlayerPrivateRemote::addRemoteAudioTrack):
     127    (WebKit::MediaPlayerPrivateRemote::remoteAudioTrackConfigurationChanged):
     128    (WebKit::MediaPlayerPrivateRemote::addRemoteVideoTrack):
     129    (WebKit::MediaPlayerPrivateRemote::remoteVideoTrackConfigurationChanged):
     130    * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
     131    * WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in:
     132    * WebProcess/GPU/media/VideoTrackPrivateRemote.cpp:
     133    (WebKit::VideoTrackPrivateRemote::VideoTrackPrivateRemote):
     134    (WebKit::VideoTrackPrivateRemote::updateConfiguration):
     135    * WebProcess/GPU/media/VideoTrackPrivateRemote.h:
     136    (WebKit::VideoTrackPrivateRemote::create):
     137   
     138    LayoutTests:
     139   
     140    Now that these properties are dynamic, test them with `testExpectedEventually`.
     141   
     142    * media/track/audio-track-configuration.html:
     143    * media/track/video-track-alternate-groups-expected.txt:
     144    * media/track/video-track-configuration.html:
     145   
     146   
     147    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@287574 268f45cc-cd09-0410-ab3c-d52691b4dbfc
     148
     149    2022-01-04  Jer Noble  <jer.noble@apple.com>
     150
     151            [Cocoa] Hang in AVTrackPrivateAVFObjCImpl::bitrate()
     152            https://bugs.webkit.org/show_bug.cgi?id=234753
     153
     154            Reviewed by Eric Carlson.
     155
     156            Propagate changes to TrackConfigurations upwards from the GPU process -> WebContent process.
     157
     158            * GPUProcess/media/AudioTrackPrivateRemoteConfiguration.h:
     159            (WebKit::AudioTrackPrivateRemoteConfiguration::encode const):
     160            (WebKit::AudioTrackPrivateRemoteConfiguration::decode):
     161            * GPUProcess/media/RemoteAudioTrackProxy.cpp:
     162            (WebKit::RemoteAudioTrackProxy::configuration):
     163            (WebKit::RemoteAudioTrackProxy::configurationChanged):
     164            * GPUProcess/media/RemoteAudioTrackProxy.h:
     165            * GPUProcess/media/RemoteVideoTrackProxy.cpp:
     166            (WebKit::RemoteVideoTrackProxy::configuration):
     167            * GPUProcess/media/RemoteVideoTrackProxy.h:
     168            * GPUProcess/media/TrackPrivateRemoteConfiguration.h:
     169            (WebKit::TrackPrivateRemoteConfiguration::encode const):
     170            (WebKit::TrackPrivateRemoteConfiguration::decode):
     171            * GPUProcess/media/VideoTrackPrivateRemoteConfiguration.h:
     172            (WebKit::VideoTrackPrivateRemoteConfiguration::encode const):
     173            (WebKit::VideoTrackPrivateRemoteConfiguration::decode):
     174            * WebKit.xcodeproj/project.pbxproj:
     175            * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp:
     176            (WebKit::AudioTrackPrivateRemote::AudioTrackPrivateRemote):
     177            (WebKit::AudioTrackPrivateRemote::updateConfiguration):
     178            * WebProcess/GPU/media/AudioTrackPrivateRemote.h:
     179            * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
     180            (WebKit::MediaPlayerPrivateRemote::addRemoteAudioTrack):
     181            (WebKit::MediaPlayerPrivateRemote::remoteAudioTrackConfigurationChanged):
     182            (WebKit::MediaPlayerPrivateRemote::addRemoteVideoTrack):
     183            (WebKit::MediaPlayerPrivateRemote::remoteVideoTrackConfigurationChanged):
     184            * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
     185            * WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in:
     186            * WebProcess/GPU/media/VideoTrackPrivateRemote.cpp:
     187            (WebKit::VideoTrackPrivateRemote::VideoTrackPrivateRemote):
     188            (WebKit::VideoTrackPrivateRemote::updateConfiguration):
     189            * WebProcess/GPU/media/VideoTrackPrivateRemote.h:
     190            (WebKit::VideoTrackPrivateRemote::create):
     191
    11922021-12-16  Alan Coon  <alancoon@apple.com>
    2193
  • branches/safari-613.1.12.1-branch/Source/WebKit/GPUProcess/media/AudioTrackPrivateRemoteConfiguration.h

    r287572 r287576  
    2626#pragma once
    2727
    28 #include "TrackPrivateBaseClient.h"
     28#if ENABLE(GPU_PROCESS)
    2929
    30 #if ENABLE(VIDEO)
     30#include "TrackPrivateRemoteConfiguration.h"
     31#include <WebCore/AudioTrackPrivate.h>
    3132
    32 namespace WebCore {
     33namespace WebKit {
    3334
    34 class AudioTrackPrivate;
     35struct AudioTrackPrivateRemoteConfiguration : TrackPrivateRemoteConfiguration {
     36    bool enabled;
     37    WebCore::AudioTrackPrivate::Kind kind { WebCore::AudioTrackPrivate::Kind::None };
     38    WebCore::PlatformAudioTrackConfiguration trackConfiguration;
    3539
    36 class AudioTrackPrivateClient : public TrackPrivateBaseClient {
    37 public:
    38     virtual void enabledChanged(bool) = 0;
     40    template<class Encoder>
     41    void encode(Encoder& encoder) const
     42    {
     43        TrackPrivateRemoteConfiguration::encode(encoder);
     44        encoder << enabled;
     45        encoder << kind;
     46        encoder << trackConfiguration;
     47    }
     48
     49    template <class Decoder>
     50    static bool WARN_UNUSED_RETURN decode(Decoder& decoder, AudioTrackPrivateRemoteConfiguration& configuration)
     51    {
     52        return TrackPrivateRemoteConfiguration::decode(decoder, configuration)
     53            && decoder.decode(configuration.enabled)
     54            && decoder.decode(configuration.kind)
     55            && decoder.decode(configuration.trackConfiguration);
     56    }
    3957};
    4058
    41 }
     59} // namespace WebKit
    4260
    4361#endif
  • branches/safari-613.1.12.1-branch/Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp

    r286908 r287576  
    3030#if ENABLE(GPU_PROCESS)
    3131
     32#include "AudioTrackPrivateRemoteConfiguration.h"
    3233#include "Connection.h"
    3334#include "GPUConnectionToWebProcess.h"
    3435#include "MediaPlayerPrivateRemoteMessages.h"
    3536#include "RemoteMediaPlayerProxy.h"
    36 #include "TrackPrivateRemoteConfiguration.h"
    3737
    3838namespace WebKit {
     
    5555}
    5656
    57 TrackPrivateRemoteConfiguration RemoteAudioTrackProxy::configuration()
     57AudioTrackPrivateRemoteConfiguration RemoteAudioTrackProxy::configuration()
    5858{
    5959    return {
    60         m_trackPrivate->id(),
    61         m_trackPrivate->label(),
    62         m_trackPrivate->language(),
    63         m_trackPrivate->startTimeVariance(),
    64         m_trackPrivate->trackIndex(),
     60        {
     61            m_trackPrivate->id(),
     62            m_trackPrivate->label(),
     63            m_trackPrivate->language(),
     64            m_trackPrivate->startTimeVariance(),
     65            m_trackPrivate->trackIndex(),
     66        },
    6567        m_trackPrivate->enabled(),
    6668        m_trackPrivate->kind(),
    67         false,
    68         WebCore::VideoTrackPrivate::Kind::None,
    69         m_trackPrivate->codec(),
    70         0,
    71         0,
    72         { },
    73         0,
    74         m_trackPrivate->bitrate(),
    75         m_trackPrivate->sampleRate(),
    76         m_trackPrivate->numberOfChannels(),
     69        m_trackPrivate->configuration(),
    7770    };
    7871}
     
    9992}
    10093
     94void RemoteAudioTrackProxy::configurationChanged(const PlatformAudioTrackConfiguration& configuration)
     95{
     96    configurationChanged();
     97}
     98
    10199void RemoteAudioTrackProxy::idChanged(const AtomString&)
    102100{
  • branches/safari-613.1.12.1-branch/Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.h

    r286908 r287576  
    4545
    4646class GPUConnectionToWebProcess;
    47 struct TrackPrivateRemoteConfiguration;
     47struct AudioTrackPrivateRemoteConfiguration;
    4848
    4949class RemoteAudioTrackProxy final
     
    7070    // AudioTrackPrivateClient
    7171    void enabledChanged(bool) final;
     72    void configurationChanged(const WebCore::PlatformAudioTrackConfiguration&) final;
    7273
    7374    // TrackPrivateBaseClient
     
    7778    void willRemove() final;
    7879
    79     TrackPrivateRemoteConfiguration configuration();
     80    AudioTrackPrivateRemoteConfiguration configuration();
    8081    void configurationChanged();
    8182
  • branches/safari-613.1.12.1-branch/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.cpp

    r286908 r287576  
    3434#include "MediaPlayerPrivateRemoteMessages.h"
    3535#include "RemoteMediaPlayerProxy.h"
    36 #include "TrackPrivateRemoteConfiguration.h"
     36#include "VideoTrackPrivateRemoteConfiguration.h"
    3737
    3838namespace WebKit {
     
    5555}
    5656
    57 TrackPrivateRemoteConfiguration RemoteVideoTrackProxy::configuration()
     57VideoTrackPrivateRemoteConfiguration RemoteVideoTrackProxy::configuration()
    5858{
    59     TrackPrivateRemoteConfiguration configuration { };
    60     configuration.trackId = m_trackPrivate->id();
    61     configuration.label = m_trackPrivate->label();
    62     configuration.language = m_trackPrivate->language();
    63     configuration.trackIndex = m_trackPrivate->trackIndex();
    64     configuration.startTimeVariance = m_trackPrivate->startTimeVariance();
    65     configuration.selected = m_trackPrivate->selected();
    66     configuration.videoKind = m_trackPrivate->kind();
    67     configuration.codec = m_trackPrivate->codec();
    68     configuration.width = m_trackPrivate->width();
    69     configuration.height = m_trackPrivate->height();
    70     configuration.colorSpace = m_trackPrivate->colorSpace();
    71     configuration.framerate = m_trackPrivate->framerate();
    72     configuration.bitrate = m_trackPrivate->bitrate();
    73     return configuration;
     59    return {
     60        {
     61            m_trackPrivate->id(),
     62            m_trackPrivate->label(),
     63            m_trackPrivate->language(),
     64            m_trackPrivate->startTimeVariance(),
     65            m_trackPrivate->trackIndex(),
     66        },
     67        m_trackPrivate->selected(),
     68        m_trackPrivate->kind(),
     69        m_trackPrivate->configuration(),
     70    };
    7471}
    7572
  • branches/safari-613.1.12.1-branch/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.h

    r286908 r287576  
    4545
    4646class GPUConnectionToWebProcess;
    47 struct TrackPrivateRemoteConfiguration;
     47struct VideoTrackPrivateRemoteConfiguration;
    4848
    4949class RemoteVideoTrackProxy final
     
    7070    // VideoTrackPrivateClient
    7171    void selectedChanged(bool) final;
    72     void configurationChanged() final { updateConfiguration(); }
     72    void configurationChanged(const WebCore::PlatformVideoTrackConfiguration&) final { updateConfiguration(); }
    7373
    7474    // TrackPrivateBaseClient
     
    7878    void willRemove() final;
    7979
    80     TrackPrivateRemoteConfiguration configuration();
     80    VideoTrackPrivateRemoteConfiguration configuration();
    8181    void updateConfiguration();
    8282
  • branches/safari-613.1.12.1-branch/Source/WebKit/GPUProcess/media/TrackPrivateRemoteConfiguration.h

    r286908 r287576  
    2828#if ENABLE(GPU_PROCESS)
    2929
    30 #include <WebCore/AudioTrackPrivate.h>
    31 #include <WebCore/VideoTrackPrivate.h>
    3230#include <wtf/MediaTime.h>
    3331
     
    4139    int trackIndex;
    4240
    43     bool enabled;
    44     WebCore::AudioTrackPrivate::Kind audioKind { WebCore::AudioTrackPrivate::Kind::None };
    45 
    46     bool selected;
    47     WebCore::VideoTrackPrivate::Kind videoKind { WebCore::VideoTrackPrivate::Kind::None };
    48 
    49     String codec;
    50     uint32_t width;
    51     uint32_t height;
    52     WebCore::PlatformVideoColorSpace colorSpace;
    53     double framerate;
    54     uint64_t bitrate;
    55     uint32_t sampleRate;
    56     uint32_t numberOfChannels;
    57 
    5841    template<class Encoder>
    5942    void encode(Encoder& encoder) const
     
    6447        encoder << startTimeVariance;
    6548        encoder << trackIndex;
    66         encoder << enabled;
    67         encoder << audioKind;
    68         encoder << selected;
    69         encoder << videoKind;
    70         encoder << codec;
    71         encoder << width;
    72         encoder << height;
    73         encoder << colorSpace;
    74         encoder << framerate;
    75         encoder << bitrate;
    76         encoder << sampleRate;
    77         encoder << numberOfChannels;
    7849    }
    7950
    8051    template <class Decoder>
    81     static std::optional<TrackPrivateRemoteConfiguration> decode(Decoder& decoder)
     52    static bool decode(Decoder& decoder, TrackPrivateRemoteConfiguration& configuration)
    8253    {
    83         std::optional<AtomString> trackId;
    84         decoder >> trackId;
    85         if (!trackId)
    86             return std::nullopt;
    87 
    88         std::optional<AtomString> label;
    89         decoder >> label;
    90         if (!label)
    91             return std::nullopt;
    92 
    93         std::optional<AtomString> language;
    94         decoder >> language;
    95         if (!language)
    96             return std::nullopt;
    97 
    98         std::optional<MediaTime> startTimeVariance;
    99         decoder >> startTimeVariance;
    100         if (!startTimeVariance)
    101             return std::nullopt;
    102 
    103         std::optional<int> trackIndex;
    104         decoder >> trackIndex;
    105         if (!trackIndex)
    106             return std::nullopt;
    107 
    108         std::optional<bool> enabled;
    109         decoder >> enabled;
    110         if (!enabled)
    111             return std::nullopt;
    112 
    113         std::optional<WebCore::AudioTrackPrivate::Kind> audioKind;
    114         decoder >> audioKind;
    115         if (!audioKind)
    116             return std::nullopt;
    117 
    118         std::optional<bool> selected;
    119         decoder >> selected;
    120         if (!selected)
    121             return std::nullopt;
    122 
    123         std::optional<WebCore::VideoTrackPrivate::Kind> videoKind;
    124         decoder >> videoKind;
    125         if (!videoKind)
    126             return std::nullopt;
    127 
    128         std::optional<String> codec;
    129         decoder >> codec;
    130         if (!codec)
    131             return std::nullopt;
    132 
    133         std::optional<uint32_t> width;
    134         decoder >> width;
    135         if (!width)
    136             return std::nullopt;
    137 
    138         std::optional<uint32_t> height;
    139         decoder >> height;
    140         if (!height)
    141             return std::nullopt;
    142 
    143         std::optional<WebCore::PlatformVideoColorSpace> colorSpace;
    144         decoder >> colorSpace;
    145         if (!colorSpace)
    146             return std::nullopt;
    147 
    148         std::optional<double> framerate;
    149         decoder >> framerate;
    150         if (!framerate)
    151             return std::nullopt;
    152 
    153         std::optional<uint64_t> bitrate;
    154         decoder >> bitrate;
    155         if (!bitrate)
    156             return std::nullopt;
    157        
    158         std::optional<uint32_t> sampleRate;
    159         decoder >> sampleRate;
    160         if (!sampleRate)
    161             return std::nullopt;
    162 
    163         std::optional<uint32_t> numberOfChannels;
    164         decoder >> numberOfChannels;
    165         if (!numberOfChannels)
    166             return std::nullopt;
    167 
    168         return {{
    169             WTFMove(*trackId),
    170             WTFMove(*label),
    171             WTFMove(*language),
    172             WTFMove(*startTimeVariance),
    173             *trackIndex,
    174             *enabled,
    175             *audioKind,
    176             *selected,
    177             *videoKind,
    178             WTFMove(*codec),
    179             *width,
    180             *height,
    181             WTFMove(*colorSpace),
    182             *framerate,
    183             *bitrate,
    184             *sampleRate,
    185             *numberOfChannels,
    186         }};
     54        return decoder.decode(configuration.trackId)
     55            && decoder.decode(configuration.label)
     56            && decoder.decode(configuration.language)
     57            && decoder.decode(configuration.startTimeVariance)
     58            && decoder.decode(configuration.trackIndex);
    18759    }
    18860};
  • branches/safari-613.1.12.1-branch/Source/WebKit/GPUProcess/media/VideoTrackPrivateRemoteConfiguration.h

    r287572 r287576  
    2626#pragma once
    2727
    28 #include "TrackPrivateBaseClient.h"
     28#if ENABLE(GPU_PROCESS)
    2929
    30 #if ENABLE(VIDEO)
     30#include "TrackPrivateRemoteConfiguration.h"
     31#include <WebCore/VideoTrackPrivate.h>
    3132
    32 namespace WebCore {
     33namespace WebKit {
    3334
    34 class AudioTrackPrivate;
     35struct VideoTrackPrivateRemoteConfiguration : TrackPrivateRemoteConfiguration {
     36    bool selected;
     37    WebCore::VideoTrackPrivate::Kind kind { WebCore::VideoTrackPrivate::Kind::None };
     38    WebCore::PlatformVideoTrackConfiguration trackConfiguration;
    3539
    36 class AudioTrackPrivateClient : public TrackPrivateBaseClient {
    37 public:
    38     virtual void enabledChanged(bool) = 0;
     40    template<class Encoder>
     41    void encode(Encoder& encoder) const
     42    {
     43        TrackPrivateRemoteConfiguration::encode(encoder);
     44        encoder << selected;
     45        encoder << kind;
     46        encoder << trackConfiguration;
     47    }
     48
     49    template <class Decoder>
     50    static bool WARN_UNUSED_RETURN decode(Decoder& decoder, VideoTrackPrivateRemoteConfiguration& configuration)
     51    {
     52        if (!TrackPrivateRemoteConfiguration::decode(decoder, configuration))
     53            return false;
     54        if (!decoder.decode(configuration.selected))
     55            return false;
     56        if (!decoder.decode(configuration.kind))
     57            return false;
     58        if (!decoder.decode(configuration.trackConfiguration))
     59            return false;
     60        return true;
     61    }
    3962};
    4063
    41 }
     64} // namespace WebKit
    4265
    4366#endif
  • branches/safari-613.1.12.1-branch/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r287145 r287576  
    62376237                CDCDC99B248FE8DA00A69522 /* EndowmentStateTracker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EndowmentStateTracker.h; sourceTree = "<group>"; };
    62386238                CDCDC99C248FE8DA00A69522 /* EndowmentStateTracker.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = EndowmentStateTracker.mm; sourceTree = "<group>"; };
     6239                CDD08AC3277EBCE500EA3755 /* AudioTrackPrivateRemoteConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioTrackPrivateRemoteConfiguration.h; sourceTree = "<group>"; };
     6240                CDD08AC4277ED7E000EA3755 /* VideoTrackPrivateRemoteConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoTrackPrivateRemoteConfiguration.h; sourceTree = "<group>"; };
    62396241                CDD5356F240DD34300F7B8C4 /* RemoteAudioSession.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = RemoteAudioSession.messages.in; sourceTree = "<group>"; };
    62406242                CDD53571240DDE0600F7B8C4 /* RemoteAudioSessionProxyMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteAudioSessionProxyMessageReceiver.cpp; sourceTree = "<group>"; };
     
    67366738                                1D0ECEA923FC84BB00D172F6 /* cocoa */,
    67376739                                CDA959442412C4DA00910EEF /* ios */,
     6740                                CDD08AC3277EBCE500EA3755 /* AudioTrackPrivateRemoteConfiguration.h */,
    67386741                                1D4FB40B2565C89A001AC2AD /* InitializationSegmentInfo.h */,
    67396742                                9B1229CC23FF25F2008CA751 /* RemoteAudioDestinationManager.cpp */,
     
    68116814                                071BC57B23CA532400680D7C /* TrackPrivateRemoteConfiguration.h */,
    68126815                                071BC57D23CA56D200680D7C /* TrackPrivateRemoteIdentifier.h */,
     6816                                CDD08AC4277ED7E000EA3755 /* VideoTrackPrivateRemoteConfiguration.h */,
    68136817                        );
    68146818                        path = media;
  • branches/safari-613.1.12.1-branch/Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.cpp

    r286908 r287576  
    3030#if ENABLE(GPU_PROCESS)
    3131
     32#include "AudioTrackPrivateRemoteConfiguration.h"
    3233#include "GPUProcessConnection.h"
    3334#include "MediaPlayerPrivateRemote.h"
    3435#include "RemoteMediaPlayerProxyMessages.h"
    35 #include "TrackPrivateRemoteConfiguration.h"
    3636
    3737namespace WebKit {
    3838
    39 AudioTrackPrivateRemote::AudioTrackPrivateRemote(GPUProcessConnection& gpuProcessConnection, WebCore::MediaPlayerIdentifier playerIdentifier, TrackPrivateRemoteIdentifier idendifier, TrackPrivateRemoteConfiguration&& configuration)
     39AudioTrackPrivateRemote::AudioTrackPrivateRemote(GPUProcessConnection& gpuProcessConnection, WebCore::MediaPlayerIdentifier playerIdentifier, TrackPrivateRemoteIdentifier idendifier, AudioTrackPrivateRemoteConfiguration&& configuration)
    4040    : m_gpuProcessConnection(gpuProcessConnection)
    4141    , m_playerIdentifier(playerIdentifier)
     
    5656}
    5757
    58 void AudioTrackPrivateRemote::updateConfiguration(TrackPrivateRemoteConfiguration&& configuration)
     58void AudioTrackPrivateRemote::updateConfiguration(AudioTrackPrivateRemoteConfiguration&& configuration)
    5959{
    6060    if (configuration.trackId != m_id) {
     
    8181    m_trackIndex = configuration.trackIndex;
    8282    m_startTimeVariance = configuration.startTimeVariance;
    83     m_kind = configuration.audioKind;
    84     setCodec(WTFMove(configuration.codec));
    85     setSampleRate(configuration.sampleRate);
    86     setNumberOfChannels(configuration.numberOfChannels);
    87     setBitrate(configuration.bitrate);
     83    m_kind = configuration.kind;
     84    setConfiguration(WTFMove(configuration.trackConfiguration));
    8885   
    8986    AudioTrackPrivate::setEnabled(configuration.enabled);
  • branches/safari-613.1.12.1-branch/Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.h

    r286908 r287576  
    3737class GPUProcessConnection;
    3838class MediaPlayerPrivateRemote;
    39 struct TrackPrivateRemoteConfiguration;
     39struct AudioTrackPrivateRemoteConfiguration;
    4040
    4141class AudioTrackPrivateRemote final : public WebCore::AudioTrackPrivate {
    4242    WTF_MAKE_NONCOPYABLE(AudioTrackPrivateRemote)
    4343public:
    44     static Ref<AudioTrackPrivateRemote> create(GPUProcessConnection& gpuProcessConnection, WebCore::MediaPlayerIdentifier playerIdentifier, TrackPrivateRemoteIdentifier idendifier, TrackPrivateRemoteConfiguration&& configuration)
     44    static Ref<AudioTrackPrivateRemote> create(GPUProcessConnection& gpuProcessConnection, WebCore::MediaPlayerIdentifier playerIdentifier, TrackPrivateRemoteIdentifier idendifier, AudioTrackPrivateRemoteConfiguration&& configuration)
    4545    {
    4646        return adoptRef(*new AudioTrackPrivateRemote(gpuProcessConnection, playerIdentifier, idendifier, WTFMove(configuration)));
     
    4848
    4949    AtomString id() const final { return m_id; }
    50     void updateConfiguration(TrackPrivateRemoteConfiguration&&);
     50    void updateConfiguration(AudioTrackPrivateRemoteConfiguration&&);
    5151
    5252private:
    53     AudioTrackPrivateRemote(GPUProcessConnection&, WebCore::MediaPlayerIdentifier, TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
     53    AudioTrackPrivateRemote(GPUProcessConnection&, WebCore::MediaPlayerIdentifier, TrackPrivateRemoteIdentifier, AudioTrackPrivateRemoteConfiguration&&);
    5454
    5555    using AudioTrackKind = WebCore::AudioTrackPrivate::Kind;
  • branches/safari-613.1.12.1-branch/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp

    r285993 r287576  
    575575}
    576576
    577 void MediaPlayerPrivateRemote::addRemoteAudioTrack(TrackPrivateRemoteIdentifier identifier, TrackPrivateRemoteConfiguration&& configuration)
     577void MediaPlayerPrivateRemote::addRemoteAudioTrack(TrackPrivateRemoteIdentifier identifier, AudioTrackPrivateRemoteConfiguration&& configuration)
    578578{
    579579    auto addResult = m_audioTracks.ensure(identifier, [&] {
     
    605605}
    606606
    607 void MediaPlayerPrivateRemote::remoteAudioTrackConfigurationChanged(TrackPrivateRemoteIdentifier identifier, TrackPrivateRemoteConfiguration&& configuration)
     607void MediaPlayerPrivateRemote::remoteAudioTrackConfigurationChanged(TrackPrivateRemoteIdentifier identifier, AudioTrackPrivateRemoteConfiguration&& configuration)
    608608{
    609609    ASSERT(m_audioTracks.contains(identifier));
     
    733733}
    734734
    735 void MediaPlayerPrivateRemote::addRemoteVideoTrack(TrackPrivateRemoteIdentifier identifier, TrackPrivateRemoteConfiguration&& configuration)
     735void MediaPlayerPrivateRemote::addRemoteVideoTrack(TrackPrivateRemoteIdentifier identifier, VideoTrackPrivateRemoteConfiguration&& configuration)
    736736{
    737737    auto addResult = m_videoTracks.ensure(identifier, [&] {
     
    763763}
    764764
    765 void MediaPlayerPrivateRemote::remoteVideoTrackConfigurationChanged(TrackPrivateRemoteIdentifier identifier, TrackPrivateRemoteConfiguration&& configuration)
     765void MediaPlayerPrivateRemote::remoteVideoTrackConfigurationChanged(TrackPrivateRemoteIdentifier identifier, VideoTrackPrivateRemoteConfiguration&& configuration)
    766766{
    767767    ASSERT(m_videoTracks.contains(identifier));
  • branches/safari-613.1.12.1-branch/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h

    r285993 r287576  
    6868class RemoteAudioSourceProvider;
    6969class UserData;
     70struct AudioTrackPrivateRemoteConfiguration;
    7071struct TextTrackPrivateRemoteConfiguration;
    71 struct TrackPrivateRemoteConfiguration;
     72struct VideoTrackPrivateRemoteConfiguration;
    7273
    7374class MediaPlayerPrivateRemote final
     
    118119    void currentTimeChanged(const MediaTime&, const MonotonicTime&, bool);
    119120
    120     void addRemoteAudioTrack(TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
     121    void addRemoteAudioTrack(TrackPrivateRemoteIdentifier, AudioTrackPrivateRemoteConfiguration&&);
    121122    void removeRemoteAudioTrack(TrackPrivateRemoteIdentifier);
    122     void remoteAudioTrackConfigurationChanged(TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
    123 
    124     void addRemoteVideoTrack(TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
     123    void remoteAudioTrackConfigurationChanged(TrackPrivateRemoteIdentifier, AudioTrackPrivateRemoteConfiguration&&);
     124
     125    void addRemoteVideoTrack(TrackPrivateRemoteIdentifier, VideoTrackPrivateRemoteConfiguration&&);
    125126    void removeRemoteVideoTrack(TrackPrivateRemoteIdentifier);
    126     void remoteVideoTrackConfigurationChanged(TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
     127    void remoteVideoTrackConfigurationChanged(TrackPrivateRemoteIdentifier, VideoTrackPrivateRemoteConfiguration&&);
    127128
    128129    void addRemoteTextTrack(TrackPrivateRemoteIdentifier, TextTrackPrivateRemoteConfiguration&&);
  • branches/safari-613.1.12.1-branch/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in

    r285993 r287576  
    4242    CurrentTimeChanged(MediaTime mediaTime, MonotonicTime wallTime, bool timeIsProgressing)
    4343
    44     AddRemoteAudioTrack(WebKit::TrackPrivateRemoteIdentifier trackID, struct WebKit::TrackPrivateRemoteConfiguration configuration)
     44    AddRemoteAudioTrack(WebKit::TrackPrivateRemoteIdentifier trackID, struct WebKit::AudioTrackPrivateRemoteConfiguration configuration)
    4545    RemoveRemoteAudioTrack(WebKit::TrackPrivateRemoteIdentifier trackID)
    46     RemoteAudioTrackConfigurationChanged(WebKit::TrackPrivateRemoteIdentifier trackID, struct WebKit::TrackPrivateRemoteConfiguration configuration)
     46    RemoteAudioTrackConfigurationChanged(WebKit::TrackPrivateRemoteIdentifier trackID, struct WebKit::AudioTrackPrivateRemoteConfiguration configuration)
    4747
    48     AddRemoteVideoTrack(WebKit::TrackPrivateRemoteIdentifier trackID, struct WebKit::TrackPrivateRemoteConfiguration configuration)
     48    AddRemoteVideoTrack(WebKit::TrackPrivateRemoteIdentifier trackID, struct WebKit::VideoTrackPrivateRemoteConfiguration configuration)
    4949    RemoveRemoteVideoTrack(WebKit::TrackPrivateRemoteIdentifier trackID)
    50     RemoteVideoTrackConfigurationChanged(WebKit::TrackPrivateRemoteIdentifier trackID, struct WebKit::TrackPrivateRemoteConfiguration configuration)
     50    RemoteVideoTrackConfigurationChanged(WebKit::TrackPrivateRemoteIdentifier trackID, struct WebKit::VideoTrackPrivateRemoteConfiguration configuration)
    5151
    5252    AddRemoteTextTrack(WebKit::TrackPrivateRemoteIdentifier trackID, struct WebKit::TextTrackPrivateRemoteConfiguration configuration)
  • branches/safari-613.1.12.1-branch/Source/WebKit/WebProcess/GPU/media/VideoTrackPrivateRemote.cpp

    r286908 r287576  
    3333#include "MediaPlayerPrivateRemote.h"
    3434#include "RemoteMediaPlayerProxyMessages.h"
     35#include "VideoTrackPrivateRemoteConfiguration.h"
    3536
    3637namespace WebKit {
    3738
    38 VideoTrackPrivateRemote::VideoTrackPrivateRemote(GPUProcessConnection& gpuProcessConnection, WebCore::MediaPlayerIdentifier playerIdentifier, TrackPrivateRemoteIdentifier idendifier, TrackPrivateRemoteConfiguration&& configuration)
     39VideoTrackPrivateRemote::VideoTrackPrivateRemote(GPUProcessConnection& gpuProcessConnection, WebCore::MediaPlayerIdentifier playerIdentifier, TrackPrivateRemoteIdentifier idendifier, VideoTrackPrivateRemoteConfiguration&& configuration)
    3940    : m_gpuProcessConnection(gpuProcessConnection)
    4041    , m_playerIdentifier(playerIdentifier)
     
    5556}
    5657
    57 void VideoTrackPrivateRemote::updateConfiguration(TrackPrivateRemoteConfiguration&& configuration)
     58void VideoTrackPrivateRemote::updateConfiguration(VideoTrackPrivateRemoteConfiguration&& configuration)
    5859{
    5960    if (configuration.trackId != m_id) {
     
    8081    m_trackIndex = configuration.trackIndex;
    8182    m_startTimeVariance = configuration.startTimeVariance;
    82     m_kind = configuration.videoKind;
    83     m_codec = configuration.codec;
    84     m_width = configuration.width;
    85     m_height = configuration.height;
    86     m_colorSpace = configuration.colorSpace;
    87     m_framerate = configuration.framerate;
    88     m_bitrate = configuration.bitrate;
    89 
     83    m_kind = configuration.kind;
     84    setConfiguration(WTFMove(configuration.trackConfiguration));
    9085    VideoTrackPrivate::setSelected(configuration.selected);
    9186}
  • branches/safari-613.1.12.1-branch/Source/WebKit/WebProcess/GPU/media/VideoTrackPrivateRemote.h

    r286908 r287576  
    2929#if ENABLE(GPU_PROCESS)
    3030
    31 #include "TrackPrivateRemoteConfiguration.h"
    3231#include "TrackPrivateRemoteIdentifier.h"
    3332#include <WebCore/MediaPlayerIdentifier.h>
     
    3837class GPUProcessConnection;
    3938class MediaPlayerPrivateRemote;
    40 struct TrackPrivateRemoteConfiguration;
     39struct VideoTrackPrivateRemoteConfiguration;
    4140
    4241class VideoTrackPrivateRemote
     
    4443    WTF_MAKE_NONCOPYABLE(VideoTrackPrivateRemote)
    4544public:
    46     static Ref<VideoTrackPrivateRemote> create(GPUProcessConnection& gpuProcessConnection, WebCore::MediaPlayerIdentifier playerIdentifier, TrackPrivateRemoteIdentifier idendifier, TrackPrivateRemoteConfiguration&& configuration)
     45    static Ref<VideoTrackPrivateRemote> create(GPUProcessConnection& gpuProcessConnection, WebCore::MediaPlayerIdentifier playerIdentifier, TrackPrivateRemoteIdentifier idendifier, VideoTrackPrivateRemoteConfiguration&& configuration)
    4746    {
    4847        return adoptRef(*new VideoTrackPrivateRemote(gpuProcessConnection, playerIdentifier, idendifier, WTFMove(configuration)));
    4948    }
    5049
    51     void updateConfiguration(TrackPrivateRemoteConfiguration&&);
     50    void updateConfiguration(VideoTrackPrivateRemoteConfiguration&&);
    5251
    5352    using VideoTrackKind = WebCore::VideoTrackPrivate::Kind;
     
    5857    int trackIndex() const final { return m_trackIndex; }
    5958    MediaTime startTimeVariance() const final { return m_startTimeVariance; }
    60     String codec() const final { return m_codec; }
    61     uint32_t width() const final { return m_width; }
    62     uint32_t height() const final { return m_height; }
    63     WebCore::PlatformVideoColorSpace colorSpace() const final { return m_colorSpace; }
    64     double framerate() const final { return m_framerate; }
    65     uint64_t bitrate() const final { return m_bitrate; }
    6659
    6760private:
    68     VideoTrackPrivateRemote(GPUProcessConnection&, WebCore::MediaPlayerIdentifier, TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
     61    VideoTrackPrivateRemote(GPUProcessConnection&, WebCore::MediaPlayerIdentifier, TrackPrivateRemoteIdentifier, VideoTrackPrivateRemoteConfiguration&&);
    6962
    7063    void setSelected(bool) final;
     
    7770    AtomString m_language;
    7871    int m_trackIndex { -1 };
    79     String m_codec;
    80     uint32_t m_width { 0 };
    81     uint32_t m_height { 0 };
    82     WebCore::PlatformVideoColorSpace m_colorSpace;
    83     double m_framerate { 0 };
    84     uint64_t m_bitrate { 0 };
    8572    MediaTime m_startTimeVariance { MediaTime::zeroTime() };
    8673    TrackPrivateRemoteIdentifier m_idendifier;
Note: See TracChangeset for help on using the changeset viewer.