summaryrefslogtreecommitdiffstats
path: root/stream/stream_cddb.c
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-11-01 19:14:28 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-11-01 19:14:28 +0000
commitfbfa3ecb6ac9816917c71c8bb8587145d3e33559 (patch)
tree1f247f9ca3aae9c15a2216ab6bf935a1c17f30b0 /stream/stream_cddb.c
parent40d8bd9a2a8d638a026a29c42764047fe840f82b (diff)
downloadmpv-fbfa3ecb6ac9816917c71c8bb8587145d3e33559.tar.bz2
mpv-fbfa3ecb6ac9816917c71c8bb8587145d3e33559.tar.xz
Factor out common code in stream_cddb read_toc function.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@20597 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'stream/stream_cddb.c')
-rw-r--r--stream/stream_cddb.c46
1 files changed, 11 insertions, 35 deletions
diff --git a/stream/stream_cddb.c b/stream/stream_cddb.c
index 949b936cac..3812abd033 100644
--- a/stream/stream_cddb.c
+++ b/stream/stream_cddb.c
@@ -62,13 +62,14 @@ stream_t* open_cdda(char *dev, char *track);
static cd_toc_t cdtoc[100];
static int cdtoc_last_track;
-#if defined(__linux__) || defined(__bsdi__)
int
read_toc(const char *dev) {
+ int first, last;
+ int i;
+#if defined(__linux__) || defined(__bsdi__)
int drive;
struct cdrom_tochdr tochdr;
struct cdrom_tocentry tocentry;
- int i;
drive = open(dev, O_RDONLY | O_NONBLOCK);
if( drive<0 ) {
@@ -76,6 +77,7 @@ read_toc(const char *dev) {
}
ioctl(drive, CDROMREADTOCHDR, &tochdr);
+ first = tochdr.cdth_trk0 - 1; last = tochdr.cdth_trk1;
for (i = tochdr.cdth_trk0; i <= tochdr.cdth_trk1; i++) {
tocentry.cdte_track = i;
tocentry.cdte_format = CDROM_MSF;
@@ -83,8 +85,6 @@ read_toc(const char *dev) {
cdtoc[i-1].min = tocentry.cdte_addr.msf.minute;
cdtoc[i-1].sec = tocentry.cdte_addr.msf.second;
cdtoc[i-1].frame = tocentry.cdte_addr.msf.frame;
- cdtoc[i-1].frame += cdtoc[i-1].min*60*75;
- cdtoc[i-1].frame += cdtoc[i-1].sec*75;
}
tocentry.cdte_track = 0xAA;
tocentry.cdte_format = CDROM_MSF;
@@ -92,20 +92,13 @@ read_toc(const char *dev) {
cdtoc[tochdr.cdth_trk1].min = tocentry.cdte_addr.msf.minute;
cdtoc[tochdr.cdth_trk1].sec = tocentry.cdte_addr.msf.second;
cdtoc[tochdr.cdth_trk1].frame = tocentry.cdte_addr.msf.frame;
- cdtoc[tochdr.cdth_trk1].frame += cdtoc[tochdr.cdth_trk1].min*60*75;
- cdtoc[tochdr.cdth_trk1].frame += cdtoc[tochdr.cdth_trk1].sec*75;
close(drive);
- return tochdr.cdth_trk1;
-}
#elif defined(WIN32)
-int
-read_toc(const char *dev) {
HANDLE drive;
DWORD r;
CDROM_TOC toc;
char device[10];
- int i;
sprintf(device, "\\\\.\\%s", dev);
drive = CreateFile(device, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
@@ -115,29 +108,21 @@ read_toc(const char *dev) {
return 0;
}
+ first = toc.FirstTrack - 1; last = toc.LastTrack;
for (i = toc.FirstTrack; i <= toc.LastTrack; i++) {
cdtoc[i-1].min = toc.TrackData[i - 1].Address[1];
cdtoc[i-1].sec = toc.TrackData[i - 1].Address[2];
cdtoc[i-1].frame = toc.TrackData[i - 1].Address[3];
- cdtoc[i-1].frame += cdtoc[i-1].min*60*75;
- cdtoc[i-1].frame += cdtoc[i-1].sec*75;
}
cdtoc[toc.LastTrack].min = toc.TrackData[toc.LastTrack].Address[1];
cdtoc[toc.LastTrack].sec = toc.TrackData[toc.LastTrack].Address[2];
cdtoc[toc.LastTrack].frame = toc.TrackData[toc.LastTrack].Address[3];
- cdtoc[toc.LastTrack].frame += cdtoc[toc.LastTrack].min*60*75;
- cdtoc[toc.LastTrack].frame += cdtoc[toc.LastTrack].sec*75;
CloseHandle(drive);
- return toc.LastTrack;
-}
#elif defined(__FreeBSD__) || defined(__DragonFly__)
-int
-read_toc(const char *dev) {
int drive;
struct ioc_toc_header tochdr;
struct ioc_read_toc_single_entry tocentry;
- int i;
drive = open(dev, O_RDONLY | O_NONBLOCK);
if( drive<0 ) {
@@ -145,6 +130,7 @@ read_toc(const char *dev) {
}
ioctl(drive, CDIOREADTOCHEADER, &tochdr);
+ first = tochdr.starting_track; last = tochdr.ending_track;
for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) {
tocentry.track = i;
tocentry.address_format = CD_MSF_FORMAT;
@@ -152,8 +138,6 @@ read_toc(const char *dev) {
cdtoc[i-1].min = tocentry.entry.addr.msf.minute;
cdtoc[i-1].sec = tocentry.entry.addr.msf.second;
cdtoc[i-1].frame = tocentry.entry.addr.msf.frame;
- cdtoc[i-1].frame += cdtoc[i-1].min*60*75;
- cdtoc[i-1].frame += cdtoc[i-1].sec*75;
}
tocentry.track = 0xAA;
tocentry.address_format = CD_MSF_FORMAT;
@@ -161,19 +145,12 @@ read_toc(const char *dev) {
cdtoc[tochdr.ending_track].min = tocentry.entry.addr.msf.minute;
cdtoc[tochdr.ending_track].sec = tocentry.entry.addr.msf.second;
cdtoc[tochdr.ending_track].frame = tocentry.entry.addr.msf.frame;
- cdtoc[tochdr.ending_track].frame += cdtoc[tochdr.ending_track].min*60*75;
- cdtoc[tochdr.ending_track].frame += cdtoc[tochdr.ending_track].sec*75;
close(drive);
- return tochdr.ending_track;
-}
#elif defined(__NetBSD__) || defined(__OpenBSD__)
-int
-read_toc(const char *dev) {
int drive;
struct ioc_toc_header tochdr;
struct ioc_read_toc_entry tocentry;
- int i;
struct cd_toc_entry toc_buffer;
drive = open(dev, O_RDONLY | O_NONBLOCK);
@@ -182,6 +159,7 @@ read_toc(const char *dev) {
}
ioctl(drive, CDIOREADTOCHEADER, &tochdr);
+ first = tochdr.starting_track - 1; last = tochdr.ending_track;
for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) {
tocentry.starting_track = i;
tocentry.address_format = CD_MSF_FORMAT;
@@ -191,8 +169,6 @@ read_toc(const char *dev) {
cdtoc[i-1].min = toc_buffer.addr.msf.minute;
cdtoc[i-1].sec = toc_buffer.addr.msf.second;
cdtoc[i-1].frame = toc_buffer.addr.msf.frame;
- cdtoc[i-1].frame += cdtoc[i-1].min*60*75;
- cdtoc[i-1].frame += cdtoc[i-1].sec*75;
}
tocentry.starting_track = 0xAA;
tocentry.address_format = CD_MSF_FORMAT;
@@ -200,12 +176,12 @@ read_toc(const char *dev) {
cdtoc[tochdr.ending_track].min = toc_buffer.addr.msf.minute;
cdtoc[tochdr.ending_track].sec = toc_buffer.addr.msf.second;
cdtoc[tochdr.ending_track].frame = toc_buffer.addr.msf.frame;
- cdtoc[tochdr.ending_track].frame += cdtoc[tochdr.ending_track].min*60*75;
- cdtoc[tochdr.ending_track].frame += cdtoc[tochdr.ending_track].sec*75;
close(drive);
- return tochdr.ending_track;
-}
#endif
+ for (i = first; i <= last; i++)
+ cdtoc[i].frame += (cdtoc[i].min * 60 + cdtoc[i].sec) * 75;
+ return last;
+}
/**
\brief Reads TOC from CD in the given device and prints the number of tracks