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:
committed by
Commit Bot
parent
a66395e72f
commit
eec5fff4df
@ -120,8 +120,7 @@ void RtpFecTest<ForwardErrorCorrectionType>::ReceivedPackets(
|
||||
std::unique_ptr<ForwardErrorCorrection::ReceivedPacket> received_packet(
|
||||
new ForwardErrorCorrection::ReceivedPacket());
|
||||
received_packet->pkt = new ForwardErrorCorrection::Packet();
|
||||
received_packet->pkt->length = packet->length;
|
||||
memcpy(received_packet->pkt->data, packet->data, packet->length);
|
||||
received_packet->pkt->data = packet->data;
|
||||
received_packet->is_fec = is_fec;
|
||||
if (!is_fec) {
|
||||
received_packet->ssrc = kMediaSsrc;
|
||||
@ -155,11 +154,12 @@ bool RtpFecTest<ForwardErrorCorrectionType>::IsRecoveryComplete() {
|
||||
[](const std::unique_ptr<ForwardErrorCorrection::Packet>& media_packet,
|
||||
const std::unique_ptr<ForwardErrorCorrection::RecoveredPacket>&
|
||||
recovered_packet) {
|
||||
if (media_packet->length != recovered_packet->pkt->length) {
|
||||
if (media_packet->data.size() != recovered_packet->pkt->data.size()) {
|
||||
return false;
|
||||
}
|
||||
if (memcmp(media_packet->data, recovered_packet->pkt->data,
|
||||
media_packet->length) != 0) {
|
||||
if (memcmp(media_packet->data.cdata(),
|
||||
recovered_packet->pkt->data.cdata(),
|
||||
media_packet->data.size()) != 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user