Changeset 273550 in webkit


Ignore:
Timestamp:
Feb 26, 2021 4:05:33 AM (17 months ago)
Author:
youenn@apple.com
Message:

Add support for WebRTC priority
https://bugs.webkit.org/show_bug.cgi?id=222416

Reviewed by Eric Carlson.

LayoutTests/imported/w3c:

  • resources/import-expectations.json:
  • web-platform-tests/webrtc-priority/META.yml: Added.
  • web-platform-tests/webrtc-priority/RTCPeerConnection-ondatachannel-expected.txt: Added.
  • web-platform-tests/webrtc-priority/RTCPeerConnection-ondatachannel.html: Added.
  • web-platform-tests/webrtc-priority/RTCRtpParameters-encodings-expected.txt: Added.
  • web-platform-tests/webrtc-priority/RTCRtpParameters-encodings.html: Added.
  • web-platform-tests/webrtc-priority/w3c-import.log: Added.

Source/WebCore:

Implement https://w3c.github.io/webrtc-priority/ by piping priorities between binding and backend.

Tests: imported/w3c/web-platform-tests/webrtc-priority/RTCPeerConnection-ondatachannel.html

imported/w3c/web-platform-tests/webrtc-priority/RTCRtpParameters-encodings.html

  • Modules/mediastream/RTCDataChannel.h:
  • Modules/mediastream/RTCDataChannel.idl:
  • Modules/mediastream/RTCRtpEncodingParameters.h:
  • Modules/mediastream/RTCRtpEncodingParameters.idl:
  • Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:

(WebCore::LibWebRTCDataChannelHandler::fromRTCDataChannelInit):
(WebCore::LibWebRTCDataChannelHandler::channelEvent):
(WebCore::fromStdString): Deleted.

  • Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:

(WebCore::fromRTCPriorityType):
(WebCore::toRTCPriorityType):
(WebCore::toWebRTCBitRatePriority):
(WebCore::fromWebRTCBitRatePriority):
(WebCore::toRTCEncodingParameters):
(WebCore::fromRTCEncodingParameters):
(WebCore::updateRTCRtpSendParameters):

  • Modules/mediastream/libwebrtc/LibWebRTCUtils.h:
  • WebCore.xcodeproj/project.pbxproj:
  • platform/mediastream/RTCDataChannelHandler.h:
  • platform/mediastream/RTCPriorityType.h: Renamed from Source/WebCore/Modules/mediastream/RTCPriorityType.h.
Location:
trunk
Files:
7 added
12 edited
1 moved

