Mercurial > audlegacy-plugins
annotate src/OSS4/audio.c @ 2394:a702f8d4fc14
results from madplug_x has been merged into madplug. thus madplug_x is unnecessary now.
author | Yoshiki Yazawa <yaz@cc.rim.or.jp> |
---|---|
date | Fri, 15 Feb 2008 19:27:14 +0900 |
parents | 6b854a93649c |
children | bd3a24b39058 |
rev | line source |
---|---|
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
1 /* BMP - Cross-platform multimedia player |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
2 * Copyright (C) 2003-2004 BMP development team. |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
3 * |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
4 * Based on XMMS: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
5 * Copyright (C) 1998-2003 XMMS development team. |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
6 * |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
7 * This program is free software; you can redistribute it and/or modify |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
8 * it under the terms of the GNU General Public License as published by |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
9 * the Free Software Foundation; either version 2 of the License, or |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
10 * (at your option) any later version. |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
11 * |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
12 * This program is distributed in the hope that it will be useful, |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
15 * GNU General Public License for more details. |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
16 * |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
17 * You should have received a copy of the GNU General Public License |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
18 * along with this program; if not, write to the Free Software |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
20 */ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
21 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
22 extern void close_mixer_device(); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
23 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
24 #include <glib.h> |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
25 #include <audacious/util.h> |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
26 #include <string.h> |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
27 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
28 #include <unistd.h> |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
29 #include <fcntl.h> |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
30 #include <errno.h> |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
31 #include <sys/ioctl.h> |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
32 #include <sys/time.h> |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
33 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
34 #include "OSS4.h" |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
35 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
36 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
37 #define NFRAGS 32 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
38 |
1244
d0f1e147cf62
now it saves VMIX volume between sessions
Cristi Magherusan <majeru@atheme-project.org>
parents:
1243
diff
changeset
|
39 static gint fd = 0; |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
40 static char *buffer; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
41 static gboolean going, prebuffer, paused, unpause, do_pause, remove_prebuffer; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
42 static gint device_buffer_used, buffer_size, prebuffer_size, blk_size; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
43 static gint rd_index = 0, wr_index = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
44 static gint output_time_offset = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
45 static guint64 written = 0, output_bytes = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
46 static gint flush; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
47 static gint fragsize, device_buffer_size; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
48 static gchar *device_name; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
49 static GThread *buffer_thread; |
1686
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
50 static gboolean select_works; |
2177
a838523e04b7
Restore the channel's volume after playback.
Jonathan Schleifer <js@webkeks.org>
parents:
1973
diff
changeset
|
51 static int start_vol_l, start_vol_r; |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
52 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
53 static int (*oss_convert_func) (void **data, int length); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
54 static int (*oss_stereo_convert_func) (void **data, int length, int fmt); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
55 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
56 struct format_info { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
57 union { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
58 AFormat xmms; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
59 int oss; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
60 } format; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
61 int frequency; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
62 int channels; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
63 int bps; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
64 }; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
65 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
66 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
67 /* |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
68 * The format of the data from the input plugin |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
69 * This will never change during a song. |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
70 */ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
71 struct format_info input; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
72 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
73 /* |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
74 * The format we get from the effect plugin. |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
75 * This will be different from input if the effect plugin does |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
76 * some kind of format conversion. |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
77 */ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
78 struct format_info effect; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
79 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
80 /* |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
81 * The format of the data we actually send to the soundcard. |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
82 * This might be different from effect if we need to resample or do |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
83 * some other format conversion. |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
84 */ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
85 struct format_info output; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
86 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
87 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
88 static void |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
89 oss_calc_device_buffer_used(void) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
90 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
91 audio_buf_info buf_info; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
92 if (paused) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
93 device_buffer_used = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
94 else if (!ioctl(fd, SNDCTL_DSP_GETOSPACE, &buf_info)) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
95 device_buffer_used = |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
96 (buf_info.fragstotal * buf_info.fragsize) - buf_info.bytes; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
97 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
98 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
99 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
100 static gint oss_downsample(gpointer ob, guint length, guint speed, |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
101 guint espeed); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
102 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
103 static int |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
104 oss_calc_bitrate(int oss_fmt, int rate, int channels) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
105 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
106 int bitrate = rate * channels; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
107 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
108 if (oss_fmt == AFMT_U16_BE || oss_fmt == AFMT_U16_LE || |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
109 oss_fmt == AFMT_S16_BE || oss_fmt == AFMT_S16_LE) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
110 bitrate *= 2; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
111 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
112 return bitrate; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
113 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
114 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
115 static int |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
116 oss_get_format(AFormat fmt) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
117 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
118 int format = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
119 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
120 switch (fmt) { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
121 case FMT_U8: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
122 format = AFMT_U8; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
123 break; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
124 case FMT_S8: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
125 format = AFMT_S8; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
126 break; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
127 case FMT_U16_LE: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
128 format = AFMT_U16_LE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
129 break; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
130 case FMT_U16_BE: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
131 format = AFMT_U16_BE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
132 break; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
133 case FMT_U16_NE: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
134 #if (G_BYTE_ORDER == G_BIG_ENDIAN) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
135 format = AFMT_U16_BE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
136 #else |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
137 format = AFMT_U16_LE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
138 #endif |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
139 break; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
140 case FMT_S16_LE: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
141 format = AFMT_S16_LE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
142 break; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
143 case FMT_S16_BE: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
144 format = AFMT_S16_BE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
145 break; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
146 case FMT_S16_NE: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
147 #if (G_BYTE_ORDER == G_BIG_ENDIAN) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
148 format = AFMT_S16_BE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
149 #else |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
150 format = AFMT_S16_LE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
151 #endif |
2354
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
152 break; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
153 #if 0 /* OSS currently doesn't support AFMT_U24_* */ |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
154 case FMT_U24_LE: |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
155 format = AFMT_U24_LE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
156 break; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
157 case FMT_U24_BE: |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
158 format = AFMT_U24_BE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
159 break; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
160 case FMT_U24_NE: |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
161 #if (G_BYTE_ORDER == G_BIG_ENDIAN) |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
162 format = AFMT_U24_BE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
163 #else |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
164 format = AFMT_U24_LE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
165 #endif |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
166 break; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
167 #endif |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
168 case FMT_S24_LE: |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
169 format = AFMT_S24_LE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
170 break; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
171 case FMT_S24_BE: |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
172 format = AFMT_S24_BE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
173 break; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
174 case FMT_S24_NE: |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
175 #if (G_BYTE_ORDER == G_BIG_ENDIAN) |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
176 format = AFMT_S24_BE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
177 #else |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
178 format = AFMT_S24_LE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
179 #endif |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
180 break; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
181 #if 0 /* OSS currently doesn't support AFMT_U32_* */ |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
182 case FMT_U32_LE: |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
183 format = AFMT_U32_LE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
184 break; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
185 case FMT_U32_BE: |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
186 format = AFMT_U32_BE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
187 break; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
188 case FMT_U32_NE: |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
189 #if (G_BYTE_ORDER == G_BIG_ENDIAN) |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
190 format = AFMT_U32_BE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
191 #else |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
192 format = AFMT_U32_LE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
193 #endif |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
194 break; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
195 #endif |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
196 case FMT_S32_LE: |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
197 format = AFMT_S32_LE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
198 break; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
199 case FMT_S32_BE: |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
200 format = AFMT_S32_BE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
201 break; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
202 case FMT_S32_NE: |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
203 #if (G_BYTE_ORDER == G_BIG_ENDIAN) |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
204 format = AFMT_S32_BE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
205 #else |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
206 format = AFMT_S32_LE; |
6b854a93649c
introduced experimental support for 24bit and 32bit audio output
Cristi Magherusan <majeru@atheme.org>
parents:
2259
diff
changeset
|
207 #endif |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
208 break; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
209 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
210 return format; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
211 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
212 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
213 static void |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
214 oss_setup_format(AFormat fmt, int rate, int nch) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
215 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
216 effect.format.xmms = fmt; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
217 effect.frequency = rate; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
218 effect.channels = nch; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
219 effect.bps = oss_calc_bitrate(oss_get_format(fmt), rate, nch); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
220 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
221 output.format.oss = oss_get_format(fmt); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
222 output.frequency = rate; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
223 output.channels = nch; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
224 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
225 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
226 fragsize = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
227 while ((1L << fragsize) < effect.bps / 25) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
228 fragsize++; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
229 fragsize--; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
230 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
231 device_buffer_size = ((1L << fragsize) * (NFRAGS + 1)); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
232 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
233 oss_set_audio_params(); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
234 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
235 output.bps = oss_calc_bitrate(output.format.oss, output.frequency, |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
236 output.channels); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
237 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
238 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
239 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
240 gint |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
241 oss_get_written_time(void) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
242 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
243 if (!going) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
244 return 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
245 return (written * 1000) / effect.bps; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
246 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
247 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
248 gint |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
249 oss_get_output_time(void) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
250 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
251 guint64 bytes; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
252 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
253 if (!fd || !going) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
254 return 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
255 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
256 bytes = output_bytes < device_buffer_used ? |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
257 0 : output_bytes - device_buffer_used; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
258 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
259 return output_time_offset + ((bytes * 1000) / output.bps); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
260 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
261 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
262 static int |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
263 oss_used(void) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
264 { |
1686
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
265 if (wr_index >= rd_index) |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
266 return wr_index - rd_index; |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
267 |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
268 return buffer_size - (rd_index - wr_index); |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
269 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
270 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
271 gint |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
272 oss_playing(void) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
273 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
274 if (!going) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
275 return 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
276 if (!oss_used() && (device_buffer_used - (3 * blk_size)) <= 0) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
277 return FALSE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
278 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
279 return TRUE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
280 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
281 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
282 gint |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
283 oss_free(void) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
284 { |
1686
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
285 if (remove_prebuffer && prebuffer) { |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
286 prebuffer = FALSE; |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
287 remove_prebuffer = FALSE; |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
288 } |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
289 |
1686
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
290 if (prebuffer) |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
291 remove_prebuffer = TRUE; |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
292 |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
293 if (rd_index > wr_index) |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
294 return (rd_index - wr_index) - device_buffer_size - 1; |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
295 |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
296 return (buffer_size - (wr_index - rd_index)) - device_buffer_size - 1; |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
297 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
298 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
299 static inline ssize_t |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
300 write_all(int fd, const void *buf, size_t count) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
301 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
302 size_t done = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
303 do { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
304 ssize_t n = write(fd, (gchar *) buf + done, count - done); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
305 if (n == -1) { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
306 if (errno == EINTR) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
307 continue; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
308 else |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
309 break; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
310 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
311 done += n; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
312 } while (count > done); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
313 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
314 return done; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
315 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
316 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
317 static void |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
318 oss_write_audio(gpointer data, int length) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
319 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
320 if (oss_convert_func != NULL) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
321 length = oss_convert_func(&data, length); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
322 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
323 if (oss_stereo_convert_func != NULL) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
324 length = oss_stereo_convert_func(&data, length, output.format.oss); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
325 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
326 if (effect.frequency == output.frequency) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
327 output_bytes += write_all(fd, data, length); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
328 else |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
329 output_bytes += oss_downsample(data, length, |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
330 effect.frequency, output.frequency); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
331 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
332 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
333 static void |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
334 swap_endian(guint16 * data, int length) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
335 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
336 int i; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
337 for (i = 0; i < length; i += 2, data++) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
338 *data = GUINT16_SWAP_LE_BE(*data); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
339 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
340 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
341 #define NOT_NATIVE_ENDIAN ((IS_BIG_ENDIAN && \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
342 (output.format.oss == AFMT_S16_LE || \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
343 output.format.oss == AFMT_U16_LE)) || \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
344 (!IS_BIG_ENDIAN && \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
345 (output.format.oss == AFMT_S16_BE || \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
346 output.format.oss == AFMT_U16_BE))) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
347 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
348 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
349 #define RESAMPLE_STEREO(sample_type) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
350 do { \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
351 const gint shift = sizeof (sample_type); \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
352 gint i, in_samples, out_samples, x, delta; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
353 sample_type *inptr = (sample_type *)ob, *outptr; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
354 guint nlen = (((length >> shift) * espeed) / speed); \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
355 if (nlen == 0) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
356 break; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
357 nlen <<= shift; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
358 if (NOT_NATIVE_ENDIAN) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
359 swap_endian(ob, length); \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
360 if(nlen > nbuffer_size) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
361 { \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
362 nbuffer = g_realloc(nbuffer, nlen); \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
363 nbuffer_size = nlen; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
364 } \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
365 outptr = (sample_type *)nbuffer; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
366 in_samples = length >> shift; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
367 out_samples = nlen >> shift; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
368 delta = (in_samples << 12) / out_samples; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
369 for (x = 0, i = 0; i < out_samples; i++) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
370 { \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
371 gint x1, frac; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
372 x1 = (x >> 12) << 12; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
373 frac = x - x1; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
374 *outptr++ = \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
375 (sample_type) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
376 ((inptr[(x1 >> 12) << 1] * \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
377 ((1<<12) - frac) + \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
378 inptr[((x1 >> 12) + 1) << 1] * \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
379 frac) >> 12); \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
380 *outptr++ = \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
381 (sample_type) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
382 ((inptr[((x1 >> 12) << 1) + 1] * \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
383 ((1<<12) - frac) + \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
384 inptr[(((x1 >> 12) + 1) << 1) + 1] * \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
385 frac) >> 12); \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
386 x += delta; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
387 } \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
388 if (NOT_NATIVE_ENDIAN) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
389 swap_endian(nbuffer, nlen); \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
390 w = write_all(fd, nbuffer, nlen); \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
391 } while (0) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
392 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
393 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
394 #define RESAMPLE_MONO(sample_type) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
395 do { \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
396 const gint shift = sizeof (sample_type) - 1; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
397 gint i, x, delta, in_samples, out_samples; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
398 sample_type *inptr = (sample_type *)ob, *outptr; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
399 guint nlen = (((length >> shift) * espeed) / speed); \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
400 if (nlen == 0) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
401 break; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
402 nlen <<= shift; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
403 if (NOT_NATIVE_ENDIAN) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
404 swap_endian(ob, length); \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
405 if(nlen > nbuffer_size) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
406 { \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
407 nbuffer = g_realloc(nbuffer, nlen); \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
408 nbuffer_size = nlen; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
409 } \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
410 outptr = (sample_type *)nbuffer; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
411 in_samples = length >> shift; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
412 out_samples = nlen >> shift; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
413 delta = ((length >> shift) << 12) / out_samples; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
414 for (x = 0, i = 0; i < out_samples; i++) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
415 { \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
416 gint x1, frac; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
417 x1 = (x >> 12) << 12; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
418 frac = x - x1; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
419 *outptr++ = \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
420 (sample_type) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
421 ((inptr[x1 >> 12] * ((1<<12) - frac) + \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
422 inptr[(x1 >> 12) + 1] * frac) >> 12); \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
423 x += delta; \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
424 } \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
425 if (NOT_NATIVE_ENDIAN) \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
426 swap_endian(nbuffer, nlen); \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
427 w = write_all(fd, nbuffer, nlen); \ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
428 } while (0) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
429 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
430 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
431 static gint |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
432 oss_downsample(gpointer ob, guint length, guint speed, guint espeed) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
433 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
434 guint w = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
435 static gpointer nbuffer = NULL; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
436 static guint nbuffer_size = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
437 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
438 switch (output.format.oss) { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
439 case AFMT_S16_BE: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
440 case AFMT_S16_LE: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
441 if (output.channels == 2) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
442 RESAMPLE_STEREO(gint16); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
443 else |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
444 RESAMPLE_MONO(gint16); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
445 break; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
446 case AFMT_U16_BE: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
447 case AFMT_U16_LE: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
448 if (output.channels == 2) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
449 RESAMPLE_STEREO(guint16); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
450 else |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
451 RESAMPLE_MONO(guint16); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
452 break; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
453 case AFMT_S8: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
454 if (output.channels == 2) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
455 RESAMPLE_STEREO(gint8); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
456 else |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
457 RESAMPLE_MONO(gint8); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
458 break; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
459 case AFMT_U8: |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
460 if (output.channels == 2) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
461 RESAMPLE_STEREO(guint8); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
462 else |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
463 RESAMPLE_MONO(guint8); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
464 break; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
465 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
466 return w; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
467 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
468 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
469 void |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
470 oss_write(gpointer ptr, int length) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
471 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
472 int cnt, off = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
473 |
1686
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
474 remove_prebuffer = FALSE; |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
475 |
1686
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
476 written += length; |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
477 while (length > 0) { |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
478 cnt = MIN(length, buffer_size - wr_index); |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
479 memcpy(buffer + wr_index, (char *) ptr + off, cnt); |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
480 wr_index = (wr_index + cnt) % buffer_size; |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
481 length -= cnt; |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
482 off += cnt; |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
483 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
484 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
485 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
486 void |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
487 oss_close(void) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
488 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
489 if (!going) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
490 return; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
491 going = 0; |
1686
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
492 |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
493 g_thread_join(buffer_thread); |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
494 |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
495 g_free(device_name); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
496 oss_free_convert_buffer(); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
497 wr_index = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
498 rd_index = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
499 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
500 close_mixer_device(); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
501 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
502 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
503 void |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
504 oss_flush(gint time) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
505 { |
1686
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
506 flush = time; |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
507 while (flush != -1) |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
508 g_usleep(10000); |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
509 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
510 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
511 void |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
512 oss_pause(short p) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
513 { |
1686
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
514 if (p == TRUE) |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
515 do_pause = TRUE; |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
516 else |
1686
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
517 unpause = TRUE; |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
518 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
519 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
520 gpointer |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
521 oss_loop(gpointer arg) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
522 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
523 gint length, cnt; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
524 fd_set set; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
525 struct timeval tv; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
526 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
527 while (going) { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
528 if (oss_used() > prebuffer_size) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
529 prebuffer = FALSE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
530 if (oss_used() > 0 && !paused && !prebuffer) { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
531 tv.tv_sec = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
532 tv.tv_usec = 10000; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
533 FD_ZERO(&set); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
534 FD_SET(fd, &set); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
535 if (!select_works || (select(fd + 1, NULL, &set, NULL, &tv) > 0)) { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
536 length = MIN(blk_size, oss_used()); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
537 while (length > 0) { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
538 cnt = MIN(length, buffer_size - rd_index); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
539 oss_write_audio(buffer + rd_index, cnt); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
540 rd_index = (rd_index + cnt) % buffer_size; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
541 length -= cnt; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
542 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
543 if (!oss_used()) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
544 ioctl(fd, SNDCTL_DSP_POST, 0); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
545 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
546 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
547 else |
1676
aee4ebea943a
xmms_usleep() was removed, use g_usleep()
Matti Hamalainen <ccr@tnsp.org>
parents:
1244
diff
changeset
|
548 g_usleep(10000); |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
549 oss_calc_device_buffer_used(); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
550 if (do_pause && !paused) { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
551 do_pause = FALSE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
552 paused = TRUE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
553 /* |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
554 * We lose some data here that is sent to the |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
555 * soundcard, but not yet played. I don't |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
556 * think this is worth fixing. |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
557 */ |
2252
b461d608befe
replaced SNDCTL_DSP_RESET with SNDCTL_DSP_SYNC, as suggested by Michal
Cristi Magherusan <majeru@atheme-project.org>
parents:
2194
diff
changeset
|
558 ioctl(fd, SNDCTL_DSP_SYNC, 0); |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
559 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
560 else if (unpause && paused) { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
561 unpause = FALSE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
562 close(fd); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
563 fd = open(device_name, O_WRONLY); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
564 oss_set_audio_params(); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
565 paused = FALSE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
566 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
567 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
568 if (flush != -1) { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
569 /* |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
570 * This close and open is a work around of a |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
571 * bug that exists in some drivers which cause |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
572 * the driver to get fucked up by a reset |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
573 */ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
574 |
2252
b461d608befe
replaced SNDCTL_DSP_RESET with SNDCTL_DSP_SYNC, as suggested by Michal
Cristi Magherusan <majeru@atheme-project.org>
parents:
2194
diff
changeset
|
575 ioctl(fd, SNDCTL_DSP_SYNC, 0); |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
576 close(fd); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
577 fd = open(device_name, O_WRONLY); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
578 oss_set_audio_params(); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
579 output_time_offset = flush; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
580 written = ((guint64) flush * input.bps) / 1000; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
581 rd_index = wr_index = output_bytes = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
582 flush = -1; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
583 prebuffer = TRUE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
584 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
585 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
586 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
587 |
2252
b461d608befe
replaced SNDCTL_DSP_RESET with SNDCTL_DSP_SYNC, as suggested by Michal
Cristi Magherusan <majeru@atheme-project.org>
parents:
2194
diff
changeset
|
588 ioctl(fd, SNDCTL_DSP_SYNC, 0); |
2259
98fa8fe789a4
Actually, we have to reset in oss_loop() as this calls close().
Jonathan Schleifer <js@webkeks.org>
parents:
2257
diff
changeset
|
589 oss_set_volume(start_vol_l, start_vol_r); |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
590 close(fd); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
591 g_free(buffer); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
592 return NULL; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
593 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
594 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
595 void |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
596 oss_set_audio_params(void) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
597 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
598 int frag, stereo, ret; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
599 struct timeval tv; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
600 fd_set set; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
601 |
2252
b461d608befe
replaced SNDCTL_DSP_RESET with SNDCTL_DSP_SYNC, as suggested by Michal
Cristi Magherusan <majeru@atheme-project.org>
parents:
2194
diff
changeset
|
602 ioctl(fd, SNDCTL_DSP_SYNC, 0); |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
603 frag = (NFRAGS << 16) | fragsize; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
604 ioctl(fd, SNDCTL_DSP_SETFRAGMENT, &frag); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
605 /* |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
606 * Set the stream format. This ioctl() might fail, but should |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
607 * return a format that works if it does. |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
608 */ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
609 ioctl(fd, SNDCTL_DSP_SETFMT, &output.format.oss); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
610 if (ioctl(fd, SNDCTL_DSP_SETFMT, &output.format.oss) == -1) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
611 g_warning("SNDCTL_DSP_SETFMT ioctl failed: %s", strerror(errno)); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
612 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
613 stereo = output.channels - 1; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
614 ioctl(fd, SNDCTL_DSP_STEREO, &stereo); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
615 output.channels = stereo + 1; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
616 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
617 oss_stereo_convert_func = oss_get_stereo_convert_func(output.channels, |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
618 effect.channels); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
619 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
620 if (ioctl(fd, SNDCTL_DSP_SPEED, &output.frequency) == -1) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
621 g_warning("SNDCTL_DSP_SPEED ioctl failed: %s", strerror(errno)); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
622 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
623 if (ioctl(fd, SNDCTL_DSP_GETBLKSIZE, &blk_size) == -1) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
624 blk_size = 1L << fragsize; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
625 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
626 oss_convert_func = |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
627 oss_get_convert_func(output.format.oss, |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
628 oss_get_format(effect.format.xmms)); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
629 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
630 /* |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
631 * Stupid hack to find out if the driver support selects, some |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
632 * drivers won't work properly without a select and some won't |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
633 * work with a select :/ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
634 */ |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
635 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
636 tv.tv_sec = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
637 tv.tv_usec = 50000; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
638 FD_ZERO(&set); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
639 FD_SET(fd, &set); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
640 ret = select(fd + 1, NULL, &set, NULL, &tv); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
641 if (ret > 0) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
642 select_works = TRUE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
643 else |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
644 select_works = FALSE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
645 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
646 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
647 gint |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
648 oss_open(AFormat fmt, gint rate, gint nch) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
649 { |
2194
c19a820de01e
Set volume before playback for OSS4.
Jonathan Schleifer <js-audacious@webkeks.org>
parents:
2177
diff
changeset
|
650 int l, r; |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
651 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
652 if (oss_cfg.use_alt_audio_device && oss_cfg.alt_audio_device) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
653 device_name = g_strdup(oss_cfg.alt_audio_device); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
654 else { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
655 if (oss_cfg.audio_device > 0) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
656 device_name = |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
657 g_strdup_printf("%s%d", DEV_DSP, oss_cfg.audio_device); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
658 else |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
659 device_name = g_strdup(DEV_DSP); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
660 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
661 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
662 fd = open(device_name, O_WRONLY); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
663 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
664 if (fd == -1) { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
665 g_warning("oss_open(): Failed to open audio device (%s): %s", |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
666 device_name, strerror(errno)); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
667 g_free(device_name); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
668 return 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
669 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
670 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
671 input.format.xmms = fmt; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
672 input.frequency = rate; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
673 input.channels = nch; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
674 input.bps = oss_calc_bitrate(oss_get_format(fmt), rate, nch); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
675 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
676 oss_setup_format(fmt, rate, nch); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
677 |
1686
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
678 buffer_size = (oss_cfg.buffer_size * input.bps) / 1000; |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
679 |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
680 if (buffer_size < 8192) |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
681 buffer_size = 8192; |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
682 |
1686
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
683 prebuffer_size = (buffer_size * oss_cfg.prebuffer) / 100; |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
684 if (buffer_size - prebuffer_size < 4096) |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
685 prebuffer_size = buffer_size - 4096; |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
686 |
1686
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
687 buffer_size += device_buffer_size; |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
688 buffer = g_malloc0(buffer_size); |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
689 |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
690 flush = -1; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
691 prebuffer = TRUE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
692 wr_index = rd_index = output_time_offset = written = output_bytes = 0; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
693 paused = FALSE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
694 do_pause = FALSE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
695 unpause = FALSE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
696 remove_prebuffer = FALSE; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
697 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
698 going = 1; |
1686
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
699 |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
700 buffer_thread = g_thread_create(oss_loop, NULL, TRUE, NULL); |
2e8adf61c54f
remove realtime craq from the code
William Pitcock <nenolod@atheme.org>
parents:
1685
diff
changeset
|
701 |
2177
a838523e04b7
Restore the channel's volume after playback.
Jonathan Schleifer <js@webkeks.org>
parents:
1973
diff
changeset
|
702 oss_get_volume(&start_vol_l, &start_vol_r); |
2194
c19a820de01e
Set volume before playback for OSS4.
Jonathan Schleifer <js-audacious@webkeks.org>
parents:
2177
diff
changeset
|
703 aud_input_get_volume(&l, &r); |
c19a820de01e
Set volume before playback for OSS4.
Jonathan Schleifer <js-audacious@webkeks.org>
parents:
2177
diff
changeset
|
704 oss_set_volume(l, r); |
2177
a838523e04b7
Restore the channel's volume after playback.
Jonathan Schleifer <js@webkeks.org>
parents:
1973
diff
changeset
|
705 |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
706 return 1; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
707 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
708 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
709 void oss_tell(AFormat * fmt, gint * rate, gint * nch) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
710 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
711 (*fmt) = input.format.xmms; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
712 (*rate) = input.frequency; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
713 (*nch) = input.channels; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
714 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
715 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
716 //-----------------------------OSS4 MIXER CODE----------------------------- |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
717 void oss_get_volume(int *l, int *r) |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
718 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
719 int v; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
720 long cmd=SNDCTL_DSP_GETPLAYVOL; |
1243
4cf6ccace89c
made OSS report latest set volume when not having opened a vmix device;
Cristi Magherusan <majeru@atheme-project.org>
parents:
1216
diff
changeset
|
721 if(ioctl(fd, cmd, &v) == -1) |
1244
d0f1e147cf62
now it saves VMIX volume between sessions
Cristi Magherusan <majeru@atheme-project.org>
parents:
1243
diff
changeset
|
722 v=vol; |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
723 *r = (v & 0xFF00) >> 8; |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
724 *l = (v & 0x00FF); |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
725 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
726 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
727 void |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
728 oss_set_volume(int l, int r) |
1216
cc04ccffaa8d
ignore the VMIX balance setting until it gets fixed by the OSS4 devs
Cristi Magherusan <majeru@atheme-project.org>
parents:
1214
diff
changeset
|
729 { |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
730 long cmd=SNDCTL_DSP_SETPLAYVOL; |
1244
d0f1e147cf62
now it saves VMIX volume between sessions
Cristi Magherusan <majeru@atheme-project.org>
parents:
1243
diff
changeset
|
731 vol = (r << 8) | l; |
d0f1e147cf62
now it saves VMIX volume between sessions
Cristi Magherusan <majeru@atheme-project.org>
parents:
1243
diff
changeset
|
732 ioctl(fd, cmd, &vol); |
1214
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
733 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
734 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
735 void |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
736 close_mixer_device() |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
737 { |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
738 } |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
739 |
2a722c3ccd9e
damn, I forgot to 'hg add' the sources
Cristi Magherusan <majeru@atheme-project.org>
parents:
diff
changeset
|
740 |