Skip to content

Commit 2b07c7b

Browse files
committed
Add: implement interlace auto-detection for ST40P RX and update documentation
add ST40/ST40p API flag and frame_info field_num/interlaced propagation wire gst st40p rx auto-detect property and warn when cadence is unknown add validation harness + tests for auto-detect; document usage and signals
1 parent 3df5f8a commit 2b07c7b

File tree

15 files changed

+292
-24
lines changed

15 files changed

+292
-24
lines changed

doc/st40_validation_updates.md

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ This note captures all recent ST40/ST40p feature changes and the accompanying va
99
- **Frame-info log surfacing:** When tests pass `log_frame_info=True`, the harness dumps the frame-info file and a summary directly into the test log (no artifact download needed).
1010
- **ST40P test mutation knobs:** The GStreamer TX plugin accepts `tx-test-mode` with helpers for `no-marker`, `seq-gap`, `bad-parity`, and `paced` (optionally with `tx-test-pkt-count` and `tx-test-pacing-ns`). These drive targeted negative/edge-path tests.
1111
- **Interlaced & split-mode coverage:** RX/TX can be flagged interlaced independently; mismatch fails fast. Split-mode plus marker handling is now covered in tests.
12+
- **Interlace auto-detect option:** RX can infer progressive vs interlaced cadence from RTP F bits (`rx-auto-detect-interlaced=true` in GStreamer, `ST40P_RX_FLAG_AUTO_DETECT_INTERLACED` in C API). Use when cadence is unknown; RX updates `interlaced` after first field detection while still logging field_num/interlaced in frame-info.
13+
- **Warnings when cadence is unknown:** Pipeline RX and the GStreamer RX plugin emit a warning if neither `rx-interlaced` nor auto-detect is set, to avoid silent progressive defaults.
1214
- **Integration safety nets:** New noctx integration tests for ST40 interlaced flows, and expanded GStreamer validation tests across single-host and dual-host (VF/VF) paths.
1315

1416
## Data path (split ANC per RTP)
@@ -44,6 +46,14 @@ flowchart LR
4446
- **Negative-path observability:** In interlaced mode, a missing marker or sequence gap can occur on just one field. Frame-info shows the gap on that field only, which is why `test_st40i_split_mode_frame_info_logging` and the noctx `st40i_split_seq_gap_reports_loss` exist—to prove per-field accounting is accurate.
4547
- **Naming clarity:** The `p` in `st40p` refers to the pipeline API, not progressive-only transport. Interlaced support is a first-class, opt-in property (`tx-interlaced` / `rx-interlaced`) and is exercised in both GStreamer and C integration suites.
4648

49+
## Interlace auto-detect: usage and expected signals
50+
51+
- Enable on RX when cadence is unknown: `rx-auto-detect-interlaced=true` in the GStreamer RX pipeline or set `ST40P_RX_FLAG_AUTO_DETECT_INTERLACED` in `st40p_rx_ops.flags` (C API). Keep `rx-interlaced=false` when auto-detecting.
52+
- TX still needs to emit F bits (set `tx_interlaced=true` in GStreamer or `interlaced=true` in TX ops) so RX can learn cadence.
53+
- Warnings: RX logs a warning if both `rx-interlaced=false` and auto-detect are disabled. Expect a GST_WARNING from `mtl_st40p_rx` and a pipeline warning from `st40p` if cadence is unknown.
54+
- Frame-info fields: `field_num` and `interlaced` are populated once F bits are observed (`0x2/0x3` for interlaced fields, `0x0` for progressive). These are visible in both C API frame_info and GStreamer frame-info dumps.
55+
- Expect detection log line when auto-detect flips interlaced on RX (`detected interlaced stream (F=0x2/0x3)`); downstream tests assert on these fields rather than relying on caps only.
56+
4757
## API and plugin changes (developer-facing)
4858

