Ejemplo n.º 1
0
int
pktbuf_enqueue(struct s_pktbuf *pb, rtp_packet *p)
{
	timestamp_t playout;
	uint32_t    psize;

        assert(p != NULL);
        playout = ts_seq32_in(&pb->rtp_sequencer, 8000 /* Arbitrary */, p->fields.ts);
	psize   = sizeof(rtp_packet);

	if (!pb_add(pb->rtp_buffer, (u_char*)p, psize, playout)) {
                u_char* pp = (u_char*)p;
		pktbuf_free_rtp(&pp, psize);
		return TRUE;
	}

	if (pb_node_count(pb->rtp_buffer) > pb->max_packets) {
		debug_msg("RTP packet queue overflow\n");
		if (pktbuf_dequeue(pb, &p)) {
                        u_char* pp = (u_char*)p;
			pktbuf_free_rtp(&pp, psize);
			return TRUE;
		}
		/* NOTREACHED */
		debug_msg("Failed to detach overflow packet\n");
		abort();
	}

        return TRUE;
}
Ejemplo n.º 2
0
static void
remove_thing(pktbuf_t *pb) {
	rtp_packet *pp;
	if (pktbuf_dequeue(pb, &pp)) {
		xfree(pp);
		buf_est --;
	}
	assert(buf_est == pktbuf_get_count(pb));
	xmemchk();
}