/*
- * Copyright (C) 2005-2007 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2008 Andre Noll <maan@systemlinux.org>
*
- * 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 wav.c a filter that inserts a wave header */
*/
#define WRITE_U16(buf, x) (buf)[0] = (unsigned char)((x) & 0xff);
-static void make_wav_header(int channels, int samplerate, struct filter_node *fn)
+static void make_wav_header(unsigned int channels, unsigned int samplerate,
+ struct filter_node *fn)
{
char *headbuf = fn->buf;
int bytespersec = channels * samplerate * BITS / 8;
int align = channels * BITS / 8;
+ assert(channels);
PARA_DEBUG_LOG("writing wave header: %d channels, %d KHz\n", channels, samplerate);
memset(headbuf, 0, WAV_HEADER_LEN);
memcpy(headbuf, "RIFF", 4);
int *bof = fn->private_data;
if (*bof) {
+ if (!len)
+ return 0;
make_wav_header(fn->fc->channels, fn->fc->samplerate, fn);
fn->loaded = WAV_HEADER_LEN;
*bof = 0;
fn->buf = para_malloc(fn->bufsize);
fn->private_data = para_malloc(sizeof(int));
bof = fn->private_data;
+ fn->loaded = 0;
*bof = 1;
PARA_INFO_LOG("wav filter node: %p, output buffer: %p, loaded: %zd\n",
fn, fn->buf, fn->loaded);