4959
- **TX (GStreamer st40p):**
@@ -95,6 +105,8 @@ Across all single-host tests, frame-info is dumped and summarized in pytest logs
95105
- `st40i_split_multi_packet_roundtrip` — sends multiple ANC blocks per field (sizes 8/6/4) in split mode; expects RX accumulation and nonzero frames.
96106
- `st40i_split_loopback` — interlaced split-mode loopback with custom fps and framebuff; ensures split/interlace coexist.
97107
- `st40i_split_seq_gap_reports_loss` — crafts a manual RTP sequence gap and validates `seq_discont`/`seq_lost` are reported via the C API frame_info, mirroring the GStreamer gap test at a lower level.
108+
- [tests/integration_tests/noctx/testcases/st40p_auto_detect_tests.cpp](tests/integration_tests/noctx/testcases/st40p_auto_detect_tests.cpp)
109+
- `st40p_rx_auto_detect_interlace` — TX flags interlaced, RX starts progressive with `ST40P_RX_FLAG_AUTO_DETECT_INTERLACED`; asserts `interlaced`/`field_num` populate on RX frame_info.
98110

99111
These integration tests exercise the C pipeline APIs directly (outside the GStreamer harness) to prove split-mode, parity, marker, and sequence reporting work end-to-end without additional context setup.
100112

