X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=vss.h;h=9bdc449c0a2a8617b70d06bb1df50272b7761a40;hp=0234296fd599569c44738929987a913bf050a8bb;hb=1f132af229ff899aae357ee75a3b8e7b4bd061bd;hpb=c79899fe6a1e8eb3086749f46c599d9790d99921 diff --git a/vss.h b/vss.h index 0234296f..9bdc449c 100644 --- a/vss.h +++ b/vss.h @@ -1,42 +1,55 @@ /* - * Copyright (C) 2005-2007 Andre Noll + * Copyright (C) 2005-2009 Andre Noll * - * 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 - * (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. - * - * 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, USA. + * Licensed under the GPL v2. For licencing details see COPYING. */ -/** \file vss.h exported functions from vss.c (para_server) */ -void vss_init(void); -void vss_send_chunk(void); -struct timeval *vss_preselect(void); -const char *audio_format_name(int); +/** \file vss.h Exported functions from vss.c (para_server). */ + +void init_vss_task(int afs_socket); unsigned int vss_playing(void); unsigned int vss_next(void); unsigned int vss_repos(void); unsigned int vss_paused(void); -char *vss_get_header(int *header_len); +unsigned int vss_stopped(void); struct timeval *vss_chunk_time(void); -int guess_audio_format(const char *name); const char *supported_audio_formats(void); -/** stop playing after current audio file */ +/** Stop playing after current audio file. */ #define VSS_NOMORE 1 -/** skip remaining part of current audio file */ +/** Skip remaining part of current audio file. */ #define VSS_NEXT 2 -/** a reposition request was sent by a client */ +/** A reposition request was sent by a client. */ #define VSS_REPOS 4 -/** currently playing */ +/** Currently playing. */ #define VSS_PLAYING 8 -/** a client requested to change the audio file selector */ -#define VSS_CHANGE 16 + +/** + * Each paraslash sender may register arbitrary many clients to the virtual + * streaming system, possibly with varying fec parameters. In order to do so, + * it must allocate a \a fec_client_parms structure and pass it to \ref + * add_fec_client. + * + * Clients are automatically removed from that list by the vss if an error + * occurs, or if the sender requests deletion of a client by calling \ref + * vss_del_fec_client(). + */ +struct fec_client; + +/** FEC parameters requested by FEC clients. */ +struct fec_client_parms { + /** Number of data slices plus redundant slices. */ + uint8_t slices_per_group; + /** Number of slices minus number of redundant slices. */ + uint8_t data_slices_per_group; + /** Maximal number of bytes per slice. */ + uint16_t max_slice_bytes; + /** Called by vss.c when the next slice should be sent. */ + int (*send)(char *buf, size_t num_bytes, void *private_data); + /** Passed verbatim to \a send(). */ + void *private_data; +}; + +int vss_add_fec_client(struct fec_client_parms *fcp, struct fec_client **result); +void vss_del_fec_client(struct fec_client *fc); +size_t vss_get_fec_eof_packet(const char **buf);