mirror of
https://github.com/mpv-player/mpv
synced 2025-02-16 20:27:23 +00:00
Added raw PCM writer ao driver.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1108 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
17ae9505a4
commit
de46867f2d
@ -4,7 +4,7 @@ include config.mak
|
||||
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)
|
||||
|
97
libao2/ao_pcm.c
Normal file
97
libao2/ao_pcm.c
Normal file
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -33,6 +33,7 @@ extern ao_functions_t audio_out_sdl;
|
||||
#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 @@ ao_functions_t* audio_out_drivers[] =
|
||||
#ifdef USE_SUN_AUDIO
|
||||
&audio_out_sun,
|
||||
#endif
|
||||
&audio_out_pcm,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user