More steps towards correct signed / unsigned support.
[ahxm.git] / out_sgi.c
blob0746f61a392d431ddd183c72e2217ceb7457ce11
1 /*
3 PROGRAM_NAME PROGRAM_VERSION - PROGRAM_DESCRIPTION
5 Copyright (C) 2003 Angel Ortega <angel@triptico.com>
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; either version 2
10 of the License, or (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 http://www.triptico.com
25 #include "config.h"
27 #ifdef SGI
29 #include <stdio.h>
30 #include <dmedia/audio.h>
32 #include "output.h"
34 /*******************
35 Data
36 ********************/
38 extern int _frequency;
40 /* audio configuration */
41 static ALconfig ac;
43 /* audio port */
44 static ALport ap;
46 /* handmade buffering */
47 #ifndef BUFFER_SIZE
48 #define BUFFER_SIZE 65536
49 #endif
51 static short _buffer[BUFFER_SIZE];
52 static int _bindex=0;
55 /*******************
56 Code
57 ********************/
59 int _out_open_sgi(char * file)
61 ALpv p[1];
63 ac=alNewConfig();
65 if(!ac) return(-100);
67 if(alSetChannels(ac, AL_STEREO)==-1)
68 return(-101);
70 if(alSetWidth(ac, AL_SAMPLE_16)==-1)
71 return(-102);
73 if(alSetSampFmt(ac, AL_SAMPFMT_TWOSCOMP)==-1)
74 return(-103);
76 if(alSetQueueSize(ac, 131069)==-1)
77 return(-104);
79 if(alSetDevice(ac, AL_DEFAULT_OUTPUT)==-1)
80 return(-105);
82 p[0].param=AL_OUTPUT_RATE;
83 p[0].value.ll=alDoubleToFixed((double)_frequency);
85 if(alSetParams(alGetDevice(ac), p, 1)==-1)
86 return(-106);
88 ap=alOpenPort("Ann Hell", "w", ac);
90 if(!ap) return(-107);
92 return(0);
96 int _out_write_sgi(int lsample, int rsample)
98 _buffer[_bindex++]=(short)lsample;
99 _buffer[_bindex++]=(short)rsample;
101 if(_bindex==BUFFER_SIZE)
103 alWriteFrames(ap, _buffer, BUFFER_SIZE / 2);
104 _bindex=0;
107 return(0);
111 int _out_close_sgi(void)
113 alClosePort(ap);
114 alFreeConfig(ac);
116 return(0);
119 #endif /* SGI */