SGI output driver finally works.
[ahxm.git] / out_sgi.c
blob04980c047940ab10c51c3c4efa0cd08f747b781b
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 <stdio.h>
26 #include <dmedia/audio.h>
28 #include "output.h"
30 /*******************
31 Data
32 ********************/
34 extern int _frequency;
36 /* audio configuration */
37 static ALconfig ac;
39 /* audio port */
40 static ALport ap;
42 /* handmade buffering */
43 #ifndef BUFFER_SIZE
44 #define BUFFER_SIZE 65536
45 #endif
47 static short _buffer[BUFFER_SIZE];
48 static int _bindex=0;
51 /*******************
52 Code
53 ********************/
55 int _out_open_sgi(char * file)
57 ALpv p[1];
59 ac=alNewConfig();
61 if(!ac) return(-100);
63 if(alSetChannels(ac, AL_STEREO)==-1)
64 return(-101);
66 if(alSetWidth(ac, AL_SAMPLE_16)==-1)
67 return(-102);
69 if(alSetSampFmt(ac, AL_SAMPFMT_TWOSCOMP)==-1)
70 return(-103);
72 if(alSetQueueSize(ac, 131069)==-1)
73 return(-104);
75 if(alSetDevice(ac, AL_DEFAULT_OUTPUT)==-1)
76 return(-105);
78 p[0].param=AL_OUTPUT_RATE;
79 p[0].value.ll=alDoubleToFixed((double)_frequency);
81 if(alSetParams(alGetDevice(ac), p, 1)==-1)
82 return(-106);
84 ap=alOpenPort("Ann Hell", "w", ac);
86 if(!ap) return(-107);
88 return(0);
92 int _out_write_sgi(int lsample, int rsample)
94 _buffer[_bindex++]=(short)lsample;
95 _buffer[_bindex++]=(short)rsample;
97 if(_bindex==BUFFER_SIZE)
99 alWriteFrames(ap, _buffer, BUFFER_SIZE / 2);
100 _bindex=0;
103 return(0);
107 int _out_close_sgi(void)
109 alClosePort(ap);
110 alFreeConfig(ac);
112 return(0);