/* * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef MODULES_RTP_RTCP_SOURCE_ULPFEC_HEADER_READER_WRITER_H_ #define MODULES_RTP_RTCP_SOURCE_ULPFEC_HEADER_READER_WRITER_H_ #include #include #include "modules/rtp_rtcp/source/forward_error_correction.h" namespace webrtc { // FEC Level 0 Header, 10 bytes. // 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 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // |E|L|P|X| CC |M| PT recovery | SN base | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | TS recovery | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | length recovery | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // // FEC Level 1 Header, 4 bytes (L = 0) or 8 bytes (L = 1). // 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 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | Protection Length | mask | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | mask cont. (present only when L = 1) | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ class UlpfecHeaderReader : public FecHeaderReader { public: UlpfecHeaderReader(); ~UlpfecHeaderReader() override; bool ReadFecHeader( ForwardErrorCorrection::ReceivedFecPacket* fec_packet) const override; }; class UlpfecHeaderWriter : public FecHeaderWriter { public: UlpfecHeaderWriter(); ~UlpfecHeaderWriter() override; size_t MinPacketMaskSize(const uint8_t* packet_mask, size_t packet_mask_size) const override; size_t FecHeaderSize(size_t packet_mask_row_size) const override; void FinalizeFecHeader( rtc::ArrayView protected_streams, ForwardErrorCorrection::Packet& fec_packet) const override; }; } // namespace webrtc #endif // MODULES_RTP_RTCP_SOURCE_ULPFEC_HEADER_READER_WRITER_H_