Add converter CorruptionDetectionMessage -> FrameInstrumentationSyncData

Bug: webrtc:358039777
Change-Id: I4eec591252a4587e645d5ba6a594c21a3c284bc9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/364460
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Erik Språng <sprang@webrtc.org>
Auto-Submit: Fanny Linderborg <linderborg@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43144}
This commit is contained in:
Fanny Linderborg 2024-10-02 11:18:11 +02:00 committed by WebRTC LUCI CQ
parent 7dd164df7f
commit 71bb08d769
3 changed files with 83 additions and 0 deletions

View File

@ -78,6 +78,26 @@ ConvertCorruptionDetectionMessageToFrameInstrumentationData(
.sample_values = sample_values}; .sample_values = sample_values};
} }
std::optional<FrameInstrumentationSyncData>
ConvertCorruptionDetectionMessageToFrameInstrumentationSyncData(
const CorruptionDetectionMessage& message,
int previous_sequence_index) {
if (previous_sequence_index < 0) {
return std::nullopt;
}
if (!message.sample_values().empty()) {
return std::nullopt;
}
if (!message.interpret_sequence_index_as_most_significant_bits()) {
return std::nullopt;
}
return FrameInstrumentationSyncData{
.sequence_index = GetFullSequenceIndex(
previous_sequence_index, message.sequence_index(),
/*update_the_most_significant_bits=*/true),
.communicate_upper_bits = true};
}
std::optional<CorruptionDetectionMessage> std::optional<CorruptionDetectionMessage>
ConvertFrameInstrumentationDataToCorruptionDetectionMessage( ConvertFrameInstrumentationDataToCorruptionDetectionMessage(
const FrameInstrumentationData& data) { const FrameInstrumentationData& data) {

View File

@ -22,6 +22,10 @@ std::optional<FrameInstrumentationData>
ConvertCorruptionDetectionMessageToFrameInstrumentationData( ConvertCorruptionDetectionMessageToFrameInstrumentationData(
const CorruptionDetectionMessage& message, const CorruptionDetectionMessage& message,
int previous_sequence_index); int previous_sequence_index);
std::optional<FrameInstrumentationSyncData>
ConvertCorruptionDetectionMessageToFrameInstrumentationSyncData(
const CorruptionDetectionMessage& message,
int previous_sequence_index);
std::optional<CorruptionDetectionMessage> std::optional<CorruptionDetectionMessage>
ConvertFrameInstrumentationDataToCorruptionDetectionMessage( ConvertFrameInstrumentationDataToCorruptionDetectionMessage(
const FrameInstrumentationData& frame_instrumentation_data); const FrameInstrumentationData& frame_instrumentation_data);

View File

@ -327,5 +327,64 @@ TEST(CorruptionDetectionMessageToFrameInstrumentationData, ConvertAllFields) {
EXPECT_THAT(data->sample_values, ElementsAre(1.0, 2.0, 3.0, 4.0, 5.0)); EXPECT_THAT(data->sample_values, ElementsAre(1.0, 2.0, 3.0, 4.0, 5.0));
} }
TEST(CorruptionDetectionMessageToFrameInstrumentationSyncData,
FailWhenPreviousSequenceIndexIsNegative) {
std::optional<CorruptionDetectionMessage> message =
CorruptionDetectionMessage::Builder()
.WithInterpretSequenceIndexAsMostSignificantBits(true)
.Build();
ASSERT_TRUE(message.has_value());
EXPECT_FALSE(ConvertCorruptionDetectionMessageToFrameInstrumentationSyncData(
*message, -1)
.has_value());
}
TEST(CorruptionDetectionMessageToFrameInstrumentationSyncData,
FailWhenSampleValuesArePresent) {
std::vector<double> sample_values = {1.0, 2.0, 3.0, 4.0, 5.0};
std::optional<CorruptionDetectionMessage> message =
CorruptionDetectionMessage::Builder()
.WithInterpretSequenceIndexAsMostSignificantBits(true)
.WithSampleValues(sample_values)
.Build();
ASSERT_TRUE(message.has_value());
EXPECT_FALSE(ConvertCorruptionDetectionMessageToFrameInstrumentationSyncData(
*message, 0)
.has_value());
}
TEST(CorruptionDetectionMessageToFrameInstrumentationSyncData,
FailWhenSetToUpdateTheLowerBits) {
std::optional<CorruptionDetectionMessage> message =
CorruptionDetectionMessage::Builder()
.WithInterpretSequenceIndexAsMostSignificantBits(false)
.Build();
ASSERT_TRUE(message.has_value());
EXPECT_FALSE(ConvertCorruptionDetectionMessageToFrameInstrumentationSyncData(
*message, 0)
.has_value());
}
TEST(CorruptionDetectionMessageToFrameInstrumentationSyncData,
IgnorePreviousSequenceIndex) {
std::optional<CorruptionDetectionMessage> message =
CorruptionDetectionMessage::Builder()
.WithSequenceIndex(11)
.WithInterpretSequenceIndexAsMostSignificantBits(true)
.Build();
ASSERT_TRUE(message.has_value());
std::optional<FrameInstrumentationSyncData> data =
ConvertCorruptionDetectionMessageToFrameInstrumentationSyncData(*message,
12);
ASSERT_TRUE(data.has_value());
EXPECT_EQ(data->sequence_index, 0b0101'1000'0000);
EXPECT_TRUE(data->communicate_upper_bits);
}
} // namespace } // namespace
} // namespace webrtc } // namespace webrtc