# HG changeset patch # User nenolod # Date 1136448464 28800 # Node ID 86c4cd37b81258ad67b6eab5c429426ef0d51899 # Parent aeb6aa8ae8d12c1907e2298294b8223a5a92de3e [svn] Support for FreeBSD 6.x CD Audio DAE. diff -r aeb6aa8ae8d1 -r 86c4cd37b812 Plugins/Input/cdaudio/cdaudio.c --- a/Plugins/Input/cdaudio/cdaudio.c Wed Jan 04 12:26:59 2006 -0800 +++ b/Plugins/Input/cdaudio/cdaudio.c Thu Jan 05 00:07:44 2006 -0800 @@ -71,8 +71,10 @@ #ifndef CDDA_DEVICE # ifdef HAVE_SYS_CDIO_H -# ifdef __FreeBSD__ +# if defined(__FreeBSD__) && !defined(CDIOCREADAUDIO) # define CDDA_DEVICE "/dev/acd0c" +# elif defined __FreeBSD__ +# define CDDA_DEVICE "/dev/acd0" # elif defined __OpenBSD__ # define CDDA_DEVICE "/dev/cd0c" # else @@ -411,9 +413,22 @@ } } +#if defined(__FreeBSD__) && !defined(CDIOCREADAUDIO) +int +read_audio_data(int fd, int pos, int num, void *buf) +{ + int bs = CD_FRAMESIZE_RAW; + + if (ioctl(fd, CDRIOCSETBLOCKSIZE, &bs) == -1) + return -1; + if (pread(fd, buf, num * bs, (pos - 150) * bs) != num * bs) + return -1; + + return num; +} +#endif #if defined(CDIOCREADAUDIO) -#ifdef __FreeBSD__ int read_audio_data(int fd, int pos, int num, void *buf) { @@ -429,9 +444,6 @@ return cdra.nframes; } -#else -#error Please test on other platforms. -#endif #endif /* CDIOCREADAUDIO */ #ifdef BEEP_CDROM_BSD_NETBSD /* NetBSD, OpenBSD */ diff -r aeb6aa8ae8d1 -r 86c4cd37b812 Plugins/Input/cdaudio/cdaudio.h --- a/Plugins/Input/cdaudio/cdaudio.h Wed Jan 04 12:26:59 2006 -0800 +++ b/Plugins/Input/cdaudio/cdaudio.h Thu Jan 05 00:07:44 2006 -0800 @@ -56,7 +56,7 @@ #include #endif -#if defined(CDROMREADAUDIO) || defined(CDIOCREADAUDIO) || defined(CDROMCDDA) +#if defined(CDROMREADAUDIO) || defined(CDIOCREADAUDIO) || defined(CDROMCDDA) || defined(CDRIOCSETBLOCKSIZE) # define CDDA_HAS_READAUDIO #endif