Add the corruption detection extension to RTPExtensionType
Bug: webrtc:358039777 Change-Id: Ib825593e5c37beb0cba3190c1d3bdcf1c9d957cf Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/360144 Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Fanny Linderborg <linderborg@webrtc.org> Cr-Commit-Position: refs/heads/main@{#42861}
This commit is contained in:
parent
ad1775634f
commit
fd6f4b4e51
@ -23,6 +23,7 @@ rtc_library("rtp_rtcp_format") {
|
||||
"include/rtp_header_extension_map.h",
|
||||
"include/rtp_rtcp_defines.h",
|
||||
"source/byte_io.h",
|
||||
"source/corruption_detection_extension.h",
|
||||
"source/rtcp_packet.h",
|
||||
"source/rtcp_packet/app.h",
|
||||
"source/rtcp_packet/bye.h",
|
||||
@ -63,6 +64,7 @@ rtc_library("rtp_rtcp_format") {
|
||||
sources = [
|
||||
"include/report_block_data.cc",
|
||||
"include/rtp_rtcp_defines.cc",
|
||||
"source/corruption_detection_extension.cc",
|
||||
"source/rtcp_packet.cc",
|
||||
"source/rtcp_packet/app.cc",
|
||||
"source/rtcp_packet/bye.cc",
|
||||
@ -124,6 +126,7 @@ rtc_library("rtp_rtcp_format") {
|
||||
"../../api/units:timestamp",
|
||||
"../../api/video:video_layers_allocation",
|
||||
"../../api/video:video_rtp_headers",
|
||||
"../../common_video:common_video",
|
||||
"../../rtc_base:bit_buffer",
|
||||
"../../rtc_base:bitstream_reader",
|
||||
"../../rtc_base:buffer",
|
||||
@ -141,6 +144,7 @@ rtc_library("rtp_rtcp_format") {
|
||||
"../video_coding:codec_globals_headers",
|
||||
"//third_party/abseil-cpp/absl/algorithm:container",
|
||||
"//third_party/abseil-cpp/absl/base:core_headers",
|
||||
"//third_party/abseil-cpp/absl/container:inlined_vector",
|
||||
"//third_party/abseil-cpp/absl/strings:string_view",
|
||||
"//third_party/abseil-cpp/absl/types:optional",
|
||||
"//third_party/abseil-cpp/absl/types:variant",
|
||||
@ -524,21 +528,6 @@ rtc_library("rtp_packetizer_av1_test_helper") {
|
||||
]
|
||||
}
|
||||
|
||||
rtc_library("corruption_detection_extension") {
|
||||
visibility = [ "*" ]
|
||||
sources = [
|
||||
"source/corruption_detection_extension.cc",
|
||||
"source/corruption_detection_extension.h",
|
||||
]
|
||||
deps = [
|
||||
":rtp_rtcp_format",
|
||||
"../../api:array_view",
|
||||
"../../common_video:common_video",
|
||||
"//third_party/abseil-cpp/absl/container:inlined_vector",
|
||||
"//third_party/abseil-cpp/absl/strings:string_view",
|
||||
]
|
||||
}
|
||||
|
||||
if (rtc_include_tests) {
|
||||
if (!build_with_chromium) {
|
||||
rtc_executable("test_packet_masks_metrics") {
|
||||
@ -774,7 +763,7 @@ if (rtc_include_tests) {
|
||||
testonly = true
|
||||
sources = [ "source/corruption_detection_extension_unittest.cc" ]
|
||||
deps = [
|
||||
":corruption_detection_extension",
|
||||
":rtp_rtcp_format",
|
||||
"../../common_video:common_video",
|
||||
"../../test:test_support",
|
||||
"//third_party/abseil-cpp/absl/types:optional",
|
||||
|
||||
@ -88,6 +88,7 @@ enum RTPExtensionType : int {
|
||||
kRtpExtensionDependencyDescriptor,
|
||||
kRtpExtensionColorSpace,
|
||||
kRtpExtensionVideoFrameTrackingId,
|
||||
kRtpExtensionCorruptionDetection,
|
||||
kRtpExtensionNumberOfExtensions // Must be the last entity in the enum.
|
||||
};
|
||||
|
||||
|
||||
@ -73,7 +73,7 @@ bool CorruptionDetectionExtension::Parse(rtc::ArrayView<const uint8_t> data,
|
||||
}
|
||||
if ((data.size() != kMandatoryPayloadBytes &&
|
||||
data.size() <= kConfigurationBytes) ||
|
||||
data.size() > 16) {
|
||||
data.size() > kMaxValueSizeBytes) {
|
||||
return false;
|
||||
}
|
||||
message->interpret_sequence_index_as_most_significant_bits_ = data[0] >> 7;
|
||||
@ -93,7 +93,7 @@ bool CorruptionDetectionExtension::Parse(rtc::ArrayView<const uint8_t> data,
|
||||
bool CorruptionDetectionExtension::Write(
|
||||
rtc::ArrayView<uint8_t> data,
|
||||
const CorruptionDetectionMessage& message) {
|
||||
if (data.size() != ValueSize(message)) {
|
||||
if (data.size() != ValueSize(message) || data.size() > kMaxValueSizeBytes) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -31,8 +31,8 @@ class CorruptionDetectionExtension {
|
||||
public:
|
||||
using value_type = CorruptionDetectionMessage;
|
||||
|
||||
// TODO: b/358039777 - Change to our `RTPExtensionType` when available.
|
||||
static constexpr RTPExtensionType kId = kRtpExtensionNumberOfExtensions;
|
||||
static constexpr RTPExtensionType kId = kRtpExtensionCorruptionDetection;
|
||||
static constexpr uint8_t kMaxValueSizeBytes = 16;
|
||||
static constexpr char kCorruptionDetectionUri[] =
|
||||
"http://www.webrtc.org/experiments/rtp-hdrext/corruption-detection";
|
||||
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
#include "api/array_view.h"
|
||||
#include "api/rtp_parameters.h"
|
||||
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
|
||||
#include "modules/rtp_rtcp/source/corruption_detection_extension.h"
|
||||
#include "modules/rtp_rtcp/source/rtp_dependency_descriptor_extension.h"
|
||||
#include "modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.h"
|
||||
#include "modules/rtp_rtcp/source/rtp_header_extensions.h"
|
||||
@ -58,6 +59,7 @@ constexpr ExtensionInfo kExtensions[] = {
|
||||
CreateExtensionInfo<ColorSpaceExtension>(),
|
||||
CreateExtensionInfo<InbandComfortNoiseExtension>(),
|
||||
CreateExtensionInfo<VideoFrameTrackingIdExtension>(),
|
||||
CreateExtensionInfo<CorruptionDetectionExtension>(),
|
||||
};
|
||||
|
||||
// Because of kRtpExtensionNone, NumberOfExtension is 1 bigger than the actual
|
||||
|
||||
@ -196,6 +196,7 @@ void RtpPacket::ZeroMutableExtensions() {
|
||||
case RTPExtensionType::kRtpExtensionCsrcAudioLevel:
|
||||
case RTPExtensionType::kRtpExtensionAbsoluteCaptureTime:
|
||||
case RTPExtensionType::kRtpExtensionColorSpace:
|
||||
case RTPExtensionType::kRtpExtensionCorruptionDetection:
|
||||
case RTPExtensionType::kRtpExtensionGenericFrameDescriptor:
|
||||
case RTPExtensionType::kRtpExtensionDependencyDescriptor:
|
||||
case RTPExtensionType::kRtpExtensionMid:
|
||||
|
||||
@ -30,6 +30,7 @@
|
||||
#include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
|
||||
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
|
||||
#include "modules/rtp_rtcp/source/byte_io.h"
|
||||
#include "modules/rtp_rtcp/source/corruption_detection_extension.h"
|
||||
#include "modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.h"
|
||||
#include "modules/rtp_rtcp/source/rtp_header_extension_size.h"
|
||||
#include "modules/rtp_rtcp/source/rtp_header_extensions.h"
|
||||
@ -89,6 +90,7 @@ constexpr RtpExtensionSize kVideoExtensionSizes[] = {
|
||||
CreateMaxExtensionSize<RtpStreamId>(),
|
||||
CreateMaxExtensionSize<RepairedRtpStreamId>(),
|
||||
CreateMaxExtensionSize<RtpMid>(),
|
||||
CreateMaxExtensionSize<CorruptionDetectionExtension>(),
|
||||
{RtpGenericFrameDescriptorExtension00::kId,
|
||||
RtpGenericFrameDescriptorExtension00::kMaxSizeBytes},
|
||||
};
|
||||
@ -131,6 +133,7 @@ bool IsNonVolatile(RTPExtensionType type) {
|
||||
case kRtpExtensionVideoTiming:
|
||||
case kRtpExtensionColorSpace:
|
||||
case kRtpExtensionVideoFrameTrackingId:
|
||||
case kRtpExtensionCorruptionDetection:
|
||||
return false;
|
||||
case kRtpExtensionNone:
|
||||
case kRtpExtensionNumberOfExtensions:
|
||||
|
||||
@ -236,6 +236,7 @@ webrtc_fuzzer_test("rtcp_receiver_fuzzer") {
|
||||
webrtc_fuzzer_test("rtp_packet_fuzzer") {
|
||||
sources = [ "rtp_packet_fuzzer.cc" ]
|
||||
deps = [
|
||||
"../../common_video:common_video",
|
||||
"../../modules/rtp_rtcp:rtp_rtcp_format",
|
||||
"//third_party/abseil-cpp/absl/types:optional",
|
||||
]
|
||||
|
||||
@ -12,7 +12,9 @@
|
||||
#include <vector>
|
||||
|
||||
#include "absl/types/optional.h"
|
||||
#include "common_video/corruption_detection_message.h"
|
||||
#include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
|
||||
#include "modules/rtp_rtcp/source/corruption_detection_extension.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"
|
||||
@ -164,6 +166,11 @@ void FuzzOneInput(const uint8_t* data, size_t size) {
|
||||
// This extension requires state to read and so complicated that
|
||||
// deserves own fuzzer.
|
||||
break;
|
||||
case kRtpExtensionCorruptionDetection: {
|
||||
CorruptionDetectionMessage message;
|
||||
packet.GetExtension<CorruptionDetectionExtension>(&message);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user