From 25b57ce08ec50afba780c9ae2c560248665a140f Mon Sep 17 00:00:00 2001 From: brandtr Date: Mon, 14 Nov 2016 04:28:55 -0800 Subject: [PATCH] Update header formatters to FlexFEC draft 03. The only difference is that the F and R bits have changed place. BUG=webrtc:5654 Review-Url: https://codereview.webrtc.org/2495253002 Cr-Commit-Position: refs/heads/master@{#15064} --- .../source/flexfec_header_reader_writer.cc | 18 +++++++++--------- .../source/flexfec_header_reader_writer.h | 4 ++-- .../flexfec_header_reader_writer_unittest.cc | 10 +++++----- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/webrtc/modules/rtp_rtcp/source/flexfec_header_reader_writer.cc b/webrtc/modules/rtp_rtcp/source/flexfec_header_reader_writer.cc index 2d7fa0bb25..9017ab585b 100644 --- a/webrtc/modules/rtp_rtcp/source/flexfec_header_reader_writer.cc +++ b/webrtc/modules/rtp_rtcp/source/flexfec_header_reader_writer.cc @@ -85,18 +85,18 @@ bool FlexfecHeaderReader::ReadFecHeader( LOG(LS_WARNING) << "Discarding truncated FlexFEC packet."; return false; } - bool f_bit = (fec_packet->pkt->data[0] & 0x80) != 0; - if (f_bit) { - LOG(LS_INFO) << "FlexFEC packet with inflexible generator matrix. We do " - "not yet support this, thus discarding packet."; - return false; - } - bool r_bit = (fec_packet->pkt->data[0] & 0x40) != 0; + bool r_bit = (fec_packet->pkt->data[0] & 0x80) != 0; if (r_bit) { LOG(LS_INFO) << "FlexFEC packet with retransmission bit set. We do not yet " "support this, thus discarding the packet."; return false; } + bool f_bit = (fec_packet->pkt->data[0] & 0x40) != 0; + if (f_bit) { + LOG(LS_INFO) << "FlexFEC packet with inflexible generator matrix. We do " + "not yet support this, thus discarding packet."; + return false; + } uint8_t ssrc_count = ByteReader::ReadBigEndian(&fec_packet->pkt->data[8]); if (ssrc_count != 1) { @@ -247,8 +247,8 @@ void FlexfecHeaderWriter::FinalizeFecHeader( const uint8_t* packet_mask, size_t packet_mask_size, ForwardErrorCorrection::Packet* fec_packet) const { - fec_packet->data[0] &= 0x7f; // Clear F bit. - fec_packet->data[0] &= 0xbf; // Clear R bit. + fec_packet->data[0] &= 0x7f; // Clear R bit. + fec_packet->data[0] &= 0xbf; // Clear F bit. ByteWriter::WriteBigEndian(&fec_packet->data[8], kSsrcCount); ByteWriter::WriteBigEndian(&fec_packet->data[9], kReservedBits); ByteWriter::WriteBigEndian(&fec_packet->data[12], media_ssrc); diff --git a/webrtc/modules/rtp_rtcp/source/flexfec_header_reader_writer.h b/webrtc/modules/rtp_rtcp/source/flexfec_header_reader_writer.h index ffd0c9f135..13f747720f 100644 --- a/webrtc/modules/rtp_rtcp/source/flexfec_header_reader_writer.h +++ b/webrtc/modules/rtp_rtcp/source/flexfec_header_reader_writer.h @@ -20,7 +20,7 @@ namespace webrtc { // 0 1 2 3 // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// 0 |F|R|P|X| CC |M| PT recovery | length recovery | +// 0 |R|F|P|X| CC |M| PT recovery | length recovery | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // 4 | TS recovery | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -43,7 +43,7 @@ namespace webrtc { // 0 1 2 3 // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// 0 |1|0|P|X| CC |M| PT recovery | length recovery | +// 0 |0|1|P|X| CC |M| PT recovery | length recovery | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // 4 | TS recovery | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ diff --git a/webrtc/modules/rtp_rtcp/source/flexfec_header_reader_writer_unittest.cc b/webrtc/modules/rtp_rtcp/source/flexfec_header_reader_writer_unittest.cc index 5d0e69c130..7546931320 100644 --- a/webrtc/modules/rtp_rtcp/source/flexfec_header_reader_writer_unittest.cc +++ b/webrtc/modules/rtp_rtcp/source/flexfec_header_reader_writer_unittest.cc @@ -43,8 +43,8 @@ constexpr size_t kFlexfecPacketMaskSizes[] = {2, 6, 14}; constexpr size_t kFlexfecMaxPacketSize = kFlexfecPacketMaskSizes[2]; // Reader tests. -constexpr uint8_t kNoFBit = 0 << 7; -constexpr uint8_t kNoRBit = 0 << 6; +constexpr uint8_t kNoRBit = 0 << 7; +constexpr uint8_t kNoFBit = 0 << 6; constexpr uint8_t kPtRecovery = 123; constexpr uint8_t kLengthRecov[] = {0xab, 0xcd}; constexpr uint8_t kTsRecovery[] = {0x01, 0x23, 0x45, 0x67}; @@ -173,7 +173,7 @@ TEST(FlexfecHeaderReaderTest, ReadsHeaderWithKBit0Set) { constexpr uint8_t kUlpfecPacketMask[] = {0x11, 0x02}; // clang-format on constexpr uint8_t kPacketData[] = { - kNoFBit | kNoRBit, kPtRecovery, kLengthRecov[0], kLengthRecov[1], + kNoRBit | kNoFBit, kPtRecovery, kLengthRecov[0], kLengthRecov[1], kTsRecovery[0], kTsRecovery[1], kTsRecovery[2], kTsRecovery[3], kSsrcCount, kReservedBits, kReservedBits, kReservedBits, kProtSsrc[0], kProtSsrc[1], kProtSsrc[2], kProtSsrc[3], @@ -204,7 +204,7 @@ TEST(FlexfecHeaderReaderTest, ReadsHeaderWithKBit1Set) { 0x08, 0x44, 0x00, 0x84}; // clang-format on constexpr uint8_t kPacketData[] = { - kNoFBit | kNoRBit, kPtRecovery, kLengthRecov[0], kLengthRecov[1], + kNoRBit | kNoFBit, kPtRecovery, kLengthRecov[0], kLengthRecov[1], kTsRecovery[0], kTsRecovery[1], kTsRecovery[2], kTsRecovery[3], kSsrcCount, kReservedBits, kReservedBits, kReservedBits, kProtSsrc[0], kProtSsrc[1], kProtSsrc[2], kProtSsrc[3], @@ -241,7 +241,7 @@ TEST(FlexfecHeaderReaderTest, ReadsHeaderWithKBit2Set) { 0x88, 0x88, 0x88, 0x88}; // clang-format on constexpr uint8_t kPacketData[] = { - kNoFBit | kNoRBit, kPtRecovery, kLengthRecov[0], kLengthRecov[1], + kNoRBit | kNoFBit, kPtRecovery, kLengthRecov[0], kLengthRecov[1], kTsRecovery[0], kTsRecovery[1], kTsRecovery[2], kTsRecovery[3], kSsrcCount, kReservedBits, kReservedBits, kReservedBits, kProtSsrc[0], kProtSsrc[1], kProtSsrc[2], kProtSsrc[3],