X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/8e3fe3d8ea9f5e75b6f1be4e4ae8cf2c16db88e3..11680e1989c6c867f207be7197602776e05cae6a:/clients/playrtp.h diff --git a/clients/playrtp.h b/clients/playrtp.h index 7885a28..ff8a761 100644 --- a/clients/playrtp.h +++ b/clients/playrtp.h @@ -2,20 +2,18 @@ * This file is part of DisOrder. * Copyright (C) 2007 Richard Kettlewell * - * This program is free software; you can redistribute it and/or modify + * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * along with this program. If not, see . */ /** @file clients/playrtp.h * @brief RTP player @@ -60,11 +58,15 @@ struct packet { * * Valid values are: * - @ref IDLE - the idle bit was set in the RTP packet + * - @ref SILENT - packet is entirely silent */ unsigned flags; /** @brief idle bit set in RTP packet*/ #define IDLE 0x0001 +/** @brief RTP packet is entirely silent */ +#define SILENT 0x0002 + /** @brief Raw sample data * * Only the first @p nsamples samples are defined; the rest is uninitialized @@ -109,14 +111,27 @@ static inline int lt_packet(const struct packet *a, const struct packet *b) { return lt(a->timestamp, b->timestamp); } +/** @brief Return true if @p p contains @p timestamp + * + * Containment implies that a sample @p timestamp exists within the packet. + */ +static inline int contains(const struct packet *p, uint32_t timestamp) { + const uint32_t packet_start = p->timestamp; + const uint32_t packet_end = p->timestamp + p->nsamples; + + return (ge(timestamp, packet_start) + && lt(timestamp, packet_end)); +} + /** @struct pheap * @brief Binary heap of packets ordered by timestamp */ HEAP_TYPE(pheap, struct packet *, lt_packet); -struct packet *new_packet(void); -void free_packet(struct packet *p); +struct packet *playrtp_new_packet(void); +void playrtp_free_packet(struct packet *p); +void playrtp_fill_buffer(void); +struct packet *playrtp_next_packet(void); -extern const char *device; extern struct packet *received_packets; extern struct packet **received_tail; extern pthread_mutex_t receive_lock; @@ -128,7 +143,13 @@ extern uint32_t next_timestamp; extern int active; extern pthread_mutex_t lock; extern pthread_cond_t cond; +extern unsigned minbuffer; + +extern int16_t *dump_buffer; +extern size_t dump_index; +extern size_t dump_size; +void playrtp_oss(void), playrtp_alsa(void), playrtp_coreaudio(void); #endif /* PLAYRTP_H */