Changeset 284085 in webkit


Ignore:
Timestamp:
Oct 13, 2021 2:54:07 AM (9 months ago)
Author:
youenn@apple.com
Message:

Add support for WebRTC media capabilities
https://bugs.webkit.org/show_bug.cgi?id=231568

Reviewed by Eric Carlson.

LayoutTests/imported/w3c:

  • resources/import-expectations.json:
  • web-platform-tests/media-capabilities/META.yml: Added.
  • web-platform-tests/media-capabilities/README.md: Added.
  • web-platform-tests/media-capabilities/decodingInfo.any-expected.txt: Added.
  • web-platform-tests/media-capabilities/decodingInfo.any.html: Added.
  • web-platform-tests/media-capabilities/decodingInfo.any.js: Added.
  • web-platform-tests/media-capabilities/decodingInfo.any.worker-expected.txt: Added.
  • web-platform-tests/media-capabilities/decodingInfo.any.worker.html: Added.
  • web-platform-tests/media-capabilities/decodingInfo.webrtc-expected.txt: Added.
  • web-platform-tests/media-capabilities/decodingInfo.webrtc.html: Added.
  • web-platform-tests/media-capabilities/encodingInfo-expected.txt: Added.
  • web-platform-tests/media-capabilities/encodingInfo.html: Added.
  • web-platform-tests/media-capabilities/encodingInfo.webrtc-expected.txt: Added.
  • web-platform-tests/media-capabilities/encodingInfo.webrtc.html: Added.
  • web-platform-tests/media-capabilities/idlharness.any-expected.txt: Added.
  • web-platform-tests/media-capabilities/idlharness.any.html: Added.
  • web-platform-tests/media-capabilities/idlharness.any.js: Added.
  • web-platform-tests/media-capabilities/idlharness.any.worker-expected.txt: Added.
  • web-platform-tests/media-capabilities/idlharness.any.worker.html: Added.
  • web-platform-tests/media-capabilities/w3c-import.log: Added.

Source/WebCore:

Add WebRTC decoding and encoding type.
In case webrtc type is used, forward the call to LibWebRTCProvider.
LibWebRTCProvider then gets underlying RTC capabilities to expose media capabilities.
It also adds dedicated support for powerEfficient value.
All information is already exposed in existing Media Capabilities or RTCRtpSender/Receiver getCapabilities so we do not increase fingerprinting here.

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

imported/w3c/web-platform-tests/media-capabilities/decodingInfo.any.worker.html
imported/w3c/web-platform-tests/media-capabilities/decodingInfo.webrtc.html
imported/w3c/web-platform-tests/media-capabilities/decodingInfoEncryptedMedia.http.html
imported/w3c/web-platform-tests/media-capabilities/decodingInfoEncryptedMedia.https.html
imported/w3c/web-platform-tests/media-capabilities/encodingInfo.html
imported/w3c/web-platform-tests/media-capabilities/encodingInfo.webrtc.html
imported/w3c/web-platform-tests/media-capabilities/idlharness.any.html
imported/w3c/web-platform-tests/media-capabilities/idlharness.any.worker.html

  • Modules/mediacapabilities/MediaCapabilities.cpp:
  • Modules/mediacapabilities/MediaDecodingType.idl:
  • Modules/mediacapabilities/MediaEncodingType.idl:
  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/JSMediaCapabilitiesCustom.h:
  • bindings/scripts/CodeGeneratorJS.pm:
  • platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp:
  • platform/mediacapabilities/MediaCapabilitiesLogging.h:
  • platform/mediacapabilities/MediaDecodingType.h:
  • platform/mediacapabilities/MediaEncodingType.h:
  • platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
  • platform/mediastream/libwebrtc/LibWebRTCProvider.h:
  • platform/mock/MediaEngineConfigurationFactoryMock.cpp:

LayoutTests:

  • media/mediacapabilities/mock-encodingInfo-expected.txt:
  • media/mediacapabilities/mock-encodingInfo.html:
  • platform/ios/media/mediacapabilities/mediacapabilities-encodingInfo-undefined-expected.txt: Removed.
  • platform/ios/media/mediacapabilities/mediacapabilities-encodingInfo-undefined.html: Removed.
  • platform/ios/media/mediacapabilities/mediacapabilities-types-expected.txt: Removed.
  • platform/mac/media/mediacapabilities/mediacapabilities-types-expected.txt: Removed.
  • platform/mac/media/mediacapabilities/mediacapabilities-encodingInfo-undefined-expected.txt: Removed.
  • platform/mac/media/mediacapabilities/mediacapabilities-encodingInfo-undefined.html: Removed.
  • platform/mac/media/mediacapabilities/mediacapabilities-types-expected.txt:
  • tests-options.json:
