uint16_t last_seq; /* sequence of the next dequeued packet */
block_t *blocks; /* re-ordered blocks queue */
- mtime_t last_dq; /* last dequeued (decoded) packet local timestamp */
+ mtime_t ref_ts; /* reference timestamp for reordering */
void *opaque[0]; /* Per-source private payload data */
};
}
}
src->last_rx = now;
- block->i_pts = now;
src->last_ts = rtp_timestamp (block);
/* Check sequence number */
/* FIXME: handle timestamp wrap properly */
/* TODO: inter-medias/sessions sync (using RTCP-SR) */
const uint32_t timestamp = rtp_timestamp (block);
- src->last_dq = block->i_pts;
+ src->ref_ts = 0;
block->i_pts = CLOCK_FREQ * timestamp / pt->frequency;
/* CSRC count */
* match for random gaussian jitter). Additionnaly, we implicitly
* wait for misordering times the packetization time.
*/
- mtime_t deadline = src->last_dq;
+ mtime_t deadline = src->ref_ts;
const rtp_pt_t *pt = rtp_find_ptype (session, src, block, NULL);
+ if (!deadline)
+ deadline = src->ref_ts = now;
if (pt)
deadline += CLOCK_FREQ * 3 * src->jitter / pt->frequency;