From 916ec7dadf7f8da29b3ac187d55cc8bc1340dab8 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Mon, 25 Jun 2018 18:22:15 +0200 Subject: [PATCH] Add Generic frame descritpor header extension to list of extensions supported by RtpPacket. Bug: webrtc:9361 Change-Id: Iabee824381be3776e17e95f32507058607fc0bc8 Reviewed-on: https://webrtc-review.googlesource.com/85346 Reviewed-by: Philip Eliasson Reviewed-by: Alex Loiko Commit-Queue: Danil Chapovalov Cr-Commit-Position: refs/heads/master@{#23788} --- modules/rtp_rtcp/include/rtp_rtcp_defines.h | 1 + .../source/rtp_generic_frame_descriptor_extension.cc | 2 ++ .../source/rtp_generic_frame_descriptor_extension.h | 5 ++++- modules/rtp_rtcp/source/rtp_header_extension_map.cc | 2 ++ modules/rtp_rtcp/source/rtp_utility.cc | 4 ++++ test/fuzzers/rtp_packet_fuzzer.cc | 6 ++++++ 6 files changed, 19 insertions(+), 1 deletion(-) diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.h b/modules/rtp_rtcp/include/rtp_rtcp_defines.h index 36686a1e49..cfd9030ed2 100644 --- a/modules/rtp_rtcp/include/rtp_rtcp_defines.h +++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.h @@ -110,6 +110,7 @@ enum RTPExtensionType { kRtpExtensionRtpStreamId, kRtpExtensionRepairedRtpStreamId, kRtpExtensionMid, + kRtpExtensionGenericFrameDescriptor, kRtpExtensionNumberOfExtensions // Must be the last entity in the enum. }; diff --git a/modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.cc b/modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.cc index daf797aead..c7b52d5ba6 100644 --- a/modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.cc +++ b/modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.cc @@ -44,6 +44,8 @@ constexpr uint8_t kFlageXtendedOffset = 0x02; // +---------------+ // | ... | // +-+-+-+-+-+-+-+-+ +constexpr RTPExtensionType RtpGenericFrameDescriptorExtension::kId; +constexpr char RtpGenericFrameDescriptorExtension::kUri[]; bool RtpGenericFrameDescriptorExtension::Parse( rtc::ArrayView data, diff --git a/modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.h b/modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.h index 1387d11fde..d6acbe562b 100644 --- a/modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.h +++ b/modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.h @@ -14,13 +14,16 @@ #include #include "api/array_view.h" +#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "modules/rtp_rtcp/source/rtp_generic_frame_descriptor.h" namespace webrtc { class RtpGenericFrameDescriptorExtension { public: - // TODO(bugs.webrtc.org/9361): Add kId and kUri to make it extension trait. + static constexpr RTPExtensionType kId = kRtpExtensionGenericFrameDescriptor; + static constexpr char kUri[] = + "http://www.webrtc.org/experiments/rtp-hdrext/generic-frame-descriptor"; static bool Parse(rtc::ArrayView data, RtpGenericFrameDescriptor* descriptor); diff --git a/modules/rtp_rtcp/source/rtp_header_extension_map.cc b/modules/rtp_rtcp/source/rtp_header_extension_map.cc index f044e9b039..9fa66c0819 100644 --- a/modules/rtp_rtcp/source/rtp_header_extension_map.cc +++ b/modules/rtp_rtcp/source/rtp_header_extension_map.cc @@ -10,6 +10,7 @@ #include "modules/rtp_rtcp/include/rtp_header_extension_map.h" +#include "modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.h" #include "modules/rtp_rtcp/source/rtp_header_extensions.h" #include "rtc_base/arraysize.h" #include "rtc_base/checks.h" @@ -40,6 +41,7 @@ constexpr ExtensionInfo kExtensions[] = { CreateExtensionInfo(), CreateExtensionInfo(), CreateExtensionInfo(), + CreateExtensionInfo(), }; // Because of kRtpExtensionNone, NumberOfExtension is 1 bigger than the actual diff --git a/modules/rtp_rtcp/source/rtp_utility.cc b/modules/rtp_rtcp/source/rtp_utility.cc index e050da60f8..d150ce2eb3 100644 --- a/modules/rtp_rtcp/source/rtp_utility.cc +++ b/modules/rtp_rtcp/source/rtp_utility.cc @@ -467,6 +467,10 @@ void RtpHeaderParser::ParseOneByteExtensionHeader( header->extension.mid.Set(rtc::MakeArrayView(ptr, len + 1)); break; } + case kRtpExtensionGenericFrameDescriptor: + RTC_LOG(WARNING) + << "RtpGenericFrameDescriptor unsupported by rtp header parser."; + break; case kRtpExtensionNone: case kRtpExtensionNumberOfExtensions: { RTC_NOTREACHED() << "Invalid extension type: " << type; diff --git a/test/fuzzers/rtp_packet_fuzzer.cc b/test/fuzzers/rtp_packet_fuzzer.cc index c89cb46dee..0e35c8ee41 100644 --- a/test/fuzzers/rtp_packet_fuzzer.cc +++ b/test/fuzzers/rtp_packet_fuzzer.cc @@ -9,6 +9,7 @@ */ #include "modules/rtp_rtcp/include/rtp_header_extension_map.h" +#include "modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.h" #include "modules/rtp_rtcp/source/rtp_header_extensions.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" @@ -109,6 +110,11 @@ void FuzzOneInput(const uint8_t* data, size_t size) { packet.GetExtension(&mid); break; } + case kRtpExtensionGenericFrameDescriptor: { + RtpGenericFrameDescriptor descriptor; + packet.GetExtension(&descriptor); + break; + } } } }