From d1ea9f81acec186ae68221d967c916a371629582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Folles=C3=B8?= Date: Mon, 5 Oct 2026 13:21:55 +0200 Subject: [PATCH 1/3] Add marine snow filter control and telemetry messages SetMarineSnowFilterCtrl and MarineSnowFilterTel carry a FilterMessage, like the color correction messages, so that the app can switch the marine snow filter of the X3 Ultra on and off and set its intensity. Co-Authored-By: Claude Opus 5.5 --- protobuf_definitions/control.proto | 12 ++++++++++++ protobuf_definitions/telemetry.proto | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/protobuf_definitions/control.proto b/protobuf_definitions/control.proto index cede7312..c2853313 100644 --- a/protobuf_definitions/control.proto +++ b/protobuf_definitions/control.proto @@ -269,6 +269,18 @@ message SetColorCorrectionCtrl { FilterMessage color_correction_filter = 1; // Message with the color correction settings to set. } +// Message sent when the user wants to set marine snow filter settings. +// Removes the particles that the drone's lights make visible, such as marine snow, silt and plankton, by replacing +// the pixels that are briefly brighter than in the neighbouring frames. Small moving objects, such as bubbles or thin +// lines, can be removed too. The intensity field sets how faint a particle can be and still be removed +// (0.0 = only the brightest particles, 1.0 = faint particles as well). Unlike the color correction intensity, 0.0 +// does not turn the filter off; only the enabled field does. The video is delayed by one frame while the filter is +// enabled. Disable the filter while laser detection runs, as it can alter the laser dots. +// Only supported on X3 Ultra. +message SetMarineSnowFilterCtrl { + FilterMessage marine_snow_filter = 1; // Message with the marine snow filter settings to set. +} + // Issue a command to set the digital pan, tilt, and zoom of the main camera. // // Only supported on X3 Ultra. diff --git a/protobuf_definitions/telemetry.proto b/protobuf_definitions/telemetry.proto index 9219f987..f3576d28 100644 --- a/protobuf_definitions/telemetry.proto +++ b/protobuf_definitions/telemetry.proto @@ -369,6 +369,13 @@ message ColorCorrectionTel { FilterMessage color_correction_filter = 1; // Color correction settings. } +// Marine snow filter settings telemetry message. +// +// Message is published when the filter settings are changed. +message MarineSnowFilterTel { + FilterMessage marine_snow_filter = 1; // Marine snow filter settings. +} + // Digital pan, tilt, and zoom telemetry from the main camera. // // Reports the actual pan, tilt, and zoom state of the camera. From 866117579bf2623cc2d2bc92e734d343407e11d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Folles=C3=B8?= Date: Mon, 5 Oct 2026 14:36:52 +0200 Subject: [PATCH 2/3] Shorten the comment of SetMarineSnowFilterCtrl Say what the filter does and what the intensity sets, in as many lines as the comments of the other filters. Co-Authored-By: Claude Opus 5.5 --- protobuf_definitions/control.proto | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/protobuf_definitions/control.proto b/protobuf_definitions/control.proto index c2853313..884751eb 100644 --- a/protobuf_definitions/control.proto +++ b/protobuf_definitions/control.proto @@ -270,12 +270,8 @@ message SetColorCorrectionCtrl { } // Message sent when the user wants to set marine snow filter settings. -// Removes the particles that the drone's lights make visible, such as marine snow, silt and plankton, by replacing -// the pixels that are briefly brighter than in the neighbouring frames. Small moving objects, such as bubbles or thin -// lines, can be removed too. The intensity field sets how faint a particle can be and still be removed -// (0.0 = only the brightest particles, 1.0 = faint particles as well). Unlike the color correction intensity, 0.0 -// does not turn the filter off; only the enabled field does. The video is delayed by one frame while the filter is -// enabled. Disable the filter while laser detection runs, as it can alter the laser dots. +// Removes bright particles, such as marine snow, from the video. The intensity field sets how faint a particle can be +// and still be removed (0.0 = only the brightest, 1.0 = faint particles as well). Turn it off during laser detection. // Only supported on X3 Ultra. message SetMarineSnowFilterCtrl { FilterMessage marine_snow_filter = 1; // Message with the marine snow filter settings to set. From 18aaa5ee5fb2a92cd9c2c489680eb23114d959db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Folles=C3=B8?= Date: Mon, 5 Oct 2026 14:36:52 +0200 Subject: [PATCH 3/3] Add the frames that the marine snow filter compares with MarineSnowFilterFrames holds the past (1..4) and future (0..2) frames that the filter compares each frame with. Each future frame delays the video by 33 to 40 ms, so 0 future frames gives the lowest latency. SetMarineSnowFilterCtrl takes it as an optional field, so that an app that only sets the on/off and the intensity leaves the frames as they are, and MarineSnowFilterTel reports it. Co-Authored-By: Claude Opus 5.5 --- protobuf_definitions/control.proto | 1 + protobuf_definitions/message_formats.proto | 6 ++++++ protobuf_definitions/telemetry.proto | 1 + 3 files changed, 8 insertions(+) diff --git a/protobuf_definitions/control.proto b/protobuf_definitions/control.proto index 884751eb..09528486 100644 --- a/protobuf_definitions/control.proto +++ b/protobuf_definitions/control.proto @@ -275,6 +275,7 @@ message SetColorCorrectionCtrl { // Only supported on X3 Ultra. message SetMarineSnowFilterCtrl { FilterMessage marine_snow_filter = 1; // Message with the marine snow filter settings to set. + MarineSnowFilterFrames frames = 2; // Frames to compare with. Leave it unset to keep the current frames. } // Issue a command to set the digital pan, tilt, and zoom of the main camera. diff --git a/protobuf_definitions/message_formats.proto b/protobuf_definitions/message_formats.proto index 7d9a7dcd..e19aa318 100644 --- a/protobuf_definitions/message_formats.proto +++ b/protobuf_definitions/message_formats.proto @@ -1908,6 +1908,12 @@ message FilterMessage { float intensity = 2; // Intensity of the filter (0..1). } +// Frames that the marine snow filter compares each frame with. +message MarineSnowFilterFrames { + uint32 past_frames = 1; // Past frames to compare with (1..4). + uint32 future_frames = 2; // Future frames to compare with (0..2). Each one delays the video by 33 to 40 ms. +} + // Digital pan, tilt, and zoom state for the main camera. // // Only supported on X3 Ultra. Controls digital (not mechanical) zoom. diff --git a/protobuf_definitions/telemetry.proto b/protobuf_definitions/telemetry.proto index f3576d28..d51326d7 100644 --- a/protobuf_definitions/telemetry.proto +++ b/protobuf_definitions/telemetry.proto @@ -374,6 +374,7 @@ message ColorCorrectionTel { // Message is published when the filter settings are changed. message MarineSnowFilterTel { FilterMessage marine_snow_filter = 1; // Marine snow filter settings. + MarineSnowFilterFrames frames = 2; // Frames that the filter compares with. } // Digital pan, tilt, and zoom telemetry from the main camera.