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) {
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);
for(let encoding of parameters.encodings) {
......
......@@ -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 add one
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 add one
PASS video setParameters() check for headerExtensions.uri modification
......@@ -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 add one
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 add one
PASS audio setParameters() check for headerExtensions.uri modification
......
......@@ -81,7 +81,7 @@ promise_test(async (t) => {
new DOMException(
"getParameters() needs to be called before setParameters().",
"InvalidStateError"),
videoSender.setParameters({ rtcp: {}}));
videoSender.setParameters({ rtcp: {}, headerExtensions: []}));
}, 'setParameters() fails without getParameters()');
/**
......@@ -183,21 +183,10 @@ var readOnlyParameters = [
name: "encodings.rid modification",
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",
transform: (p) => { p.headerExtensions.pop(); },
check: (p) => { return p.headerExtensions !== undefined
&& p.headerExtensions.length != 0; },
check: (p) => { return p.headerExtensions.length != 0; },
},
{
name: "headerExtensions add one",
......@@ -208,19 +197,16 @@ var readOnlyParameters = [
encrypted: false,
});
},
check: (p) => { return p.headerExtensions !== undefined; },
},
{
name: "headerExtensions.uri modification",
transform: (p) => { p.headerExtensions[0].uri = "uri"; },
check: (p) => { return p.headerExtensions !== undefined
&& p.headerExtensions.length != 0; },
check: (p) => { return p.headerExtensions.length != 0; },
},
{
name: "headerExtensions.uri removed",
transform: (p) => { delete p.headerExtensions[0].uri; },
check: (p) => { return p.headerExtensions !== undefined
&& p.headerExtensions.length != 0; },
check: (p) => { return p.headerExtensions.length != 0; },
},
{
name: "headerExtensions.id modification",
......@@ -228,14 +214,13 @@ var readOnlyParameters = [
p.headerExtensions[0].id = p.headerExtensions[0].id + 1;
},
check: (p) => {
return p.headerExtensions !== undefined && p.headerExtensions.length != 0;
return p.headerExtensions.length != 0;
},
},
{
name: "headerExtensions.id removed",
transform: (p) => { delete p.headerExtensions[0].id; },
check: (p) => { return p.headerExtensions !== undefined
&& p.headerExtensions.length != 0; },
check: (p) => { return p.headerExtensions.length != 0; },
},
{
name: "headerExtensions.encrypted modification",
......@@ -243,7 +228,7 @@ var readOnlyParameters = [
p.headerExtensions[0].encrypted = !p.headerExtensions[0].encrypted;
},
check: (p) => {
return p.headerExtensions !== undefined && p.headerExtensions.length != 0;
return p.headerExtensions.length != 0;
},
},
{
......@@ -252,7 +237,7 @@ var readOnlyParameters = [
p.headerExtensions[0].encrypted = !p.headerExtensions[0].encrypted;
},
check: (p) => {
return p.headerExtensions !== undefined && p.headerExtensions.length != 0
return p.headerExtensions.length != 0
&& p.headerExtensions[0].encrypted !== undefined;
},
},
......
......@@ -582,6 +582,7 @@ modules_dictionary_idl_files =
"peerconnection/rtc_rtcp_parameters.idl",
"peerconnection/rtc_rtp_codec_parameters.idl",
"peerconnection/rtc_rtp_encoding_parameters.idl",
"peerconnection/rtc_rtp_header_extension_parameters.idl",
"peerconnection/rtc_rtp_parameters.idl",
"peerconnection/rtc_session_description_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 @@
dictionary RTCRtpParameters {
DOMString transactionId;
sequence<RTCRtpEncodingParameters> encodings;
required sequence<RTCRtpHeaderExtensionParameters> headerExtensions;
required RTCRtcpParameters rtcp;
sequence<RTCRtpCodecParameters> codecs;
};
\ No newline at end of file
......@@ -97,6 +97,32 @@ bool HasInvalidModification(const RTCRtpParameters& parameters,
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() ||
(parameters.hasRtcp() &&
((parameters.rtcp().hasCname() != new_parameters.rtcp().hasCname() ||
......@@ -277,6 +303,17 @@ void RTCRtpSender::getParameters(RTCRtpParameters& parameters) {
}
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;
codecs.ReserveCapacity(webrtc_parameters->codecs.size());
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