annotate Plugins/Input/cdaudio/cdaudio.c @ 1519:1ffc2670d6b0 trunk

[svn] - oh, define an actual SDL version here. :P
author nenolod
date Mon, 07 Aug 2006 21:22:11 -0700
parents 705d4c089fce
children cc5952675fca
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1 /* XMMS - Cross-platform multimedia player
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
2 * Copyright (C) 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
3 * Thomas Nilsson and 4Front Technologies
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
4 * Copyright (C) 1999-2003 Haavard Kvaalen <havardk@xmms.org>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
5 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
9 * (at your option) any later version.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
10 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
14 * GNU General Public License for more details.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
15 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
1459
705d4c089fce [svn] Fix postal code.
chainsaw
parents: 1458
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
19 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
20
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
21 #ifdef HAVE_CONFIG_H
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
22 # include "config.h"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
23 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
24
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
25 #include "cdaudio.h"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
26
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
27 #include <glib.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
28 #include <glib/gi18n.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
29 #include <glib/gprintf.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
30 #include <string.h>
813
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
31 #include <stdlib.h>
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
32
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
33 #include <unistd.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
34 #include <errno.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
35 #include <fcntl.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
36 #include <sys/ioctl.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
37 #include <sys/stat.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
38
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
39 #include <libaudacious/configdb.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
40 #include <libaudacious/util.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
41 #include <libaudacious/titlestring.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
42 #include "audacious/output.h"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
43
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
44 #ifdef CDROMSTOP
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
45 # define XMMS_STOP CDROMSTOP
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
46 #elif defined CDIOCSTOP
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
47 # define XMMS_STOP CDIOCSTOP
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
48 #else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
49 # error "No stop ioctl"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
50 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
51
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
52 #ifdef CDIOCPAUSE
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
53 # define XMMS_PAUSE CDIOCPAUSE
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
54 #elif defined CDROMPAUSE
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
55 # define XMMS_PAUSE CDROMPAUSE
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
56 #else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
57 # error "No pause ioctl"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
58 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
59
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
60 #ifdef CDIOCRESUME
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
61 # define XMMS_RESUME CDIOCRESUME
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
62 #elif defined CDROMRESUME
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
63 # define XMMS_RESUME CDROMRESUME
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
64 #else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
65 # error "No resume ioctl"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
66 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
67
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
68 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
69 * Distributions should not patch this, but instead use the
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
70 * --with-cdda-device=path and --with-cdda-dir=path configure options.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
71 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
72
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
73 #ifndef CDDA_DEVICE
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
74 # ifdef HAVE_SYS_CDIO_H
392
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
75 # if defined(__FreeBSD__) && !defined(CDIOCREADAUDIO)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
76 # define CDDA_DEVICE "/dev/acd0c"
392
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
77 # elif defined __FreeBSD__
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
78 # define CDDA_DEVICE "/dev/acd0"
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
79 # elif defined __OpenBSD__
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
80 # define CDDA_DEVICE "/dev/cd0c"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
81 # else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
82 # define CDDA_DEVICE "/vol/dev/aliases/cdrom0"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
83 # endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
84 # else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
85 # define CDDA_DEVICE "/dev/cdrom"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
86 # endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
87 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
88
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
89 #ifndef CDDA_DIRECTORY
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
90 # ifdef HAVE_SYS_CDIO_H
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
91 # ifdef __FreeBSD__
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
92 # define CDDA_DIRECTORY "/cdrom"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
93 # elif defined __OpenBSD__
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
94 # define CDDA_DIRECTORY "/cdrom"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
95 # else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
96 # define CDDA_DIRECTORY "/cdrom/cdrom0"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
97 # endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
98 # else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
99 # define CDDA_DIRECTORY "/mnt/cdrom"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
100 # endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
101 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
102
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
103
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
104
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
105
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
106 static TitleInput *cdda_get_tuple(cdda_disc_toc_t * toc, int track);
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
107 static gchar *get_song_title(TitleInput *tuple);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
108 static gboolean stop_timeout(gpointer data);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
109
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
110 static void cdda_init(void);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
111 static int is_our_file(char *filename);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
112 static GList *scan_dir(char *dir);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
113 static void play_file(char *filename);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
114 static void stop(void);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
115 static void cdda_pause(short p);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
116 static void seek(int time);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
117 static int get_time(void);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
118 static void get_song_info(char *filename, char **title, int *length);
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
119 static TitleInput *get_song_tuple(char *filename);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
120 static void get_volume(int *l, int *r);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
121 static void set_volume(int l, int r);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
122 static void cleanup(void);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
123 void cdda_fileinfo(char *filename);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
124
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
125 InputPlugin cdda_ip = {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
126 NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
127 NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
128 NULL, /* Description */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
129 cdda_init,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
130 NULL, /* about */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
131 cdda_configure,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
132 is_our_file,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
133 scan_dir,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
134 play_file,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
135 stop,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
136 cdda_pause,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
137 seek,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
138 NULL, /* set_eq */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
139 get_time,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
140 get_volume,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
141 set_volume,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
142 cleanup,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
143 NULL, /* obsolete */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
144 NULL, /* add_vis_pcm */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
145 NULL, /* set_info, filled in by xmms */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
146 NULL, /* set_info_text, filled in by xmms */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
147 get_song_info,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
148 NULL, /* cdda_fileinfo, *//* file_info_box */
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
149 NULL, /* output plugin handle */
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
150 get_song_tuple
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
151 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
152
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
153 CDDAConfig cdda_cfg;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
154
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
155 static struct {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
156 struct driveinfo drive;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
157 cdda_disc_toc_t cd_toc;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
158 int track;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
159 int fd;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
160 gboolean playing;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
161 } cdda_playing;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
162
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
163 static struct {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
164 GThread *thread;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
165 gboolean audio_error, eof;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
166 int seek;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
167
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
168 } dae_data;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
169
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
170 static gboolean is_paused;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
171 static int pause_time;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
172
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
173 struct timeout {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
174 int id;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
175 char *device;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
176 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
177
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
178 static GList *timeout_list;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
179
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
180 /* Time to delay stop command in 1/10 second */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
181 #define STOP_DELAY 20
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
182
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
183 InputPlugin *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
184 get_iplugin_info(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
185 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
186 cdda_ip.description = g_strdup_printf(_("CD Audio Plugin"));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
187 return &cdda_ip;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
188 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
189
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
190
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
191
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
192 #ifdef BEEP_CDROM_SOLARIS
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
193 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
194 * Lowlevel cdrom access, Solaris style (Solaris, Linux)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
195 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
196
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
197 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
198 play_ioctl(struct cdda_msf *start, struct cdda_msf *end)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
199 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
200 struct cdrom_msf msf;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
201
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
202 msf.cdmsf_min0 = start->minute;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
203 msf.cdmsf_sec0 = start->second;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
204 msf.cdmsf_frame0 = start->frame;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
205 msf.cdmsf_min1 = end->minute;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
206 msf.cdmsf_sec1 = end->second;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
207 msf.cdmsf_frame1 = end->frame;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
208 ioctl(cdda_playing.fd, CDROMPLAYMSF, &msf);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
209 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
210
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
211 static int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
212 get_current_frame(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
213 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
214 struct cdrom_subchnl subchnl;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
215
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
216 subchnl.cdsc_format = CDROM_MSF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
217 if (ioctl(cdda_playing.fd, CDROMSUBCHNL, &subchnl) < 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
218 return -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
219
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
220 switch (subchnl.cdsc_audiostatus) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
221 case CDROM_AUDIO_COMPLETED:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
222 case CDROM_AUDIO_ERROR:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
223 return -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
224 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
225
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
226 return (LBA(subchnl.cdsc_absaddr.msf));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
227 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
228
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
229 #if !defined(CDROMVOLREAD)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
230 static int volume_left = 100, volume_right = 100;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
231 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
232
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
233 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
234 drive_get_volume(int *l, int *r)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
235 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
236 #if defined(CDROMVOLREAD)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
237 struct cdrom_volctrl vol;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
238
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
239 if (cdda_playing.fd != -1 && !ioctl(cdda_playing.fd, CDROMVOLREAD, &vol)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
240 *l = (100 * vol.channel0) / 255;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
241 *r = (100 * vol.channel1) / 255;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
242 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
243 #if 0
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
244 else if (cdda_playing.fd != -1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
245 g_message("CDROMVOLREAD failed");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
246 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
247 #else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
248 *l = volume_left;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
249 *r = volume_right;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
250 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
251 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
252
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
253 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
254 drive_set_volume(int l, int r)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
255 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
256 struct cdrom_volctrl vol;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
257
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
258 if (cdda_playing.fd != -1) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
259 vol.channel0 = vol.channel2 = (l * 255) / 100;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
260 vol.channel1 = vol.channel3 = (r * 255) / 100;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
261 ioctl(cdda_playing.fd, CDROMVOLCTRL, &vol);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
262 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
263 #if !defined(CDROMVOLREAD)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
264 volume_left = l;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
265 volume_right = r;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
266 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
267 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
268
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
269 #ifdef CDROMREADAUDIO
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
270 int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
271 read_audio_data(int fd, int pos, int num, void *buf)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
272 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
273 struct cdrom_read_audio cdra;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
274
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
275 #if 1
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
276 cdra.addr.lba = pos - CDDA_MSF_OFFSET;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
277 cdra.addr_format = CDROM_LBA;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
278 #else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
279 cdra.addr.msf.minute = pos / (60 * 75);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
280 cdra.addr.msf.second = (pos / 75) % 60;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
281 cdra.addr.msf.frame = pos % 75;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
282 cdra.addr_format = CDROM_MSF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
283 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
284
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
285 cdra.nframes = num;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
286 cdra.buf = buf;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
287
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
288 if (ioctl(fd, CDROMREADAUDIO, &cdra) < 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
289 return -errno;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
290
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
291 return cdra.nframes;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
292 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
293 #endif /* CDROMREADAUDIO */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
294
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
295 #if defined(CDROMCDDA)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
296 int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
297 read_audio_data(int fd, int pos, int num, void *buf)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
298 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
299 struct cdrom_cdda cdra;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
300
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
301 cdra.cdda_addr = pos - CDDA_MSF_OFFSET;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
302 cdra.cdda_length = num;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
303 cdra.cdda_data = buf;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
304 cdra.cdda_subcode = CDROM_DA_NO_SUBCODE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
305 if (ioctl(fd, CDROMCDDA, &cdra) < 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
306 return -errno;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
307
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
308 return cdra.cdda_length;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
309 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
310 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
311
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
312 static gboolean
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
313 cdda_get_toc_lowlevel(int fd, cdda_disc_toc_t * info)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
314 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
315 struct cdrom_tochdr tochdr;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
316 struct cdrom_tocentry tocentry;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
317 int i;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
318
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
319
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
320
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
321 if (ioctl(fd, CDROMREADTOCHDR, &tochdr))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
322 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
323
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
324 for (i = tochdr.cdth_trk0; i <= tochdr.cdth_trk1; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
325 tocentry.cdte_format = CDROM_MSF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
326 tocentry.cdte_track = i;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
327 if (ioctl(fd, CDROMREADTOCENTRY, &tocentry))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
328 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
329 info->track[i].minute = tocentry.cdte_addr.msf.minute;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
330 info->track[i].second = tocentry.cdte_addr.msf.second;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
331 info->track[i].frame = tocentry.cdte_addr.msf.frame;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
332 info->track[i].flags.data_track =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
333 tocentry.cdte_ctrl == CDROM_DATA_TRACK;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
334
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
335 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
336
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
337 /* Get the leadout track */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
338 tocentry.cdte_track = CDROM_LEADOUT;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
339 tocentry.cdte_format = CDROM_MSF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
340
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
341 if (ioctl(fd, CDROMREADTOCENTRY, &tocentry))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
342 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
343 info->leadout.minute = tocentry.cdte_addr.msf.minute;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
344 info->leadout.second = tocentry.cdte_addr.msf.second;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
345 info->leadout.frame = tocentry.cdte_addr.msf.frame;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
346
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
347 info->first_track = tochdr.cdth_trk0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
348 info->last_track = tochdr.cdth_trk1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
349
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
350 return TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
351 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
352
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
353 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
354
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
355 #ifdef BEEP_CDROM_BSD
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
356 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
357 * Lowlevel cdrom access, BSD style (FreeBSD, OpenBSD, NetBSD, Darwin)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
358 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
359
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
360 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
361 play_ioctl(struct cdda_msf *start, struct cdda_msf *end)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
362 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
363 struct ioc_play_msf msf;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
364
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
365 msf.start_m = start->minute;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
366 msf.start_s = start->second;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
367 msf.start_f = start->frame;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
368 msf.end_m = end->minute;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
369 msf.end_s = end->second;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
370 msf.end_f = end->frame;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
371 ioctl(cdda_playing.fd, CDIOCPLAYMSF, &msf);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
372 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
373
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
374 static int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
375 get_current_frame(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
376 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
377 struct ioc_read_subchannel subchnl;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
378 struct cd_sub_channel_info subinfo;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
379 subchnl.address_format = CD_MSF_FORMAT;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
380 subchnl.data_format = CD_CURRENT_POSITION;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
381 subchnl.track = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
382 subchnl.data_len = sizeof(subinfo);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
383 subchnl.data = &subinfo;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
384 if (ioctl(cdda_playing.fd, CDIOCREADSUBCHANNEL, &subchnl) < 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
385 return -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
386
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
387 #ifdef BEEP_CDROM_BSD_DARWIN
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
388 return ((subchnl.data->what.position.absaddr[1] * 60
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
389 subchnl.data->what.position.absaddr[2]) * 75 +
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
390 subchnl.data->what.position.absaddr[3]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
391 #else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
392 return (LBA(subchnl.data->what.position.absaddr.msf));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
393 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
394 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
395
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
396 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
397 drive_get_volume(int *l, int *r)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
398 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
399 struct ioc_vol vol;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
400
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
401 if (cdda_playing.fd != -1) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
402 ioctl(cdda_playing.fd, CDIOCGETVOL, &vol);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
403 *l = (100 * vol.vol[0]) / 255;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
404 *r = (100 * vol.vol[1]) / 255;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
405 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
406 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
407
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
408 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
409 drive_set_volume(int l, int r)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
410 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
411 struct ioc_vol vol;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
412
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
413 if (cdda_playing.fd != -1) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
414 vol.vol[0] = vol.vol[2] = (l * 255) / 100;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
415 vol.vol[1] = vol.vol[3] = (r * 255) / 100;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
416 ioctl(cdda_playing.fd, CDIOCSETVOL, &vol);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
417 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
418 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
419
392
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
420 #if defined(__FreeBSD__) && !defined(CDIOCREADAUDIO)
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
421 int
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
422 read_audio_data(int fd, int pos, int num, void *buf)
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
423 {
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
424 int bs = CD_FRAMESIZE_RAW;
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
425
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
426 if (ioctl(fd, CDRIOCSETBLOCKSIZE, &bs) == -1)
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
427 return -1;
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
428 if (pread(fd, buf, num * bs, (pos - 150) * bs) != num * bs)
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
429 return -1;
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
430
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
431 return num;
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
432 }
86c4cd37b812 [svn] Support for FreeBSD 6.x CD Audio DAE.
nenolod
parents: 61
diff changeset
433 #endif
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
434
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
435 #if defined(CDIOCREADAUDIO)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
436 int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
437 read_audio_data(int fd, int pos, int num, void *buf)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
438 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
439 struct ioc_read_audio cdra;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
440
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
441 cdra.address.lba = pos - CDDA_MSF_OFFSET;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
442 cdra.address_format = CD_LBA_FORMAT;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
443 cdra.nframes = num;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
444 cdra.buffer = buf;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
445
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
446 if (ioctl(fd, CDIOCREADAUDIO, &cdra) < 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
447 return -errno;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
448
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
449 return cdra.nframes;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
450 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
451 #endif /* CDIOCREADAUDIO */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
452
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
453 #ifdef BEEP_CDROM_BSD_NETBSD /* NetBSD, OpenBSD */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
454
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
455 static gboolean
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
456 cdda_get_toc_lowlevel(int fd, cdda_disc_toc_t * info)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
457 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
458 struct ioc_toc_header tochdr;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
459 struct ioc_read_toc_entry tocentry;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
460 struct cd_toc_entry tocentrydata;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
461 int i;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
462
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
463 if (ioctl(fd, CDIOREADTOCHEADER, &tochdr))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
464 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
465
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
466 for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
467 tocentry.address_format = CD_MSF_FORMAT;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
468
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
469 tocentry.starting_track = i;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
470 tocentry.data = &tocentrydata;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
471 tocentry.data_len = sizeof(tocentrydata);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
472 if (ioctl(fd, CDIOREADTOCENTRYS, &tocentry))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
473 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
474 info->track[i].minute = tocentry.data->addr.msf.minute;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
475 info->track[i].second = tocentry.data->addr.msf.second;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
476 info->track[i].frame = tocentry.data->addr.msf.frame;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
477 info->track[i].flags.data_track = (tocentry.data->control & 4) == 4;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
478 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
479
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
480 /* Get the leadout track */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
481 tocentry.address_format = CD_MSF_FORMAT;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
482
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
483 tocentry.starting_track = 0xAA;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
484 tocentry.data = &tocentrydata;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
485 tocentry.data_len = sizeof(tocentrydata);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
486 if (ioctl(fd, CDIOREADTOCENTRYS, &tocentry))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
487 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
488 info->leadout.minute = tocentry.data->addr.msf.minute;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
489 info->leadout.second = tocentry.data->addr.msf.second;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
490 info->leadout.frame = tocentry.data->addr.msf.frame;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
491
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
492 info->first_track = tochdr.starting_track;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
493 info->last_track = tochdr.ending_track;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
494
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
495 return TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
496 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
497
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
498 #elif defined(BEEP_CDROM_BSD_DARWIN)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
499
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
500 static gboolean
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
501 cdda_get_toc_lowlevel(int fd, cdda_disc_toc_t * info)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
502 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
503 struct ioc_toc_header tochdr;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
504 struct ioc_read_toc_entry tocentry;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
505 int i;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
506
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
507 if (ioctl(fd, CDIOREADTOCHEADER, &tochdr))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
508 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
509
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
510 for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
511 tocentry.address_format = CD_MSF_FORMAT;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
512
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
513 tocentry.starting_track = i;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
514 if (ioctl(fd, CDIOREADTOCENTRYS, &tocentry))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
515 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
516 info->track[i].minute = tocentry.data->addr[1];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
517 info->track[i].second = tocentry.data->addr[2];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
518 info->track[i].frame = tocentry.data->addr[3];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
519 info->track[i].flags.data_track = (tocentry.data->control & 4) == 4;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
520 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
521
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
522 /* Get the leadout track */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
523 tocentry.address_format = CD_MSF_FORMAT;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
524
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
525 tocentry.starting_track = 0xAA;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
526 if (ioctl(fd, CDIOREADTOCENTRYS, &tocentry))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
527 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
528 info->leadout.minute = tocentry.data->addr[1];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
529 info->leadout.second = tocentry.data->addr[2];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
530 info->leadout.frame = tocentry.data->addr[3];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
531
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
532 return TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
533 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
534
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
535 #else /* FreeBSD */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
536
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
537 static gboolean
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
538 cdda_get_toc_lowlevel(int fd, cdda_disc_toc_t * info)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
539 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
540 struct ioc_toc_header tochdr;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
541 struct ioc_read_toc_single_entry tocentry;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
542 int i;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
543
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
544 if (ioctl(fd, CDIOREADTOCHEADER, &tochdr))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
545 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
546
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
547 for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
548 tocentry.address_format = CD_MSF_FORMAT;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
549
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
550 tocentry.track = i;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
551 if (ioctl(fd, CDIOREADTOCENTRY, &tocentry))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
552 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
553 info->track[i].minute = tocentry.entry.addr.msf.minute;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
554 info->track[i].second = tocentry.entry.addr.msf.second;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
555 info->track[i].frame = tocentry.entry.addr.msf.frame;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
556 info->track[i].flags.data_track = (tocentry.entry.control & 4) == 4;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
557 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
558
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
559 /* Get the leadout track */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
560 tocentry.address_format = CD_MSF_FORMAT;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
561
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
562 tocentry.track = 0xAA;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
563 if (ioctl(fd, CDIOREADTOCENTRY, &tocentry))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
564 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
565 info->leadout.minute = tocentry.entry.addr.msf.minute;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
566 info->leadout.second = tocentry.entry.addr.msf.second;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
567 info->leadout.frame = tocentry.entry.addr.msf.frame;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
568
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
569 info->first_track = tochdr.starting_track;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
570 info->last_track = tochdr.ending_track;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
571
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
572 return TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
573 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
574 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
575
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
576 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
577
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
578
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
579
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
580
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
581
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
582
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
583
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
584
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
585
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
586
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
587
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
588 extern gboolean
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
589 is_mounted(const char *device_name)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
590 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
591 #if defined(HAVE_MNTENT_H) || defined(HAVE_GETMNTINFO)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
592 char devname[256];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
593 struct stat st;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
594 #if defined(HAVE_MNTENT_H)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
595 FILE *mounts;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
596 struct mntent *mnt;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
597 #elif defined(HAVE_GETMNTINFO)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
598 struct statfs *fsp;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
599 int entries;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
600 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
601
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
602 if (lstat(device_name, &st) < 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
603 return -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
604
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
605 if (S_ISLNK(st.st_mode))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
606 readlink(device_name, devname, 256);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
607 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
608 strncpy(devname, device_name, 256);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
609
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
610 #if defined(HAVE_MNTENT_H)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
611 if ((mounts = setmntent(MOUNTED, "r")) == NULL)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
612 return TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
613
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
614 while ((mnt = getmntent(mounts)) != NULL) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
615 if (strcmp(mnt->mnt_fsname, devname) == 0) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
616 endmntent(mounts);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
617 return TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
618 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
619 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
620 endmntent(mounts);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
621 #elif defined(HAVE_GETMNTINFO)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
622 entries = getmntinfo(&fsp, MNT_NOWAIT);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
623 if (entries < 0)
419
2291caab50ca [svn] FreeBSD 6.x/7.x newata cdrio fixes. (I now have an ia32 box to work with ;))
nenolod
parents: 392
diff changeset
624 return FALSE;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
625
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
626 while (entries-- > 0) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
627 if (!strcmp(fsp->f_mntfromname, devname))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
628 return TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
629 fsp++;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
630 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
631 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
632 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
633 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
634 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
635
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
636
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
637 gboolean
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
638 cdda_get_toc(cdda_disc_toc_t * info, const char *device)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
639 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
640 gboolean retv = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
641 int fd;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
642
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
643 if (is_mounted(device))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
644 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
645
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
646 if ((fd = open(device, CDOPENFLAGS)) == -1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
647 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
648
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
649 memset(info, 0, sizeof(cdda_disc_toc_t));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
650
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
651 retv = cdda_get_toc_lowlevel(fd, info);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
652 close(fd);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
653
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
654 return retv;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
655 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
656
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
657 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
658 cdda_init(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
659 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
660 ConfigDb *db;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
661 struct driveinfo *drive = g_malloc0(sizeof(struct driveinfo));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
662 int ndrives = 1, i;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
663
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
664 cdda_playing.fd = -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
665 memset(&cdda_cfg, 0, sizeof(CDDAConfig));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
666
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
667 #ifdef HAVE_OSS
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
668 drive->mixer = CDDA_MIXER_OSS;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
669 drive->oss_mixer = SOUND_MIXER_CD;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
670 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
671
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
672 db = bmp_cfg_db_open();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
673
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
674 /* These names are used for backwards compatibility */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
675 bmp_cfg_db_get_string(db, "CDDA", "device", &drive->device);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
676 bmp_cfg_db_get_string(db, "CDDA", "directory", &drive->directory);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
677 bmp_cfg_db_get_int(db, "CDDA", "mixer", &drive->mixer);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
678 bmp_cfg_db_get_int(db, "CDDA", "readmode", &drive->dae);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
679
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
680 if (!drive->device)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
681 drive->device = g_strdup(CDDA_DEVICE);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
682 if (!drive->directory)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
683 drive->directory = g_strdup(CDDA_DIRECTORY);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
684
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
685 cdda_cfg.drives = g_list_append(cdda_cfg.drives, drive);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
686
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
687 bmp_cfg_db_get_int(db, "CDDA", "num_drives", &ndrives);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
688 for (i = 1; i < ndrives; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
689 char label[20];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
690 drive = g_malloc0(sizeof(struct driveinfo));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
691
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
692 sprintf(label, "device%d", i);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
693 bmp_cfg_db_get_string(db, "CDDA", label, &drive->device);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
694
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
695 sprintf(label, "directory%d", i);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
696 bmp_cfg_db_get_string(db, "CDDA", label, &drive->directory);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
697
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
698 sprintf(label, "mixer%d", i);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
699 bmp_cfg_db_get_int(db, "CDDA", label, &drive->mixer);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
700
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
701 sprintf(label, "readmode%d", i);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
702 bmp_cfg_db_get_int(db, "CDDA", label, &drive->dae);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
703
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
704 cdda_cfg.drives = g_list_append(cdda_cfg.drives, drive);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
705 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
706 bmp_cfg_db_get_bool(db, "CDDA", "title_override",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
707 &cdda_cfg.title_override);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
708 bmp_cfg_db_get_string(db, "CDDA", "name_format", &cdda_cfg.name_format);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
709 bmp_cfg_db_get_bool(db, "CDDA", "use_cddb", &cdda_cfg.use_cddb);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
710 bmp_cfg_db_get_string(db, "CDDA", "cddb_server", &cdda_cfg.cddb_server);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
711 #ifdef WITH_CDINDEX
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
712 bmp_cfg_db_get_bool(db, "CDDA", "use_cdin", &cdda_cfg.use_cdin);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
713 #else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
714 cdda_cfg.use_cdin = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
715 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
716 bmp_cfg_db_get_string(db, "CDDA", "cdin_server", &cdda_cfg.cdin_server);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
717 bmp_cfg_db_close(db);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
718
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
719 if (!cdda_cfg.cdin_server)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
720 cdda_cfg.cdin_server = g_strdup("www.cdindex.org");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
721 if (!cdda_cfg.cddb_server)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
722 cdda_cfg.cddb_server = g_strdup(CDDB_DEFAULT_SERVER);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
723 if (!cdda_cfg.name_format)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
724 cdda_cfg.name_format = g_strdup("%p - %t");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
725 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
726
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
727 struct driveinfo *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
728 cdda_find_drive(char *filename)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
729 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
730 GList *node;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
731
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
732 // FIXME: Will always return the first drive
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
733
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
734 for (node = cdda_cfg.drives; node; node = node->next) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
735 struct driveinfo *d = node->data;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
736 if (!strncmp(d->directory, filename, strlen(d->directory)))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
737 return d;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
738 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
739
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
740 return NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
741
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
742 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
743
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
744 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
745 timeout_destroy(struct timeout *entry)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
746 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
747 g_free(entry->device);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
748 g_free(entry);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
749 timeout_list = g_list_remove(timeout_list, entry);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
750 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
751
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
752 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
753 timeout_remove_for_device(char *device)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
754 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
755 GList *node;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
756
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
757 for (node = timeout_list; node; node = node->next) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
758 struct timeout *t = node->data;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
759
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
760 if (!strcmp(t->device, device)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
761 gtk_timeout_remove(t->id);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
762 timeout_destroy(t);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
763 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
764 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
765 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
766
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
767 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
768
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
769 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
770 cleanup(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
771 {
813
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
772 GList *node;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
773 struct driveinfo *drive;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
774
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
775 g_free(cdda_ip.description);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
776 cdda_ip.description = NULL;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
777
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
778 if (cdda_cfg.drives) {
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
779 for (node = g_list_first(cdda_cfg.drives); node; node = node->next) {
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
780 drive = (struct driveinfo *)node->data;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
781 if (!drive)
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
782 continue;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
783
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
784 if (drive->device)
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
785 free(drive->device);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
786
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
787 if (drive->directory)
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
788 free(drive->directory);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
789
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
790 free(drive);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
791 }
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
792
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
793 g_list_free(cdda_cfg.drives);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
794 cdda_cfg.drives = NULL;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
795 }
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
796
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
797 if (cdda_cfg.name_format) {
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
798 free(cdda_cfg.name_format);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
799 cdda_cfg.name_format = NULL;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
800 }
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
801
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
802 if (cdda_cfg.cddb_server) {
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
803 free(cdda_cfg.cddb_server);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
804 cdda_cfg.cddb_server = NULL;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
805 }
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
806
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
807 if (cdda_cfg.cdin_server) {
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
808 free(cdda_cfg.cdin_server);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
809 cdda_cfg.cdin_server = NULL;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
810 }
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 419
diff changeset
811
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
812 while (timeout_list) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
813 struct timeout *t = timeout_list->data;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
814 gtk_timeout_remove(t->id);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
815 stop_timeout(t);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
816 timeout_destroy(t);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
817 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
818 cddb_quit();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
819 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
820
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
821 static int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
822 is_our_file(char *filename)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
823 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
824 char *ext = ".cda";
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
825
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
826 if (cdda_find_drive(filename) == NULL) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
827 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
828 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
829
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
830 if (g_str_has_suffix(filename, ext)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
831 return TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
832 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
833 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
834 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
835
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
836
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
837 static GList *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
838 scan_dir(char *dir)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
839 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
840 GList *list = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
841 int i;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
842 cdda_disc_toc_t toc;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
843 struct driveinfo *drive;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
844
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
845 if ((drive = cdda_find_drive(dir)) == NULL)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
846 return NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
847
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
848 if (!cdda_get_toc(&toc, drive->device))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
849 return NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
850
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
851 for (i = toc.last_track; i >= toc.first_track; i--)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
852 if (!toc.track[i].flags.data_track) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
853 list = g_list_prepend(list, g_strdup_printf("Track %02d.cda", i));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
854 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
855 return list;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
856 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
857
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
858 guint
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
859 cdda_calculate_track_length(cdda_disc_toc_t * toc, int track)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
860 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
861 if (track == toc->last_track)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
862 return (LBA(toc->leadout) - LBA(toc->track[track]));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
863 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
864 return (LBA(toc->track[track + 1]) - LBA(toc->track[track]));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
865 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
866
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
867 static void *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
868 dae_play_loop(void *arg)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
869 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
870 char *buffer = g_malloc(CD_FRAMESIZE_RAW * CDDA_DAE_FRAMES);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
871 int pos = LBA(cdda_playing.cd_toc.track[cdda_playing.track]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
872 int end, frames;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
873
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
874 if (cdda_playing.track == cdda_playing.cd_toc.last_track)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
875 end = LBA(cdda_playing.cd_toc.leadout);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
876 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
877 end = LBA(cdda_playing.cd_toc.track[cdda_playing.track + 1]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
878
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
879 while (cdda_playing.playing) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
880 int left;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
881 char *data;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
882
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
883 if (dae_data.seek != -1) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
884 cdda_ip.output->flush(dae_data.seek * 1000);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
885 pos = LBA(cdda_playing.cd_toc.track[cdda_playing.track])
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
886 + dae_data.seek * 75;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
887 dae_data.seek = -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
888 dae_data.eof = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
889 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
890 frames = MIN(CDDA_DAE_FRAMES, end - pos);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
891 if (frames == 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
892 dae_data.eof = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
893
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
894 if (dae_data.eof) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
895 xmms_usleep(30000);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
896 continue;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
897 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
898
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
899 frames = read_audio_data(cdda_playing.fd, pos, frames, buffer);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
900 if (frames <= 0) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
901 int err = -frames;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
902 if (err == EOPNOTSUPP)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
903 dae_data.eof = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
904 else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
905 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
906 * If the read failed, skip ahead to
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
907 * avoid getting stuck on scratches
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
908 * and such.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
909 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
910 g_message("read_audio_data() failed: %s (%d)",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
911 strerror(err), err);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
912 pos += MIN(CDDA_DAE_FRAMES, end - pos);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
913 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
914 continue;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
915 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
916 left = frames * CD_FRAMESIZE_RAW;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
917 data = buffer;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
918 while (cdda_playing.playing && left > 0 && dae_data.seek == -1) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
919 int cur = MIN(512 * 2 * 2, left);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
920 cdda_ip.add_vis_pcm(cdda_ip.output->written_time(),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
921 FMT_S16_LE, 2, cur, data);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
922 while (cdda_ip.output->buffer_free() < cur &&
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
923 cdda_playing.playing && dae_data.seek == -1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
924 xmms_usleep(30000);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
925 if (cdda_playing.playing && dae_data.seek == -1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
926 produce_audio(cdda_ip.output->written_time(), FMT_S16_LE, 2, cur, data, &cdda_playing.playing);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
927 left -= cur;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
928 data += cur;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
929 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
930 pos += frames;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
931 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
932
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
933 cdda_ip.output->buffer_free();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
934 cdda_ip.output->buffer_free();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
935 g_free(buffer);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
936
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
937 g_thread_exit(NULL);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
938 return NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
939 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
940
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
941 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
942 dae_play(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
943 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
944 if (cdda_ip.output->open_audio(FMT_S16_LE, 44100, 2) == 0) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
945 dae_data.audio_error = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
946 cdda_playing.playing = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
947 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
948 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
949 dae_data.seek = -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
950 dae_data.eof = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
951 dae_data.audio_error = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
952 dae_data.thread = g_thread_create(dae_play_loop, NULL, TRUE, NULL);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
953 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
954
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
955 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
956 play_file(char *filename)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
957 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
958 char *tmp;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
959 struct driveinfo *drive;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
960 int track;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
961 int track_len;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
962
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
963 // g_message(g_strdup_printf("** CD_AUDIO: trying to play file %s",filename));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
964
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
965 if ((drive = cdda_find_drive(filename)) == NULL) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
966 // g_message("** CD_AUDIO: find drive check failed");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
967 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
968 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
969 if (is_mounted(drive->device)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
970 // g_message("** CD_AUDIO: drive is mounted");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
971 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
972 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
973 tmp = strrchr(filename, '/');
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
974 if (tmp)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
975 tmp++;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
976 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
977 tmp = filename;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
978
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
979 if (!sscanf(tmp, "Track %d.cda", &track)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
980 // g_message("** CD_AUDIO: filename check failed");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
981 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
982 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
983
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
984 if (!cdda_get_toc(&cdda_playing.cd_toc, drive->device) ||
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
985 cdda_playing.cd_toc.track[track].flags.data_track ||
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
986 track < cdda_playing.cd_toc.first_track ||
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
987 track > cdda_playing.cd_toc.last_track) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
988 // g_message("** CD_AUDIO: toc check failed");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
989 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
990 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
991
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
992 if ((cdda_playing.fd = open(drive->device, CDOPENFLAGS)) == -1) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
993 // g_message("** CD_AUDIO: device open failed");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
994 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
995 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
996 track_len = cdda_calculate_track_length(&cdda_playing.cd_toc, track);
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
997 cdda_ip.set_info(get_song_title(cdda_get_tuple(&cdda_playing.cd_toc, track)),
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
998 (track_len * 1000) / 75, 44100 * 2 * 2 * 8, 44100, 2);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
999
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1000 memcpy(&cdda_playing.drive, drive, sizeof(struct driveinfo));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1001 #ifndef CDDA_HAS_READAUDIO
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1002 cdda_playing.drive.dae = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1003 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1004
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1005 cdda_playing.track = track;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1006
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1007 is_paused = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1008 timeout_remove_for_device(drive->device);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1009
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1010 cdda_playing.playing = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1011 if (drive->dae)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1012 dae_play();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1013 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1014 seek(0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1015 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1016
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1017 static TitleInput *
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1018 cdda_get_tuple(cdda_disc_toc_t * toc, int track)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1019 {
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1020 G_LOCK_DEFINE_STATIC(tuple);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1021
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1022 static guint32 cached_id;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1023 static cdinfo_t cdinfo;
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1024 static gchar *performer, *album_name, *track_name;
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1025 TitleInput *tuple = NULL;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1026 guint32 disc_id;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1027
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1028 disc_id = cdda_cddb_compute_discid(toc);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1029
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1030 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1031 * We want to avoid looking up a album from two threads simultaneously.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1032 * This can happen since we are called both from the main-thread and
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1033 * from the playlist-thread.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1034 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1035
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1036 G_LOCK(tuple);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1037 if (!(disc_id == cached_id && cdinfo.is_valid)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1038 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1039 * We try to look up the disc again if the info is not
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1040 * valid. The user might have configured a new server
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1041 * in the meantime.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1042 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1043 cdda_cdinfo_flush(&cdinfo);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1044 cached_id = disc_id;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1045
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1046 if (!cdda_cdinfo_read_file(disc_id, &cdinfo)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1047 if (cdda_cfg.use_cddb)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1048 cdda_cddb_get_info(toc, &cdinfo);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1049 if (cdinfo.is_valid)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1050 cdda_cdinfo_write_file(disc_id, &cdinfo);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1051 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1052 }
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1053
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1054 tuple = bmp_title_input_new();
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1055 cdda_cdinfo_get(&cdinfo, track, &performer, &album_name, &track_name);
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1056 G_UNLOCK(tuple);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1057
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1058 tuple->performer = g_strdup(performer);
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1059 tuple->album_name = g_strdup(album_name);
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1060 tuple->track_name = g_strdup(track_name);
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1061 tuple->track_number = (track);
1364
18a6a71b8c15 [svn] - No more cdaudio crashy.
nhjm449
parents: 1318
diff changeset
1062 tuple->file_name = g_strdup(tuple->file_path);
18a6a71b8c15 [svn] - No more cdaudio crashy.
nhjm449
parents: 1318
diff changeset
1063 tuple->file_path = g_strdup_printf(_("CD Audio Track %02u"), track);
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1064 tuple->file_ext = "cda";
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1065 tuple->length = ((cdda_calculate_track_length(toc, track) * 1000) / 75);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1066
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1067 if (!tuple->track_name)
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1068 tuple->track_name = g_strdup_printf(_("CD Audio Track %02u"), track);
1364
18a6a71b8c15 [svn] - No more cdaudio crashy.
nhjm449
parents: 1318
diff changeset
1069
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1070 return tuple;
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1071 }
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1072
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1073 static gchar *
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1074 get_song_title(TitleInput *tuple)
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1075 {
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1076 return xmms_get_titlestring(cdda_cfg.title_override ?
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1077 cdda_cfg.name_format :
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1078 xmms_get_gentitle_format(), tuple);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1079 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1080
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1081 static gboolean
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1082 stop_timeout(gpointer data)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1083 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1084 int fd;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1085 struct timeout *to = data;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1086
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1087 fd = open(to->device, CDOPENFLAGS);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1088 if (fd != -1) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1089 ioctl(fd, XMMS_STOP, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1090 close(fd);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1091 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1092 timeout_destroy(to);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1093 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1094 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1095
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1096 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1097 stop(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1098 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1099 struct timeout *to_info;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1100 if (cdda_playing.fd < 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1101 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1102
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1103 cdda_playing.playing = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1104
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1105 if (cdda_playing.drive.dae) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1106 g_thread_join(dae_data.thread);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1107 cdda_ip.output->close_audio();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1108 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1109 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1110 ioctl(cdda_playing.fd, XMMS_PAUSE, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1111
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1112 close(cdda_playing.fd);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1113 cdda_playing.fd = -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1114
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1115 if (!cdda_playing.drive.dae) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1116 to_info = g_malloc(sizeof(*to_info));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1117 to_info->device = g_strdup(cdda_playing.drive.device);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1118 to_info->id = gtk_timeout_add(STOP_DELAY * 100, stop_timeout,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1119 to_info);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1120 timeout_list = g_list_prepend(timeout_list, to_info);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1121 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1122 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1123
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1124 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1125 cdda_pause(short p)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1126 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1127 if (cdda_playing.drive.dae) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1128 cdda_ip.output->pause(p);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1129 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1130 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1131 if (p) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1132 pause_time = get_time();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1133 ioctl(cdda_playing.fd, XMMS_PAUSE, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1134 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1135 else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1136 ioctl(cdda_playing.fd, XMMS_RESUME, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1137 pause_time = -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1138 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1139 is_paused = p;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1140 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1141
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1142
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1143
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1144 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1145 seek(int time)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1146 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1147 struct cdda_msf *end, start;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1148 int track = cdda_playing.track;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1149
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1150 // g_message("** CD_AUDIO: seeking...");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1151 if (cdda_playing.drive.dae) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1152 dae_data.seek = time;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1153 while (dae_data.seek != -1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1154 xmms_usleep(20000);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1155 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1156 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1157
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1158 start.minute = (cdda_playing.cd_toc.track[track].minute * 60 +
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1159 cdda_playing.cd_toc.track[track].second + time) / 60;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1160 start.second = (cdda_playing.cd_toc.track[track].second + time) % 60;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1161 start.frame = cdda_playing.cd_toc.track[track].frame;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1162 if (track == cdda_playing.cd_toc.last_track)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1163 end = &cdda_playing.cd_toc.leadout;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1164 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1165 end = &cdda_playing.cd_toc.track[track + 1];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1166
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1167 play_ioctl(&start, end);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1168
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1169 if (is_paused) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1170 cdda_pause(TRUE);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1171 pause_time = time * 1000;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1172 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1173 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1174
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1175 static int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1176 get_time_analog(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1177 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1178 int frame, start_frame, length;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1179 int track = cdda_playing.track;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1180
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1181 if (is_paused && pause_time != -1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1182 return pause_time;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1183
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1184 frame = get_current_frame();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1185
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1186 if (frame == -1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1187 return -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1188
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1189 start_frame = LBA(cdda_playing.cd_toc.track[track]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1190 length = cdda_calculate_track_length(&cdda_playing.cd_toc, track);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1191
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1192 if (frame - start_frame >= length - 20) /* 20 seems to work better */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1193 return -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1194
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1195 return ((frame - start_frame) * 1000) / 75;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1196 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1197
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1198 static int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1199 get_time_dae(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1200 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1201 if (dae_data.audio_error)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1202 return -2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1203 if (!cdda_playing.playing ||
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1204 (dae_data.eof && !cdda_ip.output->buffer_playing()))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1205 return -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1206 return cdda_ip.output->output_time();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1207 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1208
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1209 static int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1210 get_time(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1211 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1212 if (cdda_playing.fd == -1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1213 return -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1214
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1215 if (cdda_playing.drive.dae)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1216 return get_time_dae();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1217 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1218 return get_time_analog();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1219 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1220
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1221 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1222 get_song_info(char *filename, char **title, int *len)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1223 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1224 cdda_disc_toc_t toc;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1225 int t;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1226 char *tmp;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1227 struct driveinfo *drive;
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1228 TitleInput *tuple;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1229
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1230 *title = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1231 *len = -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1232
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1233 // g_message("** CD_AUDIO: getting song info");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1234
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1235 if ((drive = cdda_find_drive(filename)) == NULL)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1236 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1237
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1238 tmp = strrchr(filename, '/');
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1239 if (tmp)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1240 tmp++;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1241 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1242 tmp = filename;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1243
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1244 if (!sscanf(tmp, "Track %d.cda", &t))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1245 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1246 if (!cdda_get_toc(&toc, drive->device))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1247 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1248 if (t < toc.first_track || t > toc.last_track
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1249 || toc.track[t].flags.data_track)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1250 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1251
1318
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1252 if ((tuple = cdda_get_tuple(&toc, t)) != NULL) {
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1253 *len = tuple->length;
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1254 *title = get_song_title(tuple);
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1255 }
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1256 bmp_title_input_free(tuple);
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1257 }
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1258
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1259 static TitleInput *
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1260 get_song_tuple(char *filename)
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1261 {
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1262 cdda_disc_toc_t toc;
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1263 int t;
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1264 char *tmp;
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1265 struct driveinfo *drive;
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1266 TitleInput *tuple = NULL;
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1267
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1268 // g_message("** CD_AUDIO: getting song info");
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1269
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1270 if ((drive = cdda_find_drive(filename)) == NULL)
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1271 return tuple;
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1272
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1273 tmp = strrchr(filename, '/');
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1274 if (tmp)
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1275 tmp++;
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1276 else
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1277 tmp = filename;
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1278
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1279 if (!sscanf(tmp, "Track %d.cda", &t))
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1280 return tuple;
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1281 if (!cdda_get_toc(&toc, drive->device))
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1282 return tuple;
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1283 if (t < toc.first_track || t > toc.last_track
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1284 || toc.track[t].flags.data_track)
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1285 return tuple;
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1286
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1287 tuple = cdda_get_tuple(&toc, t);
a344e9836a4e [svn] - cdaudio playlist tuple support; needs some fixing
nhjm449
parents: 813
diff changeset
1288 return tuple;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1289 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1290
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1291 #ifdef HAVE_OSS
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1292 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1293 oss_get_volume(int *l, int *r, int mixer_line)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1294 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1295 int fd, v;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1296
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1297 fd = open(DEV_MIXER, O_RDONLY);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1298 if (fd != -1) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1299 ioctl(fd, MIXER_READ(mixer_line), &v);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1300 *r = (v & 0xFF00) >> 8;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1301 *l = (v & 0x00FF);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1302 close(fd);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1303 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1304 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1305
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1306 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1307 oss_set_volume(int l, int r, int mixer_line)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1308 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1309 int fd, v;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1310
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1311 fd = open(DEV_MIXER, O_RDONLY);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1312 if (fd != -1) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1313 v = (r << 8) | l;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1314 ioctl(fd, MIXER_WRITE(mixer_line), &v);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1315 close(fd);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1316 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1317 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1318 #else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1319 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1320 oss_get_volume(int *l, int *r, int mixer_line)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1321 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1322 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1323 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1324 oss_set_volume(int l, int r, int mixer_line)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1325 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1326 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1327 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1328
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1329
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1330 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1331 get_volume(int *l, int *r)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1332 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1333 if (cdda_playing.drive.dae)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1334 cdda_ip.output->get_volume(l, r);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1335 else if (cdda_playing.drive.mixer == CDDA_MIXER_OSS)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1336 oss_get_volume(l, r, cdda_playing.drive.oss_mixer);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1337 else if (cdda_playing.drive.mixer == CDDA_MIXER_DRIVE)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1338 drive_get_volume(l, r);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1339 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1340
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1341 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1342 set_volume(int l, int r)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1343 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1344 if (cdda_playing.drive.dae)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1345 cdda_ip.output->set_volume(l, r);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1346 else if (cdda_playing.drive.mixer == CDDA_MIXER_OSS)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1347 oss_set_volume(l, r, cdda_playing.drive.oss_mixer);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1348 else if (cdda_playing.drive.mixer == CDDA_MIXER_DRIVE)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1349 drive_set_volume(l, r);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1350 }