blob: c2e0a445d0abc614e83f6520506ca9aacf2da5c2 [file] [log] [blame]
ossua70695a2016-09-22 02:06:28 -07001/*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MODULES_AUDIO_CODING_NETEQ_RED_PAYLOAD_SPLITTER_H_
12#define MODULES_AUDIO_CODING_NETEQ_RED_PAYLOAD_SPLITTER_H_
ossua70695a2016-09-22 02:06:28 -070013
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020014#include "modules/audio_coding/neteq/packet.h"
Steve Anton10542f22019-01-11 09:11:00 -080015#include "rtc_base/constructor_magic.h"
ossua70695a2016-09-22 02:06:28 -070016
17namespace webrtc {
18
ossua70695a2016-09-22 02:06:28 -070019class DecoderDatabase;
20
21// This class handles splitting of RED payloads into smaller parts.
22// Codec-specific packet splitting can be performed by
23// AudioDecoder::ParsePayload.
24class RedPayloadSplitter {
25 public:
26 RedPayloadSplitter() {}
27
28 virtual ~RedPayloadSplitter() {}
29
30 // Splits each packet in |packet_list| into its separate RED payloads. Each
31 // RED payload is packetized into a Packet. The original elements in
32 // |packet_list| are properly deleted, and replaced by the new packets.
33 // Note that all packets in |packet_list| must be RED payloads, i.e., have
34 // RED headers according to RFC 2198 at the very beginning of the payload.
35 // Returns kOK or an error.
36 virtual bool SplitRed(PacketList* packet_list);
37
38 // Checks all packets in |packet_list|. Packets that are DTMF events or
39 // comfort noise payloads are kept. Except that, only one single payload type
Henrik Lundindefa7a82018-07-03 13:07:30 +020040 // is accepted. Any packet with another payload type is discarded.
41 virtual void CheckRedPayloads(PacketList* packet_list,
42 const DecoderDatabase& decoder_database);
ossua70695a2016-09-22 02:06:28 -070043
44 private:
45 RTC_DISALLOW_COPY_AND_ASSIGN(RedPayloadSplitter);
46};
47
48} // namespace webrtc
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020049#endif // MODULES_AUDIO_CODING_NETEQ_RED_PAYLOAD_SPLITTER_H_