Refactor FEC code to use COW buffers

This refactoring helps to reduce unnecessary memcpy calls on the receive
side.

This CL replaces
|uint8 data[IP_PACKET_SIZE]| with |rtc::CopyOnWriteBuffer data| in Packet class,
removes |length| field there, and does necessary changes.

This is a reland of these two CLs with fixes:
https://webrtc-review.googlesource.com/c/src/+/144942
https://webrtc-review.googlesource.com/c/src/+/144881

Bug: webrtc:10750
Change-Id: I76f6dee5a57ade59942ea2822ca4737edfe6438b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/145332
Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29035}
This commit is contained in:
Ilya Nikolaevskiy
2019-09-02 13:58:49 +02:00
committed by Commit Bot
parent a66395e72f
commit eec5fff4df
25 changed files with 357 additions and 328 deletions

View File

@ -89,9 +89,9 @@ class RtpPacket {
void SetTimestamp(uint32_t timestamp);
void SetSsrc(uint32_t ssrc);
// Copies the buffer with zero-ed mutable extensions,
// Fills with zeroes mutable extensions,
// which are modified after FEC protection is generated.
void CopyAndZeroMutableExtensions(rtc::ArrayView<uint8_t> buffer) const;
void ZeroMutableExtensions();
// Removes extension of given |type|, returns false is extension was not
// registered in packet's extension map or not present in the packet. Only