Mercurial > mplayer.hg
changeset 1107:9d764880d989
Added raw PCM writer ao driver.
author | atmosfear |
---|---|
date | Tue, 12 Jun 2001 11:00:15 +0000 |
parents | 7255ea9a55d5 |
children | 268c1d28cff2 |
files | libao2/Makefile libao2/ao_pcm.c libao2/audio_out.c |
diffstat | 3 files changed, 100 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/libao2/Makefile Tue Jun 12 09:07:36 2001 +0000 +++ b/libao2/Makefile Tue Jun 12 11:00:15 2001 +0000 @@ -4,7 +4,7 @@ LIBNAME = libao2.a # TODO: moveout ao_sdl.c so it's only used when SDL is detected -SRCS=audio_out.c ao_null.c $(OPTIONAL_SRCS) +SRCS=audio_out.c ao_null.c ao_pcm.c $(OPTIONAL_SRCS) OBJS=$(SRCS:.c=.o) CFLAGS = $(OPTFLAGS) -I. -I.. $(SDL_INC)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libao2/ao_pcm.c Tue Jun 12 11:00:15 2001 +0000 @@ -0,0 +1,97 @@ +#include <stdio.h> +#include <stdlib.h> + +#include "audio_out.h" +#include "audio_out_internal.h" + +static ao_info_t info = +{ + "PCM writer audio output", + "pcm", + "Atmosfear", + "" +}; + +LIBAO_EXTERN(pcm) + +// there are some globals: +// ao_samplerate +// ao_channels +// ao_format +// ao_bps +// ao_outburst +// ao_buffersize + +static FILE *fp = NULL; + +// to set/get/query special features/parameters +static int control(int cmd,int arg){ + return -1; +} + +// open & setup audio device +// return: 1=success 0=fail +static int init(int rate,int channels,int format,int flags){ + + printf("PCM: File: audiodump.pcm Samplerate: %iHz Channels: %s Format %s\n", rate, (channels > 1) ? "Stereo" : "Mono", audio_out_format_name(format)); + printf("PCM: Info - fastest dumping is achieved with -vo null -hardframedrop.\n"); + fp = fopen("audiodump.pcm", "wb"); + + ao_outburst = 4096; + + + if(fp) return 1; + printf("PCM: Failed to open audiodump.pcm for writing!\n"); + return 0; +} + +// close audio device +static void uninit(){ + fclose(fp); +} + +// stop playing and empty buffers (for seeking/pause) +static void reset(){ + +} + +// stop playing, keep buffers (for pause) +static void audio_pause() +{ + // for now, just call reset(); + reset(); +} + +// resume playing, after audio_pause() +static void audio_resume() +{ +} + +// return: how many bytes can be played without blocking +static int get_space(){ + + return ao_outburst; +} + +// plays 'len' bytes of 'data' +// it should round it down to outburst*n +// return: number of bytes played +static int play(void* data,int len,int flags){ + + //printf("PCM: Writing chunk!\n"); + fwrite(data,len,1,fp); + + return len; +} + +// return: how many unplayed bytes are in the buffer +static int get_delay(){ + + return 0; +} + + + + + +
--- a/libao2/audio_out.c Tue Jun 12 09:07:36 2001 +0000 +++ b/libao2/audio_out.c Tue Jun 12 11:00:15 2001 +0000 @@ -33,6 +33,7 @@ #ifdef USE_SUN_AUDIO extern ao_functions_t audio_out_sun; #endif +extern ao_functions_t audio_out_pcm; ao_functions_t* audio_out_drivers[] = { @@ -55,6 +56,7 @@ #ifdef USE_SUN_AUDIO &audio_out_sun, #endif + &audio_out_pcm, NULL };