Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(416)

Unified Diff: webrtc/modules/rtp_rtcp/source/rtp_header_extension.cc

Issue 2867713003: Remove hardcoded kValueSizeBytes values from variable-length header extensions. (Closed)
Patch Set: Patch 2 Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/rtp_rtcp/source/rtp_header_extension.cc
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_header_extension.cc b/webrtc/modules/rtp_rtcp/source/rtp_header_extension.cc
index 26762b0e9662a567c14d21e92e779b6247819b0a..25fe5445b4b0eed8514a746bd598ec02241b6366 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_header_extension.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_header_extension.cc
@@ -23,13 +23,12 @@ using RtpUtility::Word32Align;
struct ExtensionInfo {
RTPExtensionType type;
- size_t value_size;
const char* uri;
};
template <typename Extension>
constexpr ExtensionInfo CreateExtensionInfo() {
- return {Extension::kId, Extension::kValueSizeBytes, Extension::kUri};
+ return {Extension::kId, Extension::kUri};
}
constexpr ExtensionInfo kExtensions[] = {
@@ -50,15 +49,6 @@ static_assert(arraysize(kExtensions) ==
static_cast<int>(kRtpExtensionNumberOfExtensions) - 1,
"kExtensions expect to list all known extensions");
-size_t ValueSize(RTPExtensionType type) {
- for (const ExtensionInfo& extension : kExtensions)
- if (type == extension.type)
- return extension.value_size;
-
- RTC_NOTREACHED();
- return 0;
-}
-
} // namespace
constexpr RTPExtensionType RtpHeaderExtensionMap::kInvalidType;
@@ -67,7 +57,6 @@ constexpr uint8_t RtpHeaderExtensionMap::kMinId;
constexpr uint8_t RtpHeaderExtensionMap::kMaxId;
RtpHeaderExtensionMap::RtpHeaderExtensionMap() {
- total_values_size_bytes_ = 0;
for (auto& type : types_)
type = kInvalidType;
for (auto& id : ids_)
@@ -84,7 +73,7 @@ RtpHeaderExtensionMap::RtpHeaderExtensionMap(
bool RtpHeaderExtensionMap::RegisterByType(uint8_t id, RTPExtensionType type) {
for (const ExtensionInfo& extension : kExtensions)
if (type == extension.type)
- return Register(id, extension.type, extension.value_size, extension.uri);
+ return Register(id, extension.type, extension.uri);
RTC_NOTREACHED();
return false;
}
@@ -92,23 +81,29 @@ bool RtpHeaderExtensionMap::RegisterByType(uint8_t id, RTPExtensionType type) {
bool RtpHeaderExtensionMap::RegisterByUri(uint8_t id, const std::string& uri) {
for (const ExtensionInfo& extension : kExtensions)
if (uri == extension.uri)
- return Register(id, extension.type, extension.value_size, extension.uri);
+ return Register(id, extension.type, extension.uri);
LOG(LS_WARNING) << "Unknown extension uri:'" << uri
<< "', id: " << static_cast<int>(id) << '.';
return false;
}
-size_t RtpHeaderExtensionMap::GetTotalLengthInBytes() const {
+size_t RtpHeaderExtensionMap::GetTotalLengthInBytes(
+ rtc::ArrayView<const RtpExtensionSize> extensions) const {
static constexpr size_t kRtpOneByteHeaderLength = 4;
- if (total_values_size_bytes_ == 0)
+ static constexpr size_t kExtensionSizeOverhead = 1;
danilchap 2017/05/09 14:45:22 may be kExtensionHeaderLength = 1 May be with so m
erikvarga1 2017/05/09 15:19:41 Oh, right, that one byte is not only the size but
+ size_t value_size = 0;
danilchap 2017/05/09 14:45:22 values_size (since it represent size of several va
erikvarga1 2017/05/09 15:19:41 Ah, I missed that 's' in the previous comment. Don
+ for (const RtpExtensionSize& extension : extensions) {
+ if (IsRegistered(extension.type))
+ value_size += extension.value_size + kExtensionSizeOverhead;
+ }
+ if (value_size == 0)
return 0;
- return Word32Align(kRtpOneByteHeaderLength + total_values_size_bytes_);
+ return Word32Align(kRtpOneByteHeaderLength + value_size);
}
int32_t RtpHeaderExtensionMap::Deregister(RTPExtensionType type) {
if (IsRegistered(type)) {
uint8_t id = GetId(type);
- total_values_size_bytes_ -= (ValueSize(type) + 1);
types_[id] = kInvalidType;
ids_[type] = kInvalidId;
}
@@ -117,12 +112,9 @@ int32_t RtpHeaderExtensionMap::Deregister(RTPExtensionType type) {
bool RtpHeaderExtensionMap::Register(uint8_t id,
RTPExtensionType type,
- size_t value_size,
const char* uri) {
RTC_DCHECK_GT(type, kRtpExtensionNone);
RTC_DCHECK_LT(type, kRtpExtensionNumberOfExtensions);
- RTC_DCHECK_GE(value_size, 1U);
- RTC_DCHECK_LE(value_size, 16U);
if (id < kMinId || id > kMaxId) {
LOG(LS_WARNING) << "Failed to register extension uri:'" << uri
@@ -147,7 +139,6 @@ bool RtpHeaderExtensionMap::Register(uint8_t id,
types_[id] = type;
ids_[type] = id;
- total_values_size_bytes_ += (value_size + 1);
return true;
}

Powered by Google App Engine
This is Rietveld 408576698