Changeset 284443 in webkit


Ignore:
Timestamp:
Oct 19, 2021 4:05:19 AM (9 months ago)
Author:
youenn@apple.com
Message:

Expose MediaCapabilities to Workers
https://bugs.webkit.org/show_bug.cgi?id=231574

Reviewed by Eric Carlson.

LayoutTests/imported/w3c:

Allow running encoding tests in workers as well as in window.

  • web-platform-tests/media-capabilities/decodingInfo.any.worker-expected.txt:
  • web-platform-tests/media-capabilities/encodingInfo.any-expected.txt: Added.
  • web-platform-tests/media-capabilities/encodingInfo.any.html: Added.
  • web-platform-tests/media-capabilities/encodingInfo.any.js: Added.
  • web-platform-tests/media-capabilities/encodingInfo.any.worker-expected.txt: Added.
  • web-platform-tests/media-capabilities/encodingInfo.any.worker.html: Added.
  • web-platform-tests/media-capabilities/encodingInfo-expected: Removed.
  • web-platform-tests/media-capabilities/encodingInfo.html: Removed.
  • web-platform-tests/media-capabilities/idlharness.any.worker-expected.txt:

Source/WebCore:

Expose Media Capabilities to workers by hopping to main thread and using worker responsible document for gathering Media Capabilities, then hopping back to worker.
MediaCapabilities will store the promises when waiting for media capabilities gathering by document.

We remove CustomEnabled since it is not supported in Workers and we are now exposing encoding info for WebRTC anyway.

Tests: imported/w3c/web-platform-tests/media-capabilities/encodingInfo.any.html

imported/w3c/web-platform-tests/media-capabilities/encodingInfo.any.worker.html

  • CMakeLists.txt:
  • DerivedSources-input.xcfilelist:
  • DerivedSources-output.xcfilelist:
  • DerivedSources.make:
  • Modules/mediacapabilities/MediaCapabilities.cpp:
  • Modules/mediacapabilities/MediaCapabilities.h:
  • Modules/mediacapabilities/MediaCapabilities.idl:
  • Modules/mediacapabilities/NavigatorMediaCapabilities.cpp:
  • Modules/mediacapabilities/NavigatorMediaCapabilities.h:
  • Modules/mediacapabilities/WorkerNavigator+MediaCapabilities.idl: Added.
  • Modules/mediacapabilities/WorkerNavigatorMediaCapabilities.cpp: Added.
  • Modules/mediacapabilities/WorkerNavigatorMediaCapabilities.h: Added.
  • Sources.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • dom/ScriptExecutionContext.cpp:
  • dom/ScriptExecutionContext.h:
  • platform/MediaCapabilitiesDecodingInfo.h:
  • platform/MediaCapabilitiesEncodingInfo.h:
  • platform/MediaCapabilitiesInfo.h:
  • platform/mediacapabilities/AudioConfiguration.h:
  • platform/mediacapabilities/MediaConfiguration.h:
  • platform/mediacapabilities/MediaDecodingConfiguration.h:
  • platform/mediacapabilities/MediaEncodingConfiguration.h:
  • platform/mediacapabilities/VideoConfiguration.h:
