Change GetStreamBySsrc to not copy StreamParams.
This is something I stumbled upon while looking at string copying we do (in spades) and did a simple change to not be constantly copying things around needlessly. There's a lot more that can be done in these files of course so this is sort of a reminder for future code edits that it's possible to design interfaces/function in a way that's more performance aware and avoid forcing creation of copies, while still being very simple. Also, we can use lambdas now :)
BUG=
R=perkj@webrtc.org, pthatcher@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/41589004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8131 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/app/webrtc/mediastreamsignaling.cc b/talk/app/webrtc/mediastreamsignaling.cc
index c43cd6b..3c31121 100644
--- a/talk/app/webrtc/mediastreamsignaling.cc
+++ b/talk/app/webrtc/mediastreamsignaling.cc
@@ -594,9 +594,9 @@
TrackInfos::iterator track_it = current_tracks->begin();
while (track_it != current_tracks->end()) {
const TrackInfo& info = *track_it;
- cricket::StreamParams params;
- if (!cricket::GetStreamBySsrc(streams, info.ssrc, ¶ms) ||
- params.id != info.track_id) {
+ const cricket::StreamParams* params =
+ cricket::GetStreamBySsrc(streams, info.ssrc);
+ if (!params || params->id != info.track_id) {
OnRemoteTrackRemoved(info.stream_label, info.track_id, media_type);
track_it = current_tracks->erase(track_it);
} else {
@@ -781,9 +781,10 @@
TrackInfos::iterator track_it = current_tracks->begin();
while (track_it != current_tracks->end()) {
const TrackInfo& info = *track_it;
- cricket::StreamParams params;
- if (!cricket::GetStreamBySsrc(streams, info.ssrc, ¶ms) ||
- params.id != info.track_id || params.sync_label != info.stream_label) {
+ const cricket::StreamParams* params =
+ cricket::GetStreamBySsrc(streams, info.ssrc);
+ if (!params || params->id != info.track_id ||
+ params->sync_label != info.stream_label) {
OnLocalTrackRemoved(info.stream_label, info.track_id, info.ssrc,
media_type);
track_it = current_tracks->erase(track_it);
diff --git a/talk/app/webrtc/webrtcsession.cc b/talk/app/webrtc/webrtcsession.cc
index 81e6c0f..54018f2 100644
--- a/talk/app/webrtc/webrtcsession.cc
+++ b/talk/app/webrtc/webrtcsession.cc
@@ -209,12 +209,13 @@
const cricket::MediaContentDescription* audio_content =
static_cast<const cricket::MediaContentDescription*>(
audio_info->description);
- cricket::StreamParams stream;
- if (!cricket::GetStreamByIds(audio_content->streams(), "", track_id,
- &stream)) {
+ const cricket::StreamParams* stream =
+ cricket::GetStreamByIds(audio_content->streams(), "", track_id);
+ if (!stream) {
return false;
}
- *ssrc = stream.first_ssrc();
+
+ *ssrc = stream->first_ssrc();
return true;
}
@@ -222,7 +223,6 @@
uint32 ssrc, std::string* track_id) {
ASSERT(track_id != NULL);
- cricket::StreamParams stream_out;
const cricket::ContentInfo* audio_info =
cricket::GetFirstAudioContent(session_description);
if (audio_info) {
@@ -230,8 +230,10 @@
static_cast<const cricket::MediaContentDescription*>(
audio_info->description);
- if (cricket::GetStreamBySsrc(audio_content->streams(), ssrc, &stream_out)) {
- *track_id = stream_out.id;
+ const auto* found =
+ cricket::GetStreamBySsrc(audio_content->streams(), ssrc);
+ if (found) {
+ *track_id = found->id;
return true;
}
}
@@ -243,8 +245,10 @@
static_cast<const cricket::MediaContentDescription*>(
video_info->description);
- if (cricket::GetStreamBySsrc(video_content->streams(), ssrc, &stream_out)) {
- *track_id = stream_out.id;
+ const auto* found =
+ cricket::GetStreamBySsrc(video_content->streams(), ssrc);
+ if (found) {
+ *track_id = found->id;
return true;
}
}
diff --git a/talk/media/base/fakemediaengine.h b/talk/media/base/fakemediaengine.h
index c5de323..391ec37 100644
--- a/talk/media/base/fakemediaengine.h
+++ b/talk/media/base/fakemediaengine.h
@@ -160,10 +160,10 @@
return receive_streams_;
}
bool HasRecvStream(uint32 ssrc) const {
- return GetStreamBySsrc(receive_streams_, ssrc, NULL);
+ return GetStreamBySsrc(receive_streams_, ssrc) != nullptr;
}
bool HasSendStream(uint32 ssrc) const {
- return GetStreamBySsrc(send_streams_, ssrc, NULL);
+ return GetStreamBySsrc(send_streams_, ssrc) != nullptr;
}
// TODO(perkj): This is to support legacy unit test that only check one
// sending stream.
diff --git a/talk/media/base/rtpdataengine.cc b/talk/media/base/rtpdataengine.cc
index 0acc43a..24b6e84 100644
--- a/talk/media/base/rtpdataengine.cc
+++ b/talk/media/base/rtpdataengine.cc
@@ -174,8 +174,7 @@
return false;
}
- StreamParams found_stream;
- if (GetStreamBySsrc(send_streams_, stream.first_ssrc(), &found_stream)) {
+ if (GetStreamBySsrc(send_streams_, stream.first_ssrc())) {
LOG(LS_WARNING) << "Not adding data send stream '" << stream.id
<< "' with ssrc=" << stream.first_ssrc()
<< " because stream already exists.";
@@ -195,8 +194,7 @@
}
bool RtpDataMediaChannel::RemoveSendStream(uint32 ssrc) {
- StreamParams found_stream;
- if (!GetStreamBySsrc(send_streams_, ssrc, &found_stream)) {
+ if (!GetStreamBySsrc(send_streams_, ssrc)) {
return false;
}
@@ -211,8 +209,7 @@
return false;
}
- StreamParams found_stream;
- if (GetStreamBySsrc(recv_streams_, stream.first_ssrc(), &found_stream)) {
+ if (GetStreamBySsrc(recv_streams_, stream.first_ssrc())) {
LOG(LS_WARNING) << "Not adding data recv stream '" << stream.id
<< "' with ssrc=" << stream.first_ssrc()
<< " because stream already exists.";
@@ -269,13 +266,13 @@
return;
}
- StreamParams found_stream;
- if (!GetStreamBySsrc(recv_streams_, header.ssrc, &found_stream)) {
+ if (!GetStreamBySsrc(recv_streams_, header.ssrc)) {
LOG(LS_WARNING) << "Received packet for unknown ssrc: " << header.ssrc;
return;
}
// Uncomment this for easy debugging.
+ // const auto* found_stream = GetStreamBySsrc(recv_streams_, header.ssrc);
// LOG(LS_INFO) << "Received packet"
// << " groupid=" << found_stream.groupid
// << ", ssrc=" << header.ssrc
@@ -318,8 +315,9 @@
return false;
}
- StreamParams found_stream;
- if (!GetStreamBySsrc(send_streams_, params.ssrc, &found_stream)) {
+ const StreamParams* found_stream =
+ GetStreamBySsrc(send_streams_, params.ssrc);
+ if (!found_stream) {
LOG(LS_WARNING) << "Not sending data because ssrc is unknown: "
<< params.ssrc;
return false;
@@ -363,7 +361,7 @@
packet.AppendData(payload.data(), payload.length());
LOG(LS_VERBOSE) << "Sent RTP data packet: "
- << " stream=" << found_stream.id
+ << " stream=" << found_stream->id
<< " ssrc=" << header.ssrc
<< ", seqnum=" << header.seq_num
<< ", timestamp=" << header.timestamp
diff --git a/talk/media/base/streamparams.cc b/talk/media/base/streamparams.cc
index e3dc57d..782c31e 100644
--- a/talk/media/base/streamparams.cc
+++ b/talk/media/base/streamparams.cc
@@ -30,23 +30,28 @@
#include <list>
#include <sstream>
+namespace cricket {
namespace {
-
// NOTE: There is no check here for duplicate streams, so check before
// adding.
-void AddStream(std::vector<cricket::StreamParams>* streams,
- const cricket::StreamParams& stream) {
+void AddStream(std::vector<StreamParams>* streams, const StreamParams& stream) {
streams->push_back(stream);
}
-
}
-namespace cricket {
-
const char kFecSsrcGroupSemantics[] = "FEC";
const char kFidSsrcGroupSemantics[] = "FID";
const char kSimSsrcGroupSemantics[] = "SIM";
+bool GetStream(const StreamParamsVec& streams,
+ const StreamSelector& selector,
+ StreamParams* stream_out) {
+ const StreamParams* found = GetStream(streams, selector);
+ if (found && stream_out)
+ *stream_out = *found;
+ return found != nullptr;
+}
+
bool MediaStreams::GetAudioStream(
const StreamSelector& selector, StreamParams* stream) {
return GetStream(audio_, selector, stream);
@@ -208,58 +213,6 @@
return false;
}
-bool GetStream(const StreamParamsVec& streams,
- const StreamSelector& selector,
- StreamParams* stream_out) {
- for (StreamParamsVec::const_iterator stream = streams.begin();
- stream != streams.end(); ++stream) {
- if (selector.Matches(*stream)) {
- if (stream_out != NULL) {
- *stream_out = *stream;
- }
- return true;
- }
- }
- return false;
-}
-
-bool GetStreamBySsrc(const StreamParamsVec& streams, uint32 ssrc,
- StreamParams* stream_out) {
- return GetStream(streams, StreamSelector(ssrc), stream_out);
-}
-
-bool GetStreamByIds(const StreamParamsVec& streams,
- const std::string& groupid,
- const std::string& id,
- StreamParams* stream_out) {
- return GetStream(streams, StreamSelector(groupid, id), stream_out);
-}
-
-bool RemoveStream(StreamParamsVec* streams,
- const StreamSelector& selector) {
- bool ret = false;
- for (StreamParamsVec::iterator stream = streams->begin();
- stream != streams->end(); ) {
- if (selector.Matches(*stream)) {
- stream = streams->erase(stream);
- ret = true;
- } else {
- ++stream;
- }
- }
- return ret;
-}
-
-bool RemoveStreamBySsrc(StreamParamsVec* streams, uint32 ssrc) {
- return RemoveStream(streams, StreamSelector(ssrc));
-}
-
-bool RemoveStreamByIds(StreamParamsVec* streams,
- const std::string& groupid,
- const std::string& id) {
- return RemoveStream(streams, StreamSelector(groupid, id));
-}
-
bool IsOneSsrcStream(const StreamParams& sp) {
if (sp.ssrcs.size() == 1 && sp.ssrc_groups.empty()) {
return true;
diff --git a/talk/media/base/streamparams.h b/talk/media/base/streamparams.h
index 9bb2289..6e24fa3 100644
--- a/talk/media/base/streamparams.h
+++ b/talk/media/base/streamparams.h
@@ -274,25 +274,82 @@
StaticVideoViews static_video_views;
};
-// Finds the stream in streams. Returns true if found.
+template <class Condition>
+const StreamParams* GetStream(const StreamParamsVec& streams,
+ Condition condition) {
+ StreamParamsVec::const_iterator found =
+ std::find_if(streams.begin(), streams.end(), condition);
+ return found == streams.end() ? nullptr : &(*found);
+}
+
+inline const StreamParams* GetStreamBySsrc(const StreamParamsVec& streams,
+ uint32 ssrc) {
+ return GetStream(streams,
+ [&ssrc](const StreamParams& sp) { return sp.has_ssrc(ssrc); });
+}
+
+inline const StreamParams* GetStreamByIds(const StreamParamsVec& streams,
+ const std::string& groupid,
+ const std::string& id) {
+ return GetStream(streams,
+ [&groupid, &id](const StreamParams& sp) {
+ return sp.groupid == groupid && sp.id == id;
+ });
+}
+
+inline const StreamParams* GetStream(const StreamParamsVec& streams,
+ const StreamSelector& selector) {
+ return GetStream(streams,
+ [&selector](const StreamParams& sp) { return selector.Matches(sp); });
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// Deprecated methods that will be removed one of these days.
+// Please use the methods with the same name above.
bool GetStream(const StreamParamsVec& streams,
const StreamSelector& selector,
StreamParams* stream_out);
-bool GetStreamBySsrc(const StreamParamsVec& streams, uint32 ssrc,
- StreamParams* stream_out);
-bool GetStreamByIds(const StreamParamsVec& streams,
- const std::string& groupid,
- const std::string& id,
- StreamParams* stream_out);
+inline bool GetStreamBySsrc(const StreamParamsVec& streams, uint32 ssrc,
+ StreamParams* stream_out) {
+ return GetStream(streams, StreamSelector(ssrc), stream_out);
+}
+inline bool GetStreamByIds(const StreamParamsVec& streams,
+ const std::string& groupid,
+ const std::string& id,
+ StreamParams* stream_out) {
+ return GetStream(streams, StreamSelector(groupid, id), stream_out);
+}
+// End deprecated methods.
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Condition>
+bool RemoveStream(StreamParamsVec* streams, Condition condition) {
+ auto iter(std::remove_if(streams->begin(), streams->end(), condition));
+ if (iter == streams->end())
+ return false;
+ streams->erase(iter, streams->end());
+ return true;
+}
// Removes the stream from streams. Returns true if a stream is
// found and removed.
-bool RemoveStream(StreamParamsVec* streams,
- const StreamSelector& selector);
-bool RemoveStreamBySsrc(StreamParamsVec* streams, uint32 ssrc);
-bool RemoveStreamByIds(StreamParamsVec* streams,
- const std::string& groupid,
- const std::string& id);
+inline bool RemoveStream(StreamParamsVec* streams,
+ const StreamSelector& selector) {
+ return RemoveStream(streams,
+ [&selector](const StreamParams& sp) { return selector.Matches(sp); });
+}
+inline bool RemoveStreamBySsrc(StreamParamsVec* streams, uint32 ssrc) {
+ return RemoveStream(streams,
+ [&ssrc](const StreamParams& sp) { return sp.has_ssrc(ssrc); });
+}
+inline bool RemoveStreamByIds(StreamParamsVec* streams,
+ const std::string& groupid,
+ const std::string& id) {
+ return RemoveStream(streams,
+ [&groupid, &id](const StreamParams& sp) {
+ return sp.groupid == groupid && sp.id == id;
+ });
+}
// Checks if |sp| defines parameters for a single primary stream. There may
// be an RTX stream associated with the primary stream. Leaving as non-static so
diff --git a/talk/session/media/bundlefilter.cc b/talk/session/media/bundlefilter.cc
index 1d2a031..cd02a19 100755
--- a/talk/session/media/bundlefilter.cc
+++ b/talk/session/media/bundlefilter.cc
@@ -84,9 +84,9 @@
}
bool BundleFilter::AddStream(const StreamParams& stream) {
- if (GetStreamBySsrc(streams_, stream.first_ssrc(), NULL)) {
- LOG(LS_WARNING) << "Stream already added to filter";
- return false;
+ if (GetStreamBySsrc(streams_, stream.first_ssrc())) {
+ LOG(LS_WARNING) << "Stream already added to filter";
+ return false;
}
streams_.push_back(stream);
return true;
@@ -101,10 +101,7 @@
}
bool BundleFilter::FindStream(uint32 ssrc) const {
- if (ssrc == 0) {
- return false;
- }
- return (GetStreamBySsrc(streams_, ssrc, NULL));
+ return ssrc == 0 ? false : GetStreamBySsrc(streams_, ssrc) != nullptr;
}
bool BundleFilter::FindPayloadType(int pl_type) const {
diff --git a/talk/session/media/channel.cc b/talk/session/media/channel.cc
index c31fe45..dbcdbb0 100644
--- a/talk/session/media/channel.cc
+++ b/talk/session/media/channel.cc
@@ -1030,10 +1030,9 @@
if (action == CA_UPDATE) {
for (StreamParamsVec::const_iterator it = streams.begin();
it != streams.end(); ++it) {
- StreamParams existing_stream;
- bool stream_exist = GetStreamByIds(local_streams_, it->groupid,
- it->id, &existing_stream);
- if (!stream_exist && it->has_ssrcs()) {
+ const StreamParams* existing_stream =
+ GetStreamByIds(local_streams_, it->groupid, it->id);
+ if (!existing_stream && it->has_ssrcs()) {
if (media_channel()->AddSendStream(*it)) {
local_streams_.push_back(*it);
LOG(LS_INFO) << "Add send stream ssrc: " << it->first_ssrc();
@@ -1043,15 +1042,15 @@
SafeSetError(desc.str(), error_desc);
return false;
}
- } else if (stream_exist && !it->has_ssrcs()) {
- if (!media_channel()->RemoveSendStream(existing_stream.first_ssrc())) {
+ } else if (existing_stream && !it->has_ssrcs()) {
+ if (!media_channel()->RemoveSendStream(existing_stream->first_ssrc())) {
std::ostringstream desc;
desc << "Failed to remove send stream with ssrc "
<< it->first_ssrc() << ".";
SafeSetError(desc.str(), error_desc);
return false;
}
- RemoveStreamBySsrc(&local_streams_, existing_stream.first_ssrc());
+ RemoveStreamBySsrc(&local_streams_, existing_stream->first_ssrc());
} else {
LOG(LS_WARNING) << "Ignore unsupported stream update";
}
@@ -1064,7 +1063,7 @@
bool ret = true;
for (StreamParamsVec::const_iterator it = local_streams_.begin();
it != local_streams_.end(); ++it) {
- if (!GetStreamBySsrc(streams, it->first_ssrc(), NULL)) {
+ if (!GetStreamBySsrc(streams, it->first_ssrc())) {
if (!media_channel()->RemoveSendStream(it->first_ssrc())) {
std::ostringstream desc;
desc << "Failed to remove send stream with ssrc "
@@ -1077,7 +1076,7 @@
// Check for new streams.
for (StreamParamsVec::const_iterator it = streams.begin();
it != streams.end(); ++it) {
- if (!GetStreamBySsrc(local_streams_, it->first_ssrc(), NULL)) {
+ if (!GetStreamBySsrc(local_streams_, it->first_ssrc())) {
if (media_channel()->AddSendStream(*it)) {
LOG(LS_INFO) << "Add send ssrc: " << it->ssrcs[0];
} else {
@@ -1104,10 +1103,9 @@
if (action == CA_UPDATE) {
for (StreamParamsVec::const_iterator it = streams.begin();
it != streams.end(); ++it) {
- StreamParams existing_stream;
- bool stream_exists = GetStreamByIds(remote_streams_, it->groupid,
- it->id, &existing_stream);
- if (!stream_exists && it->has_ssrcs()) {
+ const StreamParams* existing_stream =
+ GetStreamByIds(remote_streams_, it->groupid, it->id);
+ if (!existing_stream && it->has_ssrcs()) {
if (AddRecvStream_w(*it)) {
remote_streams_.push_back(*it);
LOG(LS_INFO) << "Add remote stream ssrc: " << it->first_ssrc();
@@ -1117,19 +1115,18 @@
SafeSetError(desc.str(), error_desc);
return false;
}
- } else if (stream_exists && !it->has_ssrcs()) {
- if (!RemoveRecvStream_w(existing_stream.first_ssrc())) {
+ } else if (existing_stream && !it->has_ssrcs()) {
+ if (!RemoveRecvStream_w(existing_stream->first_ssrc())) {
std::ostringstream desc;
desc << "Failed to remove remote stream with ssrc "
<< it->first_ssrc() << ".";
SafeSetError(desc.str(), error_desc);
return false;
}
- RemoveStreamBySsrc(&remote_streams_, existing_stream.first_ssrc());
+ RemoveStreamBySsrc(&remote_streams_, existing_stream->first_ssrc());
} else {
LOG(LS_WARNING) << "Ignore unsupported stream update."
- << " Stream exists? " << stream_exists
- << " existing stream = " << existing_stream.ToString()
+ << " Stream exists? " << (existing_stream != nullptr)
<< " new stream = " << it->ToString();
}
}
@@ -1141,7 +1138,7 @@
bool ret = true;
for (StreamParamsVec::const_iterator it = remote_streams_.begin();
it != remote_streams_.end(); ++it) {
- if (!GetStreamBySsrc(streams, it->first_ssrc(), NULL)) {
+ if (!GetStreamBySsrc(streams, it->first_ssrc())) {
if (!RemoveRecvStream_w(it->first_ssrc())) {
std::ostringstream desc;
desc << "Failed to remove remote stream with ssrc "
@@ -1154,7 +1151,7 @@
// Check for new streams.
for (StreamParamsVec::const_iterator it = streams.begin();
it != streams.end(); ++it) {
- if (!GetStreamBySsrc(remote_streams_, it->first_ssrc(), NULL)) {
+ if (!GetStreamBySsrc(remote_streams_, it->first_ssrc())) {
if (AddRecvStream_w(*it)) {
LOG(LS_INFO) << "Add remote ssrc: " << it->ssrcs[0];
} else {
@@ -1923,7 +1920,7 @@
// Check if the view request has invalid streams.
for (StaticVideoViews::const_iterator it = request.static_video_views.begin();
it != request.static_video_views.end(); ++it) {
- if (!GetStream(local_streams(), it->selector, NULL)) {
+ if (!GetStream(local_streams(), it->selector)) {
LOG(LS_WARNING) << "View request for ("
<< it->selector.ssrc << ", '"
<< it->selector.groupid << "', '"
diff --git a/talk/session/media/mediasession.cc b/talk/session/media/mediasession.cc
index 4f7d4b2..41a5e1d 100644
--- a/talk/session/media/mediasession.cc
+++ b/talk/session/media/mediasession.cc
@@ -222,12 +222,11 @@
if (synch_label != stream_it->sync_label)
continue;
- StreamParams param;
// groupid is empty for StreamParams generated using
// MediaSessionDescriptionFactory.
- if (GetStreamByIds(params_vec, "", stream_it->id,
- ¶m)) {
- *cname = param.cname;
+ const StreamParams* param = GetStreamByIds(params_vec, "", stream_it->id);
+ if (param) {
+ *cname = param->cname;
return true;
}
}
@@ -254,7 +253,7 @@
uint32 candidate;
do {
candidate = rtc::CreateRandomNonZeroId();
- } while (GetStreamBySsrc(params_vec, candidate, NULL) ||
+ } while (GetStreamBySsrc(params_vec, candidate) ||
std::count(ssrcs->begin(), ssrcs->end(), candidate) > 0);
ssrcs->push_back(candidate);
}
@@ -270,7 +269,7 @@
}
while (true) {
uint32 candidate = rtc::CreateRandomNonZeroId() % kMaxSctpSid;
- if (!GetStreamBySsrc(params_vec, candidate, NULL)) {
+ if (!GetStreamBySsrc(params_vec, candidate)) {
*sid = candidate;
return true;
}
@@ -462,11 +461,11 @@
if (stream_it->type != media_type)
continue; // Wrong media type.
- StreamParams param;
+ const StreamParams* param =
+ GetStreamByIds(*current_streams, "", stream_it->id);
// groupid is empty for StreamParams generated using
// MediaSessionDescriptionFactory.
- if (!GetStreamByIds(*current_streams, "", stream_it->id,
- ¶m)) {
+ if (!param) {
// This is a new stream.
// Get a CNAME. Either new or same as one of the other synched streams.
std::string cname;
@@ -506,7 +505,7 @@
// This is necessary so that we can use the CNAME for other media types.
current_streams->push_back(stream_param);
} else {
- content_description->AddStream(param);
+ content_description->AddStream(*param);
}
}
return true;
diff --git a/talk/session/media/mediasession.h b/talk/session/media/mediasession.h
index 462ddd2..bf3bb72 100644
--- a/talk/session/media/mediasession.h
+++ b/talk/session/media/mediasession.h
@@ -544,13 +544,6 @@
const SessionDescription* sdesc);
const DataContentDescription* GetFirstDataContentDescription(
const SessionDescription* sdesc);
-bool GetStreamBySsrc(
- const SessionDescription* sdesc, MediaType media_type,
- uint32 ssrc, StreamParams* stream_out);
-bool GetStreamByIds(
- const SessionDescription* sdesc, MediaType media_type,
- const std::string& groupid, const std::string& id,
- StreamParams* stream_out);
// Functions for translating media candidate names.
diff --git a/webrtc/libjingle/examples/call/callclient.cc b/webrtc/libjingle/examples/call/callclient.cc
index 6005fc8..b2c5c94 100644
--- a/webrtc/libjingle/examples/call/callclient.cc
+++ b/webrtc/libjingle/examples/call/callclient.cc
@@ -771,16 +771,16 @@
return;
}
- cricket::StreamParams stream;
- if (!cricket::GetStreamByIds(
- data->streams(), "", streamid, &stream)) {
+ const cricket::StreamParams* stream =
+ cricket::GetStreamByIds(data->streams(), "", streamid)
+ if (!stream) {
LOG(LS_WARNING) << "Could not send data: no such stream: "
<< streamid << ".";
return;
}
cricket::SendDataParams params;
- params.ssrc = stream.first_ssrc();
+ params.ssrc = stream->first_ssrc();
rtc::Buffer payload(text.data(), text.length());
cricket::SendDataResult result;
bool sent = call_->SendData(session, params, payload, &result);
@@ -862,15 +862,16 @@
if (!session)
return;
- cricket::StreamParams stream;
const std::vector<cricket::StreamParams>* data_streams =
call_->GetDataRecvStreams(session);
+ const cricket::StreamParams* stream =
+ data_streams ? GetStreamBySsrc(*data_streams, params.ssrc) : nullptr;
std::string text(payload.data(), payload.length());
- if (data_streams && GetStreamBySsrc(*data_streams, params.ssrc, &stream)) {
+ if (stream) {
console_->PrintLine(
"Received data from '%s' on stream '%s' (ssrc=%u): %s",
- stream.groupid.c_str(), stream.id.c_str(),
- params.ssrc, text.c_str());
+ stream->groupid.c_str(), stream->id.c_str(),
+ params->ssrc, text.c_str());
} else {
console_->PrintLine(
"Received data (ssrc=%u): %s",
diff --git a/webrtc/libjingle/session/media/call.cc b/webrtc/libjingle/session/media/call.cc
index 2857531..c75c5d4 100644
--- a/webrtc/libjingle/session/media/call.cc
+++ b/webrtc/libjingle/session/media/call.cc
@@ -183,11 +183,10 @@
StaticVideoViews::const_iterator it;
for (it = view_request.static_video_views.begin();
it != view_request.static_video_views.end(); ++it) {
- StreamParams found_stream;
bool found = false;
MediaStreams* recv_streams = GetMediaStreams(session);
if (recv_streams)
- found = recv_streams->GetVideoStream(it->selector, &found_stream);
+ found = recv_streams->GetVideoStream(it->selector, nullptr);
if (!found) {
LOG(LS_WARNING) << "Trying to send view request for ("
<< it->selector.ssrc << ", '"
@@ -983,10 +982,11 @@
std::vector<StreamParams>* removed_streams) {
for (std::vector<StreamParams>::const_iterator update = updates.begin();
update != updates.end(); ++update) {
- StreamParams stream;
- if (GetStreamByIds(streams, update->groupid, update->id, &stream)) {
+ const StreamParams* stream =
+ GetStreamByIds(streams, update->groupid, update->id);
+ if (stream) {
if (!update->has_ssrcs()) {
- removed_streams->push_back(stream);
+ removed_streams->push_back(*stream);
}
} else {
// There's a bug on reflector that will send <stream>s even