Index: webrtc/modules/rtp_rtcp/source/forward_error_correction_internal.h |
diff --git a/webrtc/modules/rtp_rtcp/source/forward_error_correction_internal.h b/webrtc/modules/rtp_rtcp/source/forward_error_correction_internal.h |
index 48117514ecad86691c2b3526a34ab473c3153f59..3f61af4c4b3075fb3533654baacf6cfe0f2f5e4c 100644 |
--- a/webrtc/modules/rtp_rtcp/source/forward_error_correction_internal.h |
+++ b/webrtc/modules/rtp_rtcp/source/forward_error_correction_internal.h |
@@ -16,10 +16,15 @@ |
namespace webrtc { |
-// Packet mask size in bytes (L bit is set). |
-constexpr size_t kMaskSizeLBitSet = 6; |
+// Maximum number of media packets that can be protected |
+// by these packet masks. |
+constexpr size_t kUlpfecMaxMediaPackets = 48; |
+ |
// Packet mask size in bytes (L bit is cleared). |
-constexpr size_t kMaskSizeLBitClear = 2; |
+constexpr size_t kUlpfecPacketMaskSizeLBitClear = 2; |
+ |
+// Packet mask size in bytes (L bit is set). |
+constexpr size_t kUlpfecPacketMaskSizeLBitSet = 6; |
namespace internal { |
@@ -65,6 +70,38 @@ void GeneratePacketMasks(int num_media_packets, int num_fec_packets, |
const PacketMaskTable& mask_table, |
uint8_t* packet_mask); |
+// Given a sequence number spread (i.e., the difference between the largest |
+// and smallest sequence number, plus one), returns the required packet |
+// mask size. |
+size_t PacketMaskSize(size_t seq_num_spread); |
+ |
+// Inserts |num_zeros| zero columns into |new_mask| at position |
+// |new_bit_index|. If the current byte of |new_mask| can't fit all zeros, the |
+// byte will be filled with zeros from |new_bit_index|, but the next byte will |
+// be untouched. |
+void InsertZeroColumns(int num_zeros, |
+ uint8_t* new_mask, |
+ int new_mask_bytes, |
+ int num_fec_packets, |
+ int new_bit_index); |
+ |
+// Copies the left most bit column from the byte pointed to by |
+// |old_bit_index| in |old_mask| to the right most column of the byte pointed |
+// to by |new_bit_index| in |new_mask|. |old_mask_bytes| and |new_mask_bytes| |
+// represent the number of bytes used per row for each mask. |num_fec_packets| |
+// represent the number of rows of the masks. |
+// The copied bit is shifted out from |old_mask| and is shifted one step to |
+// the left in |new_mask|. |new_mask| will contain "xxxx xxn0" after this |
+// operation, where x are previously inserted bits and n is the new bit. |
+void CopyColumn(uint8_t* new_mask, |
+ int new_mask_bytes, |
+ uint8_t* old_mask, |
+ int old_mask_bytes, |
+ int num_fec_packets, |
+ int new_bit_index, |
+ int old_bit_index); |
+ |
} // namespace internal |
} // namespace webrtc |
+ |
#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_FORWARD_ERROR_CORRECTION_INTERNAL_H_ |