diff --git a/daemon/ssrc.c b/daemon/ssrc.c index 448fb2598..788763522 100644 --- a/daemon/ssrc.c +++ b/daemon/ssrc.c @@ -574,9 +574,7 @@ void payload_tracker_add(struct payload_tracker *t, int pt) { } // fill in new entry - t->last[t->last_idx++] = pt; - if (t->last_idx >= G_N_ELEMENTS(t->last)) - t->last_idx = 0; + t->last[t->last_idx] = pt; // increase new counter PT_DBG("increasing new pt count from %u", t->count[pt]); @@ -597,6 +595,8 @@ void payload_tracker_add(struct payload_tracker *t, int pt) { __pt_sort(t, old_pt); out: + if (++t->last_idx >= G_N_ELEMENTS(t->last)) + t->last_idx = 0; mutex_unlock(&t->lock); } diff --git a/t/test-payload-tracker.c b/t/test-payload-tracker.c index 0ce8a6cb2..00c794f52 100644 --- a/t/test-payload-tracker.c +++ b/t/test-payload-tracker.c @@ -107,6 +107,51 @@ int main(void) { add(1); cmp("0,1,10,5,120"); + payload_tracker_init(&t); + for (int i = 0; i < 32; i++) + add(8); + cmp("8"); + add(96); + add(96); + add(96); + cmp("8,96"); + add(96); + add(96); + add(96); + add(96); + add(96); + add(96); + add(96); + cmp("8,96"); + for (int i = 0; i < 32; i++) + add(8); + cmp("8,96"); + add(100); + add(100); + add(100); + add(100); + add(100); + add(100); + add(100); + add(100); + add(100); + add(100); + add(100); + add(100); + add(100); + add(100); + add(100); + cmp("8,100,96"); + add(100); + add(100); + add(100); + add(100); + add(100); + add(100); + add(100); + add(100); + cmp("100,8,96"); + return 0; }