Files
platform-external-webrtc/webrtc/video_engine/payload_router.h
mflodman@webrtc.org 290cb56dca Remove TimeToSendPacket and TimeToSendPadding from the default module.
Thie CL moves the default RTP module logic for TimeToSendPacket and
TimeToSendPadding to PayloadRouter class and asserts on usage of the
default module.

BUG=769
TEST=New unittest.
R=stefan@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/33319004

Cr-Commit-Position: refs/heads/master@{#8383}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8383 4adac7df-926f-26a2-2b94-8c16560cd09d
2015-02-17 10:15:47 +00:00

86 lines
2.8 KiB
C++

/*
* Copyright (c) 2015 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 WEBRTC_VIDEO_ENGINE_PAYLOAD_ROUTER_H_
#define WEBRTC_VIDEO_ENGINE_PAYLOAD_ROUTER_H_
#include <list>
#include <vector>
#include "webrtc/base/constructormagic.h"
#include "webrtc/base/thread_annotations.h"
#include "webrtc/common_types.h"
#include "webrtc/system_wrappers/interface/scoped_ptr.h"
namespace webrtc {
class CriticalSectionWrapper;
class RTPFragmentationHeader;
class RtpRtcp;
struct RTPVideoHeader;
// PayloadRouter routes outgoing data to the correct sending RTP module, based
// on the simulcast layer in RTPVideoHeader.
class PayloadRouter {
public:
PayloadRouter();
~PayloadRouter();
static size_t DefaultMaxPayloadLength();
// Rtp modules are assumed to be sorted in simulcast index order.
void SetSendingRtpModules(const std::list<RtpRtcp*>& rtp_modules);
// PayloadRouter will only route packets if being active, all packets will be
// dropped otherwise.
void set_active(bool active);
bool active();
// Input parameters according to the signature of RtpRtcp::SendOutgoingData.
// Returns true if the packet was routed / sent, false otherwise.
bool RoutePayload(FrameType frame_type,
int8_t payload_type,
uint32_t time_stamp,
int64_t capture_time_ms,
const uint8_t* payload_data,
size_t payload_size,
const RTPFragmentationHeader* fragmentation,
const RTPVideoHeader* rtp_video_hdr);
// Called when it's time to send a stored packet.
bool TimeToSendPacket(uint32_t ssrc,
uint16_t sequence_number,
int64_t capture_timestamp,
bool retransmission);
// Called when it's time to send padding, returns the number of bytes actually
// sent.
size_t TimeToSendPadding(size_t bytes);
// Returns the maximum allowed data payload length, given the configured MTU
// and RTP headers.
size_t MaxPayloadLength() const;
private:
// TODO(mflodman): When the new video API has launched, remove crit_ and
// assume rtp_modules_ will never change during a call.
scoped_ptr<CriticalSectionWrapper> crit_;
// Active sending RTP modules, in layer order.
std::vector<RtpRtcp*> rtp_modules_ GUARDED_BY(crit_.get());
bool active_ GUARDED_BY(crit_.get());
DISALLOW_COPY_AND_ASSIGN(PayloadRouter);
};
} // namespace webrtc
#endif // WEBRTC_VIDEO_ENGINE_PAYLOAD_ROUTER_H_