Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Unified Diff: webrtc/pc/mediasession.cc

Issue 2493733003: Optimize FindCodecById and ReferencedCodecsMatch (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/media/base/rtpdataengine.cc ('k') | webrtc/pc/mediasession_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/pc/mediasession.cc
diff --git a/webrtc/pc/mediasession.cc b/webrtc/pc/mediasession.cc
index ebba9acbcbf5adfddabb45eb31fb00575936a85b..cc93a8b170619e834efc44c0f2bdc0f2f860e656 100644
--- a/webrtc/pc/mediasession.cc
+++ b/webrtc/pc/mediasession.cc
@@ -752,20 +752,12 @@ static bool CreateMediaContentOffer(
template <class C>
static bool ReferencedCodecsMatch(const std::vector<C>& codecs1,
- const std::string& codec1_id_str,
+ const int codec1_id,
const std::vector<C>& codecs2,
- const std::string& codec2_id_str) {
- int codec1_id;
- int codec2_id;
- C codec1;
- C codec2;
- if (!rtc::FromString(codec1_id_str, &codec1_id) ||
- !rtc::FromString(codec2_id_str, &codec2_id) ||
- !FindCodecById(codecs1, codec1_id, &codec1) ||
- !FindCodecById(codecs2, codec2_id, &codec2)) {
- return false;
- }
- return codec1.Matches(codec2);
+ const int codec2_id) {
+ const C* codec1 = FindCodecById(codecs1, codec1_id);
+ const C* codec2 = FindCodecById(codecs2, codec2_id);
+ return codec1 != nullptr && codec2 != nullptr && codec1->Matches(*codec2);
}
template <class C>
@@ -780,16 +772,15 @@ static void NegotiateCodecs(const std::vector<C>& local_codecs,
C negotiated = ours;
negotiated.IntersectFeedbackParams(theirs);
if (IsRtxCodec(negotiated)) {
- std::string offered_apt_value;
- theirs.GetParam(kCodecParamAssociatedPayloadType, &offered_apt_value);
+ const auto apt_it =
+ theirs.params.find(kCodecParamAssociatedPayloadType);
// FindMatchingCodec shouldn't return something with no apt value.
- RTC_DCHECK(!offered_apt_value.empty());
- negotiated.SetParam(kCodecParamAssociatedPayloadType,
- offered_apt_value);
+ RTC_DCHECK(apt_it != theirs.params.end());
+ negotiated.SetParam(kCodecParamAssociatedPayloadType, apt_it->second);
}
negotiated.id = theirs.id;
negotiated.name = theirs.name;
- negotiated_codecs->push_back(negotiated);
+ negotiated_codecs->push_back(std::move(negotiated));
}
}
// RFC3264: Although the answerer MAY list the formats in their desired
@@ -819,8 +810,8 @@ static bool FindMatchingCodec(const std::vector<C>& codecs1,
for (const C& potential_match : codecs2) {
if (potential_match.Matches(codec_to_match)) {
if (IsRtxCodec(codec_to_match)) {
- std::string apt_value_1;
- std::string apt_value_2;
+ int apt_value_1 = 0;
+ int apt_value_2 = 0;
if (!codec_to_match.GetParam(kCodecParamAssociatedPayloadType,
&apt_value_1) ||
!potential_match.GetParam(kCodecParamAssociatedPayloadType,
@@ -886,8 +877,9 @@ static void FindCodecsToOffer(
}
// Find the associated reference codec for the reference RTX codec.
- C associated_codec;
- if (!FindCodecById(reference_codecs, associated_pt, &associated_codec)) {
+ const C* associated_codec =
+ FindCodecById(reference_codecs, associated_pt);
+ if (!associated_codec) {
LOG(LS_WARNING) << "Couldn't find associated codec with payload type "
<< associated_pt << " for RTX codec " << rtx_codec.name
<< ".";
@@ -898,8 +890,8 @@ static void FindCodecsToOffer(
// Its payload type may be different than the reference codec.
C matching_codec;
if (!FindMatchingCodec<C>(reference_codecs, *offered_codecs,
- associated_codec, &matching_codec)) {
- LOG(LS_WARNING) << "Couldn't find matching " << associated_codec.name
+ *associated_codec, &matching_codec)) {
+ LOG(LS_WARNING) << "Couldn't find matching " << associated_codec->name
<< " codec.";
continue;
}
« no previous file with comments | « webrtc/media/base/rtpdataengine.cc ('k') | webrtc/pc/mediasession_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698