diff --git a/src/source/PeerConnection/Rtcp.h b/src/source/PeerConnection/Rtcp.h index 889e7b0a6e..b0c1fd775d 100644 --- a/src/source/PeerConnection/Rtcp.h +++ b/src/source/PeerConnection/Rtcp.h @@ -39,9 +39,9 @@ typedef enum { #define TWCC_RUNLEN_ISRECEIVED(packetChunk) TWCC_ISRECEIVED(TWCC_RUNLEN_STATUS_SYMBOL(packetChunk)) #define TWCC_STATUSVECTOR_IS_2BIT(packetChunk) (((packetChunk) >> 14u) & 1u) #define TWCC_STATUSVECTOR_SSIZE(packetChunk) (TWCC_STATUSVECTOR_IS_2BIT(packetChunk) ? 2u : 1u) -#define TWCC_STATUSVECTOR_SMASK(packetChunk) (TWCC_STATUSVECTOR_IS_2BIT(packetChunk) ? 2u : 1u) +#define TWCC_STATUSVECTOR_SMASK(packetChunk) (TWCC_STATUSVECTOR_IS_2BIT(packetChunk) ? 3u : 1u) #define TWCC_STATUSVECTOR_STATUS(packetChunk, i) \ - (((packetChunk) >> (14u - (i) * TWCC_STATUSVECTOR_SSIZE(packetChunk))) & TWCC_STATUSVECTOR_SMASK(packetChunk)) + (((packetChunk) >> (14u - (i + 1) * TWCC_STATUSVECTOR_SSIZE(packetChunk))) & TWCC_STATUSVECTOR_SMASK(packetChunk)) #define TWCC_STATUSVECTOR_COUNT(packetChunk) (TWCC_STATUSVECTOR_IS_2BIT(packetChunk) ? 7 : 14) #define TWCC_PACKET_STATUS_COUNT(payload) (getUnalignedInt16BigEndian((payload) + 10)) diff --git a/tst/RtcpFunctionalityTest.cpp b/tst/RtcpFunctionalityTest.cpp index d7cc2437fe..afc60a9ff7 100644 --- a/tst/RtcpFunctionalityTest.cpp +++ b/tst/RtcpFunctionalityTest.cpp @@ -369,41 +369,41 @@ TEST_F(RtcpFunctionalityTest, twccParsePacketTest) { parseTwcc("", 0, 0); parseTwcc("4487A9E754B3E6FD01810001147A75A62001C801", 1, 0); - parseTwcc("4487A9E754B3E6FD12740004148566AAC1402C00", 1, 3); - parseTwcc("4487A9E754B3E6FD04FA0006147CAF88C554B80400000001", 1, 5); + parseTwcc("4487A9E754B3E6FD12740004148566AAC1402C00", 2, 2); + parseTwcc("4487A9E754B3E6FD04FA0006147CAF88C554B80400000001", 5, 1); parseTwcc("4487A9E754B3E6FD00000002147972002002BC00", 2, 0); - parseTwcc("4487A9E754B3E6FD06D40004147DDE41D6403C00FFEC0001", 2, 2); - parseTwcc("4487A9E754B3E6FD04FA0006147CB089D95420FF9804000000000003", 2, 4); + parseTwcc("4487A9E754B3E6FD06D40004147DDE41D6403C00FFEC0001", 4, 0); + parseTwcc("4487A9E754B3E6FD04FA0006147CB089D95420FF9804000000000003", 6, 0); parseTwcc("4487A9E754B3E6FD000C000314797A052003E40004000003", 3, 0); - parseTwcc("4487A9E754B3E6FD12740006148568ABD6648800FDA4000268000002", 3, 3); - parseTwcc("4487A9E754B3E6FD1431000C14868C5A803CEC0028000002", 3, 9); + parseTwcc("4487A9E754B3E6FD12740006148568ABD6648800FDA4000268000002", 6, 0); + parseTwcc("4487A9E754B3E6FD1431000C14868C5A803CEC0028000002", 4, 8); parseTwcc("4487A9E754B3E6FD00020004147974012004140000000002", 4, 0); - parseTwcc("4487A9E754B3E6FD12670008148560A8D66520016C00FD780402902800040002", 4, 4); + parseTwcc("4487A9E754B3E6FD12670008148560A8D66520016C00FD780402902800040002", 8, 0); parseTwcc("4487A9E754B3E6FD012E0005147A45872005900000000401", 5, 0); parseTwcc("4487A9E754B3E6FD01F20006147AC6D22006600004000000", 6, 0); parseTwcc("4487A9E754B3E6FD06690007147D9111200748000000040000000003", 7, 0); parseTwcc("4487A9E754B3E6FD020C0008147AD3D8200898000000000008000002", 8, 0); parseTwcc("4487A9E754B3E6FD07C20009147E7B8B200990000800000000000001", 9, 0); parseTwcc("4487A9E754B3E6FD0177000A147A74A5200A70000000000000040000", 10, 0); - parseTwcc("4487A9E754B3E6FD1431000C14868E5B2008E540DC00000000000000FE10002800000003", 10, 2); + parseTwcc("4487A9E754B3E6FD1431000C14868E5B2008E540DC00000000000000FE10002800000003", 12, 0); parseTwcc("4487A9E754B3E6FD03C6000B147BEB6F200B3000380400000400040000000003", 11, 0); parseTwcc("4487A9E754B3E6FD02AB000D147B3013200D4800000004000000000000000401", 13, 0); parseTwcc("4487A9E754B3E6FD01BA000E147AA4C3200EA400000000000000000000000400", 14, 0); parseTwcc("4487A9E754B3E6FD0610000F147D62F3200FCC0000000000000400000000100000000003", 15, 0); parseTwcc("4487A9E754B3E6FD08120010147EAAA92010F80000000000000004040000000000000002", 16, 0); parseTwcc("4487A9E754B3E6FD05B80011147D33D52011F40014000000000000000000040000000001", 17, 0); - parseTwcc("4487A9E754B3E6FD04DA001E147CAC86D556D999D6652009D40000000000EF840001040001DC0004D4000400031400", 17, 13); + parseTwcc("4487A9E754B3E6FD04DA001E147CAC86D556D999D6652009D40000000000EF840001040001DC0004D4000400031400", 30, 0); parseTwcc("4487A9E754B3E6FD11EA0012148514932012B40000000000000400000000000000000000", 18, 0); parseTwcc("4487A9E754B3E6FD09BC0013147FC45D201348000400000000000000000000000000000000000003", 19, 0); parseTwcc("4487A9E754B3E6FD05720014147D05B7201414000000000000100000000000040000000400000002", 20, 0); parseTwcc("4487A9E754B3E6FD03820015147BBD5A201554000000000000000000000000000000000400009801", 21, 0); - parseTwcc("4487A9E754B3E6FD114B001B1484B87381FF200DE41000000000000000000000000000000000140000000002", 21, 6); + parseTwcc("4487A9E754B3E6FD114B001B1484B87381FF200DE41000000000000000000000000000000000140000000002", 22, 5); parseTwcc("4487A9E754B3E6FD0B6700161480DD11201678000000000000000000040000000000000000000000", 22, 0); parseTwcc("4487A9E754B3E6FD07790017147E4E6F2017D400000000000400000000000000000004000400080000000003", 23, 0); - parseTwcc("4487A9E754B3E6FD114B001D1484BB74D5592014E4008400000000FD60100000000000000000000000000000000014", 24, 5); + parseTwcc("4487A9E754B3E6FD114B001D1484BB74D5592014E4008400000000FD60100000000000000000000000000000000014", 29, 0); parseTwcc("4487A9E754B3E6FD1230002914854FA22027E4002400000000000400000000000000040000000000040000001C0000", 41, 0); - parseTwcc("4487A9E754B3E6FD04B60036147CAA852024C002D999D6407800000000000000000000000000040000000000000000", 43, 11); - parseTwcc("4487A9E754B3E6FD040200E4147C9F81202700B7E6649000000000000000000004000000000008000018000000001", 43, 185); + parseTwcc("4487A9E754B3E6FD04B60036147CAA852024C002D999D6407800000000000000000000000000040000000000000000", 48, 6); + parseTwcc("4487A9E754B3E6FD040200E4147C9F81202700B7E6649000000000000000000004000000000008000018000000001", 45, 183); } TEST_F(RtcpFunctionalityTest, onRtcpPacketTwccReport)