annotate libao2/ao_sdl.c @ 974:0d4e4da7c126

-abs support
author arpi_esp
date Sun, 03 Jun 2001 21:26:23 +0000
parents b49f89b3ab2e
children 65353ed24ac5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
1 /*
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
2 * ao_sdl.c - libao2 SDLlib Audio Output Driver for MPlayer
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
3 *
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
4 * This driver is under the same license as MPlayer.
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
5 * (http://mplayer.sf.net)
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
6 *
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
7 * Copyleft 2001 by Felix Bünemann (atmosfear@users.sf.net)
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
8 *
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
9 * Thanks to Arpi for nice ringbuffer-code!
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
10 *
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
11 */
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
12
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
13 #include <stdio.h>
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
14
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
15 #include "audio_out.h"
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
16 #include "audio_out_internal.h"
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
17
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
18 #include "../libvo/fastmemcpy.h"
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
19
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
20 static ao_info_t info =
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
21 {
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
22 "SDLlib audio output",
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
23 "sdl",
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
24 "Felix Buenemann <atmosfear@users.sourceforge.net>",
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
25 ""
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
26 };
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
27
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
28 LIBAO_EXTERN(sdl)
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
29
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
30 // there are some globals:
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
31 // ao_samplerate
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
32 // ao_channels
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
33 // ao_format
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
34 // ao_bps
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
35 // ao_outburst
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
36 // ao_buffersize
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
37
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
38 // Samplesize used by the SDLlib AudioSpec struct
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
39 #define SAMPLESIZE 512
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
40
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
41 // General purpose Ring-buffering routines
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
42
974
0d4e4da7c126 -abs support
arpi_esp
parents: 972
diff changeset
43 #define BUFFSIZE 4096
0d4e4da7c126 -abs support
arpi_esp
parents: 972
diff changeset
44 #define NUM_BUFS 16
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
45
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
46 static unsigned char *buffer[NUM_BUFS];
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
47
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
48 static unsigned int buf_read=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
49 static unsigned int buf_write=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
50 static unsigned int buf_read_pos=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
51 static unsigned int buf_write_pos=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
52
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
53 static int full_buffers=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
54 static int buffered_bytes=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
55
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
56 static int write_buffer(unsigned char* data,int len){
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
57 int len2=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
58 int x;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
59 while(len>0){
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
60 if(full_buffers==NUM_BUFS) break;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
61 x=BUFFSIZE-buf_write_pos;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
62 if(x>len) x=len;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
63 memcpy(buffer[buf_write]+buf_write_pos,data+len2,x);
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
64 len2+=x; len-=x;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
65 buffered_bytes+=x; buf_write_pos+=x;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
66 if(buf_write_pos>=BUFFSIZE){
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
67 // block is full, find next!
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
68 buf_write=(buf_write+1)%NUM_BUFS;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
69 ++full_buffers;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
70 buf_write_pos=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
71 }
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
72 }
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
73 return len2;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
74 }
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
75
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
76 static int read_buffer(unsigned char* data,int len){
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
77 int len2=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
78 int x;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
79 while(len>0){
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
80 if(full_buffers==0) break; // no more data buffered!
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
81 x=BUFFSIZE-buf_read_pos;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
82 if(x>len) x=len;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
83 memcpy(data+len2,buffer[buf_read]+buf_read_pos,x);
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
84 len2+=x; len-=x;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
85 buffered_bytes-=x; buf_read_pos+=x;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
86 if(buf_read_pos>=BUFFSIZE){
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
87 // block is empty, find next!
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
88 buf_read=(buf_read+1)%NUM_BUFS;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
89 --full_buffers;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
90 buf_read_pos=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
91 }
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
92 }
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
93 return len2;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
94 }
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
95
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
96 // end ring buffer stuff
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
97
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
98 #ifdef __FreeBSD__
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
99 #include <SDL11/SDL.h>
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
100 #else
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
101 #include <SDL/SDL.h>
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
102 #endif
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
103
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
104 // to set/get/query special features/parameters
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
105 static int control(int cmd,int arg){
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
106 return -1;
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
107 }
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
108
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
109 // SDL Callback function
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
110 void outputaudio(void *unused, Uint8 *stream, int len) {
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
111 //SDL_MixAudio(stream, read_buffer(buffers, len), len, SDL_MIX_MAXVOLUME);
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
112 read_buffer(stream, len);
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
113 }
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
114
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
115 // open & setup audio device
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
116 // return: 1=success 0=fail
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
117 static int init(int rate,int channels,int format,int flags){
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
118
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
119 /* SDL Audio Specifications */
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
120 SDL_AudioSpec aspec;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
121
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
122 int i;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
123 /* Allocate ring-buffer memory */
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
124 for(i=0;i<NUM_BUFS;i++) buffer[i]=malloc(BUFFSIZE);
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
125
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
126 printf("SDL: Samplerate: %iHz Channels: %s Format %iBit\n", rate, (channels > 1) ? "Stereo" : "Mono", format);
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
127
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
128 /* The desired audio frequency in samples-per-second. */
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
129 aspec.freq = rate;
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
130
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
131 /* The desired audio format (see SDL_AudioSpec) */
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
132 aspec.format = (format == 16) ? AUDIO_S16 : AUDIO_U8;
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
133
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
134 /* Number of channels (mono/stereo) */
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
135 aspec.channels = channels;
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
136
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
137 /* The desired size of the audio buffer in samples. This number should be a power of two, and may be adjusted by the audio driver to a value more suitable for the hardware. Good values seem to range between 512 and 8192 inclusive, depending on the application and CPU speed. Smaller values yield faster response time, but can lead to underflow if the application is doing heavy processing and cannot fill the audio buffer in time. A stereo sample consists of both right and left channels in LR ordering. Note that the number of samples is directly related to time by the following formula: ms = (samples*1000)/freq */
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
138 aspec.samples = SAMPLESIZE;
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
139
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
140 /* This should be set to a function that will be called when the audio device is ready for more data. It is passed a pointer to the audio buffer, and the length in bytes of the audio buffer. This function usually runs in a separate thread, and so you should protect data structures that it accesses by calling SDL_LockAudio and SDL_UnlockAudio in your code. The callback prototype is:
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
141 void callback(void *userdata, Uint8 *stream, int len); userdata is the pointer stored in userdata field of the SDL_AudioSpec. stream is a pointer to the audio buffer you want to fill with information and len is the length of the audio buffer in bytes. */
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
142 aspec.callback = outputaudio;
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
143
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
144 /* This pointer is passed as the first parameter to the callback function. */
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
145 aspec.userdata = NULL;
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
146
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
147 /* initialize the SDL Audio system */
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
148 if (SDL_Init (SDL_INIT_AUDIO/*|SDL_INIT_NOPARACHUTE*/)) {
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
149 printf("SDL: Initializing of SDL Audio failed: %s.\n", SDL_GetError());
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
150 return 0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
151 }
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
152
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
153 /* Open the audio device and start playing sound! */
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
154 if(SDL_OpenAudio(&aspec, NULL) < 0) {
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
155 printf("SDL: Unable to open audio: %s\n", SDL_GetError());
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
156 return(0);
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
157 }
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
158
974
0d4e4da7c126 -abs support
arpi_esp
parents: 972
diff changeset
159 printf("SDL buf size = %d\n",aspec.size);
0d4e4da7c126 -abs support
arpi_esp
parents: 972
diff changeset
160 if(ao_buffersize==-1) ao_buffersize=16*aspec.size;
0d4e4da7c126 -abs support
arpi_esp
parents: 972
diff changeset
161
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
162 /* unsilence audio, if callback is ready */
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
163 SDL_PauseAudio(0);
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
164
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
165 return 1;
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
166 }
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
167
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
168 // close audio device
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
169 static void uninit(){
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
170 SDL_CloseAudio();
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
171 SDL_QuitSubSystem(SDL_INIT_AUDIO);
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
172 }
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
173
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
174 // stop playing and empty buffers (for seeking/pause)
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
175 static void reset(){
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
176
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
177 /* Reset ring-buffer state */
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
178 buf_read=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
179 buf_write=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
180 buf_read_pos=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
181 buf_write_pos=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
182
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
183 full_buffers=0;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
184 buffered_bytes=0;
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
185
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
186 }
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
187
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
188 // return: how many bytes can be played without blocking
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
189 static int get_space(){
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
190 return (NUM_BUFS-full_buffers)*BUFFSIZE - buf_write_pos;
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
191 }
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
192
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
193 // plays 'len' bytes of 'data'
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
194 // it should round it down to outburst*n
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
195 // return: number of bytes played
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
196 static int play(void* data,int len,int flags){
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
197
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
198 #if 0
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
199 int ret;
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
200
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
201 /* Audio locking prohibits call of outputaudio */
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
202 SDL_LockAudio();
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
203 // copy audio stream into ring-buffer
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
204 ret = write_buffer(data, len);
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
205 SDL_UnlockAudio();
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
206
972
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
207 return ret;
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
208 #else
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
209 return write_buffer(data, len);
b49f89b3ab2e Yea, it worksss!
atmosfear
parents: 966
diff changeset
210 #endif
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
211 }
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
212
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
213 // return: how many unplayed bytes are in the buffer
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
214 static int get_delay(){
974
0d4e4da7c126 -abs support
arpi_esp
parents: 972
diff changeset
215 return buffered_bytes + ao_buffersize;
966
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
216 }
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
217
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
218
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
219
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
220
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
221
69b4f944ce08 Added support for sdl audio out (buggy pre-alpha).
atmosfear
parents:
diff changeset
222