Remove functions to enumerate all extensions, Remove concept of the inactive extension. Decision if extension should be included into rtp header is done by rtp_sender GetTotalLengthInBytes now calculates all extension, included or not. That is used only for calculating how much space to reserve for fec. Since extension might suddenly be included in the next packet (which still might belong to same fec group), it is safer to calculate all registered extension. BUG=webrtc:5565, webrtc:1994 Review-Url: https://codereview.webrtc.org/2431253003 Cr-Commit-Position: refs/heads/master@{#14763}
111 lines
3.3 KiB
C++
111 lines
3.3 KiB
C++
/*
|
|
* 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 WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_HEADER_EXTENSION_H_
|
|
#define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_HEADER_EXTENSION_H_
|
|
|
|
#include <map>
|
|
|
|
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
|
|
#include "webrtc/typedefs.h"
|
|
|
|
namespace webrtc {
|
|
|
|
const uint16_t kRtpOneByteHeaderExtensionId = 0xBEDE;
|
|
|
|
const size_t kRtpOneByteHeaderLength = 4;
|
|
const size_t kTransmissionTimeOffsetLength = 4;
|
|
const size_t kAudioLevelLength = 2;
|
|
const size_t kAbsoluteSendTimeLength = 4;
|
|
const size_t kVideoRotationLength = 2;
|
|
const size_t kTransportSequenceNumberLength = 3;
|
|
const size_t kPlayoutDelayLength = 4;
|
|
|
|
// Playout delay in milliseconds. A playout delay limit (min or max)
|
|
// has 12 bits allocated. This allows a range of 0-4095 values which translates
|
|
// to a range of 0-40950 in milliseconds.
|
|
const int kPlayoutDelayGranularityMs = 10;
|
|
// Maximum playout delay value in milliseconds.
|
|
const int kPlayoutDelayMaxMs = 40950;
|
|
|
|
struct HeaderExtension {
|
|
explicit HeaderExtension(RTPExtensionType extension_type)
|
|
: type(extension_type), length(0) {
|
|
Init();
|
|
}
|
|
|
|
void Init() {
|
|
// TODO(solenberg): Create handler classes for header extensions so we can
|
|
// get rid of switches like these as well as handling code spread out all
|
|
// over.
|
|
switch (type) {
|
|
case kRtpExtensionTransmissionTimeOffset:
|
|
length = kTransmissionTimeOffsetLength;
|
|
break;
|
|
case kRtpExtensionAudioLevel:
|
|
length = kAudioLevelLength;
|
|
break;
|
|
case kRtpExtensionAbsoluteSendTime:
|
|
length = kAbsoluteSendTimeLength;
|
|
break;
|
|
case kRtpExtensionVideoRotation:
|
|
length = kVideoRotationLength;
|
|
break;
|
|
case kRtpExtensionTransportSequenceNumber:
|
|
length = kTransportSequenceNumberLength;
|
|
break;
|
|
case kRtpExtensionPlayoutDelay:
|
|
length = kPlayoutDelayLength;
|
|
break;
|
|
default:
|
|
assert(false);
|
|
}
|
|
}
|
|
|
|
const RTPExtensionType type;
|
|
uint8_t length;
|
|
};
|
|
|
|
class RtpHeaderExtensionMap {
|
|
public:
|
|
static constexpr RTPExtensionType kInvalidType = kRtpExtensionNone;
|
|
static constexpr uint8_t kInvalidId = 0;
|
|
RtpHeaderExtensionMap();
|
|
~RtpHeaderExtensionMap();
|
|
|
|
void Erase();
|
|
|
|
int32_t Register(RTPExtensionType type, uint8_t id);
|
|
|
|
int32_t Deregister(RTPExtensionType type);
|
|
|
|
bool IsRegistered(RTPExtensionType type) const;
|
|
|
|
int32_t GetType(uint8_t id, RTPExtensionType* type) const;
|
|
// Return kInvalidType if not found.
|
|
RTPExtensionType GetType(uint8_t id) const;
|
|
|
|
int32_t GetId(const RTPExtensionType type, uint8_t* id) const;
|
|
// Return kInvalidId if not found.
|
|
uint8_t GetId(RTPExtensionType type) const;
|
|
size_t GetTotalLengthInBytes() const;
|
|
|
|
void GetCopy(RtpHeaderExtensionMap* map) const;
|
|
|
|
int32_t Size() const;
|
|
|
|
private:
|
|
std::map<uint8_t, HeaderExtension*> extensionMap_;
|
|
};
|
|
} // namespace webrtc
|
|
|
|
#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_HEADER_EXTENSION_H_
|
|
|