15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org/* 25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * libjingle 35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Copyright 2012 Google Inc. 45976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 55976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Redistribution and use in source and binary forms, with or without 65976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * modification, are permitted provided that the following conditions are met: 75976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 85976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 95976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * this list of conditions and the following disclaimer. 105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * this list of conditions and the following disclaimer in the documentation 125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * and/or other materials provided with the distribution. 135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 3. The name of the author may not be used to endorse or promote products 145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * derived from this software without specific prior written permission. 155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org */ 275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/gunit.h" 295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/streamparams.h" 305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/testutils.h" 315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgstatic const uint32 kSsrcs1[] = {1}; 3385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgstatic const uint32 kSsrcs2[] = {1, 2}; 3485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgstatic const uint32 kSsrcs3[] = {1, 2, 3}; 3585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgstatic const uint32 kRtxSsrcs3[] = {4, 5, 6}; 365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstatic cricket::StreamParams CreateStreamParamsWithSsrcGroup( 385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const std::string& semantics, const uint32 ssrcs_in[], size_t len) { 395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::StreamParams stream; 405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<uint32> ssrcs(ssrcs_in, ssrcs_in + len); 415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::SsrcGroup sg(semantics, ssrcs); 425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org stream.ssrcs = ssrcs; 435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org stream.ssrc_groups.push_back(sg); 445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return stream; 455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(SsrcGroup, EqualNotEqual) { 485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::SsrcGroup ssrc_groups[] = { 4985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::SsrcGroup("ABC", MAKE_VECTOR(kSsrcs1)), 5085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::SsrcGroup("ABC", MAKE_VECTOR(kSsrcs2)), 5185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::SsrcGroup("Abc", MAKE_VECTOR(kSsrcs2)), 5285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::SsrcGroup("abc", MAKE_VECTOR(kSsrcs2)), 535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org }; 545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (size_t i = 0; i < ARRAY_SIZE(ssrc_groups); ++i) { 565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (size_t j = 0; j < ARRAY_SIZE(ssrc_groups); ++j) { 575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ((ssrc_groups[i] == ssrc_groups[j]), (i == j)); 585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ((ssrc_groups[i] != ssrc_groups[j]), (i != j)); 595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(SsrcGroup, HasSemantics) { 6485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::SsrcGroup sg1("ABC", MAKE_VECTOR(kSsrcs1)); 655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(sg1.has_semantics("ABC")); 665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 6785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::SsrcGroup sg2("Abc", MAKE_VECTOR(kSsrcs1)); 685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_FALSE(sg2.has_semantics("ABC")); 695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 7085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::SsrcGroup sg3("abc", MAKE_VECTOR(kSsrcs1)); 715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_FALSE(sg3.has_semantics("ABC")); 725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(SsrcGroup, ToString) { 7585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::SsrcGroup sg1("ABC", MAKE_VECTOR(kSsrcs1)); 765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_STREQ("{semantics:ABC;ssrcs:[1]}", sg1.ToString().c_str()); 775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(StreamParams, CreateLegacy) { 805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const uint32 ssrc = 7; 815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::StreamParams one_sp = cricket::StreamParams::CreateLegacy(ssrc); 825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(1U, one_sp.ssrcs.size()); 835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(ssrc, one_sp.first_ssrc()); 845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(one_sp.has_ssrcs()); 855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(one_sp.has_ssrc(ssrc)); 865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_FALSE(one_sp.has_ssrc(ssrc+1)); 875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_FALSE(one_sp.has_ssrc_groups()); 885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(0U, one_sp.ssrc_groups.size()); 895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(StreamParams, HasSsrcGroup) { 925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::StreamParams sp = 9385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org CreateStreamParamsWithSsrcGroup("XYZ", kSsrcs2, ARRAY_SIZE(kSsrcs2)); 945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(2U, sp.ssrcs.size()); 9585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_EQ(kSsrcs2[0], sp.first_ssrc()); 965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(sp.has_ssrcs()); 9785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_TRUE(sp.has_ssrc(kSsrcs2[0])); 9885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_TRUE(sp.has_ssrc(kSsrcs2[1])); 995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(sp.has_ssrc_group("XYZ")); 1005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(1U, sp.ssrc_groups.size()); 1015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(2U, sp.ssrc_groups[0].ssrcs.size()); 10285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_EQ(kSsrcs2[0], sp.ssrc_groups[0].ssrcs[0]); 10385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_EQ(kSsrcs2[1], sp.ssrc_groups[0].ssrcs[1]); 1045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(StreamParams, GetSsrcGroup) { 1075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::StreamParams sp = 10885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org CreateStreamParamsWithSsrcGroup("XYZ", kSsrcs2, ARRAY_SIZE(kSsrcs2)); 1095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(NULL, sp.get_ssrc_group("xyz")); 1105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(&sp.ssrc_groups[0], sp.get_ssrc_group("XYZ")); 1115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(StreamParams, EqualNotEqual) { 1145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::StreamParams l1 = cricket::StreamParams::CreateLegacy(1); 1155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::StreamParams l2 = cricket::StreamParams::CreateLegacy(2); 1165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::StreamParams sg1 = 11785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org CreateStreamParamsWithSsrcGroup("ABC", kSsrcs1, ARRAY_SIZE(kSsrcs1)); 1185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::StreamParams sg2 = 11985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org CreateStreamParamsWithSsrcGroup("ABC", kSsrcs2, ARRAY_SIZE(kSsrcs2)); 1205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::StreamParams sg3 = 12185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org CreateStreamParamsWithSsrcGroup("Abc", kSsrcs2, ARRAY_SIZE(kSsrcs2)); 1225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::StreamParams sg4 = 12385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org CreateStreamParamsWithSsrcGroup("abc", kSsrcs2, ARRAY_SIZE(kSsrcs2)); 1245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::StreamParams sps[] = {l1, l2, sg1, sg2, sg3, sg4}; 1255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (size_t i = 0; i < ARRAY_SIZE(sps); ++i) { 1275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (size_t j = 0; j < ARRAY_SIZE(sps); ++j) { 1285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ((sps[i] == sps[j]), (i == j)); 1295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ((sps[i] != sps[j]), (i != j)); 1305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(StreamParams, FidFunctions) { 1355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org uint32 fid_ssrc; 1365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(1); 1385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_FALSE(sp.AddFidSsrc(10, 20)); 1395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(sp.AddFidSsrc(1, 2)); 1405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(sp.GetFidSsrc(1, &fid_ssrc)); 1415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(2u, fid_ssrc); 1425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_FALSE(sp.GetFidSsrc(15, &fid_ssrc)); 1435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sp.add_ssrc(20); 1455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sp.AddFidSsrc(20, 30); 1465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(sp.GetFidSsrc(20, &fid_ssrc)); 1475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(30u, fid_ssrc); 1485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Manually create SsrcGroup to test bounds-checking 1505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // in GetSecondarySsrc. We construct an invalid StreamParams 1515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // for this. 1525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::vector<uint32> fid_vector; 1535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fid_vector.push_back(13); 1545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::SsrcGroup invalid_fid_group(cricket::kFidSsrcGroupSemantics, 1555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org fid_vector); 1565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::StreamParams sp_invalid; 1575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sp_invalid.add_ssrc(13); 1585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sp_invalid.ssrc_groups.push_back(invalid_fid_group); 1595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_FALSE(sp_invalid.GetFidSsrc(13, &fid_ssrc)); 1605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(StreamParams, ToString) { 1635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::StreamParams sp = 16485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org CreateStreamParamsWithSsrcGroup("XYZ", kSsrcs2, ARRAY_SIZE(kSsrcs2)); 1655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_STREQ("{ssrcs:[1,2];ssrc_groups:{semantics:XYZ;ssrcs:[1,2]};}", 1665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org sp.ToString().c_str()); 1675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 16885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org 16985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org 17085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsOneSsrcStream_LegacyStream) { 17185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_TRUE( 17285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::IsOneSsrcStream(cricket::StreamParams::CreateLegacy(13))); 17385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org} 17485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org 17585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsOneSsrcStream_SingleRtxStream) { 17685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::StreamParams stream; 17785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org stream.add_ssrc(13); 17885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_TRUE(stream.AddFidSsrc(13, 14)); 17985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_TRUE(cricket::IsOneSsrcStream(stream)); 18085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org} 18185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org 18285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsOneSsrcStream_SimulcastStream) { 18385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_FALSE(cricket::IsOneSsrcStream( 18485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs2)))); 18585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_FALSE(cricket::IsOneSsrcStream( 18685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3)))); 18785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org} 18885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org 18985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsOneSsrcStream_SimRtxStream) { 19085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::StreamParams stream = 19185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::CreateSimWithRtxStreamParams("cname", 19285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org MAKE_VECTOR(kSsrcs3), 19385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org MAKE_VECTOR(kRtxSsrcs3)); 19485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_FALSE(cricket::IsOneSsrcStream(stream)); 19585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org} 19685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org 19785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsSimulcastStream_LegacyStream) { 19885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_FALSE( 19985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::IsSimulcastStream(cricket::StreamParams::CreateLegacy(13))); 20085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org} 20185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org 20285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsSimulcastStream_SingleRtxStream) { 20385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::StreamParams stream; 20485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org stream.add_ssrc(13); 20585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_TRUE(stream.AddFidSsrc(13, 14)); 20685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_FALSE(cricket::IsSimulcastStream(stream)); 20785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org} 20885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org 20985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsSimulcastStream_SimulcastStream) { 21085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_TRUE(cricket::IsSimulcastStream( 21185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs2)))); 21285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_TRUE(cricket::IsSimulcastStream( 21385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3)))); 21485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org} 21585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org 21685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsSimulcastStream_SimRtxStream) { 21785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::StreamParams stream = 21885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::CreateSimWithRtxStreamParams("cname", 21985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org MAKE_VECTOR(kSsrcs3), 22085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org MAKE_VECTOR(kRtxSsrcs3)); 22185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_TRUE(cricket::IsSimulcastStream(stream)); 22285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org} 22385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org 22485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.orgTEST(StreamParams, TestIsSimulcastStream_InvalidStreams) { 22585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org // stream1 has extra non-sim, non-fid ssrc. 22685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::StreamParams stream1 = 22785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::CreateSimWithRtxStreamParams("cname", 22885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org MAKE_VECTOR(kSsrcs3), 22985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org MAKE_VECTOR(kRtxSsrcs3)); 23085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org stream1.add_ssrc(25); 23185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_FALSE(cricket::IsSimulcastStream(stream1)); 23285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org 23385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org // stream2 has invalid fid-group (no primary). 23485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::StreamParams stream2; 23585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org stream2.add_ssrc(13); 23685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_TRUE(stream2.AddFidSsrc(13, 14)); 23785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org std::remove(stream2.ssrcs.begin(), stream2.ssrcs.end(), 13); 23885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_FALSE(cricket::IsSimulcastStream(stream2)); 23985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org 24085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org // stream3 has two SIM groups. 24185a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::StreamParams stream3 = 24285a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs2)); 24385a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org std::vector<uint32> sim_ssrcs = MAKE_VECTOR(kRtxSsrcs3); 24485a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org cricket::SsrcGroup sg(cricket::kSimSsrcGroupSemantics, sim_ssrcs); 24585a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org for (size_t i = 0; i < sim_ssrcs.size(); i++) { 24685a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org stream3.add_ssrc(sim_ssrcs[i]); 24785a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org } 24885a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org stream3.ssrc_groups.push_back(sg); 24985a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org EXPECT_FALSE(cricket::IsSimulcastStream(stream3)); 25085a56f7357d9a68fe6de51061d81849db77e5185sergeyu@chromium.org} 251