Location:
trunk
Files:
2 added
25 edited
3 copied
3 moved

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r284440 r284443  
     12021-10-19  Youenn Fablet  <youenn@apple.com>
     2
     3        Expose MediaCapabilities to Workers
     4        https://bugs.webkit.org/show_bug.cgi?id=231574
     5
     6        Reviewed by Eric Carlson.
     7
     8        Allow running encoding tests in workers as well as in window.
     9
     10        * web-platform-tests/media-capabilities/decodingInfo.any.worker-expected.txt:
     11        * web-platform-tests/media-capabilities/encodingInfo.any-expected.txt: Added.
     12        * web-platform-tests/media-capabilities/encodingInfo.any.html: Added.
     13        * web-platform-tests/media-capabilities/encodingInfo.any.js: Added.
     14        * web-platform-tests/media-capabilities/encodingInfo.any.worker-expected.txt: Added.
     15        * web-platform-tests/media-capabilities/encodingInfo.any.worker.html: Added.
     16        * web-platform-tests/media-capabilities/encodingInfo-expected: Removed.
     17        * web-platform-tests/media-capabilities/encodingInfo.html: Removed.
     18        * web-platform-tests/media-capabilities/idlharness.any.worker-expected.txt:
     19
    1202021-10-18  Sergio Villar Senin  <svillar@igalia.com>
    221
  • trunk/LayoutTests/imported/w3c/web-platform-tests/media-capabilities/decodingInfo.any.worker-expected.txt

    r284085 r284443  
    11
    2 FAIL Test that decodingInfo rejects if it doesn't get a configuration undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    3 FAIL Test that decodingInfo rejects if the MediaConfiguration isn't valid undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    4 FAIL Test that decodingInfo rejects if the MediaConfiguration does not have a type undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    5 FAIL Test that decodingInfo rejects if the configuration doesn't have an audio or video field undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    6 FAIL Test that decodingInfo rejects if the video configuration has a negative framerate undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    7 FAIL Test that decodingInfo rejects if the video configuration has a framerate set to 0 undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    8 FAIL Test that decodingInfo rejects if the video configuration has a framerate set to Infinity undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    9 FAIL Test that decodingInfo rejects if the video configuration contentType doesn't parse undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    10 FAIL Test that decodingInfo rejects if the video configuration contentType isn't of type video undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    11 FAIL Test that decodingInfo rejects if the video configuration contentType has more than one parameter undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    12 FAIL Test that decodingInfo rejects if the video configuration contentType has one parameter that isn't codecs undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    13 FAIL Test that decodingInfo() rejects framerate in the form of x/y undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    14 FAIL Test that decodingInfo() rejects framerate in the form of x/0 undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    15 FAIL Test that decodingInfo() rejects framerate in the form of 0/y undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    16 FAIL Test that decodingInfo() rejects framerate in the form of -x/y undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    17 FAIL Test that decodingInfo() rejects framerate in the form of x/-y undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    18 FAIL Test that decodingInfo() rejects framerate in the form of x/ undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    19 FAIL Test that decodingInfo() rejects framerate with trailing unallowed characters undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    20 FAIL Test that decodingInfo rejects if the audio configuration contenType doesn't parse undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    21 FAIL Test that decodingInfo rejects if the audio configuration contentType isn't of type audio undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    22 FAIL Test that decodingInfo rejects if the audio configuration contentType has more than one parameters undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    23 FAIL Test that decodingInfo rejects if the audio configuration contentType has one parameter that isn't codecs undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    24 FAIL Test that decodingInfo returns a valid MediaCapabilitiesInfo objects undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    25 FAIL Test that decodingInfo rejects if the MediaConfiguration does not have a valid type undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    26 FAIL Test that decodingInfo with spatialRendering set returns a valid MediaCapabilitiesInfo objects undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    27 FAIL Test that decodingInfo with hdrMetadataType, colorGamut, and transferFunction set returns a valid MediaCapabilitiesInfo objects undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    28 FAIL Test that decodingInfo rejects if the video configuration has an empty hdrMetadataType undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    29 FAIL Test that decodingInfo rejects if the video configuration has a colorGamut set to true undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
    30 FAIL Test that decodingInfo rejects if the video configuration has a transferFunction set to 3 undefined is not an object (evaluating 'navigator.mediaCapabilities.decodingInfo')
     2PASS Test that decodingInfo rejects if it doesn't get a configuration
     3PASS Test that decodingInfo rejects if the MediaConfiguration isn't valid
     4PASS Test that decodingInfo rejects if the MediaConfiguration does not have a type
     5PASS Test that decodingInfo rejects if the configuration doesn't have an audio or video field
     6PASS Test that decodingInfo rejects if the video configuration has a negative framerate
     7PASS Test that decodingInfo rejects if the video configuration has a framerate set to 0
     8PASS Test that decodingInfo rejects if the video configuration has a framerate set to Infinity
     9PASS Test that decodingInfo rejects if the video configuration contentType doesn't parse
     10PASS Test that decodingInfo rejects if the video configuration contentType isn't of type video
     11FAIL Test that decodingInfo rejects if the video configuration contentType has more than one parameter assert_unreached: Should have rejected: undefined Reached unreachable code
     12PASS Test that decodingInfo rejects if the video configuration contentType has one parameter that isn't codecs
     13PASS Test that decodingInfo() rejects framerate in the form of x/y
     14PASS Test that decodingInfo() rejects framerate in the form of x/0
     15PASS Test that decodingInfo() rejects framerate in the form of 0/y
     16PASS Test that decodingInfo() rejects framerate in the form of -x/y
     17PASS Test that decodingInfo() rejects framerate in the form of x/-y
     18PASS Test that decodingInfo() rejects framerate in the form of x/
     19PASS Test that decodingInfo() rejects framerate with trailing unallowed characters
     20PASS Test that decodingInfo rejects if the audio configuration contenType doesn't parse
     21PASS Test that decodingInfo rejects if the audio configuration contentType isn't of type audio
     22FAIL Test that decodingInfo rejects if the audio configuration contentType has more than one parameters assert_unreached: Should have rejected: undefined Reached unreachable code
     23PASS Test that decodingInfo rejects if the audio configuration contentType has one parameter that isn't codecs
     24FAIL Test that decodingInfo returns a valid MediaCapabilitiesInfo objects assert_equals: expected "object" but got "undefined"
     25PASS Test that decodingInfo rejects if the MediaConfiguration does not have a valid type
     26FAIL Test that decodingInfo with spatialRendering set returns a valid MediaCapabilitiesInfo objects assert_equals: expected "object" but got "undefined"
     27FAIL Test that decodingInfo with hdrMetadataType, colorGamut, and transferFunction set returns a valid MediaCapabilitiesInfo objects assert_equals: expected "object" but got "undefined"
     28PASS Test that decodingInfo rejects if the video configuration has an empty hdrMetadataType
     29PASS Test that decodingInfo rejects if the video configuration has a colorGamut set to true
     30PASS Test that decodingInfo rejects if the video configuration has a transferFunction set to 3
    3131
  • trunk/LayoutTests/imported/w3c/web-platform-tests/media-capabilities/encodingInfo.any.js

    r284442 r284443  
    1 <!DOCTYPE html>
    2 <title>MediaCapabilities.encodingInfo()</title>
    3 <script src=/resources/testharness.js></script>
    4 <script src="/resources/testharnessreport.js"></script>
    5 <script>
    6 
    71// Minimal VideoConfiguration that will be allowed per spec. All optional
    82// properties are missing.
     
    315309  }), t.unreached_func('Promise.all should not reject for valid types'));
    316310}, "Test that encodingInfo rejects if the MediaConfiguration does not have a valid type");
    317 
    318 </script>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/media-capabilities/idlharness.any.worker-expected.txt

    r284085 r284443  
    2121PASS WorkerNavigator includes NavigatorOnLine: member names are unique
    2222PASS WorkerNavigator includes NavigatorConcurrentHardware: member names are unique
    23 FAIL MediaCapabilities interface: existence and properties of interface object assert_own_property: self does not have own property "MediaCapabilities" expected property "MediaCapabilities" missing
    24 FAIL MediaCapabilities interface object length assert_own_property: self does not have own property "MediaCapabilities" expected property "MediaCapabilities" missing
    25 FAIL MediaCapabilities interface object name assert_own_property: self does not have own property "MediaCapabilities" expected property "MediaCapabilities" missing
    26 FAIL MediaCapabilities interface: existence and properties of interface prototype object assert_own_property: self does not have own property "MediaCapabilities" expected property "MediaCapabilities" missing
    27 FAIL MediaCapabilities interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "MediaCapabilities" expected property "MediaCapabilities" missing
    28 FAIL MediaCapabilities interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "MediaCapabilities" expected property "MediaCapabilities" missing
    29 FAIL MediaCapabilities interface: operation decodingInfo(MediaDecodingConfiguration) assert_own_property: self does not have own property "MediaCapabilities" expected property "MediaCapabilities" missing
    30 FAIL MediaCapabilities interface: operation encodingInfo(MediaEncodingConfiguration) assert_own_property: self does not have own property "MediaCapabilities" expected property "MediaCapabilities" missing
    31 FAIL MediaCapabilities must be primary interface of navigator.mediaCapabilities assert_equals: wrong typeof object expected "object" but got "undefined"
    32 FAIL Stringification of navigator.mediaCapabilities assert_equals: wrong typeof object expected "object" but got "undefined"
    33 FAIL MediaCapabilities interface: navigator.mediaCapabilities must inherit property "decodingInfo(MediaDecodingConfiguration)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
    34 FAIL MediaCapabilities interface: calling decodingInfo(MediaDecodingConfiguration) on navigator.mediaCapabilities with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined"
    35 FAIL MediaCapabilities interface: navigator.mediaCapabilities must inherit property "encodingInfo(MediaEncodingConfiguration)" with the proper type assert_equals: wrong typeof object expected "object" but got "undefined"
    36 FAIL MediaCapabilities interface: calling encodingInfo(MediaEncodingConfiguration) on navigator.mediaCapabilities with too few arguments must throw TypeError assert_equals: wrong typeof object expected "object" but got "undefined"
    37 FAIL WorkerNavigator interface: attribute mediaCapabilities assert_true: The prototype object must have a property "mediaCapabilities" expected true got false
    38 FAIL WorkerNavigator interface: navigator must inherit property "mediaCapabilities" with the proper type assert_inherits: property "mediaCapabilities" not found in prototype chain
     23PASS MediaCapabilities interface: existence and properties of interface object
     24PASS MediaCapabilities interface object length
     25PASS MediaCapabilities interface object name
     26PASS MediaCapabilities interface: existence and properties of interface prototype object
     27PASS MediaCapabilities interface: existence and properties of interface prototype object's "constructor" property
     28PASS MediaCapabilities interface: existence and properties of interface prototype object's @@unscopables property
     29PASS MediaCapabilities interface: operation decodingInfo(MediaDecodingConfiguration)
     30PASS MediaCapabilities interface: operation encodingInfo(MediaEncodingConfiguration)
     31PASS MediaCapabilities must be primary interface of navigator.mediaCapabilities
     32PASS Stringification of navigator.mediaCapabilities
     33PASS MediaCapabilities interface: navigator.mediaCapabilities must inherit property "decodingInfo(MediaDecodingConfiguration)" with the proper type
     34PASS MediaCapabilities interface: calling decodingInfo(MediaDecodingConfiguration) on navigator.mediaCapabilities with too few arguments must throw TypeError
     35PASS MediaCapabilities interface: navigator.mediaCapabilities must inherit property "encodingInfo(MediaEncodingConfiguration)" with the proper type
     36PASS MediaCapabilities interface: calling encodingInfo(MediaEncodingConfiguration) on navigator.mediaCapabilities with too few arguments must throw TypeError
     37PASS WorkerNavigator interface: attribute mediaCapabilities
     38PASS WorkerNavigator interface: navigator must inherit property "mediaCapabilities" with the proper type
    3939
  • trunk/Source/WebCore/CMakeLists.txt

    r284383 r284443  
    346346    Modules/mediacapabilities/TransferFunction.idl
    347347    Modules/mediacapabilities/VideoConfiguration.idl
     348    Modules/mediacapabilities/WorkerNavigator+MediaCapabilities.idl
    348349
    349350    Modules/mediacontrols/MediaControlsHost.idl
  • trunk/Source/WebCore/ChangeLog

    r284440 r284443  
     12021-10-19  Youenn Fablet  <youenn@apple.com>
     2
     3        Expose MediaCapabilities to Workers
     4        https://bugs.webkit.org/show_bug.cgi?id=231574
     5
     6        Reviewed by Eric Carlson.
     7
     8        Expose Media Capabilities to workers by hopping to main thread and using worker responsible document for gathering Media Capabilities, then hopping back to worker.
     9        MediaCapabilities will store the promises when waiting for media capabilities gathering by document.
     10
     11        We remove CustomEnabled since it is not supported in Workers and we are now exposing encoding info for WebRTC anyway.
     12
     13        Tests: imported/w3c/web-platform-tests/media-capabilities/encodingInfo.any.html
     14               imported/w3c/web-platform-tests/media-capabilities/encodingInfo.any.worker.html
     15
     16        * CMakeLists.txt:
     17        * DerivedSources-input.xcfilelist:
     18        * DerivedSources-output.xcfilelist:
     19        * DerivedSources.make:
     20        * Modules/mediacapabilities/MediaCapabilities.cpp:
     21        * Modules/mediacapabilities/MediaCapabilities.h:
     22        * Modules/mediacapabilities/MediaCapabilities.idl:
     23        * Modules/mediacapabilities/NavigatorMediaCapabilities.cpp:
     24        * Modules/mediacapabilities/NavigatorMediaCapabilities.h:
     25        * Modules/mediacapabilities/WorkerNavigator+MediaCapabilities.idl: Added.
     26        * Modules/mediacapabilities/WorkerNavigatorMediaCapabilities.cpp: Added.
     27        * Modules/mediacapabilities/WorkerNavigatorMediaCapabilities.h: Added.
     28        * Sources.txt:
     29        * WebCore.xcodeproj/project.pbxproj:
     30        * dom/ScriptExecutionContext.cpp:
     31        * dom/ScriptExecutionContext.h:
     32        * platform/MediaCapabilitiesDecodingInfo.h:
     33        * platform/MediaCapabilitiesEncodingInfo.h:
     34        * platform/MediaCapabilitiesInfo.h:
     35        * platform/mediacapabilities/AudioConfiguration.h:
     36        * platform/mediacapabilities/MediaConfiguration.h:
     37        * platform/mediacapabilities/MediaDecodingConfiguration.h:
     38        * platform/mediacapabilities/MediaEncodingConfiguration.h:
     39        * platform/mediacapabilities/VideoConfiguration.h:
     40
    1412021-10-18  Sergio Villar Senin  <svillar@igalia.com>
    242
  • trunk/Source/WebCore/DerivedSources-input.xcfilelist

    r284347 r284443  
    178178$(PROJECT_DIR)/Modules/mediacapabilities/TransferFunction.idl
    179179$(PROJECT_DIR)/Modules/mediacapabilities/VideoConfiguration.idl
     180$(PROJECT_DIR)/Modules/mediacapabilities/WorkerNavigator+MediaCapabilities.idl
    180181$(PROJECT_DIR)/Modules/mediacontrols/MediaControlsHost.idl
    181182$(PROJECT_DIR)/Modules/mediarecorder/BlobEvent.idl
  • trunk/Source/WebCore/DerivedSources-output.xcfilelist

    r284347 r284443  
    24962496$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWorkerLocation.cpp
    24972497$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWorkerLocation.h
     2498$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWorkerNavigator+MediaCapabilities.cpp
     2499$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWorkerNavigator+MediaCapabilities.h
    24982500$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWorkerNavigator.cpp
    24992501$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSWorkerNavigator.h
  • trunk/Source/WebCore/DerivedSources.make

    r284347 r284443  
    204204    $(WebCore)/Modules/mediacapabilities/TransferFunction.idl \
    205205    $(WebCore)/Modules/mediacapabilities/VideoConfiguration.idl \
     206    $(WebCore)/Modules/mediacapabilities/WorkerNavigator+MediaCapabilities.idl \
    206207    $(WebCore)/Modules/mediacontrols/MediaControlsHost.idl \
    207208    $(WebCore)/Modules/mediarecorder/BlobEvent.idl \
  • trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.cpp

    r284236 r284443  
    169169}
    170170
    171 void MediaCapabilities::decodingInfo(Document& document, MediaDecodingConfiguration&& configuration, Ref<DeferredPromise>&& promise)
     171static void gatherDecodingInfo(Document& document, MediaDecodingConfiguration&& configuration, MediaEngineConfigurationFactory::DecodingConfigurationCallback&& callback)
     172{
     173    RELEASE_LOG_INFO(Media, "Gathering decoding MediaCapabilities");
     174    MediaEngineConfigurationFactory::DecodingConfigurationCallback decodingCallback = [callback = WTFMove(callback)](auto&& result) mutable {
     175        RELEASE_LOG_INFO(Media, "Finished gathering decoding MediaCapabilities");
     176        callback(WTFMove(result));
     177    };
     178
     179    if (!document.settings().mediaCapabilitiesExtensionsEnabled() && configuration.video)
     180        configuration.video.value().alphaChannel.reset();
     181
     182#if ENABLE(VP9)
     183    configuration.canExposeVP9 = document.settings().vp9DecoderEnabled();
     184#endif
     185
     186#if ENABLE(WEB_RTC)
     187    if (configuration.type == MediaDecodingType::WebRTC) {
     188        if (auto* page = document.page())
     189            page->libWebRTCProvider().createDecodingConfiguration(WTFMove(configuration), WTFMove(decodingCallback));
     190        return;
     191    }
     192#else
     193    UNUSED_PARAM(document);
     194#endif
     195    MediaEngineConfigurationFactory::createDecodingConfiguration(WTFMove(configuration), WTFMove(decodingCallback));
     196}
     197
     198static void gatherEncodingInfo(Document& document, MediaEncodingConfiguration&& configuration, MediaEngineConfigurationFactory::EncodingConfigurationCallback&& callback)
     199{
     200    RELEASE_LOG_INFO(Media, "Gathering encoding MediaCapabilities");
     201    MediaEngineConfigurationFactory::EncodingConfigurationCallback encodingCallback = [callback = WTFMove(callback)](auto&& result) mutable {
     202        RELEASE_LOG_INFO(Media, "Finished gathering encoding MediaCapabilities");
     203        callback(WTFMove(result));
     204    };
     205
     206#if ENABLE(WEB_RTC)
     207    if (configuration.type == MediaEncodingType::WebRTC) {
     208        if (auto* page = document.page())
     209            page->libWebRTCProvider().createEncodingConfiguration(WTFMove(configuration), WTFMove(encodingCallback));
     210        return;
     211    }
     212#else
     213    UNUSED_PARAM(document);
     214#endif
     215    MediaEngineConfigurationFactory::createEncodingConfiguration(WTFMove(configuration), WTFMove(encodingCallback));
     216}
     217
     218void MediaCapabilities::decodingInfo(ScriptExecutionContext& context, MediaDecodingConfiguration&& configuration, Ref<DeferredPromise>&& promise)
    172219{
    173220    // 2.4 Media Capabilities Interface
    174221    // https://wicg.github.io/media-capabilities/#media-capabilities-interface
    175 
    176     auto identifier = WTF::Logger::LogSiteIdentifier("MediaCapabilities", __func__, this);
    177     Ref<Logger> logger = document.logger();
    178222
    179223    // 1. If configuration is not a valid MediaConfiguration, return a Promise rejected with a TypeError.
     
    193237    // 3. If configuration.audio is present and is not a valid audio configuration, return a Promise rejected with a TypeError.
    194238    if (!isValidMediaConfiguration(configuration)) {
    195 #if !RELEASE_LOG_DISABLED
    196         logger->info(LogMedia, identifier, " - Rejected. configuration: ", configuration);
    197 #endif
     239        RELEASE_LOG_INFO(Media, "Invalid decoding media configuration");
    198240        promise->reject(TypeError);
    199241        return;
    200242    }
    201 
    202     if (!document.settings().mediaCapabilitiesExtensionsEnabled() && configuration.video)
    203         configuration.video.value().alphaChannel.reset();
    204 
    205 #if ENABLE(VP9)
    206     configuration.canExposeVP9 = document.settings().vp9DecoderEnabled();
    207 #endif
    208243
    209244    // 4. Let p be a new promise.
     
    211246    // 6. Return p.
    212247
    213     MediaEngineConfigurationFactory::DecodingConfigurationCallback callback = [promise = WTFMove(promise), identifier = WTFMove(identifier), logger = WTFMove(logger), document = Ref { document }](auto info) mutable {
    214 #if !RELEASE_LOG_DISABLED
    215         logger->info(LogMedia, identifier, "::callback() - Resolved. info: ", info);
    216 #endif
    217         document->eventLoop().queueTask(TaskSource::MediaElement, [promise = WTFMove(promise), info = WTFMove(info)] () mutable {
     248    MediaEngineConfigurationFactory::DecodingConfigurationCallback callback = [promise = WTFMove(promise), context = Ref { context }](auto info) mutable {
     249        context->eventLoop().queueTask(TaskSource::MediaElement, [promise = WTFMove(promise), info = WTFMove(info)] () mutable {
    218250            promise->resolve<IDLDictionary<MediaCapabilitiesDecodingInfo>>(WTFMove(info));
    219251        });
    220252    };
    221253
    222 #if ENABLE(WEB_RTC)
    223     if (configuration.type == MediaDecodingType::WebRTC) {
    224         if (auto* page = document.page())
    225             page->libWebRTCProvider().createDecodingConfiguration(WTFMove(configuration), WTFMove(callback));
    226         return;
    227     }
    228 #endif
    229     MediaEngineConfigurationFactory::createDecodingConfiguration(WTFMove(configuration), WTFMove(callback));
    230 }
    231 
    232 void MediaCapabilities::encodingInfo(Document& document, MediaEncodingConfiguration&& configuration, Ref<DeferredPromise>&& promise)
     254    if (is<Document>(context)) {
     255        gatherDecodingInfo(downcast<Document>(context), WTFMove(configuration), WTFMove(callback));
     256        return;
     257    }
     258
     259    m_decodingTasks.add(++m_nextTaskIdentifier, WTFMove(callback));
     260    context.postTaskToResponsibleDocument([configuration = WTFMove(configuration).isolatedCopy(), contextIdentifier = context.contextIdentifier(), weakThis = WeakPtr { this }, taskIdentifier = m_nextTaskIdentifier](auto& document) mutable {
     261        gatherDecodingInfo(document, WTFMove(configuration), [contextIdentifier, weakThis = WTFMove(weakThis), taskIdentifier](auto&& result) mutable {
     262            ScriptExecutionContext::postTaskTo(contextIdentifier, [weakThis = WTFMove(weakThis), taskIdentifier, result = WTFMove(result).isolatedCopy()](auto&) mutable {
     263                if (!weakThis)
     264                    return;
     265                if (auto callback = weakThis->m_decodingTasks.take(taskIdentifier))
     266                    callback(WTFMove(result));
     267            });
     268        });
     269    });
     270}
     271
     272void MediaCapabilities::encodingInfo(ScriptExecutionContext& context, MediaEncodingConfiguration&& configuration, Ref<DeferredPromise>&& promise)
    233273{
    234274    // 2.4 Media Capabilities Interface
    235275    // https://wicg.github.io/media-capabilities/#media-capabilities-interface
    236 
    237     auto identifier = WTF::Logger::LogSiteIdentifier("MediaCapabilities", __func__, this);
    238     Ref<Logger> logger = document.logger();
    239276
    240277    // 1. If configuration is not a valid MediaConfiguration, return a Promise rejected with a TypeError.
     
    257294    // encoding modules.
    258295    if (!isValidMediaConfiguration(configuration)) {
     296        RELEASE_LOG_INFO(Media, "Invalid encoding media configuration");
    259297        promise->reject(TypeError);
    260298        return;
     
    265303    // 6. Return p.
    266304
    267     MediaEngineConfigurationFactory::EncodingConfigurationCallback callback = [promise = WTFMove(promise), identifier = WTFMove(identifier), logger = WTFMove(logger), document = Ref { document }](auto info) mutable {
    268 #if !RELEASE_LOG_DISABLED
    269         logger->info(LogMedia, identifier, "::callback() - Resolved. info: ", info);
    270 #endif
    271         document->eventLoop().queueTask(TaskSource::MediaElement, [promise = WTFMove(promise), info = WTFMove(info)] () mutable {
     305    MediaEngineConfigurationFactory::EncodingConfigurationCallback callback = [promise = WTFMove(promise), context = Ref { context }](auto info) mutable {
     306        context->eventLoop().queueTask(TaskSource::MediaElement, [promise = WTFMove(promise), info = WTFMove(info)] () mutable {
    272307            promise->resolve<IDLDictionary<MediaCapabilitiesEncodingInfo>>(WTFMove(info));
    273308        });
    274309    };
    275310
    276 #if ENABLE(WEB_RTC)
    277     if (configuration.type == MediaEncodingType::WebRTC) {
    278         if (auto* page = document.page())
    279             page->libWebRTCProvider().createEncodingConfiguration(WTFMove(configuration), WTFMove(callback));
    280         return;
    281     }
    282 #endif
    283 
    284     MediaEngineConfigurationFactory::createEncodingConfiguration(WTFMove(configuration), WTFMove(callback));
    285 }
    286 
    287 }
     311    if (is<Document>(context)) {
     312        gatherEncodingInfo(downcast<Document>(context), WTFMove(configuration), WTFMove(callback));
     313        return;
     314    }
     315
     316    m_encodingTasks.add(++m_nextTaskIdentifier, WTFMove(callback));
     317    context.postTaskToResponsibleDocument([configuration = WTFMove(configuration).isolatedCopy(), contextIdentifier = context.contextIdentifier(), weakThis = WeakPtr { this }, taskIdentifier = m_nextTaskIdentifier](auto& document) mutable {
     318        gatherEncodingInfo(document, WTFMove(configuration), [contextIdentifier, weakThis = WTFMove(weakThis), taskIdentifier](auto&& result) mutable {
     319            ScriptExecutionContext::postTaskTo(contextIdentifier, [weakThis = WTFMove(weakThis), taskIdentifier, result = WTFMove(result).isolatedCopy()](auto&) mutable {
     320                if (!weakThis)
     321                    return;
     322                if (auto callback = weakThis->m_encodingTasks.take(taskIdentifier))
     323                    callback(WTFMove(result));
     324            });
     325        });
     326    });
     327}
     328
     329}
  • trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.h

    r278481 r284443  
    11/*
    2  * Copyright (C) 2017 Apple Inc. All rights reserved.
     2 * Copyright (C) 2017-2021 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2626#pragma once
    2727
     28#include "MediaEngineConfigurationFactory.h"
     29#include <wtf/HashMap.h>
    2830#include <wtf/RefCounted.h>
     31#include <wtf/WeakPtr.h>
    2932
    3033namespace WebCore {
    3134
    3235class DeferredPromise;
    33 class Document;
    34 struct MediaDecodingConfiguration;
    35 struct MediaEncodingConfiguration;
     36class ScriptExecutionContext;
    3637
    37 class MediaCapabilities : public RefCounted<MediaCapabilities> {
     38class MediaCapabilities : public RefCounted<MediaCapabilities>, public CanMakeWeakPtr<MediaCapabilities> {
    3839public:
    39     void decodingInfo(Document&, MediaDecodingConfiguration&&, Ref<DeferredPromise>&&);
    40     void encodingInfo(Document&, MediaEncodingConfiguration&&, Ref<DeferredPromise>&&);
     40    static Ref<MediaCapabilities> create() { return adoptRef(*new MediaCapabilities); }
     41
     42    void decodingInfo(ScriptExecutionContext&, MediaDecodingConfiguration&&, Ref<DeferredPromise>&&);
     43    void encodingInfo(ScriptExecutionContext&, MediaEncodingConfiguration&&, Ref<DeferredPromise>&&);
     44
     45private:
     46    MediaCapabilities() = default;
     47
     48    uint64_t m_nextTaskIdentifier { 0 };
     49    HashMap<uint64_t, MediaEngineConfigurationFactory::DecodingConfigurationCallback> m_decodingTasks;
     50    HashMap<uint64_t, MediaEngineConfigurationFactory::EncodingConfigurationCallback> m_encodingTasks;
    4151};
    4252
  • trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.idl

    r283463 r284443  
    2727    EnabledBySetting=MediaCapabilitiesEnabled,
    2828    ImplementationLacksVTable,
    29     JSCustomHeader,
    30     Exposed=Window
     29    Exposed=(Window,DedicatedWorker)
    3130] interface MediaCapabilities {
    32     [CustomEnabled, CallWith=Document] Promise<MediaCapabilitiesDecodingInfo> decodingInfo(MediaDecodingConfiguration configuration);
    33     [CustomEnabled, CallWith=Document] Promise<MediaCapabilitiesEncodingInfo> encodingInfo(MediaEncodingConfiguration configuration);
     31    [CallWith=ScriptExecutionContext] Promise<MediaCapabilitiesDecodingInfo> decodingInfo(MediaDecodingConfiguration configuration);
     32    [CallWith=ScriptExecutionContext] Promise<MediaCapabilitiesEncodingInfo> encodingInfo(MediaEncodingConfiguration configuration);
    3433};
  • trunk/Source/WebCore/Modules/mediacapabilities/NavigatorMediaCapabilities.cpp

    r248846 r284443  
    3333
    3434NavigatorMediaCapabilities::NavigatorMediaCapabilities()
    35     : m_mediaCapabilities(adoptRef(*new MediaCapabilities()))
     35    : m_mediaCapabilities(MediaCapabilities::create())
    3636{
    3737}
  • trunk/Source/WebCore/Modules/mediacapabilities/WorkerNavigator+MediaCapabilities.idl

    r284442 r284443  
    11/*
    2  * Copyright (C) 2019 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
    26 #pragma once
    27 
    28 #include "MediaEngineConfigurationFactory.h"
    29 
    30 namespace WebCore {
    31 
    32 ALWAYS_INLINE bool JSMediaCapabilitiesEncodingInfoIsEnabled()
    33 {
    34 #if ENABLE(WEB_RTC)
    35     return true;
    36 #else
    37     return MediaEngineConfigurationFactory::hasEncodingConfigurationFactory();
    38 #endif
    39 }
    40 
    41 ALWAYS_INLINE bool JSMediaCapabilitiesDecodingInfoIsEnabled()
    42 {
    43 #if ENABLE(WEB_RTC)
    44     return true;
    45 #else
    46     return MediaEngineConfigurationFactory::hasDecodingConfigurationFactory();
    47 #endif
    48 }
    49 
    50 }
     26// https://w3c.github.io/media-capabilities/#navigators-extensions
     27[
     28    EnabledBySetting=MediaCapabilitiesEnabled,
     29    ImplementedBy=WorkerNavigatorMediaCapabilities
     30] partial interface WorkerNavigator {
     31  [SameObject] readonly attribute MediaCapabilities mediaCapabilities;
     32};
  • trunk/Source/WebCore/Modules/mediacapabilities/WorkerNavigatorMediaCapabilities.cpp

    r284442 r284443  
    11/*
    2  * Copyright (C) 2017 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2525
    2626#include "config.h"
    27 #include "NavigatorMediaCapabilities.h"
     27#include "WorkerNavigatorMediaCapabilities.h"
    2828
    2929#include "MediaCapabilities.h"
    30 #include "Navigator.h"
     30#include "WorkerNavigator.h"
    3131
    3232namespace WebCore {
    3333
    34 NavigatorMediaCapabilities::NavigatorMediaCapabilities()
    35     : m_mediaCapabilities(adoptRef(*new MediaCapabilities()))
     34WorkerNavigatorMediaCapabilities::WorkerNavigatorMediaCapabilities()
     35    : m_mediaCapabilities(MediaCapabilities::create())
    3636{
    3737}
    3838
    39 NavigatorMediaCapabilities::~NavigatorMediaCapabilities() = default;
     39WorkerNavigatorMediaCapabilities::~WorkerNavigatorMediaCapabilities() = default;
    4040
    41 const char* NavigatorMediaCapabilities::supplementName()
     41const char* WorkerNavigatorMediaCapabilities::supplementName()
    4242{
    43     return "NavigatorMediaCapabilities";
     43    return "WorkerNavigatorMediaCapabilities";
    4444}
    4545
    46 NavigatorMediaCapabilities& NavigatorMediaCapabilities::from(Navigator& navigator)
     46WorkerNavigatorMediaCapabilities& WorkerNavigatorMediaCapabilities::from(WorkerNavigator& navigator)
    4747{
    48     NavigatorMediaCapabilities* supplement = static_cast<NavigatorMediaCapabilities*>(Supplement<Navigator>::from(&navigator, supplementName()));
     48    auto* supplement = static_cast<WorkerNavigatorMediaCapabilities*>(Supplement<WorkerNavigator>::from(&navigator, supplementName()));
    4949    if (!supplement) {
    50         auto newSupplement = makeUnique<NavigatorMediaCapabilities>();
     50        auto newSupplement = makeUnique<WorkerNavigatorMediaCapabilities>();
    5151        supplement = newSupplement.get();
    5252        provideTo(&navigator, supplementName(), WTFMove(newSupplement));
     
    5555}
    5656
    57 MediaCapabilities& NavigatorMediaCapabilities::mediaCapabilities(Navigator& navigator)
     57MediaCapabilities& WorkerNavigatorMediaCapabilities::mediaCapabilities(WorkerNavigator& navigator)
    5858{
    59     return NavigatorMediaCapabilities::from(navigator).mediaCapabilities();
     59    return WorkerNavigatorMediaCapabilities::from(navigator).mediaCapabilities();
    6060}
    6161
    62 MediaCapabilities& NavigatorMediaCapabilities::mediaCapabilities() const
     62MediaCapabilities& WorkerNavigatorMediaCapabilities::mediaCapabilities() const
    6363{
    6464    return m_mediaCapabilities;
  • trunk/Source/WebCore/Modules/mediacapabilities/WorkerNavigatorMediaCapabilities.h

    r284442 r284443  
    11/*
    2  * Copyright (C) 2017 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2626#pragma once
    2727
    28 #include <wtf/RefCounted.h>
     28#include "Supplementable.h"
    2929
    3030namespace WebCore {
    3131
    32 class DeferredPromise;
    33 class Document;
    34 struct MediaDecodingConfiguration;
    35 struct MediaEncodingConfiguration;
     32class MediaCapabilities;
     33class WorkerNavigator;
    3634
    37 class MediaCapabilities : public RefCounted<MediaCapabilities> {
     35class WorkerNavigatorMediaCapabilities final : public Supplement<WorkerNavigator> {
     36    WTF_MAKE_FAST_ALLOCATED;
    3837public:
    39     void decodingInfo(Document&, MediaDecodingConfiguration&&, Ref<DeferredPromise>&&);
    40     void encodingInfo(Document&, MediaEncodingConfiguration&&, Ref<DeferredPromise>&&);
     38    WorkerNavigatorMediaCapabilities();
     39    ~WorkerNavigatorMediaCapabilities();
     40
     41    static MediaCapabilities& mediaCapabilities(WorkerNavigator&);
     42    static WorkerNavigatorMediaCapabilities& from(WorkerNavigator&);
     43
     44    MediaCapabilities& mediaCapabilities() const;
     45private:
     46    static const char* supplementName();
     47
     48    mutable Ref<MediaCapabilities> m_mediaCapabilities;
    4149};
    4250
  • trunk/Source/WebCore/Modules/mediasession/MediaSessionCoordinator.cpp

    r284057 r284443  
    3434#include "JSMediaSessionCoordinatorState.h"
    3535#include "Logging.h"
     36#include "MediaMetadata.h"
    3637#include "MediaSession.h"
    3738#include "MediaSessionCoordinatorPrivate.h"
     39#include <wtf/CompletionHandler.h>
    3840#include <wtf/Logger.h>
     41#include <wtf/LoggerHelper.h>
    3942#include <wtf/Seconds.h>
    4043
  • trunk/Source/WebCore/Sources.txt

    r284383 r284443  
    132132Modules/mediacapabilities/MediaCapabilities.cpp
    133133Modules/mediacapabilities/NavigatorMediaCapabilities.cpp
     134Modules/mediacapabilities/WorkerNavigatorMediaCapabilities.cpp
    134135Modules/mediasession/MediaMetadata.cpp
    135136Modules/mediasession/MediaSession.cpp
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r284383 r284443  
    81848184                418FCBCC2706F43400F96ECA /* ServiceWorkerGlobalScopePushAPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerGlobalScopePushAPI.h; sourceTree = "<group>"; };
    81858185                418FCBCD2706F43400F96ECA /* ServiceWorkerGlobalScopePushAPI.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorkerGlobalScopePushAPI.cpp; sourceTree = "<group>"; };
    8186                 418FCBE82715AA1900F96ECA /* JSMediaCapabilitiesCustom.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JSMediaCapabilitiesCustom.h; sourceTree = "<group>"; };
     8186                418FCBEA2715B60F00F96ECA /* WorkerNavigator+MediaCapabilities.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = "WorkerNavigator+MediaCapabilities.idl"; sourceTree = "<group>"; };
     8187                418FCBEC2715B85100F96ECA /* WorkerNavigatorMediaCapabilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WorkerNavigatorMediaCapabilities.h; sourceTree = "<group>"; };
     8188                418FCBED2715B85200F96ECA /* WorkerNavigatorMediaCapabilities.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WorkerNavigatorMediaCapabilities.cpp; sourceTree = "<group>"; };
    81878189                4190F3A1249D152700531C57 /* FrameRateMonitor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FrameRateMonitor.cpp; sourceTree = "<group>"; };
    81888190                4190F3A3249D152800531C57 /* FrameRateMonitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FrameRateMonitor.h; sourceTree = "<group>"; };
     
    2327423276                                5868C7D52546E0B300BF9DF3 /* JSIntersectionObserverCustom.cpp */,
    2327523277                                77C13F042165658A002D9C5F /* JSIntersectionObserverEntryCustom.cpp */,
    23276                                 418FCBE82715AA1900F96ECA /* JSMediaCapabilitiesCustom.h */,
    2327723278                                AD726FE716D9F204003A4E6D /* JSMediaListCustom.h */,
    2327823279                                415CDAF61E6CE0D3004F11EE /* JSMediaStreamTrackCustom.cpp */,
     
    2881228813                                CD4E4E622357B3AD007895C3 /* TransferFunction.idl */,
    2881328814                                CDBD3D281FE85CB80012C545 /* VideoConfiguration.idl */,
     28815                                418FCBEA2715B60F00F96ECA /* WorkerNavigator+MediaCapabilities.idl */,
     28816                                418FCBED2715B85200F96ECA /* WorkerNavigatorMediaCapabilities.cpp */,
     28817                                418FCBEC2715B85100F96ECA /* WorkerNavigatorMediaCapabilities.h */,
    2881428818                        );
    2881528819                        path = mediacapabilities;
  • trunk/Source/WebCore/dom/ScriptExecutionContext.cpp

    r283526 r284443  
    6565#include "WebCoreJSClientData.h"
    6666#include "WorkerGlobalScope.h"
     67#include "WorkerLoaderProxy.h"
    6768#include "WorkerNavigator.h"
    6869#include "WorkerOrWorkletGlobalScope.h"
     
    683684}
    684685
     686void ScriptExecutionContext::postTaskToResponsibleDocument(Function<void(Document&)>&& callback)
     687{
     688    if (is<Document>(this)) {
     689        callback(downcast<Document>(*this));
     690        return;
     691    }
     692
     693    ASSERT(is<WorkerOrWorkletGlobalScope>(this));
     694    if (!is<WorkerOrWorkletGlobalScope>(this))
     695        return;
     696
     697    auto* thread = downcast<WorkerOrWorkletGlobalScope>(this)->workerOrWorkletThread();
     698    if (thread) {
     699        thread->workerLoaderProxy().postTaskToLoader([callback = WTFMove(callback)](auto&& context) {
     700            callback(downcast<Document>(context));
     701        });
     702        return;
     703    }
     704
     705    if (auto document = downcast<WorkletGlobalScope>(this)->responsibleDocument())
     706        callback(*document);
     707}
     708
    685709} // namespace WebCore
  • trunk/Source/WebCore/dom/ScriptExecutionContext.h

    r283526 r284443  
    224224    }
    225225
     226    void postTaskToResponsibleDocument(Function<void(Document&)>&&);
     227
    226228    // Gets the next id in a circular sequence from 1 to 2^31-1.
    227229    int circularSequentialID();
  • trunk/Source/WebCore/platform/MediaCapabilitiesDecodingInfo.h

    r278340 r284443  
    4848    MediaDecodingConfiguration supportedConfiguration;
    4949
     50    MediaCapabilitiesDecodingInfo isolatedCopy() const;
     51
    5052    template<class Encoder> void encode(Encoder&) const;
    5153    template<class Decoder> static std::optional<MediaCapabilitiesDecodingInfo> decode(Decoder&);
    5254};
     55
     56inline MediaCapabilitiesDecodingInfo MediaCapabilitiesDecodingInfo::isolatedCopy() const
     57{
     58    return { MediaCapabilitiesInfo::isolatedCopy(), supportedConfiguration.isolatedCopy() };
     59}
    5360
    5461template<class Encoder>
  • trunk/Source/WebCore/platform/MediaCapabilitiesEncodingInfo.h

    r278340 r284443  
    4848    MediaEncodingConfiguration supportedConfiguration;
    4949
     50    MediaCapabilitiesEncodingInfo isolatedCopy() const;
     51
    5052    template<class Encoder> void encode(Encoder&) const;
    5153    template<class Decoder> static std::optional<MediaCapabilitiesEncodingInfo> decode(Decoder&);
    5254};
     55
     56inline MediaCapabilitiesEncodingInfo MediaCapabilitiesEncodingInfo::isolatedCopy() const
     57{
     58    return { MediaCapabilitiesInfo::isolatedCopy(), supportedConfiguration.isolatedCopy() };
     59}
    5360
    5461template<class Encoder>
  • trunk/Source/WebCore/platform/MediaCapabilitiesInfo.h

    r278340 r284443  
    3535    bool powerEfficient { false };
    3636
     37    MediaCapabilitiesInfo isolatedCopy() const;
     38
    3739    template<class Encoder> void encode(Encoder&) const;
    3840    template<class Decoder> static std::optional<MediaCapabilitiesInfo> decode(Decoder&);
    3941};
     42
     43inline MediaCapabilitiesInfo MediaCapabilitiesInfo::isolatedCopy() const
     44{
     45    return *this;
     46}
    4047
    4148template<class Encoder>
  • trunk/Source/WebCore/platform/mediacapabilities/AudioConfiguration.h

    r278340 r284443  
    3737    std::optional<bool> spatialRendering;
    3838
     39    AudioConfiguration isolatedCopy() const;
     40
    3941    template<class Encoder> void encode(Encoder&) const;
    4042    template<class Decoder> static std::optional<AudioConfiguration> decode(Decoder&);
    4143};
     44
     45inline AudioConfiguration AudioConfiguration::isolatedCopy() const
     46{
     47    return { contentType.isolatedCopy(), channels.isolatedCopy(), bitrate, samplerate, spatialRendering };
     48}
    4249
    4350template<class Encoder>
  • trunk/Source/WebCore/platform/mediacapabilities/MediaConfiguration.h

    r278340 r284443  
    2828#include "AudioConfiguration.h"
    2929#include "VideoConfiguration.h"
     30#include <wtf/CrossThreadCopier.h>
    3031
    3132namespace WebCore {
     
    3536    std::optional<AudioConfiguration> audio;
    3637
     38    MediaConfiguration isolatedCopy() const;
     39
    3740    template<class Encoder> void encode(Encoder&) const;
    3841    template<class Decoder> static std::optional<MediaConfiguration> decode(Decoder&);
    3942};
     43
     44inline MediaConfiguration MediaConfiguration::isolatedCopy() const
     45{
     46    return { crossThreadCopy(video),  crossThreadCopy(audio) };
     47}
    4048
    4149template<class Encoder>
  • trunk/Source/WebCore/platform/mediacapabilities/MediaDecodingConfiguration.h

    r278253 r284443  
    3636    bool canExposeVP9 { true };
    3737
     38    MediaDecodingConfiguration isolatedCopy() const;
     39
    3840    template<class Encoder> void encode(Encoder&) const;
    3941    template<class Decoder> static std::optional<MediaDecodingConfiguration> decode(Decoder&);
    4042};
     43
     44inline MediaDecodingConfiguration MediaDecodingConfiguration::isolatedCopy() const
     45{
     46    return { MediaConfiguration::isolatedCopy(), type, canExposeVP9 };
     47}
    4148
    4249template<class Encoder>
  • trunk/Source/WebCore/platform/mediacapabilities/MediaEncodingConfiguration.h

    r278253 r284443  
    3434    MediaEncodingType type;
    3535
     36    MediaEncodingConfiguration isolatedCopy() const;
     37
    3638    template<class Encoder> void encode(Encoder&) const;
    3739    template<class Decoder> static std::optional<MediaEncodingConfiguration> decode(Decoder&);
    3840};
     41
     42inline MediaEncodingConfiguration MediaEncodingConfiguration::isolatedCopy() const
     43{
     44    return { MediaConfiguration::isolatedCopy(), type };
     45}
    3946
    4047template<class Encoder>
  • trunk/Source/WebCore/platform/mediacapabilities/VideoConfiguration.h

    r278340 r284443  
    4444    std::optional<TransferFunction> transferFunction;
    4545
     46    VideoConfiguration isolatedCopy() const;
     47
    4648    template<class Encoder> void encode(Encoder&) const;
    4749    template<class Decoder> static std::optional<VideoConfiguration> decode(Decoder&);
    4850};
     51
     52inline VideoConfiguration VideoConfiguration::isolatedCopy() const
     53{
     54    return { contentType.isolatedCopy(), width, height, bitrate, framerate, alphaChannel, colorGamut, hdrMetadataType, transferFunction };
     55}
    4956
    5057template<class Encoder>
Note: See TracChangeset for help on using the changeset viewer.