| Index: webrtc/media/base/streamparams.cc
|
| diff --git a/webrtc/media/base/streamparams.cc b/webrtc/media/base/streamparams.cc
|
| index da80f02fb568f72154f1c31fc0e700712b106b34..2bbf04563be47b6de7e0ee69b966e6c649cf00cd 100644
|
| --- a/webrtc/media/base/streamparams.cc
|
| +++ b/webrtc/media/base/streamparams.cc
|
| @@ -23,6 +23,7 @@ void AddStream(std::vector<StreamParams>* streams, const StreamParams& stream) {
|
| }
|
|
|
| const char kFecSsrcGroupSemantics[] = "FEC";
|
| +const char kFecFrSsrcGroupSemantics[] = "FEC-FR";
|
| const char kFidSsrcGroupSemantics[] = "FID";
|
| const char kSimSsrcGroupSemantics[] = "SIM";
|
|
|
| @@ -200,10 +201,33 @@ bool IsOneSsrcStream(const StreamParams& sp) {
|
| if (sp.ssrcs.size() == 1 && sp.ssrc_groups.empty()) {
|
| return true;
|
| }
|
| + const SsrcGroup* fid_group = sp.get_ssrc_group(kFidSsrcGroupSemantics);
|
| + const SsrcGroup* fecfr_group = sp.get_ssrc_group(kFecFrSsrcGroupSemantics);
|
| if (sp.ssrcs.size() == 2) {
|
| - const SsrcGroup* fid_group = sp.get_ssrc_group(kFidSsrcGroupSemantics);
|
| - if (fid_group != NULL) {
|
| - return (sp.ssrcs == fid_group->ssrcs);
|
| + if (fid_group != nullptr && sp.ssrcs == fid_group->ssrcs) {
|
| + return true;
|
| + }
|
| + if (fecfr_group != nullptr && sp.ssrcs == fecfr_group->ssrcs) {
|
| + return true;
|
| + }
|
| + }
|
| + if (sp.ssrcs.size() == 3) {
|
| + if (fid_group == nullptr || fecfr_group == nullptr) {
|
| + return false;
|
| + }
|
| + if (sp.ssrcs[0] != fid_group->ssrcs[0] ||
|
| + sp.ssrcs[0] != fecfr_group->ssrcs[0]) {
|
| + return false;
|
| + }
|
| + // We do not check for FlexFEC over RTX,
|
| + // as this combination is not supported.
|
| + if (sp.ssrcs[1] == fid_group->ssrcs[1] &&
|
| + sp.ssrcs[2] == fecfr_group->ssrcs[1]) {
|
| + return true;
|
| + }
|
| + if (sp.ssrcs[1] == fecfr_group->ssrcs[1] &&
|
| + sp.ssrcs[2] == fid_group->ssrcs[1]) {
|
| + return true;
|
| }
|
| }
|
| return false;
|
|
|