Chromium Code Reviews| Index: webrtc/pc/mediasession.cc |
| diff --git a/webrtc/pc/mediasession.cc b/webrtc/pc/mediasession.cc |
| index 52abfe855f6aef47fa83d7e1ce51321f090a2417..0fa20d8bd5d292990bf68fbc3899741b56491cd0 100644 |
| --- a/webrtc/pc/mediasession.cc |
| +++ b/webrtc/pc/mediasession.cc |
| @@ -1919,10 +1919,9 @@ bool IsDataContent(const ContentInfo* content) { |
| const ContentInfo* GetFirstMediaContent(const ContentInfos& contents, |
| MediaType media_type) { |
| - for (ContentInfos::const_iterator content = contents.begin(); |
| - content != contents.end(); content++) { |
| - if (IsMediaContentOfType(&*content, media_type)) { |
| - return &*content; |
| + for (const ContentInfo& content : contents) { |
|
tommi
2016/05/12 11:41:44
nit: I wonder if a template like this could cover
Taylor Brandstetter
2016/05/12 15:16:44
The problem is that if Infos is const, Info still
|
| + if (IsMediaContentOfType(&content, media_type)) { |
| + return &content; |
| } |
| } |
| return nullptr; |
| @@ -1986,4 +1985,77 @@ const DataContentDescription* GetFirstDataContentDescription( |
| GetFirstMediaContentDescription(sdesc, MEDIA_TYPE_DATA)); |
| } |
| +// |
| +// Non-const versions of the above functions. |
| +// |
| + |
| +ContentInfo* GetFirstMediaContent(ContentInfos& contents, |
| + MediaType media_type) { |
| + for (ContentInfo& content : contents) { |
| + if (IsMediaContentOfType(&content, media_type)) { |
| + return &content; |
| + } |
| + } |
| + return nullptr; |
| +} |
| + |
| +ContentInfo* GetFirstAudioContent(ContentInfos& contents) { |
| + return GetFirstMediaContent(contents, MEDIA_TYPE_AUDIO); |
| +} |
| + |
| +ContentInfo* GetFirstVideoContent(ContentInfos& contents) { |
| + return GetFirstMediaContent(contents, MEDIA_TYPE_VIDEO); |
| +} |
| + |
| +ContentInfo* GetFirstDataContent(ContentInfos& contents) { |
| + return GetFirstMediaContent(contents, MEDIA_TYPE_DATA); |
| +} |
| + |
| +static ContentInfo* GetFirstMediaContent(SessionDescription* sdesc, |
| + MediaType media_type) { |
| + if (sdesc == nullptr) { |
| + return nullptr; |
| + } |
| + |
| + return GetFirstMediaContent(sdesc->contents(), media_type); |
| +} |
| + |
| +ContentInfo* GetFirstAudioContent(SessionDescription* sdesc) { |
| + return GetFirstMediaContent(sdesc, MEDIA_TYPE_AUDIO); |
| +} |
| + |
| +ContentInfo* GetFirstVideoContent(SessionDescription* sdesc) { |
| + return GetFirstMediaContent(sdesc, MEDIA_TYPE_VIDEO); |
| +} |
| + |
| +ContentInfo* GetFirstDataContent(SessionDescription* sdesc) { |
| + return GetFirstMediaContent(sdesc, MEDIA_TYPE_DATA); |
| +} |
| + |
| +MediaContentDescription* GetFirstMediaContentDescription( |
| + SessionDescription* sdesc, |
| + MediaType media_type) { |
| + ContentInfo* content = GetFirstMediaContent(sdesc, media_type); |
| + ContentDescription* description = content ? content->description : NULL; |
| + return static_cast<MediaContentDescription*>(description); |
| +} |
| + |
| +AudioContentDescription* GetFirstAudioContentDescription( |
| + SessionDescription* sdesc) { |
| + return static_cast<AudioContentDescription*>( |
| + GetFirstMediaContentDescription(sdesc, MEDIA_TYPE_AUDIO)); |
| +} |
| + |
| +VideoContentDescription* GetFirstVideoContentDescription( |
| + SessionDescription* sdesc) { |
| + return static_cast<VideoContentDescription*>( |
| + GetFirstMediaContentDescription(sdesc, MEDIA_TYPE_VIDEO)); |
| +} |
| + |
| +DataContentDescription* GetFirstDataContentDescription( |
| + SessionDescription* sdesc) { |
| + return static_cast<DataContentDescription*>( |
| + GetFirstMediaContentDescription(sdesc, MEDIA_TYPE_DATA)); |
| +} |
| + |
| } // namespace cricket |