blob: e7d630eb2feecaa1943fdbffdf785110c359428b [file] [log] [blame]
Stefan Holmere5904162015-03-26 11:11:06 +01001/*
2 * Copyright (c) 2015 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
11#ifndef WEBRTC_MODULES_PACING_INCLUDE_PACKET_ROUTER_H_
12#define WEBRTC_MODULES_PACING_INCLUDE_PACKET_ROUTER_H_
13
14#include <list>
15
16#include "webrtc/base/constructormagic.h"
sprang867fb522015-08-03 04:38:41 -070017#include "webrtc/base/criticalsection.h"
Stefan Holmere5904162015-03-26 11:11:06 +010018#include "webrtc/base/scoped_ptr.h"
19#include "webrtc/base/thread_annotations.h"
20#include "webrtc/common_types.h"
21#include "webrtc/modules/pacing/include/paced_sender.h"
22
23namespace webrtc {
24
Stefan Holmere5904162015-03-26 11:11:06 +010025class RtpRtcp;
Stefan Holmere5904162015-03-26 11:11:06 +010026
27// PacketRouter routes outgoing data to the correct sending RTP module, based
28// on the simulcast layer in RTPVideoHeader.
29class PacketRouter : public PacedSender::Callback {
30 public:
31 PacketRouter();
32 virtual ~PacketRouter();
33
34 void AddRtpModule(RtpRtcp* rtp_module);
35 void RemoveRtpModule(RtpRtcp* rtp_module);
36
37 // Implements PacedSender::Callback.
38 bool TimeToSendPacket(uint32_t ssrc,
39 uint16_t sequence_number,
40 int64_t capture_timestamp,
41 bool retransmission) override;
42
43 size_t TimeToSendPadding(size_t bytes) override;
44
sprang867fb522015-08-03 04:38:41 -070045 void SetTransportWideSequenceNumber(uint16_t sequence_number);
46 uint16_t AllocateSequenceNumber();
Stefan Holmere5904162015-03-26 11:11:06 +010047
sprang867fb522015-08-03 04:38:41 -070048 private:
49 rtc::CriticalSection modules_lock_;
Stefan Holmere5904162015-03-26 11:11:06 +010050 // Map from ssrc to sending rtp module.
sprang867fb522015-08-03 04:38:41 -070051 std::list<RtpRtcp*> rtp_modules_ GUARDED_BY(modules_lock_);
52
53 volatile int transport_seq_;
Stefan Holmere5904162015-03-26 11:11:06 +010054
55 DISALLOW_COPY_AND_ASSIGN(PacketRouter);
56};
57} // namespace webrtc
58#endif // WEBRTC_MODULES_PACING_INCLUDE_PACKET_ROUTER_H_