Commit 3737c14b authored by Florent Castelli's avatar Florent Castelli Committed by Commit Bot

Add headerExtensions to RTCRtpParameters

Bug: 803494
Change-Id: Ie8e7d6b4cf14be21cecc4e0b9bd6f808cef487c4
Reviewed-on: https://chromium-review.googlesource.com/1102436Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarHenrik Boström <hbos@chromium.org>
Commit-Queue: Florent Castelli <orphis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#570079}
parent 1629896a
...@@ -73,7 +73,11 @@ function verifySenderParameters(parameters, kind) { ...@@ -73,7 +73,11 @@ function verifySenderParameters(parameters, kind) {
assert_exists(codec, "payloadType", "payload type"); assert_exists(codec, "payloadType", "payload type");
} }
assert_not_exists(parameters, "headerExtensions", "unimplemented headerExtension"); assert_exists(parameters, "headerExtensions", "headerExtension");
for(let header of parameters.headerExtensions) {
assert_exists(header, "uri");
assert_exists(header, "id");
}
assert_greater_than(parameters.encodings.length, 0); assert_greater_than(parameters.encodings.length, 0);
for(let encoding of parameters.encodings) { for(let encoding of parameters.encodings) {
......
...@@ -23,8 +23,6 @@ PASS video setParameters() check for encodings removed ...@@ -23,8 +23,6 @@ PASS video setParameters() check for encodings removed
PASS video setParameters() check for encodings remove one PASS video setParameters() check for encodings remove one
PASS video setParameters() check for encodings add one PASS video setParameters() check for encodings add one
FAIL video setParameters() check for encodings.rid modification assert_unreached: Should have rejected: undefined Reached unreachable code FAIL video setParameters() check for encodings.rid modification assert_unreached: Should have rejected: undefined Reached unreachable code
PASS video setParameters() check for headerExtensions removed
FAIL video setParameters() check for headerExtensions created assert_unreached: Should have rejected: undefined Reached unreachable code
PASS video setParameters() check for headerExtensions remove one PASS video setParameters() check for headerExtensions remove one
PASS video setParameters() check for headerExtensions add one PASS video setParameters() check for headerExtensions add one
PASS video setParameters() check for headerExtensions.uri modification PASS video setParameters() check for headerExtensions.uri modification
...@@ -55,8 +53,6 @@ PASS audio setParameters() check for encodings removed ...@@ -55,8 +53,6 @@ PASS audio setParameters() check for encodings removed
PASS audio setParameters() check for encodings remove one PASS audio setParameters() check for encodings remove one
PASS audio setParameters() check for encodings add one PASS audio setParameters() check for encodings add one
FAIL audio setParameters() check for encodings.rid modification assert_unreached: Should have rejected: undefined Reached unreachable code FAIL audio setParameters() check for encodings.rid modification assert_unreached: Should have rejected: undefined Reached unreachable code
PASS audio setParameters() check for headerExtensions removed
FAIL audio setParameters() check for headerExtensions created assert_unreached: Should have rejected: undefined Reached unreachable code
PASS audio setParameters() check for headerExtensions remove one PASS audio setParameters() check for headerExtensions remove one
PASS audio setParameters() check for headerExtensions add one PASS audio setParameters() check for headerExtensions add one
PASS audio setParameters() check for headerExtensions.uri modification PASS audio setParameters() check for headerExtensions.uri modification
......
...@@ -81,7 +81,7 @@ promise_test(async (t) => { ...@@ -81,7 +81,7 @@ promise_test(async (t) => {
new DOMException( new DOMException(
"getParameters() needs to be called before setParameters().", "getParameters() needs to be called before setParameters().",
"InvalidStateError"), "InvalidStateError"),
videoSender.setParameters({ rtcp: {}})); videoSender.setParameters({ rtcp: {}, headerExtensions: []}));
}, 'setParameters() fails without getParameters()'); }, 'setParameters() fails without getParameters()');
/** /**
...@@ -183,21 +183,10 @@ var readOnlyParameters = [ ...@@ -183,21 +183,10 @@ var readOnlyParameters = [
name: "encodings.rid modification", name: "encodings.rid modification",
transform: (p) => { p.encodings[0].rid = "rid"; }, transform: (p) => { p.encodings[0].rid = "rid"; },
}, },
{
name: "headerExtensions removed",
transform: (p) => { delete p.headerExtensions; },
check: (p) => { return p.headerExtensions !== undefined; },
},
{
name: "headerExtensions created",
transform: (p) => { p.headerExtensions = []; },
check: (p) => { return p.headerExtensions === undefined; },
},
{ {
name: "headerExtensions remove one", name: "headerExtensions remove one",
transform: (p) => { p.headerExtensions.pop(); }, transform: (p) => { p.headerExtensions.pop(); },
check: (p) => { return p.headerExtensions !== undefined check: (p) => { return p.headerExtensions.length != 0; },
&& p.headerExtensions.length != 0; },
}, },
{ {
name: "headerExtensions add one", name: "headerExtensions add one",
...@@ -208,19 +197,16 @@ var readOnlyParameters = [ ...@@ -208,19 +197,16 @@ var readOnlyParameters = [
encrypted: false, encrypted: false,
}); });
}, },
check: (p) => { return p.headerExtensions !== undefined; },
}, },
{ {
name: "headerExtensions.uri modification", name: "headerExtensions.uri modification",
transform: (p) => { p.headerExtensions[0].uri = "uri"; }, transform: (p) => { p.headerExtensions[0].uri = "uri"; },
check: (p) => { return p.headerExtensions !== undefined check: (p) => { return p.headerExtensions.length != 0; },
&& p.headerExtensions.length != 0; },
}, },
{ {
name: "headerExtensions.uri removed", name: "headerExtensions.uri removed",
transform: (p) => { delete p.headerExtensions[0].uri; }, transform: (p) => { delete p.headerExtensions[0].uri; },
check: (p) => { return p.headerExtensions !== undefined check: (p) => { return p.headerExtensions.length != 0; },
&& p.headerExtensions.length != 0; },
}, },
{ {
name: "headerExtensions.id modification", name: "headerExtensions.id modification",
...@@ -228,14 +214,13 @@ var readOnlyParameters = [ ...@@ -228,14 +214,13 @@ var readOnlyParameters = [
p.headerExtensions[0].id = p.headerExtensions[0].id + 1; p.headerExtensions[0].id = p.headerExtensions[0].id + 1;
}, },
check: (p) => { check: (p) => {
return p.headerExtensions !== undefined && p.headerExtensions.length != 0; return p.headerExtensions.length != 0;
}, },
}, },
{ {
name: "headerExtensions.id removed", name: "headerExtensions.id removed",
transform: (p) => { delete p.headerExtensions[0].id; }, transform: (p) => { delete p.headerExtensions[0].id; },
check: (p) => { return p.headerExtensions !== undefined check: (p) => { return p.headerExtensions.length != 0; },
&& p.headerExtensions.length != 0; },
}, },
{ {
name: "headerExtensions.encrypted modification", name: "headerExtensions.encrypted modification",
...@@ -243,7 +228,7 @@ var readOnlyParameters = [ ...@@ -243,7 +228,7 @@ var readOnlyParameters = [
p.headerExtensions[0].encrypted = !p.headerExtensions[0].encrypted; p.headerExtensions[0].encrypted = !p.headerExtensions[0].encrypted;
}, },
check: (p) => { check: (p) => {
return p.headerExtensions !== undefined && p.headerExtensions.length != 0; return p.headerExtensions.length != 0;
}, },
}, },
{ {
...@@ -252,7 +237,7 @@ var readOnlyParameters = [ ...@@ -252,7 +237,7 @@ var readOnlyParameters = [
p.headerExtensions[0].encrypted = !p.headerExtensions[0].encrypted; p.headerExtensions[0].encrypted = !p.headerExtensions[0].encrypted;
}, },
check: (p) => { check: (p) => {
return p.headerExtensions !== undefined && p.headerExtensions.length != 0 return p.headerExtensions.length != 0
&& p.headerExtensions[0].encrypted !== undefined; && p.headerExtensions[0].encrypted !== undefined;
}, },
}, },
......
...@@ -582,6 +582,7 @@ modules_dictionary_idl_files = ...@@ -582,6 +582,7 @@ modules_dictionary_idl_files =
"peerconnection/rtc_rtcp_parameters.idl", "peerconnection/rtc_rtcp_parameters.idl",
"peerconnection/rtc_rtp_codec_parameters.idl", "peerconnection/rtc_rtp_codec_parameters.idl",
"peerconnection/rtc_rtp_encoding_parameters.idl", "peerconnection/rtc_rtp_encoding_parameters.idl",
"peerconnection/rtc_rtp_header_extension_parameters.idl",
"peerconnection/rtc_rtp_parameters.idl", "peerconnection/rtc_rtp_parameters.idl",
"peerconnection/rtc_session_description_init.idl", "peerconnection/rtc_session_description_init.idl",
"peerconnection/rtc_track_event_init.idl", "peerconnection/rtc_track_event_init.idl",
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// https://w3c.github.io/webrtc-pc/#rtcrtpheaderextensionparameters*
dictionary RTCRtpHeaderExtensionParameters {
DOMString uri;
unsigned short id;
boolean encrypted;
};
\ No newline at end of file
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
dictionary RTCRtpParameters { dictionary RTCRtpParameters {
DOMString transactionId; DOMString transactionId;
sequence<RTCRtpEncodingParameters> encodings; sequence<RTCRtpEncodingParameters> encodings;
required sequence<RTCRtpHeaderExtensionParameters> headerExtensions;
required RTCRtcpParameters rtcp; required RTCRtcpParameters rtcp;
sequence<RTCRtpCodecParameters> codecs; sequence<RTCRtpCodecParameters> codecs;
}; };
\ No newline at end of file
...@@ -97,6 +97,32 @@ bool HasInvalidModification(const RTCRtpParameters& parameters, ...@@ -97,6 +97,32 @@ bool HasInvalidModification(const RTCRtpParameters& parameters,
return true; return true;
} }
if (parameters.hasHeaderExtensions() != new_parameters.hasHeaderExtensions())
return true;
if (parameters.hasHeaderExtensions()) {
if (parameters.headerExtensions().size() !=
new_parameters.headerExtensions().size())
return true;
for (size_t i = 0; i < parameters.headerExtensions().size(); ++i) {
const auto& header_extension = parameters.headerExtensions()[i];
const auto& new_header_extension = new_parameters.headerExtensions()[i];
if (header_extension.hasUri() != new_header_extension.hasUri() ||
(header_extension.hasUri() &&
header_extension.uri() != new_header_extension.uri()) ||
header_extension.hasId() != new_header_extension.hasId() ||
(header_extension.hasId() &&
header_extension.id() != new_header_extension.id()) ||
header_extension.hasEncrypted() !=
new_header_extension.hasEncrypted() ||
(header_extension.hasEncrypted() &&
header_extension.encrypted() != new_header_extension.encrypted())) {
return true;
}
}
}
if (parameters.hasRtcp() != new_parameters.hasRtcp() || if (parameters.hasRtcp() != new_parameters.hasRtcp() ||
(parameters.hasRtcp() && (parameters.hasRtcp() &&
((parameters.rtcp().hasCname() != new_parameters.rtcp().hasCname() || ((parameters.rtcp().hasCname() != new_parameters.rtcp().hasCname() ||
...@@ -277,6 +303,17 @@ void RTCRtpSender::getParameters(RTCRtpParameters& parameters) { ...@@ -277,6 +303,17 @@ void RTCRtpSender::getParameters(RTCRtpParameters& parameters) {
} }
parameters.setEncodings(encodings); parameters.setEncodings(encodings);
HeapVector<RTCRtpHeaderExtensionParameters> headers;
headers.ReserveCapacity(webrtc_parameters->header_extensions.size());
for (const auto& web_header : webrtc_parameters->header_extensions) {
headers.emplace_back();
RTCRtpHeaderExtensionParameters& header = headers.back();
header.setUri(web_header.uri.c_str());
header.setId(web_header.id);
header.setEncrypted(web_header.encrypt);
}
parameters.setHeaderExtensions(headers);
HeapVector<RTCRtpCodecParameters> codecs; HeapVector<RTCRtpCodecParameters> codecs;
codecs.ReserveCapacity(webrtc_parameters->codecs.size()); codecs.ReserveCapacity(webrtc_parameters->codecs.size());
for (const auto& web_codec : webrtc_parameters->codecs) { for (const auto& web_codec : webrtc_parameters->codecs) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment