Templatize and clean up codec wildcards.
BUG=4123
R=pthatcher@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/39209004
Cr-Commit-Position: refs/heads/master@{#8422}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8422 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/app/webrtc/webrtcsdp.cc b/talk/app/webrtc/webrtcsdp.cc
index de45c09..d34ce3e 100644
--- a/talk/app/webrtc/webrtcsdp.cc
+++ b/talk/app/webrtc/webrtcsdp.cc
@@ -2436,10 +2436,9 @@
AddOrReplaceCodec<T, U>(content_desc, new_codec);
}
-bool PopWildcardCodec(std::vector<cricket::VideoCodec>* codecs,
- cricket::VideoCodec* wildcard_codec) {
- for (std::vector<cricket::VideoCodec>::iterator iter = codecs->begin();
- iter != codecs->end(); ++iter) {
+template <class T>
+bool PopWildcardCodec(std::vector<T>* codecs, T* wildcard_codec) {
+ for (auto iter = codecs->begin(); iter != codecs->end(); ++iter) {
if (iter->id == kWildcardPayloadType) {
*wildcard_codec = *iter;
codecs->erase(iter);
@@ -2449,18 +2448,17 @@
return false;
}
-void UpdateFromWildcardVideoCodecs(VideoContentDescription* video_desc) {
- std::vector<cricket::VideoCodec> codecs = video_desc->codecs();
- cricket::VideoCodec wildcard_codec;
+template<class T>
+void UpdateFromWildcardCodecs(cricket::MediaContentDescriptionImpl<T>* desc) {
+ auto codecs = desc->codecs();
+ T wildcard_codec;
if (!PopWildcardCodec(&codecs, &wildcard_codec)) {
return;
}
- for (std::vector<cricket::VideoCodec>::iterator iter = codecs.begin();
- iter != codecs.end(); ++iter) {
- cricket::VideoCodec& codec = *iter;
+ for (auto& codec : codecs) {
AddFeedbackParameters(wildcard_codec.feedback_params, &codec);
}
- video_desc->set_codecs(codecs);
+ desc->set_codecs(codecs);
}
void AddAudioAttribute(const std::string& name, const std::string& value,
@@ -2704,6 +2702,8 @@
if (media_type == cricket::MEDIA_TYPE_AUDIO) {
AudioContentDescription* audio_desc =
static_cast<AudioContentDescription*>(media_desc);
+ UpdateFromWildcardCodecs(audio_desc);
+
// Verify audio codec ensures that no audio codec has been populated with
// only fmtp.
if (!VerifyAudioCodecs(audio_desc)) {
@@ -2714,14 +2714,14 @@
}
if (media_type == cricket::MEDIA_TYPE_VIDEO) {
- VideoContentDescription* video_desc =
- static_cast<VideoContentDescription*>(media_desc);
- UpdateFromWildcardVideoCodecs(video_desc);
- // Verify video codec ensures that no video codec has been populated with
- // only rtcp-fb.
- if (!VerifyVideoCodecs(video_desc)) {
- return ParseFailed("Failed to parse video codecs correctly.", error);
- }
+ VideoContentDescription* video_desc =
+ static_cast<VideoContentDescription*>(media_desc);
+ UpdateFromWildcardCodecs(video_desc);
+ // Verify video codec ensures that no video codec has been populated with
+ // only rtcp-fb.
+ if (!VerifyVideoCodecs(video_desc)) {
+ return ParseFailed("Failed to parse video codecs correctly.", error);
+ }
}
// RFC 5245