X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=ogg_afh.c;h=fcc88362981c815cd0a04823d504a7ea4df5dec0;hp=3445970bd867acfbcd7ad52a1df1a58edd9bf691;hb=0bd031509add6dccedb04a1e79420a7a9ca02711;hpb=90501714a4379e36e191a7d5330378f898ac258f diff --git a/ogg_afh.c b/ogg_afh.c index 3445970b..fcc88362 100644 --- a/ogg_afh.c +++ b/ogg_afh.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004-2006 Andre Noll + * Copyright (C) 2004-2007 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 @@ -15,29 +15,30 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. */ -/** \file ogg.c para_server's ogg vorbis audio format handler */ +/** \file ogg_afh.c para_server's ogg vorbis audio format handler */ +#include #include #include #include #include "server.cmdline.h" #include "server.h" -#include "afs.h" +#include "vss.h" #include "afh.h" #include "error.h" #include "string.h" -/* must be big enough to hold header */ +/** must be big enough to hold header */ #define CHUNK_SIZE 32768 static double chunk_time = 0.25; static OggVorbis_File *oggvorbis_file; static FILE *infile; -static int header_len, oggbuf_len, vi_channels; -static char *header, *oggbuf; +static int header_len, inbuf_size, vi_channels; +static char *header, *inbuf; static ssize_t *chunk_table, max_chunk_len; -struct audio_format_handler *af; +static struct audio_format_handler *af; static long vi_sampling_rate, vi_bitrate, vi_bitrate_nominal, num_chunks; @@ -80,11 +81,9 @@ static int ogg_compute_header_len(void) goto err2; } ret = -E_VORBIS; - if (vorbis_synthesis_headerin(&vi, &vc, &packet) < 0) { + if (vorbis_synthesis_headerin(&vi, &vc, &packet) < 0) goto err2; - } else - PARA_INFO_LOG("channels: %i, rate: %li\n", vi.channels, - vi.rate); + PARA_INFO_LOG("channels: %i, rate: %li\n", vi.channels, vi.rate); ogg_stream_packetin(stream_out, &packet); ret = ogg_sync_pageout(sync_in, &page); @@ -116,7 +115,7 @@ err2: err1: ogg_sync_destroy(sync_in); vorbis_info_clear(&vi); - vorbis_comment_clear(&vc); + vorbis_comment_clear(&vc); return ret; } @@ -129,7 +128,7 @@ static void tunetable(void) continue; } if (j < 0) - tv_scale(i + 2, &af->chunk_tv, &af->eof_tv); + tv_scale(i, &af->chunk_tv, &af->eof_tv); for (j = lp; j < i; j++) chunk_table[j] = chunk_table[i]; lp = i; @@ -141,7 +140,7 @@ static void tunetable(void) lp = i; for (i = 2; i < num_chunks - lp; i++) chunk_table[i] = chunk_table[i + lp]; -#endif +#endif } @@ -160,7 +159,7 @@ static void ogg_compute_chunk_table(double time_total) num = time_total / chunk_time + 3; PARA_DEBUG_LOG("chunk time: %g allocating %d chunk pointers\n", chunk_time, num); - chunk_table = para_malloc(num * sizeof(ogg_int64_t)); + chunk_table = para_malloc(num * sizeof(size_t)); chunk_table[0] = 0; max_chunk_len = 0; rewind(infile); @@ -202,19 +201,19 @@ static void ogg_close_audio_file(void) free(chunk_table); chunk_table = NULL; num_chunks = 0; - free(oggbuf); - oggbuf = NULL; - oggbuf_len = 0; + free(inbuf); + inbuf = NULL; + inbuf_size = 0; } -static int ogg_save_header(FILE *file, int header_len) +static int ogg_save_header(FILE *file, int len) { int ret; - header = para_malloc(header_len); + header = para_malloc(len); rewind(file); - ret = read(fileno(file), header, header_len); - if (ret != header_len) + ret = read(fileno(file), header, len); + if (ret != len) return -E_OGG_READ; return 1; } @@ -306,26 +305,26 @@ static ogg_int64_t get_chunk_size(long unsigned chunk_num) return ret; } -char *ogg_read_chunk(long unsigned current_chunk, ssize_t *len) +static char *ogg_read_chunk(long unsigned current_chunk, ssize_t *len) { int ret; ogg_int64_t cs = get_chunk_size(current_chunk); if (!cs) { /* nothing to send for this run */ *len = 0; - return oggbuf; + return inbuf; } if (cs < 0) { /* eof */ *len = 0; return NULL; } *len = cs; - if (!oggbuf || oggbuf_len < *len) { + if (!inbuf || inbuf_size < *len) { PARA_INFO_LOG("increasing ogg buffer size (%d -> %zu)\n", - oggbuf_len, *len); - oggbuf = para_realloc(oggbuf, *len); - oggbuf_len = *len; + inbuf_size, *len); + inbuf = para_realloc(inbuf, *len); + inbuf_size = *len; } - ret = read(fileno(infile), oggbuf, *len); + ret = read(fileno(infile), inbuf, *len); if (!ret) { *len = 0; return NULL; @@ -337,7 +336,7 @@ char *ogg_read_chunk(long unsigned current_chunk, ssize_t *len) if (ret != *len) PARA_WARNING_LOG("short read (%d/%zd)\n", ret, *len); *len = ret; - return oggbuf; + return inbuf; } static char *ogg_get_header_info(int *len) @@ -347,6 +346,12 @@ static char *ogg_get_header_info(int *len) } static const char* ogg_suffixes[] = {"ogg", NULL}; + +/** + * the init function of the ogg vorbis audio format handler + * + * \param p pointer to the struct to initialize + */ void ogg_init(struct audio_format_handler *p) { af = p;