X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=wav.c;fp=wav.c;h=0000000000000000000000000000000000000000;hp=ad3458d1b2be3bbebd96fb71b27af2af5d33fca5;hb=dd0b1f12758ac877de6834b34f8c7f9291d4311d;hpb=89a0e510df07bc7210ca9e73381763fdd183df75 diff --git a/wav.c b/wav.c deleted file mode 100644 index ad3458d1..00000000 --- a/wav.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2005-2008 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ - -/** \file wav.c a filter that inserts a wave header */ - -#include "para.h" - -#include "list.h" -#include "sched.h" -#include "filter.h" -#include "string.h" - -/** size of the output buffer */ -#define WAV_OUTBUF_SIZE 81920 -/** a wav header is always 44 bytes */ -#define WAV_HEADER_LEN 44 -/** always write 16 bit header */ -#define BITS 16 - -/** - * write a 32 bit unsigned value to a buffer - * - * \param buf the buffer to write to - * \param x the value to write - */ -#define WRITE_U32(buf, x) (buf)[0] = (unsigned char)((x) & 0xff);\ - (buf)[1] = (unsigned char)(((x) >> 8) & 0xff);\ - (buf)[2] = (unsigned char)(((x) >> 16) & 0xff);\ - (buf)[3] = (unsigned char)(((x) >> 24) & 0xff); - -/** - * write a 16 bit unsigned value to a buffer - * - * \param buf the buffer to write to - * \param x the value to write - */ -#define WRITE_U16(buf, x) (buf)[0] = (unsigned char)((x) & 0xff); - -static void make_wav_header(unsigned int channels, unsigned int samplerate, - struct filter_node *fn) -{ - - char *headbuf = fn->buf; - unsigned int size = 0x7fffffff; - 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); - WRITE_U32(headbuf + 4, size - 8); - memcpy(headbuf + 8, "WAVE", 4); - memcpy(headbuf + 12, "fmt ", 4); - WRITE_U32(headbuf + 16, 16); - WRITE_U16(headbuf + 20, 1); /* format */ - WRITE_U16(headbuf + 22, channels); - WRITE_U32(headbuf + 24, samplerate); - WRITE_U32(headbuf + 28, bytespersec); - WRITE_U16(headbuf + 32, align); - WRITE_U16(headbuf + 34, BITS); - memcpy(headbuf + 36, "data", 4); - WRITE_U32(headbuf + 40, size - 44); -} - -static ssize_t wav_convert(char *inbuf, size_t len, struct filter_node *fn) -{ - size_t copy; - 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; -// return 0; - } - copy = PARA_MIN(len, fn->bufsize - fn->loaded); - memmove(fn->buf + fn->loaded, inbuf, copy); - fn->loaded += copy; -// PARA_DEBUG_LOG("len = %d, copy = %d\n", len, copy); - return copy; -} - -static void wav_close(struct filter_node *fn) -{ - free(fn->buf); - fn->buf = NULL; - free(fn->private_data); - fn->private_data = NULL; -} - -static void wav_open(struct filter_node *fn) -{ - int *bof; - - fn->bufsize = WAV_OUTBUF_SIZE; - 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); -} - -/** - * the init function of the wav filter - * - * \param f struct to initialize - */ -void wav_filter_init(struct filter *f) -{ - f->convert = wav_convert; - f->close = wav_close; - f->open = wav_open; -}