@@ -107,7 +119,8 @@ These integration tests exercise the C pipeline APIs directly (outside the GStre
107119
- Missing marker: `tx-test-mode=no-marker`
108120
- Bad parity: `tx-test-mode=bad-parity`
109121
- Paced burst: `tx-test-mode=paced tx-test-pkt-count=3 tx-test-pacing-ns=200000`
110-
4. Inspect log: look for `FrameInfo` lines followed by `FrameInfoSummary` to confirm packet counts and seq accounting.
122+
4. If cadence is unknown on RX, set `rx-auto-detect-interlaced=true` (GStreamer) or `ST40P_RX_FLAG_AUTO_DETECT_INTERLACED` (C API); leave `rx-interlaced=false` so detection can flip it. Expect a warning if you omit both.
123+
5. Inspect log: look for `FrameInfo` lines followed by `FrameInfoSummary` to confirm packet counts and seq accounting.
111124

112125
## Signals to watch
113126

@@ -119,7 +132,7 @@ These integration tests exercise the C pipeline APIs directly (outside the GStre
119132

120133
- For split-mode validation, set RX `frame_info_path` (for logging) and a power-of-two `rx_rtp_ring_size`; the plugin rejects non power-of-two values.
121134
- Frame-info summaries rely on the regular expression in the harness; unexpected formats will fall back to raw dump only.
122-
- Interlaced mismatch between TX/RX fails the test early (before file compare).
135+
- Interlaced mismatch between TX/RX fails the test early unless RX uses auto-detect; a warning is emitted when neither interlaced nor auto-detect is set.
123136

124137
## Quick architecture view (tests + logging)
125138

@@ -141,4 +154,8 @@ flowchart TD
141154
- APIs: [include/st40_api.h](include/st40_api.h), [include/st40_pipeline_api.h](include/st40_pipeline_api.h)
142155
- Plugin: [ecosystem/gstreamer_plugin/gst_mtl_st40p_tx.c](ecosystem/gstreamer_plugin/gst_mtl_st40p_tx.c), [ecosystem/gstreamer_plugin/gst_mtl_st40p_rx.c](ecosystem/gstreamer_plugin/gst_mtl_st40p_rx.c)
143156
- Pipeline impl: [lib/src/st2110/pipeline/st40_pipeline_tx.c](lib/src/st2110/pipeline/st40_pipeline_tx.c), [lib/src/st2110/pipeline/st40_pipeline_rx.c](lib/src/st2110/pipeline/st40_pipeline_rx.c)
144-
- Tests: [tests/validation/tests/single/gstreamer/anc_format/test_anc_format.py](tests/validation/tests/single/gstreamer/anc_format/test_anc_format.py), [tests/validation/tests/dual/gstreamer/anc_format/test_anc_format_dual.py](tests/validation/tests/dual/gstreamer/anc_format/test_anc_format_dual.py), [tests/integration_tests/noctx/testcases/st40i_tests.cpp](tests/integration_tests/noctx/testcases/st40i_tests.cpp)
157+
- Tests:
158+
- [tests/validation/tests/single/gstreamer/anc_format/test_anc_format.py](tests/validation/tests/single/gstreamer/anc_format/test_anc_format.py)
159+
- [tests/validation/tests/dual/gstreamer/anc_format/test_anc_format_dual.py](tests/validation/tests/dual/gstreamer/anc_format/test_anc_format_dual.py)
160+
- [tests/integration_tests/noctx/testcases/st40i_tests.cpp](tests/integration_tests/noctx/testcases/st40i_tests.cpp)
161+
- [tests/integration_tests/noctx/testcases/st40p_auto_detect_tests.cpp](tests/integration_tests/noctx/testcases/st40p_auto_detect_tests.cpp)

doc/validation_framework.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ The `tests/` directory contains test implementations organized by scenario type:
125125
- Split-mode packetized ANC with frame-info logging (sequence discontinuity, packet totals, RTP marker) and ring-size validation
126126
- Pacing sanity via RTP sender helpers and ramdisk-backed media fixtures (configure `ramdisk.media` in `configs/test_config.yaml`)
127127
- Redundant ST40p/ST40i GStreamer ANC cases with per-port seq-gap scheduling (real payloads, lifted packet caps) and frame-info checks for seq discontinuity/loss logging
128+
- Interlace auto-detect on RX (`rx-auto-detect-interlaced` / `ST40P_RX_FLAG_AUTO_DETECT_INTERLACED`) with warnings if neither interlaced nor auto-detect is set; frame-info now includes `field_num` and `interlaced` for detected cadence
128129
- Backend-specific tests (DMA, kernel socket, etc.)
129130
- Integration tests (FFmpeg, GStreamer)
130131

ecosystem/gstreamer_plugin/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,7 @@ The `mtl_st40p_rx` plugin supports all pad capabilities (the data is not checked
492492
| timeout | uint | Timeout in seconds for blocking frame retrieval | 0 to 300 | 60 |
493493
| frame-info-path | string | Optional path to append frame info and sequence stats per frame | N/A | NULL |
494494
| rx-interlaced | boolean | Whether the incoming ancillary stream is interlaced | TRUE/FALSE | FALSE |
495+
| rx-auto-detect-interlaced | boolean | Enable RTP F-bit based interlace detection when cadence is unknown; leaves `rx-interlaced` optional and will warn if both are false. | TRUE/FALSE | FALSE |
495496
| output-format | enum | Serialization format for received ancillary data | `raw-udw` / `rfc8331` | `raw-udw` |
496497
497498
When `output-format` is set to `rfc8331`, each ancillary packet is serialized with an 8-byte
@@ -502,6 +503,7 @@ its user data words so that downstream elements receive complete RFC8331 payload
502503
> **Note:** `rtp-ring-size` values are validated at runtime. If the supplied number is not a power of
503504
> two the element fails to initialize, matching the behavior enforced inside
504505
> `gst_mtl_st40p_rx_start()`.
506+
> **Interlace auto-detect:** When cadence is unknown, set `rx-auto-detect-interlaced=true` and leave `rx-interlaced=false`. The plugin warns if both are false. Frame-info includes `field_num` and `interlaced` once F bits are observed.
505507
506508
#### 5.2.2. Example GStreamer Pipeline for Reception
507509

ecosystem/gstreamer_plugin/gst_mtl_st40p_rx.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ enum {
128128
PROP_ST40P_RX_RTP_RING_SIZE,
129129
PROP_ST40P_RX_TIMEOUT,
130130
PROP_ST40P_RX_INTERLACED,
131+
PROP_ST40P_RX_AUTO_DETECT_INTERLACED,
131132
PROP_ST40P_RX_OUTPUT_FORMAT,
132133
PROP_ST40P_RX_FRAME_INFO_PATH,
133134
PROP_MAX
@@ -346,6 +347,13 @@ static void gst_mtl_st40p_rx_class_init(Gst_Mtl_St40p_RxClass* klass) {
346347
"Set to true if ancillary stream is interlaced", FALSE,
347348
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
348349

350+
g_object_class_install_property(
351+
gobject_class, PROP_ST40P_RX_AUTO_DETECT_INTERLACED,
352+
g_param_spec_boolean(
353+
"rx-auto-detect-interlaced", "Auto detect interlaced cadence",
354+
"Enable RTP F-bit based interlace auto-detection when cadence is unknown",
355+
FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
356+
349357
g_object_class_install_property(
350358
gobject_class, PROP_ST40P_RX_OUTPUT_FORMAT,
351359
g_param_spec_enum("output-format", "Output Format",
@@ -375,6 +383,7 @@ static void gst_mtl_st40p_rx_init(Gst_Mtl_St40p_Rx* src) {
375383
src->rtp_ring_size = DEFAULT_RTP_RING_SIZE;
376384
src->timeout_s = 60;
377385
src->interlaced = FALSE;
386+
src->auto_detect_interlaced = FALSE;
378387
src->output_format = GST_MTL_ST40P_RX_OUTPUT_FORMAT_RAW_UDW;
379388
src->frame_info_path = NULL;
380389
src->frame_info_fp = NULL;
@@ -413,6 +422,9 @@ static void gst_mtl_st40p_rx_set_property(GObject* object, guint prop_id,
413422
case PROP_ST40P_RX_INTERLACED:
414423
src->interlaced = g_value_get_boolean(value);
415424
break;
425+
case PROP_ST40P_RX_AUTO_DETECT_INTERLACED:
426+
src->auto_detect_interlaced = g_value_get_boolean(value);
427+
break;
416428
case PROP_ST40P_RX_OUTPUT_FORMAT:
417429
src->output_format = g_value_get_enum(value);
418430
break;
@@ -453,6 +465,9 @@ static void gst_mtl_st40p_rx_get_property(GObject* object, guint prop_id, GValue
453465
case PROP_ST40P_RX_INTERLACED:
454466
g_value_set_boolean(value, src->interlaced);
455467
break;
468+
case PROP_ST40P_RX_AUTO_DETECT_INTERLACED:
469+
g_value_set_boolean(value, src->auto_detect_interlaced);
470+
break;
456471
case PROP_ST40P_RX_OUTPUT_FORMAT:
457472
g_value_set_enum(value, src->output_format);
458473
break;
@@ -483,6 +498,7 @@ static gboolean gst_mtl_st40p_rx_start(GstBaseSrc* basesrc) {
483498
src->rx_framebuff_cnt ? src->rx_framebuff_cnt : GST_MTL_DEFAULT_FRAMEBUFF_CNT;
484499
ops_rx.max_udw_buff_size = src->max_udw_size;
485500
ops_rx.flags = 0; /* Use non-blocking mode - blocking causes preroll timeout */
501+
if (src->auto_detect_interlaced) ops_rx.flags |= ST40P_RX_FLAG_AUTO_DETECT_INTERLACED;
486502

487503
GST_DEBUG_OBJECT(src, "RX START: framebuff_cnt=%d, max_udw_buff_size=%d",
488504
ops_rx.framebuff_cnt, ops_rx.max_udw_buff_size);
@@ -498,6 +514,11 @@ static gboolean gst_mtl_st40p_rx_start(GstBaseSrc* basesrc) {
498514
GST_DEBUG_OBJECT(src, "RX START: rtp_ring_size=%d", ops_rx.rtp_ring_size);
499515

500516
ops_rx.interlaced = src->interlaced;
517+
if (!src->interlaced && !src->auto_detect_interlaced) {
518+
GST_WARNING_OBJECT(src,
519+
"RX interlaced flag not set; use rx-auto-detect-interlaced=true "
520+
"if cadence is unknown");
521+
}
501522

502523
/* Optional frame info logging */
503524
if (src->frame_info_path && !src->frame_info_fp) {

ecosystem/gstreamer_plugin/gst_mtl_st40p_rx.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ struct _Gst_Mtl_St40p_Rx {
7272
guint rtp_ring_size;
7373
guint timeout_s;
7474
gboolean interlaced;
75+
gboolean auto_detect_interlaced;
7576
gint output_format; /* GstMtlSt40pRxOutputFormat enum value */
7677
gchar* frame_info_path;
7778
FILE* frame_info_fp;

include/st40_api.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,12 @@ struct st40_tx_test_config {
106106
* If enable the rtcp.
107107
*/
108108
#define ST40_RX_FLAG_ENABLE_RTCP (MTL_BIT32(1))
109+
/**
110+
* Flag bit in flags of struct st40_rx_ops.
111+
* If set, lib will auto-detect progressive vs interlaced based on RTP F bits.
112+
* The interlaced boolean in st40_rx_ops is ignored once detection completes.
113+
*/
114+
#define ST40_RX_FLAG_AUTO_DETECT_INTERLACED (MTL_BIT32(2))
109115

110116
/**
111117
* Session type of st2110-40(ancillary) streaming
@@ -336,7 +342,7 @@ struct st40_tx_ops {
336342
enum st_fps fps;
337343
/** Mandatory. 7 bits payload type define in RFC3550 */
338344
uint8_t payload_type;
339-
/** Mandatory. interlaced or not */
345+
/** Mandatory unless ST40_RX_FLAG_AUTO_DETECT_INTERLACED is set. Interlaced or not. */
340346
bool interlaced;
341347

342348
/** Optional. Synchronization source defined in RFC3550, if zero the session will assign

include/st40_pipeline_api.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,12 @@ struct st40_frame_info {
6060
/** TAI timestamp measured right after the RTP packet for this frame was received */
6161
uint64_t receive_timestamp;
6262

63+
/** RTP F bits (field number) for this frame: 0b00 progressive, 0b10 first field,
64+
* 0b11 second field. */
65+
uint8_t field_num;
66+
/** True if the frame was flagged as interlaced (F bits indicate field 1/2). */
67+
bool interlaced;
68+
6369
/** priv pointer for lib, do not touch this */
6470
void* priv;
6571
};
@@ -192,6 +198,12 @@ enum st40p_rx_flag {
192198
* Force the numa of the created session, both CPU and memory
193199
*/
194200
ST40P_RX_FLAG_FORCE_NUMA = (MTL_BIT32(2)),
201+
/**
202+
* If set, lib will auto-detect progressive vs interlaced using RTP F bits. The
203+
* st40p_rx_ops.interlaced field becomes optional and will be updated after
204+
* detection.
205+
*/
206+
ST40P_RX_FLAG_AUTO_DETECT_INTERLACED = (MTL_BIT32(3)),
195207
/** Enable the st40p_rx_get_frame block behavior to wait until a frame becomes
196208
available or timeout(default: 1s, use st40p_rx_set_block_timeout to customize)*/
197209
ST40P_RX_FLAG_BLOCK_GET = (MTL_BIT32(15)),
@@ -204,7 +216,7 @@ enum st40p_rx_flag {
204216
struct st40p_rx_ops {
205217
/** Mandatory. rx port info */
206218
struct st_rx_port port;
207-
/** Mandatory. interlaced or not */
219+
/** Mandatory unless ST40P_RX_FLAG_AUTO_DETECT_INTERLACED is set. interlaced or not */
208220
bool interlaced;
209221
/** Mandatory. the frame buffer count. */
210222
uint16_t framebuff_cnt;

lib/src/st2110/pipeline/st40_pipeline_rx.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ static int rx_st40p_rtp_ready(void* priv) {
160160
frame_info->rtp_timestamp = rtp_timestamp;
161161
frame_info->timestamp = rtp_timestamp;
162162
frame_info->epoch = 0;
163+
frame_info->field_num = hdr->first_hdr_chunk.f & 0x3;
164+
frame_info->interlaced = (frame_info->field_num & 0x2) ? true : false;
163165
ctx->inflight_frame = framebuff;
164166
ctx->inflight_rtp_timestamp = rtp_timestamp;
165167
} else {
@@ -168,6 +170,13 @@ static int rx_st40p_rtp_ready(void* priv) {
168170
if (!frame_info->receive_timestamp ||
169171
(frame_info->receive_timestamp > receive_timestamp))
170172
frame_info->receive_timestamp = receive_timestamp;
173+
174+
/* Update field metadata if a later packet carries interlace info */
175+
uint8_t pkt_field = hdr->first_hdr_chunk.f & 0x3;
176+
if (!frame_info->field_num || frame_info->field_num != pkt_field) {
177+
frame_info->field_num = pkt_field;
178+
frame_info->interlaced = (pkt_field & 0x2) ? true : false;
179+
}
171180
}
172181

173182
if (ctx->last_seq_valid[s_port]) {
@@ -321,6 +330,15 @@ static int rx_st40p_create_transport(struct mtl_main_impl* impl, struct st40p_rx
321330
ops_rx.payload_type = ops->port.payload_type;
322331
ops_rx.ssrc = ops->port.ssrc;
323332
ops_rx.interlaced = ops->interlaced;
333+
if (ops->flags & ST40P_RX_FLAG_AUTO_DETECT_INTERLACED)
334+
ops_rx.flags |= ST40_RX_FLAG_AUTO_DETECT_INTERLACED;
335+
336+
if (!ops->interlaced && !(ops->flags & ST40P_RX_FLAG_AUTO_DETECT_INTERLACED)) {
337+
warn(
338+
"%s(%d), rx-interlaced not set; enable ST40P_RX_FLAG_AUTO_DETECT_INTERLACED if "
339+
"cadence is unknown\n",
340+
__func__, ctx->idx);
341+
}
324342

325343
for (int i = 0; i < ops_rx.num_port; i++) {
326344
memcpy(ops_rx.ip_addr[i], ops->port.ip_addr[i], MTL_IP_ADDR_LEN);
@@ -410,6 +428,8 @@ static int rx_st40p_init_fbs(struct st40p_rx_ctx* ctx, struct st40p_rx_ops* ops)
410428
frame_info->seq_lost = 0;
411429
frame_info->rtp_marker = false;
412430
frame_info->receive_timestamp = 0;
431+
frame_info->field_num = 0;
432+
frame_info->interlaced = false;
413433
frame_info->priv = framebuff;
414434

415435
dbg("%s(%d), init fb %u\n", __func__, idx, i);
@@ -588,6 +608,8 @@ int st40p_rx_put_frame(st40p_rx_handle handle, struct st40_frame_info* frame_inf
588608
frame_info->seq_lost = 0;
589609
frame_info->rtp_marker = false;
590610
frame_info->receive_timestamp = 0;
611+
frame_info->field_num = 0;
612+
frame_info->interlaced = false;
591613
framebuff->stat = ST40P_RX_FRAME_FREE;
592614
ctx->stat_put_frame++;
593615

lib/src/st2110/pipeline/st40_pipeline_tx.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ static int tx_st40p_frame_done(void* priv, uint16_t frame_idx,
157157
frame_info->timestamp = meta->timestamp;
158158
frame_info->epoch = meta->epoch;
159159
frame_info->rtp_timestamp = meta->rtp_timestamp;
160+
frame_info->interlaced = ctx->ops.interlaced;
161+
frame_info->field_num = ctx->ops.interlaced ? (meta->second_field ? 0x3 : 0x2) : 0x0;
160162

161163
mt_pthread_mutex_lock(&ctx->lock);
162164
if (ST40P_TX_FRAME_IN_TRANSMITTING == framebuff->stat) {
@@ -331,6 +333,8 @@ static int tx_st40p_init_fbs(struct st40p_tx_ctx* ctx, struct st40p_tx_ops* ops)
331333
frame_info->seq_lost = 0;
332334
frame_info->rtp_marker = false;
333335
frame_info->receive_timestamp = 0;
336+
frame_info->field_num = 0;
337+
frame_info->interlaced = false;
334338

335339
/* addr will be resolved later in tx_st40p_create_transport */
336340
frame_info->priv = framebuff;

lib/src/st2110/st_header.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,6 +1200,9 @@ struct st_rx_ancillary_session_impl {
12001200
struct st_rx_ancillary_sessions_mgr* mgr;
12011201
bool attached;
12021202
struct st40_rx_ops ops;
1203+
bool interlace_auto;
1204+
bool interlace_detected;
1205+
bool interlace_interlaced;
12031206
char ops_name[ST_MAX_NAME_LEN];
12041207
struct st_rx_session_priv priv[MTL_SESSION_PORT_MAX];
12051208
struct st_rx_ancillary_session_handle_impl* st40_handle;

0 commit comments

Comments
 (0)