text: /*
   *  Copyright (c) 2012 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 ERIZO_SRC_ERIZO_RTP_WEBRTC_FORWARD_ERROR_CORRECTION_INTERNAL_H_
  #define ERIZO_SRC_ERIZO_RTP_WEBRTC_FORWARD_ERROR_CORRECTION_INTERNAL_H_
  
  #include "rtp/webrtc/forward_error_correction.h"
  // #include "webrtc/typedefs.h"
  
  namespace webrtc {
  
  // Packet mask size in bytes (L bit is set).
  static const int kMaskSizeLBitSet = 6;
  // Packet mask size in bytes (L bit is cleared).
  static const int kMaskSizeLBitClear = 2;
  
  namespace internal {
  
  class PacketMaskTable {
   public:
    PacketMaskTable(FecMaskType fec_mask_type, int num_media_packets);
    ~PacketMaskTable() {}
    FecMaskType fec_mask_type() const { return fec_mask_type_; }
    const uint8_t*** fec_packet_mask_table() const {
      return fec_packet_mask_table_;
    }
  
   private:
    FecMaskType InitMaskType(FecMaskType fec_mask_type, int num_media_packets);
    const uint8_t*** InitMaskTable(FecMaskType fec_mask_type_);
    const FecMaskType fec_mask_type_;
    const uint8_t*** fec_packet_mask_table_;
  };
  
  // Returns an array of packet masks. The mask of a single FEC packet
  // corresponds to a number of mask bytes. The mask indicates which
  // media packets should be protected by the FEC packet.
  
  // \param[in]  num_media_packets       The number of media packets to protect.
  //                                     [1, max_media_packets].
  // \param[in]  num_fec_packets         The number of FEC packets which will
  //                                     be generated. [1, num_media_packets].
  // \param[in]  num_imp_packets         The number of important packets.
  //                                     [0, num_media_packets].
  //                                     num_imp_packets = 0 is the equal
  //                                     protection scenario.
  // \param[in]  use_unequal_protection  Enables unequal protection: allocates
  //                                     more protection to the num_imp_packets.
  // \param[in]  mask_table              An instance of the |PacketMaskTable|
  //                                     class, which contains the type of FEC
  //                                     packet mask used, and a pointer to the
  //                                     corresponding packet masks.
  // \param[out] packet_mask             A pointer to hold the packet mask array,
  //                                     of size: num_fec_packets *
  //                                     "number of mask bytes".
  void GeneratePacketMasks(int num_media_packets, int num_fec_packets,
                           int num_imp_packets, bool use_unequal_protection,
                           const PacketMaskTable& mask_table,
                           uint8_t* packet_mask);
  
  }  // namespace internal
  }  // namespace webrtc
  #endif  // ERIZO_SRC_ERIZO_RTP_WEBRTC_FORWARD_ERROR_CORRECTION_INTERNAL_H_
  