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; }
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(); }