Legend:

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

    r273478 r273550  
     12021-02-26  Youenn Fablet  <youenn@apple.com>
     2
     3        Add support for WebRTC priority
     4        https://bugs.webkit.org/show_bug.cgi?id=222416
     5
     6        Reviewed by Eric Carlson.
     7
     8        * resources/import-expectations.json:
     9        * web-platform-tests/webrtc-priority/META.yml: Added.
     10        * web-platform-tests/webrtc-priority/RTCPeerConnection-ondatachannel-expected.txt: Added.
     11        * web-platform-tests/webrtc-priority/RTCPeerConnection-ondatachannel.html: Added.
     12        * web-platform-tests/webrtc-priority/RTCRtpParameters-encodings-expected.txt: Added.
     13        * web-platform-tests/webrtc-priority/RTCRtpParameters-encodings.html: Added.
     14        * web-platform-tests/webrtc-priority/w3c-import.log: Added.
     15
    1162021-02-25  Antoine Quint  <graouts@webkit.org>
    217
  • trunk/LayoutTests/imported/w3c/resources/import-expectations.json

    r273243 r273550  
    431431    "web-platform-tests/webmessaging/": "import",
    432432    "web-platform-tests/webrtc": "import",
     433    "web-platform-tests/webrtc-priority": "import",
    433434    "web-platform-tests/webrtc/legacy": "skip",
    434435    "web-platform-tests/websockets": "import",
  • trunk/Source/WebCore/ChangeLog

    r273549 r273550  
     12021-02-26  Youenn Fablet  <youenn@apple.com>
     2
     3        Add support for WebRTC priority
     4        https://bugs.webkit.org/show_bug.cgi?id=222416
     5
     6        Reviewed by Eric Carlson.
     7
     8        Implement https://w3c.github.io/webrtc-priority/ by piping priorities between binding and backend.
     9
     10        Tests: imported/w3c/web-platform-tests/webrtc-priority/RTCPeerConnection-ondatachannel.html
     11               imported/w3c/web-platform-tests/webrtc-priority/RTCRtpParameters-encodings.html
     12
     13        * Modules/mediastream/RTCDataChannel.h:
     14        * Modules/mediastream/RTCDataChannel.idl:
     15        * Modules/mediastream/RTCRtpEncodingParameters.h:
     16        * Modules/mediastream/RTCRtpEncodingParameters.idl:
     17        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
     18        (WebCore::LibWebRTCDataChannelHandler::fromRTCDataChannelInit):
     19        (WebCore::LibWebRTCDataChannelHandler::channelEvent):
     20        (WebCore::fromStdString): Deleted.
     21        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
     22        (WebCore::fromRTCPriorityType):
     23        (WebCore::toRTCPriorityType):
     24        (WebCore::toWebRTCBitRatePriority):
     25        (WebCore::fromWebRTCBitRatePriority):
     26        (WebCore::toRTCEncodingParameters):
     27        (WebCore::fromRTCEncodingParameters):
     28        (WebCore::updateRTCRtpSendParameters):
     29        * Modules/mediastream/libwebrtc/LibWebRTCUtils.h:
     30        * WebCore.xcodeproj/project.pbxproj:
     31        * platform/mediastream/RTCDataChannelHandler.h:
     32        * platform/mediastream/RTCPriorityType.h: Renamed from Source/WebCore/Modules/mediastream/RTCPriorityType.h.
     33
    1342021-02-26  Imanol Fernandez  <ifernandez@igalia.com>
    235
  • trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.h

    r263655 r273550  
    5959    bool negotiated() const { return *m_options.negotiated; };
    6060    Optional<unsigned short> id() const { return m_options.id; };
     61    RTCPriorityType priority() const { return m_options.priority; };
    6162
    6263    String label() const { return m_label; }
  • trunk/Source/WebCore/Modules/mediastream/RTCDataChannel.idl

    r267813 r273550  
    4141    readonly attribute RTCDataChannelState readyState;
    4242    readonly attribute unsigned long bufferedAmount;
     43    readonly attribute RTCPriorityType priority;
    4344    attribute unsigned long bufferedAmountLowThreshold;
    4445
  • trunk/Source/WebCore/Modules/mediastream/RTCRtpEncodingParameters.h

    r239427 r273550  
    4242    Optional<RTCDtxStatus> dtx;
    4343    bool active { false};
    44     RTCPriorityType priority { RTCPriorityType::Medium };
     44    RTCPriorityType priority { RTCPriorityType::Low };
     45    Optional<RTCPriorityType> networkPriority;
    4546    unsigned long maxBitrate { 0 };
    4647    unsigned long maxFramerate { 0 };
  • trunk/Source/WebCore/Modules/mediastream/RTCRtpEncodingParameters.idl

    r271797 r273550  
    3535    boolean active = true;
    3636    RTCPriorityType priority;
     37    RTCPriorityType networkPriority;
    3738    unsigned long maxBitrate;
    3839    unsigned long maxFramerate;
  • trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp

    r263797 r273550  
    2929
    3030#include "EventNames.h"
     31#include "LibWebRTCUtils.h"
    3132#include "RTCDataChannel.h"
    3233#include "RTCDataChannelEvent.h"
     
    4950    if (options.id)
    5051        init.id = *options.id;
     52    init.priority = fromRTCPriorityType(options.priority);
    5153    return init;
    52 }
    53 
    54 static inline String fromStdString(const std::string& value)
    55 {
    56     return String::fromUTF8(value.data(), value.length());
    5754}
    5855
     
    6966    init.negotiated = dataChannel->negotiated();
    7067    init.id = dataChannel->id();
     68    init.priority = toRTCPriorityType(dataChannel->priority());
    7169
    7270    auto handler =  makeUnique<LibWebRTCDataChannelHandler>(WTFMove(dataChannel));
  • trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp

    r271936 r273550  
    4646namespace WebCore {
    4747
     48webrtc::Priority fromRTCPriorityType(RTCPriorityType priority)
     49{
     50    switch (priority) {
     51    case RTCPriorityType::VeryLow:
     52        return webrtc::Priority::kVeryLow;
     53    case RTCPriorityType::Low:
     54        return webrtc::Priority::kLow;
     55    case RTCPriorityType::Medium:
     56        return webrtc::Priority::kMedium;
     57    case RTCPriorityType::High:
     58        return webrtc::Priority::kHigh;
     59    }
     60}
     61
     62RTCPriorityType toRTCPriorityType(webrtc::Priority priority)
     63{
     64    switch (priority) {
     65    case webrtc::Priority::kVeryLow:
     66        return RTCPriorityType::VeryLow;
     67    case webrtc::Priority::kLow:
     68        return RTCPriorityType::Low;
     69    case webrtc::Priority::kMedium:
     70        return RTCPriorityType::Medium;
     71    case webrtc::Priority::kHigh:
     72        return RTCPriorityType::High;
     73    }
     74}
     75
     76static inline double toWebRTCBitRatePriority(RTCPriorityType priority)
     77{
     78    switch (priority) {
     79    case RTCPriorityType::VeryLow:
     80        return 0.5;
     81    case RTCPriorityType::Low:
     82        return 1;
     83    case RTCPriorityType::Medium:
     84        return 2;
     85    case RTCPriorityType::High:
     86        return 4;
     87    }
     88}
     89
     90static inline RTCPriorityType fromWebRTCBitRatePriority(double priority)
     91{
     92    if (priority < 0.7)
     93        return RTCPriorityType::VeryLow;
     94    if (priority < 1.5)
     95        return RTCPriorityType::Low;
     96    if (priority < 2.5)
     97        return RTCPriorityType::Medium;
     98    return RTCPriorityType::High;
     99}
     100
    48101static inline RTCRtpEncodingParameters toRTCEncodingParameters(const webrtc::RtpEncodingParameters& rtcParameters)
    49102{
     
    62115        parameters.scaleResolutionDownBy = *rtcParameters.scale_resolution_down_by;
    63116
     117    parameters.priority = fromWebRTCBitRatePriority(rtcParameters.bitrate_priority);
     118    parameters.networkPriority = toRTCPriorityType(rtcParameters.network_priority);
     119
    64120    return parameters;
    65121}
     
    81137        rtcParameters.scale_resolution_down_by = parameters.scaleResolutionDownBy;
    82138
     139    rtcParameters.bitrate_priority = toWebRTCBitRatePriority(parameters.priority);
     140    if (parameters.networkPriority)
     141        rtcParameters.network_priority = fromRTCPriorityType(*parameters.networkPriority);
    83142    return rtcParameters;
    84143}
     
    192251        if (parameters.encodings[i].scaleResolutionDownBy)
    193252            rtcParameters.encodings[i].scale_resolution_down_by = parameters.encodings[i].scaleResolutionDownBy;
     253        rtcParameters.encodings[i].bitrate_priority = toWebRTCBitRatePriority(parameters.encodings[i].priority);
     254        if (parameters.encodings[i].networkPriority)
     255            rtcParameters.encodings[i].network_priority = fromRTCPriorityType(*parameters.encodings[i].networkPriority);
    194256    }
    195257
  • trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.h

    r253966 r273550  
    3636class RTCError;
    3737
     38enum class Priority;
    3839enum class RTCErrorType;
    3940enum class RtpTransceiverDirection;
     
    4849struct RTCRtpTransceiverInit;
    4950
     51enum class RTCPriorityType;
    5052enum class RTCRtpTransceiverDirection;
    5153
     
    6264Exception toException(const webrtc::RTCError&);
    6365
     66RTCPriorityType toRTCPriorityType(webrtc::Priority);
     67webrtc::Priority fromRTCPriorityType(RTCPriorityType);
     68
     69
    6470inline String fromStdString(const std::string& value)
    6571{
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r273444 r273550  
    10611061                413C8B342552F27D00E65055 /* RTCRtpTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 413C8B2F2552F27B00E65055 /* RTCRtpTransform.h */; };
    10621062                413C8B352552F27D00E65055 /* RTCRtpReceiverWithTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 413C8B302552F27C00E65055 /* RTCRtpReceiverWithTransform.h */; };
     1063                413CC11D25E7D98E00D59C4B /* RTCPriorityType.h in Headers */ = {isa = PBXBuildFile; fileRef = 413CC11C25E7D98D00D59C4B /* RTCPriorityType.h */; };
    10631064                413CCD4A20DE034F0065A21A /* MockMediaDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 413CCD4820DE013C0065A21A /* MockMediaDevice.h */; settings = {ATTRIBUTES = (Private, ); }; };
    10641065                413E00791DB0E4F2002341D2 /* MemoryRelease.h in Headers */ = {isa = PBXBuildFile; fileRef = 413E00781DB0E4DE002341D2 /* MemoryRelease.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    76977698                413C8B2F2552F27B00E65055 /* RTCRtpTransform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCRtpTransform.h; sourceTree = "<group>"; };
    76987699                413C8B302552F27C00E65055 /* RTCRtpReceiverWithTransform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCRtpReceiverWithTransform.h; sourceTree = "<group>"; };
     7700                413CC11C25E7D98D00D59C4B /* RTCPriorityType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCPriorityType.h; sourceTree = "<group>"; };
    76997701                413CCD4820DE013C0065A21A /* MockMediaDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockMediaDevice.h; sourceTree = "<group>"; };
    77007702                413E00771DB0E4DE002341D2 /* MemoryRelease.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryRelease.cpp; sourceTree = "<group>"; };
     
    80178019                41FCB75A214866FD0038ADC6 /* RTCRtpHeaderExtensionParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RTCRtpHeaderExtensionParameters.h; sourceTree = "<group>"; };
    80188020                41FCB75B214866FD0038ADC6 /* RTCRtpFecParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RTCRtpFecParameters.h; sourceTree = "<group>"; };
    8019                 41FCB75C214866FE0038ADC6 /* RTCPriorityType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RTCPriorityType.h; sourceTree = "<group>"; };
    80208021                41FCB75D214866FE0038ADC6 /* RTCDegradationPreference.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RTCDegradationPreference.h; sourceTree = "<group>"; };
    80218022                41FCB75E214866FF0038ADC6 /* RTCDtxStatus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RTCDtxStatus.h; sourceTree = "<group>"; };
     
    1732417325                                07221B7617CEC32700848E51 /* RTCPeerConnectionIceEvent.idl */,
    1732517326                                41A48A9C1E83129100D2AC2D /* RTCPeerConnectionState.idl */,
    17326                                 41FCB75C214866FE0038ADC6 /* RTCPriorityType.h */,
    1732717327                                41E593FD214865A900D3CB61 /* RTCPriorityType.idl */,
    1732817328                                4114FE2F25BEBD18009D9F20 /* RTCRtcpParameters.h */,
     
    1747817478                                07221BAA17CF0AD400848E51 /* RTCPeerConnectionHandlerClient.h */,
    1747917479                                41A48A9D1E8312EB00D2AC2D /* RTCPeerConnectionState.h */,
     17480                                413CC11C25E7D98D00D59C4B /* RTCPriorityType.h */,
    1748017481                                412BA5FE218C651800365474 /* RTCPMuxPolicy.h */,
    1748117482                                412DE4B6219285BF0075F3A7 /* RTCRtpCapabilities.h */,
     
    3508835089                                B2227A590D00BF220071B782 /* SVGPathElement.h in Headers */,
    3508935090                                8476C9F011DF6A5800555B02 /* SVGPathParser.h in Headers */,
     35091                                413CC11D25E7D98E00D59C4B /* RTCPriorityType.h in Headers */,
    3509035092                                B2227A5B0D00BF220071B782 /* SVGPathSeg.h in Headers */,
    3509135093                                B2227A810D00BF220071B782 /* SVGPathSegList.h in Headers */,
  • trunk/Source/WebCore/platform/mediastream/RTCDataChannelHandler.h

    r263797 r273550  
    2828#if ENABLE(WEB_RTC)
    2929
     30#include "RTCPriorityType.h"
    3031#include <wtf/Optional.h>
    3132#include <wtf/text/WTFString.h>
     
    4041    Optional<bool> negotiated;
    4142    Optional<unsigned short> id;
     43    RTCPriorityType priority { RTCPriorityType::Low };
    4244};
    4345
Note: See TracChangeset for help on using the changeset viewer.