Skip to content

Commit 8b24a03

Browse files
committed
Add: Implement per-port and session-level sequence tracking in RTP handling
1 parent cd77691 commit 8b24a03

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

lib/src/st2110/pipeline/st40_pipeline_rx.c

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,17 +183,32 @@ static int rx_st40p_rtp_ready(void* priv) {
183183
}
184184
}
185185

186+
/* per-port sequence tracking */
186187
if (ctx->last_seq_valid[s_port]) {
187188
uint16_t expected = (uint16_t)(ctx->last_seq[s_port] + 1);
188189
if (expected != seq_number) {
189-
frame_info->seq_discont = true;
190+
frame_info->port_seq_discont[s_port] = true;
190191
if (mt_seq16_greater(seq_number, expected))
191-
frame_info->seq_lost += (uint16_t)(seq_number - expected);
192+
frame_info->port_seq_lost[s_port] += (uint16_t)(seq_number - expected);
192193
}
193194
}
194195
ctx->last_seq[s_port] = seq_number;
195196
ctx->last_seq_valid[s_port] = true;
196197

198+
/* session-level sequence tracking (merged across all ports) */
199+
if (ctx->session_last_seq_valid) {
200+
uint16_t expected = (uint16_t)(ctx->session_last_seq + 1);
201+
if (expected != seq_number && mt_seq16_greater(seq_number, ctx->session_last_seq)) {
202+
frame_info->seq_discont = true;
203+
frame_info->seq_lost += (uint16_t)(seq_number - expected);
204+
}
205+
}
206+
if (!ctx->session_last_seq_valid ||
207+
mt_seq16_greater(seq_number, ctx->session_last_seq)) {
208+
ctx->session_last_seq = seq_number;
209+
ctx->session_last_seq_valid = true;
210+
}
211+
197212
frame_info->pkts_total++;
198213
frame_info->pkts_recv[s_port]++;
199214

0 commit comments

Comments
 (0)