Location:
trunk
Files:
20 added
4 deleted
21 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r284084 r284085  
     12021-10-13  Youenn Fablet  <youenn@apple.com>
     2
     3        Add support for WebRTC media capabilities
     4        https://bugs.webkit.org/show_bug.cgi?id=231568
     5
     6        Reviewed by Eric Carlson.
     7
     8        * media/mediacapabilities/mock-encodingInfo-expected.txt:
     9        * media/mediacapabilities/mock-encodingInfo.html:
     10        * platform/ios/media/mediacapabilities/mediacapabilities-encodingInfo-undefined-expected.txt: Removed.
     11        * platform/ios/media/mediacapabilities/mediacapabilities-encodingInfo-undefined.html: Removed.
     12        * platform/ios/media/mediacapabilities/mediacapabilities-types-expected.txt: Removed.
     13        * platform/mac/media/mediacapabilities/mediacapabilities-types-expected.txt: Removed.
     14        * platform/mac/media/mediacapabilities/mediacapabilities-encodingInfo-undefined-expected.txt: Removed.
     15        * platform/mac/media/mediacapabilities/mediacapabilities-encodingInfo-undefined.html: Removed.
     16        * platform/mac/media/mediacapabilities/mediacapabilities-types-expected.txt:
     17        * tests-options.json:
     18
    1192021-10-13  Martin Robinson  <mrobinson@webkit.org>
    220
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r284067 r284085  
     12021-10-13  Youenn Fablet  <youenn@apple.com>
     2
     3        Add support for WebRTC media capabilities
     4        https://bugs.webkit.org/show_bug.cgi?id=231568
     5
     6        Reviewed by Eric Carlson.
     7
     8        * resources/import-expectations.json:
     9        * web-platform-tests/media-capabilities/META.yml: Added.
     10        * web-platform-tests/media-capabilities/README.md: Added.
     11        * web-platform-tests/media-capabilities/decodingInfo.any-expected.txt: Added.
     12        * web-platform-tests/media-capabilities/decodingInfo.any.html: Added.
     13        * web-platform-tests/media-capabilities/decodingInfo.any.js: Added.
     14        * web-platform-tests/media-capabilities/decodingInfo.any.worker-expected.txt: Added.
     15        * web-platform-tests/media-capabilities/decodingInfo.any.worker.html: Added.
     16        * web-platform-tests/media-capabilities/decodingInfo.webrtc-expected.txt: Added.
     17        * web-platform-tests/media-capabilities/decodingInfo.webrtc.html: Added.
     18        * web-platform-tests/media-capabilities/encodingInfo-expected.txt: Added.
     19        * web-platform-tests/media-capabilities/encodingInfo.html: Added.
     20        * web-platform-tests/media-capabilities/encodingInfo.webrtc-expected.txt: Added.
     21        * web-platform-tests/media-capabilities/encodingInfo.webrtc.html: Added.
     22        * web-platform-tests/media-capabilities/idlharness.any-expected.txt: Added.
     23        * web-platform-tests/media-capabilities/idlharness.any.html: Added.
     24        * web-platform-tests/media-capabilities/idlharness.any.js: Added.
     25        * web-platform-tests/media-capabilities/idlharness.any.worker-expected.txt: Added.
     26        * web-platform-tests/media-capabilities/idlharness.any.worker.html: Added.
     27        * web-platform-tests/media-capabilities/w3c-import.log: Added.
     28
    1292021-10-12  Kate Cheney  <katherine_cheney@apple.com>
    230
  • trunk/LayoutTests/imported/w3c/resources/import-expectations.json

    r283704 r284085  
    361361    "web-platform-tests/magnetometer": "skip",
    362362    "web-platform-tests/mathml": "import",
    363     "web-platform-tests/media-capabilities": "skip",
     363    "web-platform-tests/media-capabilities": "import",
    364364    "web-platform-tests/media-source": "import",
    365365    "web-platform-tests/media/": "import",
  • trunk/LayoutTests/media/mediacapabilities/mock-encodingInfo-expected.txt

    r234582 r284085  
    22
    33Smooth and power efficient 720P MP4 encoding
    4 RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', video: { contentType: 'video/mp4; codecs="avc1"', height: 720, bitrate: 1000, width: 1280, framerate: 24.5 } });)
     4RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', video: { contentType: 'video/mp4; codecs="avc1"', height: 720, bitrate: 1000, width: 1280, framerate: 24.5 } });)
    55Promise resolved OK
    66info.supported == true OK
     
    99
    1010Not smooth (too high framerate) but power efficient 720P MP4 encoding
    11 RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', video: { contentType: 'video/mp4; codecs="avc1"', height: 720, bitrate: 1000, width: 1280, framerate: 60.4/2 } });)
     11RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', video: { contentType: 'video/mp4; codecs="avc1"', height: 720, bitrate: 1000, width: 1280, framerate: 60.4/2 } });)
    1212Promise resolved OK
    1313info.supported == true OK
     
    1515info.powerEfficient == true OK
    1616
    17 Unsupported protocol: Record
    18 RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', video: { contentType: 'video/mp4; codecs="avc1"', height: 720, bitrate: 1000, width: 1280, framerate: 24 } });)
     17Unsupported protocol: WebRTC
     18RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'webrtc', video: { contentType: 'video/mp4; codecs="avc1"', height: 720, bitrate: 1000, width: 1280, framerate: 24 } });)
    1919Promise resolved OK
    2020info.supported == false OK
     
    2323
    2424Unsupported video resolution: 1080P
    25 RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', video: { contentType: 'video/mp4; codecs="avc1"', height: 1080, bitrate: 1000, width: 1920, framerate: 24 } });)
     25RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', video: { contentType: 'video/mp4; codecs="avc1"', height: 1080, bitrate: 1000, width: 1920, framerate: 24 } });)
    2626Promise resolved OK
    2727info.supported == false OK
     
    3030
    3131Smooth and power efficient audio MP4 encoding
    32 RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', audio: { contentType: 'audio/mp4; codecs="mp4a.40.2"', channels: '2', bitrate: 1000, samplerate: 44100 } });)
     32RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', audio: { contentType: 'audio/mp4; codecs="mp4a.40.2"', channels: '2', bitrate: 1000, samplerate: 44100 } });)
    3333Promise resolved OK
    3434info.supported == true OK
     
    3737
    3838Smooth but power inefficient audio MP4 encoding
    39 RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', audio: { contentType: 'audio/mp4; codecs="mp4a.40.2"', channels: '2', bitrate: 2000, samplerate: 44100 } });)
     39RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', audio: { contentType: 'audio/mp4; codecs="mp4a.40.2"', channels: '2', bitrate: 2000, samplerate: 44100 } });)
    4040Promise resolved OK
    4141info.supported == true OK
     
    4444
    4545Not smooth but power efficient audio MP4 encoding
    46 RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', audio: { contentType: 'audio/mp4; codecs="mp4a.40.2"', channels: '5.1', bitrate: 1000, samplerate: 44100 } });)
     46RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', audio: { contentType: 'audio/mp4; codecs="mp4a.40.2"', channels: '5.1', bitrate: 1000, samplerate: 44100 } });)
    4747Promise resolved OK
    4848info.supported == true OK
     
    5151
    5252Not smooth and power inefficient audio MP4 encoding
    53 RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', audio: { contentType: 'audio/mp4; codecs="mp4a.40.2"', channels: '5.1', bitrate: 2000, samplerate: 44100 } });)
     53RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', audio: { contentType: 'audio/mp4; codecs="mp4a.40.2"', channels: '5.1', bitrate: 2000, samplerate: 44100 } });)
    5454Promise resolved OK
    5555info.supported == true OK
     
    5858
    5959Unsupported audio codec: ogg vorbis
    60 RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', audio: { contentType: 'audio/ogg; codecs="vorbis"', channels: '2' } });)
     60RUN(promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', audio: { contentType: 'audio/ogg; codecs="vorbis"', channels: '2' } });)
    6161Promise resolved OK
    6262info.supported == false OK
  • trunk/LayoutTests/media/mediacapabilities/mock-encodingInfo.html

    r234582 r284085  
    3131         function() {
    3232             consoleWrite('Smooth and power efficient 720P MP4 encoding');
    33              run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', video: { contentType: 'video/mp4; codecs=\"avc1\"', height: 720, bitrate: 1000, width: 1280, framerate: 24.5 } });");
     33             run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', video: { contentType: 'video/mp4; codecs=\"avc1\"', height: 720, bitrate: 1000, width: 1280, framerate: 24.5 } });");
    3434             shouldResolve(promise).then((info) => {
    3535                 checkMediaCapabilitiesInfo(info, true, true, true);
     
    3939         function() {
    4040             consoleWrite('Not smooth (too high framerate) but power efficient 720P MP4 encoding');
    41              run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', video: { contentType: 'video/mp4; codecs=\"avc1\"', height: 720, bitrate: 1000, width: 1280, framerate: 60.4/2 } });");
     41             run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', video: { contentType: 'video/mp4; codecs=\"avc1\"', height: 720, bitrate: 1000, width: 1280, framerate: 60.4/2 } });");
    4242             shouldResolve(promise).then((info) => {
    4343                 checkMediaCapabilitiesInfo(info, true, false, true);
     
    4646         },
    4747         function() {
    48              consoleWrite('Unsupported protocol: Record');
    49              run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', video: { contentType: 'video/mp4; codecs=\"avc1\"', height: 720, bitrate: 1000, width: 1280, framerate: 24 } });");
     48             consoleWrite('Unsupported protocol: WebRTC');
     49             run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'webrtc', video: { contentType: 'video/mp4; codecs=\"avc1\"', height: 720, bitrate: 1000, width: 1280, framerate: 24 } });");
    5050             shouldResolve(promise).then((info) => {
    5151                 checkMediaCapabilitiesInfo(info, false, false, false);
     
    5555         function() {
    5656             consoleWrite('Unsupported video resolution: 1080P');
    57              run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', video: { contentType: 'video/mp4; codecs=\"avc1\"', height: 1080, bitrate: 1000, width: 1920, framerate: 24 } });");
     57             run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', video: { contentType: 'video/mp4; codecs=\"avc1\"', height: 1080, bitrate: 1000, width: 1920, framerate: 24 } });");
    5858             shouldResolve(promise).then((info) => {
    5959                 checkMediaCapabilitiesInfo(info, false, false, false);
     
    6363         function() {
    6464             consoleWrite('Smooth and power efficient audio MP4 encoding');
    65              run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', audio: { contentType: 'audio/mp4; codecs=\"mp4a.40.2\"', channels: '2', bitrate: 1000, samplerate: 44100  } });");
     65             run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', audio: { contentType: 'audio/mp4; codecs=\"mp4a.40.2\"', channels: '2', bitrate: 1000, samplerate: 44100  } });");
    6666             shouldResolve(promise).then((info) => {
    6767                 checkMediaCapabilitiesInfo(info, true, true, true);
     
    7171         function() {
    7272             consoleWrite('Smooth but power inefficient audio MP4 encoding');
    73              run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', audio: { contentType: 'audio/mp4; codecs=\"mp4a.40.2\"', channels: '2', bitrate: 2000, samplerate: 44100  } });");
     73             run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', audio: { contentType: 'audio/mp4; codecs=\"mp4a.40.2\"', channels: '2', bitrate: 2000, samplerate: 44100  } });");
    7474             shouldResolve(promise).then((info) => {
    7575                 checkMediaCapabilitiesInfo(info, true, true, false);
     
    7979         function() {
    8080             consoleWrite('Not smooth but power efficient audio MP4 encoding');
    81              run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', audio: { contentType: 'audio/mp4; codecs=\"mp4a.40.2\"', channels: '5.1', bitrate: 1000, samplerate: 44100  } });");
     81             run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', audio: { contentType: 'audio/mp4; codecs=\"mp4a.40.2\"', channels: '5.1', bitrate: 1000, samplerate: 44100  } });");
    8282             shouldResolve(promise).then((info) => {
    8383                 checkMediaCapabilitiesInfo(info, true, false, true);
     
    8787         function() {
    8888             consoleWrite('Not smooth and power inefficient audio MP4 encoding');
    89              run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', audio: { contentType: 'audio/mp4; codecs=\"mp4a.40.2\"', channels: '5.1', bitrate: 2000, samplerate: 44100  } });");
     89             run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', audio: { contentType: 'audio/mp4; codecs=\"mp4a.40.2\"', channels: '5.1', bitrate: 2000, samplerate: 44100  } });");
    9090             shouldResolve(promise).then((info) => {
    9191                 checkMediaCapabilitiesInfo(info, true, false, false);
     
    9595         function() {
    9696             consoleWrite('Unsupported audio codec: ogg vorbis');
    97              run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'transmission', audio: { contentType: 'audio/ogg; codecs=\"vorbis\"', channels: '2' } });");
     97             run("promise = navigator.mediaCapabilities.encodingInfo({ type: 'record', audio: { contentType: 'audio/ogg; codecs=\"vorbis\"', channels: '2' } });");
    9898             shouldResolve(promise).then((info) => {
    9999                 checkMediaCapabilitiesInfo(info, false, false, false);
  • trunk/LayoutTests/tests-options.json

    r283525 r284085  
    36363636        "slow"
    36373637    ],
     3638    "imported/w3c/web-platform-tests/media-capabilities/decodingInfoEncryptedMedia.https.html": [
     3639        "slow"
     3640    ],
    36383641    "imported/w3c/web-platform-tests/media-source/SourceBuffer-abort-readyState.html": [
    36393642        "slow"
  • trunk/Source/WebCore/ChangeLog

    r284084 r284085  
     12021-10-13  Youenn Fablet  <youenn@apple.com>
     2
     3        Add support for WebRTC media capabilities
     4        https://bugs.webkit.org/show_bug.cgi?id=231568
     5
     6        Reviewed by Eric Carlson.
     7
     8        Add WebRTC decoding and encoding type.
     9        In case webrtc type is used, forward the call to LibWebRTCProvider.
     10        LibWebRTCProvider then gets underlying RTC capabilities to expose media capabilities.
     11        It also adds dedicated support for powerEfficient value.
     12        All information is already exposed in existing Media Capabilities or RTCRtpSender/Receiver getCapabilities so we do not increase fingerprinting here.
     13
     14        Tests: imported/w3c/web-platform-tests/media-capabilities/decodingInfo.any.html
     15               imported/w3c/web-platform-tests/media-capabilities/decodingInfo.any.worker.html
     16               imported/w3c/web-platform-tests/media-capabilities/decodingInfo.webrtc.html
     17               imported/w3c/web-platform-tests/media-capabilities/decodingInfoEncryptedMedia.http.html
     18               imported/w3c/web-platform-tests/media-capabilities/decodingInfoEncryptedMedia.https.html
     19               imported/w3c/web-platform-tests/media-capabilities/encodingInfo.html
     20               imported/w3c/web-platform-tests/media-capabilities/encodingInfo.webrtc.html
     21               imported/w3c/web-platform-tests/media-capabilities/idlharness.any.html
     22               imported/w3c/web-platform-tests/media-capabilities/idlharness.any.worker.html
     23
     24        * Modules/mediacapabilities/MediaCapabilities.cpp:
     25        * Modules/mediacapabilities/MediaDecodingType.idl:
     26        * Modules/mediacapabilities/MediaEncodingType.idl:
     27        * WebCore.xcodeproj/project.pbxproj:
     28        * bindings/js/JSMediaCapabilitiesCustom.h:
     29        * bindings/scripts/CodeGeneratorJS.pm:
     30        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp:
     31        * platform/mediacapabilities/MediaCapabilitiesLogging.h:
     32        * platform/mediacapabilities/MediaDecodingType.h:
     33        * platform/mediacapabilities/MediaEncodingType.h:
     34        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
     35        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
     36        * platform/mock/MediaEngineConfigurationFactoryMock.cpp:
     37
    1382021-10-13  Martin Robinson  <mrobinson@webkit.org>
    239
  • trunk/Source/WebCore/Headers.cmake

    r284080 r284085  
    14711471    platform/mediastream/RTCDataChannelState.h
    14721472    platform/mediastream/RTCPriorityType.h
     1473    platform/mediastream/RTCRtpCapabilities.h
     1474    platform/mediastream/RTCRtpCodecCapability.h
    14731475    platform/mediastream/RealtimeMediaSource.h
    14741476    platform/mediastream/RealtimeMediaSourceCapabilities.h
  • trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.cpp

    r278580 r284085  
    3333#include "JSMediaCapabilitiesDecodingInfo.h"
    3434#include "JSMediaCapabilitiesEncodingInfo.h"
     35#include "LibWebRTCProvider.h"
    3536#include "Logging.h"
    3637#include "MediaCapabilitiesDecodingInfo.h"
     
    4041#include "MediaEncodingConfiguration.h"
    4142#include "MediaEngineConfigurationFactory.h"
     43#include "Page.h"
    4244#include "Settings.h"
    4345#include <wtf/Logger.h>
     
    196198    // 5. In parallel, run the create a MediaCapabilitiesInfo algorithm with configuration and resolve p with its result.
    197199    // 6. Return p.
    198     document.eventLoop().queueTask(TaskSource::MediaElement, [configuration = WTFMove(configuration), promise = WTFMove(promise), logger = WTFMove(logger), identifier = WTFMove(identifier)] () mutable {
     200    document.eventLoop().queueTask(TaskSource::MediaElement, [configuration = WTFMove(configuration), promise = WTFMove(promise), logger = WTFMove(logger), identifier = WTFMove(identifier), document = Ref { document }] () mutable {
    199201
    200202        // 2.2.3 If configuration is of type MediaDecodingConfiguration, run the following substeps:
     
    217219        };
    218220
     221#if ENABLE(WEB_RTC)
     222        if (configuration.type == MediaDecodingType::WebRTC) {
     223            if (auto* page = document->page())
     224                page->libWebRTCProvider().createDecodingConfiguration(WTFMove(configuration), WTFMove(callback));
     225            return;
     226        }
     227#endif
     228
    219229        MediaEngineConfigurationFactory::createDecodingConfiguration(WTFMove(configuration), WTFMove(callback));
    220230    });
     
    237247    // 5. In parallel, run the create a MediaCapabilitiesInfo algorithm with configuration and resolve p with its result.
    238248    // 6. Return p.
    239     document.eventLoop().queueTask(TaskSource::MediaElement, [configuration = WTFMove(configuration), promise = WTFMove(promise)] () mutable {
    240 
     249    document.eventLoop().queueTask(TaskSource::MediaElement, [configuration = WTFMove(configuration), promise = WTFMove(promise),  document = Ref { document }] () mutable {
    241250        // 2.2.4. If configuration is of type MediaEncodingConfiguration, run the following substeps:
    242251        MediaEngineConfigurationFactory::EncodingConfigurationCallback callback = [promise = WTFMove(promise)] (auto info) mutable {
     
    258267        };
    259268
     269#if ENABLE(WEB_RTC)
     270        if (configuration.type == MediaEncodingType::WebRTC) {
     271            if (auto* page = document->page())
     272                page->libWebRTCProvider().createEncodingConfiguration(WTFMove(configuration), WTFMove(callback));
     273            return;
     274        }
     275#endif
     276
    260277        MediaEngineConfigurationFactory::createEncodingConfiguration(WTFMove(configuration), WTFMove(callback));
    261278
  • trunk/Source/WebCore/Modules/mediacapabilities/MediaDecodingType.idl

    r226228 r284085  
    2626enum MediaDecodingType {
    2727  "file",
    28   "media-source"
     28  "media-source",
     29  "webrtc"
    2930};
  • trunk/Source/WebCore/Modules/mediacapabilities/MediaEncodingType.idl

    r226228 r284085  
    2626enum MediaEncodingType {
    2727  "record",
    28   "transmission"
     28  "webrtc"
    2929};
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r284080 r284085  
    10871087                4129C9AB1F59C573009D7403 /* ReadableStreamSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 418C395B1C8F0A610051C8A3 /* ReadableStreamSource.h */; settings = {ATTRIBUTES = (Private, ); }; };
    10881088                4129C9AF1F59CF5B009D7403 /* ReadableStreamSink.h in Headers */ = {isa = PBXBuildFile; fileRef = 4129C9801F5861C7009D7403 /* ReadableStreamSink.h */; settings = {ATTRIBUTES = (Private, ); }; };
    1089                 412DE4B8219285C00075F3A7 /* RTCRtpCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 412DE4B6219285BF0075F3A7 /* RTCRtpCapabilities.h */; };
     1089                412DE4B8219285C00075F3A7 /* RTCRtpCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 412DE4B6219285BF0075F3A7 /* RTCRtpCapabilities.h */; settings = {ATTRIBUTES = (Private, ); }; };
    10901090                412DEF1D23A9186600D840F6 /* MockAudioSharedUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 0744ECEB1E0C4AE5000D0944 /* MockAudioSharedUnit.h */; settings = {ATTRIBUTES = (Private, ); }; };
    10911091                412DEF1F23A918A300D840F6 /* BaseAudioSharedUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 4177F51E2382545E00C04486 /* BaseAudioSharedUnit.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    11821182                418FCBC12706E4FB00F96ECA /* PushEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 418FCBBD2706E4F700F96ECA /* PushEvent.h */; settings = {ATTRIBUTES = (Private, ); }; };
    11831183                418FCBC22706E50100F96ECA /* PushEventInit.h in Headers */ = {isa = PBXBuildFile; fileRef = 418FCBBF2706E4F800F96ECA /* PushEventInit.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1184                418FCBE72715A28F00F96ECA /* RTCRtpCodecCapability.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E0A7DC23BB63DB00561060 /* RTCRtpCodecCapability.h */; settings = {ATTRIBUTES = (Private, ); }; };
    11841185                4190F3A524A0B4EE00531C57 /* FrameRateMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 4190F3A3249D152800531C57 /* FrameRateMonitor.h */; settings = {ATTRIBUTES = (Private, ); }; };
    11851186                419242492127B93E00634FCF /* RealtimeOutgoingVideoSourceCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 419242472127B7CC00634FCF /* RealtimeOutgoingVideoSourceCocoa.mm */; };
     
    81568157                418FCBCC2706F43400F96ECA /* ServiceWorkerGlobalScopePushAPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerGlobalScopePushAPI.h; sourceTree = "<group>"; };
    81578158                418FCBCD2706F43400F96ECA /* ServiceWorkerGlobalScopePushAPI.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorkerGlobalScopePushAPI.cpp; sourceTree = "<group>"; };
     8159                418FCBE82715AA1900F96ECA /* JSMediaCapabilitiesCustom.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JSMediaCapabilitiesCustom.h; sourceTree = "<group>"; };
    81588160                4190F3A1249D152700531C57 /* FrameRateMonitor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FrameRateMonitor.cpp; sourceTree = "<group>"; };
    81598161                4190F3A3249D152800531C57 /* FrameRateMonitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FrameRateMonitor.h; sourceTree = "<group>"; };
     
    1503515037                CCC2B51115F613060048CDD6 /* DeviceController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeviceController.cpp; sourceTree = "<group>"; };
    1503615038                CCC2B51215F613060048CDD6 /* DeviceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceController.h; sourceTree = "<group>"; };
    15037                 CD0320152279F5BF00DD9F0B /* JSMediaCapabilitiesCustom.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JSMediaCapabilitiesCustom.h; sourceTree = "<group>"; };
    1503815039                CD063F801E23FA8900812BE3 /* InitDataRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InitDataRegistry.cpp; sourceTree = "<group>"; };
    1503915040                CD063F811E23FA8900812BE3 /* InitDataRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InitDataRegistry.h; sourceTree = "<group>"; };
     
    2324123242                                5868C7D52546E0B300BF9DF3 /* JSIntersectionObserverCustom.cpp */,
    2324223243                                77C13F042165658A002D9C5F /* JSIntersectionObserverEntryCustom.cpp */,
    23243                                 CD0320152279F5BF00DD9F0B /* JSMediaCapabilitiesCustom.h */,
     23244                                418FCBE82715AA1900F96ECA /* JSMediaCapabilitiesCustom.h */,
    2324423245                                AD726FE716D9F204003A4E6D /* JSMediaListCustom.h */,
    2324523246                                415CDAF61E6CE0D3004F11EE /* JSMediaStreamTrackCustom.cpp */,
     
    3517035171                                4114FE3225BEBD19009D9F20 /* RTCRtcpParameters.h in Headers */,
    3517135172                                412DE4B8219285C00075F3A7 /* RTCRtpCapabilities.h in Headers */,
     35173                                418FCBE72715A28F00F96ECA /* RTCRtpCodecCapability.h in Headers */,
    3517235174                                5E2C43631BCEE32B0001E2BC /* RTCRtpReceiver.h in Headers */,
    3517335175                                413C8B352552F27D00E65055 /* RTCRtpReceiverWithTransform.h in Headers */,
  • trunk/Source/WebCore/bindings/js/JSMediaCapabilitiesCustom.h

    r245636 r284085  
    3232ALWAYS_INLINE bool JSMediaCapabilitiesEncodingInfoIsEnabled()
    3333{
     34#if ENABLE(WEB_RTC)
     35    return true;
     36#else
    3437    return MediaEngineConfigurationFactory::hasEncodingConfigurationFactory();
     38#endif
    3539}
    3640
    3741ALWAYS_INLINE bool JSMediaCapabilitiesDecodingInfoIsEnabled()
    3842{
     43#if ENABLE(WEB_RTC)
     44    return true;
     45#else
    3946    return MediaEngineConfigurationFactory::hasDecodingConfigurationFactory();
     47#endif
    4048}
    4149
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm

    r283463 r284085  
    22802280
    22812281    return "EmptyString" if $name eq "";
     2282    return "WebRTC" if $name eq "webrtc";
    22822283    $name = join("", map { $codeGenerator->WK_ucfirst($_) } split("-", $name));
    22832284    $name = "_$name" if $name =~ /^\d/;
  • trunk/Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp

    r283237 r284085  
    6464        auto& videoConfiguration = configuration.video.value();
    6565        MediaEngineSupportParameters parameters { };
     66
     67        switch (configuration.type) {
     68        case MediaDecodingType::File:
     69            parameters.isMediaSource = false;
     70            break;
     71        case MediaDecodingType::MediaSource:
     72            parameters.isMediaSource = true;
     73            break;
     74        case MediaDecodingType::WebRTC:
     75            ASSERT_NOT_REACHED();
     76            return std::nullopt;
     77        }
     78
    6679        parameters.type = ContentType(videoConfiguration.contentType);
    67         parameters.isMediaSource = configuration.type == MediaDecodingType::MediaSource;
    6880        if (MediaPlayer::supportsType(parameters) != MediaPlayer::SupportsType::IsSupported)
    6981            return std::nullopt;
  • trunk/Source/WebCore/platform/mediacapabilities/MediaCapabilitiesLogging.h

    r270462 r284085  
    4242enum class HdrMetadataType : uint8_t;
    4343enum class TransferFunction : uint8_t;
    44 enum class MediaDecodingType : bool;
     44enum class MediaDecodingType : uint8_t;
    4545enum class MediaEncodingType : bool;
    4646
  • trunk/Source/WebCore/platform/mediacapabilities/MediaDecodingType.h

    r270462 r284085  
    2828namespace WebCore {
    2929
    30 enum class MediaDecodingType : bool {
     30enum class MediaDecodingType : uint8_t {
    3131    File,
    3232    MediaSource,
     33    WebRTC
    3334};
    3435
     
    4142        WebCore::MediaDecodingType,
    4243        WebCore::MediaDecodingType::File,
    43         WebCore::MediaDecodingType::MediaSource
     44        WebCore::MediaDecodingType::MediaSource,
     45        WebCore::MediaDecodingType::WebRTC
    4446    >;
    4547};
  • trunk/Source/WebCore/platform/mediacapabilities/MediaEncodingType.h

    r270462 r284085  
    3030enum class MediaEncodingType : bool {
    3131    Record,
    32     Transmission,
     32    WebRTC,
    3333};
    3434
     
    4141        WebCore::MediaEncodingType,
    4242        WebCore::MediaEncodingType::Record,
    43         WebCore::MediaEncodingType::Transmission
     43        WebCore::MediaEncodingType::WebRTC
    4444    >;
    4545};
  • trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp

    r282054 r284085  
    2727#include "LibWebRTCProvider.h"
    2828
     29#include "MediaCapabilitiesDecodingInfo.h"
     30#include "MediaCapabilitiesEncodingInfo.h"
     31#include "MediaDecodingConfiguration.h"
     32#include "MediaEncodingConfiguration.h"
     33
    2934#if USE(LIBWEBRTC)
     35#include "ContentType.h"
    3036#include "LibWebRTCAudioModule.h"
    3137#include "Logging.h"
    32 #include "RTCRtpCapabilities.h"
    3338#include <dlfcn.h>
    3439
     
    378383        callback(generator);
    379384    });
     385}
     386
     387void LibWebRTCProvider::setH265Support(bool value)
     388{
     389    m_supportsH265 = value;
     390    m_videoDecodingCapabilities = { };
     391    m_videoEncodingCapabilities = { };
     392}
     393
     394void LibWebRTCProvider::setVP9Support(bool supportsVP9Profile0, bool supportsVP9Profile2)
     395{
     396    m_supportsVP9Profile0 = supportsVP9Profile0;
     397    m_supportsVP9Profile2 = supportsVP9Profile2;
     398
     399    m_videoDecodingCapabilities = { };
     400    m_videoEncodingCapabilities = { };
     401}
     402
     403void LibWebRTCProvider::setVP9VTBSupport(bool value)
     404{
     405    m_supportsVP9VTB = value;
     406
     407    m_videoDecodingCapabilities = { };
     408    m_videoEncodingCapabilities = { };
    380409}
    381410
     
    432461        return { };
    433462
    434     auto* factory = this->factory();
    435     if (!factory)
    436         return { };
    437 
    438     return toRTCRtpCapabilities(factory->GetRtpReceiverCapabilities(*mediaType));
     463    switch (*mediaType) {
     464    case cricket::MediaType::MEDIA_TYPE_AUDIO:
     465        return audioDecodingCapabilities();
     466    case cricket::MediaType::MEDIA_TYPE_VIDEO:
     467        return videoDecodingCapabilities();
     468    case cricket::MediaType::MEDIA_TYPE_DATA:
     469        ASSERT_NOT_REACHED();
     470        return { };
     471    case cricket::MediaType::MEDIA_TYPE_UNSUPPORTED:
     472        ASSERT_NOT_REACHED();
     473        return { };
     474    }
     475}
     476
     477std::optional<RTCRtpCapabilities>& LibWebRTCProvider::audioDecodingCapabilities()
     478{
     479    if (!m_audioDecodingCapabilities) {
     480        if (auto* factory = this->factory())
     481            m_audioDecodingCapabilities = toRTCRtpCapabilities(factory->GetRtpReceiverCapabilities(cricket::MediaType::MEDIA_TYPE_AUDIO));
     482    }
     483    return m_audioDecodingCapabilities;
     484}
     485
     486std::optional<RTCRtpCapabilities>& LibWebRTCProvider::videoDecodingCapabilities()
     487{
     488    if (!m_videoDecodingCapabilities) {
     489        if (auto* factory = this->factory())
     490            m_videoDecodingCapabilities = toRTCRtpCapabilities(factory->GetRtpReceiverCapabilities(cricket::MediaType::MEDIA_TYPE_VIDEO));
     491    }
     492    return m_videoDecodingCapabilities;
    439493}
    440494
     
    445499        return { };
    446500
    447     auto* factory = this->factory();
    448     if (!factory)
    449         return { };
    450 
    451     return toRTCRtpCapabilities(factory->GetRtpSenderCapabilities(*mediaType));
    452 }
    453 
     501    switch (*mediaType) {
     502    case cricket::MediaType::MEDIA_TYPE_AUDIO:
     503        return audioEncodingCapabilities();
     504    case cricket::MediaType::MEDIA_TYPE_VIDEO:
     505        return videoEncodingCapabilities();
     506    case cricket::MediaType::MEDIA_TYPE_DATA:
     507        ASSERT_NOT_REACHED();
     508        return { };
     509    case cricket::MediaType::MEDIA_TYPE_UNSUPPORTED:
     510        ASSERT_NOT_REACHED();
     511        return { };
     512    }
     513}
     514
     515std::optional<RTCRtpCapabilities>& LibWebRTCProvider::audioEncodingCapabilities()
     516{
     517    if (!m_audioEncodingCapabilities) {
     518        if (auto* factory = this->factory())
     519            m_audioEncodingCapabilities = toRTCRtpCapabilities(factory->GetRtpSenderCapabilities(cricket::MediaType::MEDIA_TYPE_AUDIO));
     520    }
     521    return m_audioEncodingCapabilities;
     522}
     523
     524std::optional<RTCRtpCapabilities>& LibWebRTCProvider::videoEncodingCapabilities()
     525{
     526    if (!m_videoEncodingCapabilities) {
     527        if (auto* factory = this->factory())
     528            m_videoEncodingCapabilities = toRTCRtpCapabilities(factory->GetRtpSenderCapabilities(cricket::MediaType::MEDIA_TYPE_VIDEO));
     529    }
     530    return m_videoEncodingCapabilities;
     531}
     532
     533std::optional<RTCRtpCodecCapability> LibWebRTCProvider::codecCapability(const ContentType& contentType, const std::optional<RTCRtpCapabilities>& capabilities)
     534{
     535    if (!capabilities)
     536        return { };
     537
     538    auto containerType = contentType.containerType();
     539    for (auto& codec : capabilities->codecs) {
     540        if (equalIgnoringASCIICase(containerType, codec.mimeType))
     541            return codec;
     542    }
     543    return { };
     544}
    454545#endif // USE(LIBWEBRTC)
    455546
     547void LibWebRTCProvider::createDecodingConfiguration(MediaDecodingConfiguration&& configuration, DecodingConfigurationCallback&& callback)
     548{
     549    ASSERT(configuration.type == MediaDecodingType::WebRTC);
     550
     551#if USE(LIBWEBRTC)
     552    // FIXME: Validate additional parameters, in particular mime type parameters.
     553    MediaCapabilitiesDecodingInfo info { WTFMove(configuration) };
     554
     555    if (info.supportedConfiguration.video) {
     556        ContentType contentType { info.supportedConfiguration.video->contentType };
     557        auto codec = codecCapability(contentType, videoDecodingCapabilities());
     558        if (!codec) {
     559            callback({ });
     560            return;
     561        }
     562        info.supported = true;
     563#if PLATFORM(COCOA)
     564        auto containerType = contentType.containerType();
     565        if (containerType == "video/vp8")
     566            info.powerEfficient = false;
     567        else if (containerType == "video/vp9")
     568            info.powerEfficient = isSupportingVP9VTB();
     569        else
     570            info.powerEfficient = true;
     571        info.smooth = info.powerEfficient;
     572#endif
     573    }
     574    if (info.supportedConfiguration.audio) {
     575        ContentType contentType { info.supportedConfiguration.audio->contentType };
     576        auto codec = codecCapability(contentType, audioDecodingCapabilities());
     577        if (!codec) {
     578            callback({ });
     579            return;
     580        }
     581        info.supported = true;
     582    }
     583    callback(WTFMove(info));
     584#else
     585    UNUSED_PARAM(configuration);
     586    callback({ });
     587#endif // USE(LIBWEBRTC)
     588}
     589
     590void LibWebRTCProvider::createEncodingConfiguration(MediaEncodingConfiguration&& configuration, EncodingConfigurationCallback&& callback)
     591{
     592    ASSERT(configuration.type == MediaEncodingType::WebRTC);
     593
     594#if USE(LIBWEBRTC)
     595    // FIXME: Validate additional parameters, in particular mime type parameters.
     596    MediaCapabilitiesEncodingInfo info { WTFMove(configuration) };
     597
     598    if (info.supportedConfiguration.video) {
     599        ContentType contentType { info.supportedConfiguration.video->contentType };
     600        auto codec = codecCapability(contentType, videoEncodingCapabilities());
     601        if (!codec) {
     602            callback({ });
     603            return;
     604        }
     605        info.supported = true;
     606#if PLATFORM(COCOA)
     607        auto containerType = contentType.containerType();
     608        if (containerType == "video/vp8")
     609            info.powerEfficient = false;
     610        else if (containerType == "video/vp9")
     611            info.powerEfficient = isSupportingVP9VTB();
     612        else
     613            info.powerEfficient = true;
     614        info.smooth = info.powerEfficient;
     615#endif
     616    }
     617    if (info.supportedConfiguration.audio) {
     618        ContentType contentType { info.supportedConfiguration.audio->contentType };
     619        auto codec = codecCapability(contentType, audioEncodingCapabilities());
     620        if (!codec) {
     621            callback({ });
     622            return;
     623        }
     624        info.supported = true;
     625    }
     626    callback(WTFMove(info));
     627#else
     628    UNUSED_PARAM(configuration);
     629    callback({ });
     630#endif // USE(LIBWEBRTC)
     631}
     632
    456633} // namespace WebCore
  • trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h

    r282054 r284085  
    3737#if USE(LIBWEBRTC)
    3838
     39#include "RTCRtpCapabilities.h"
     40
    3941ALLOW_UNUSED_PARAMETERS_BEGIN
    4042ALLOW_DEPRECATED_DECLARATIONS_BEGIN
     
    6365namespace WebCore {
    6466
     67class ContentType;
    6568class LibWebRTCAudioModule;
     69struct MediaCapabilitiesDecodingInfo;
     70struct MediaCapabilitiesEncodingInfo;
     71struct MediaDecodingConfiguration;
     72struct MediaEncodingConfiguration;
    6673class RegistrableDomain;
    6774struct PeerConnectionFactoryAndThreads;
     
    8895    virtual RefPtr<RTCDataChannelRemoteHandlerConnection> createRTCDataChannelRemoteHandlerConnection() { return nullptr; }
    8996
     97    using DecodingConfigurationCallback = Function<void(MediaCapabilitiesDecodingInfo&&)>;
     98    using EncodingConfigurationCallback = Function<void(MediaCapabilitiesEncodingInfo&&)>;
     99    void createDecodingConfiguration(MediaDecodingConfiguration&&, DecodingConfigurationCallback&&);
     100    void createEncodingConfiguration(MediaEncodingConfiguration&&, EncodingConfigurationCallback&&);
     101
    90102#if USE(LIBWEBRTC)
    91103    virtual rtc::scoped_refptr<webrtc::PeerConnectionInterface> createPeerConnection(DocumentIdentifier, webrtc::PeerConnectionObserver&, rtc::PacketSocketFactory*, webrtc::PeerConnectionInterface::RTCConfiguration&&);
     
    106118    bool isEnumeratingAllNetworkInterfacesEnabled() const { return m_enableEnumeratingAllNetworkInterfaces; }
    107119
    108     void setH265Support(bool value) { m_supportsH265 = value; }
     120    void setH265Support(bool);
    109121    void setVP9Support(bool supportsVP9Profile0, bool supportsVP9Profile2);
    110     void setVP9VTBSupport(bool value) { m_supportsVP9VTB = value; }
     122    void setVP9VTBSupport(bool);
    111123    bool isSupportingH265() const { return m_supportsH265; }
    112124    bool isSupportingVP9Profile0() const { return m_supportsVP9Profile0; }
     
    150162
    151163    PeerConnectionFactoryAndThreads& getStaticFactoryAndThreads(bool useNetworkThreadWithSocketServer);
     164    std::optional<RTCRtpCapabilities>& audioDecodingCapabilities();
     165    std::optional<RTCRtpCapabilities>& videoDecodingCapabilities();
     166    std::optional<RTCRtpCapabilities>& audioEncodingCapabilities();
     167    std::optional<RTCRtpCapabilities>& videoEncodingCapabilities();
     168    std::optional<RTCRtpCodecCapability> codecCapability(const ContentType&, const std::optional<RTCRtpCapabilities>&);
    152169
    153170    bool m_enableEnumeratingAllNetworkInterfaces { false };
     
    163180    bool m_useDTLS10 { false };
    164181    bool m_supportsMDNS { false };
     182
     183    std::optional<RTCRtpCapabilities> m_audioDecodingCapabilities;
     184    std::optional<RTCRtpCapabilities> m_videoDecodingCapabilities;
     185    std::optional<RTCRtpCapabilities> m_audioEncodingCapabilities;
     186    std::optional<RTCRtpCapabilities> m_videoEncodingCapabilities;
    165187#endif
    166188};
    167189
    168 #if USE(LIBWEBRTC)
    169 inline void LibWebRTCProvider::setVP9Support(bool supportsVP9Profile0, bool supportsVP9Profile2)
    170 {
    171     m_supportsVP9Profile0 = supportsVP9Profile0;
    172     m_supportsVP9Profile2 = supportsVP9Profile2;
    173 }
    174 #endif
    175 
    176190} // namespace WebCore
  • trunk/Source/WebCore/platform/mock/MediaEngineConfigurationFactoryMock.cpp

    r278185 r284085  
    102102static bool canEncodeMedia(const MediaEncodingConfiguration& configuration)
    103103{
    104     // The mock implementation supports only local file playback.
    105     if (configuration.type == MediaEncodingType::Record)
     104    ASSERT(configuration.type == MediaEncodingType::Record);
     105    if (configuration.type != MediaEncodingType::Record)
    106106        return false;
    107107
Note: See TracChangeset for help on using the changeset viewer.