| Index: talk/media/webrtc/webrtcvideoengine2.cc
|
| diff --git a/talk/media/webrtc/webrtcvideoengine2.cc b/talk/media/webrtc/webrtcvideoengine2.cc
|
| index 2f0768771154eb182565bffc583eecf06faaa5c6..308b68b4574d52c5b8e865aaca118c27ea7d1dda 100644
|
| --- a/talk/media/webrtc/webrtcvideoengine2.cc
|
| +++ b/talk/media/webrtc/webrtcvideoengine2.cc
|
| @@ -243,20 +243,6 @@ static bool ValidateStreamParams(const StreamParams& sp) {
|
| return true;
|
| }
|
|
|
| -static std::string RtpExtensionsToString(
|
| - const std::vector<RtpHeaderExtension>& extensions) {
|
| - std::stringstream out;
|
| - out << '{';
|
| - for (size_t i = 0; i < extensions.size(); ++i) {
|
| - out << "{" << extensions[i].uri << ": " << extensions[i].id << "}";
|
| - if (i != extensions.size() - 1) {
|
| - out << ", ";
|
| - }
|
| - }
|
| - out << '}';
|
| - return out.str();
|
| -}
|
| -
|
| inline const webrtc::RtpExtension* FindHeaderExtension(
|
| const std::vector<webrtc::RtpExtension>& extensions,
|
| const std::string& name) {
|
| @@ -370,60 +356,6 @@ static bool FindFirstMatchingCodec(const std::vector<VideoCodec>& codecs,
|
| return false;
|
| }
|
|
|
| -static bool ValidateRtpHeaderExtensionIds(
|
| - const std::vector<RtpHeaderExtension>& extensions) {
|
| - std::set<int> extensions_used;
|
| - for (size_t i = 0; i < extensions.size(); ++i) {
|
| - if (extensions[i].id <= 0 || extensions[i].id >= 15 ||
|
| - !extensions_used.insert(extensions[i].id).second) {
|
| - LOG(LS_ERROR) << "RTP extensions are with incorrect or duplicate ids.";
|
| - return false;
|
| - }
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -static bool CompareRtpHeaderExtensionIds(
|
| - const webrtc::RtpExtension& extension1,
|
| - const webrtc::RtpExtension& extension2) {
|
| - // Sorting on ID is sufficient, more than one extension per ID is unsupported.
|
| - return extension1.id > extension2.id;
|
| -}
|
| -
|
| -static std::vector<webrtc::RtpExtension> FilterRtpExtensions(
|
| - const std::vector<RtpHeaderExtension>& extensions) {
|
| - std::vector<webrtc::RtpExtension> webrtc_extensions;
|
| - for (size_t i = 0; i < extensions.size(); ++i) {
|
| - // Unsupported extensions will be ignored.
|
| - if (webrtc::RtpExtension::IsSupportedForVideo(extensions[i].uri)) {
|
| - webrtc_extensions.push_back(webrtc::RtpExtension(
|
| - extensions[i].uri, extensions[i].id));
|
| - } else {
|
| - LOG(LS_WARNING) << "Unsupported RTP extension: " << extensions[i].uri;
|
| - }
|
| - }
|
| -
|
| - // Sort filtered headers to make sure that they can later be compared
|
| - // regardless of in which order they were entered.
|
| - std::sort(webrtc_extensions.begin(), webrtc_extensions.end(),
|
| - CompareRtpHeaderExtensionIds);
|
| - return webrtc_extensions;
|
| -}
|
| -
|
| -static bool RtpExtensionsHaveChanged(
|
| - const std::vector<webrtc::RtpExtension>& before,
|
| - const std::vector<webrtc::RtpExtension>& after) {
|
| - if (before.size() != after.size())
|
| - return true;
|
| - for (size_t i = 0; i < before.size(); ++i) {
|
| - if (before[i].id != after[i].id)
|
| - return true;
|
| - if (before[i].name != after[i].name)
|
| - return true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| std::vector<webrtc::VideoStream>
|
| WebRtcVideoChannel2::WebRtcVideoSendStream::CreateSimulcastVideoStreams(
|
| const VideoCodec& codec,
|
| @@ -856,6 +788,7 @@ bool WebRtcVideoChannel2::ReceiveCodecsHaveChanged(
|
| }
|
|
|
| bool WebRtcVideoChannel2::SetSendParameters(const VideoSendParameters& params) {
|
| + LOG(LS_INFO) << "SetSendParameters: " << params.ToString();
|
| // TODO(pbos): Refactor this to only recreate the send streams once
|
| // instead of 4 times.
|
| return (SetSendCodecs(params.codecs) &&
|
| @@ -865,6 +798,7 @@ bool WebRtcVideoChannel2::SetSendParameters(const VideoSendParameters& params) {
|
| }
|
|
|
| bool WebRtcVideoChannel2::SetRecvParameters(const VideoRecvParameters& params) {
|
| + LOG(LS_INFO) << "SetRecvParameters: " << params.ToString();
|
| // TODO(pbos): Refactor this to only recreate the recv streams once
|
| // instead of twice.
|
| return (SetRecvCodecs(params.codecs) &&
|
| @@ -1507,20 +1441,17 @@ bool WebRtcVideoChannel2::MuteStream(uint32_t ssrc, bool mute) {
|
| bool WebRtcVideoChannel2::SetRecvRtpHeaderExtensions(
|
| const std::vector<RtpHeaderExtension>& extensions) {
|
| TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetRecvRtpHeaderExtensions");
|
| - LOG(LS_INFO) << "SetRecvRtpHeaderExtensions: "
|
| - << RtpExtensionsToString(extensions);
|
| - if (!ValidateRtpHeaderExtensionIds(extensions))
|
| + if (!ValidateRtpExtensions(extensions)) {
|
| return false;
|
| -
|
| - std::vector<webrtc::RtpExtension> filtered_extensions =
|
| - FilterRtpExtensions(extensions);
|
| - if (!RtpExtensionsHaveChanged(recv_rtp_extensions_, filtered_extensions)) {
|
| + }
|
| + std::vector<webrtc::RtpExtension> filtered_extensions = FilterRtpExtensions(
|
| + extensions, webrtc::RtpExtension::IsSupportedForVideo, false);
|
| + if (recv_rtp_extensions_ == filtered_extensions) {
|
| LOG(LS_INFO) << "Ignoring call to SetRecvRtpHeaderExtensions because "
|
| "header extensions haven't changed.";
|
| return true;
|
| }
|
| -
|
| - recv_rtp_extensions_ = filtered_extensions;
|
| + recv_rtp_extensions_.swap(filtered_extensions);
|
|
|
| rtc::CritScope stream_lock(&stream_crit_);
|
| for (std::map<uint32_t, WebRtcVideoReceiveStream*>::iterator it =
|
| @@ -1534,21 +1465,17 @@ bool WebRtcVideoChannel2::SetRecvRtpHeaderExtensions(
|
| bool WebRtcVideoChannel2::SetSendRtpHeaderExtensions(
|
| const std::vector<RtpHeaderExtension>& extensions) {
|
| TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetSendRtpHeaderExtensions");
|
| - LOG(LS_INFO) << "SetSendRtpHeaderExtensions: "
|
| - << RtpExtensionsToString(extensions);
|
| - if (!ValidateRtpHeaderExtensionIds(extensions))
|
| + if (!ValidateRtpExtensions(extensions)) {
|
| return false;
|
| -
|
| - std::vector<webrtc::RtpExtension> filtered_extensions =
|
| - FilterRtpExtensions(FilterRedundantRtpExtensions(
|
| - extensions, kBweExtensionPriorities, kBweExtensionPrioritiesLength));
|
| - if (!RtpExtensionsHaveChanged(send_rtp_extensions_, filtered_extensions)) {
|
| - LOG(LS_INFO) << "Ignoring call to SetSendRtpHeaderExtensions because "
|
| + }
|
| + std::vector<webrtc::RtpExtension> filtered_extensions = FilterRtpExtensions(
|
| + extensions, webrtc::RtpExtension::IsSupportedForVideo, true);
|
| + if (send_rtp_extensions_ == filtered_extensions) {
|
| + LOG(LS_INFO) << "Ignoring call to SetRecvRtpHeaderExtensions because "
|
| "header extensions haven't changed.";
|
| return true;
|
| }
|
| -
|
| - send_rtp_extensions_ = filtered_extensions;
|
| + send_rtp_extensions_.swap(filtered_extensions);
|
|
|
| const webrtc::RtpExtension* cvo_extension = FindHeaderExtension(
|
| send_rtp_extensions_, kRtpVideoRotationHeaderExtension);
|
|
|