annotate libmpdemux/cddb.c @ 18176:f72bc5754209

Part3 of Otvos Attila's oattila AT chello-hu mp_msg changes, with lots of modifications as usual
author reynaldo
date Sat, 22 Apr 2006 05:12:10 +0000
parents 9604131f9196
children 4231482179b6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
1 /*
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
2 * CDDB HTTP protocol
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
3 * by Bertrand Baudet <bertrand_baudet@yahoo.com>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
4 * (C) 2002, MPlayer team.
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
5 *
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
6 * Implementation follow the freedb.howto1.06.txt specification
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
7 * from http://freedb.freedb.org
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
8 *
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
9 * discid computation by Jeremy D. Zawodny
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
10 * Copyright (c) 1998-2000 Jeremy D. Zawodny <Jeremy@Zawodny.com>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
11 * Code release under GPL
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
12 *
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
13 */
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
14
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
15 #include "config.h"
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
16
10121
d42177a0da2a Changed the STREAMING defines to MPLAYER_NETWORK to avoid name definition clash.
bertrand
parents: 9801
diff changeset
17 #if defined(HAVE_CDDA) && defined(MPLAYER_NETWORK)
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
18
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
19 #include <stdio.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
20 #include <stdlib.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
21 #include <fcntl.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
22 #include <stdarg.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
23 #include <errno.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
24 #include <unistd.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
25 #include <string.h>
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
26 #ifdef WIN32
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
27 #ifdef __MINGW32__
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
28 #define mkdir(a,b) mkdir(a)
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
29 #endif
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
30 #include <windows.h>
17446
9604131f9196 Cygwin compilation fix
diego
parents: 17044
diff changeset
31 #ifdef HAVE_WINSOCK2
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
32 #include <winsock2.h>
17446
9604131f9196 Cygwin compilation fix
diego
parents: 17044
diff changeset
33 #endif
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
34 #else
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
35 #include <netdb.h>
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
36 #include <sys/ioctl.h>
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
37 #endif
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
38 #include <sys/types.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
39 #include <sys/stat.h>
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
40
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
41 #include "mp_msg.h"
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
42 #include "help_mp.h"
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
43
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
44 #if defined(__linux__)
7269
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
45 #include <linux/cdrom.h>
17044
cb84dbc30d7b When it comes to CD/DVD handling bsdi has a linux CD/DVD compatibility
diego
parents: 17012
diff changeset
46 #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
7269
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
47 #include <sys/cdio.h>
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
48 #elif defined(WIN32)
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
49 #include <ddk/ntddcdrm.h>
17044
cb84dbc30d7b When it comes to CD/DVD handling bsdi has a linux CD/DVD compatibility
diego
parents: 17012
diff changeset
50 #elif (__bsdi__)
cb84dbc30d7b When it comes to CD/DVD handling bsdi has a linux CD/DVD compatibility
diego
parents: 17012
diff changeset
51 #include <dvd.h>
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
52 #endif
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
53
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
54 #include "cdd.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16967
diff changeset
55 #include "version.h"
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
56 #include "stream.h"
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
57 #include "network.h"
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
58
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
59 #define DEFAULT_FREEDB_SERVER "freedb.freedb.org"
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
60 #define DEFAULT_CACHE_DIR "/.cddb/"
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
61
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
62 stream_t* open_cdda(char *dev, char *track);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
63
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
64 static cd_toc_t cdtoc[100];
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
65 static int cdtoc_last_track;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
66
17044
cb84dbc30d7b When it comes to CD/DVD handling bsdi has a linux CD/DVD compatibility
diego
parents: 17012
diff changeset
67 #if defined(__linux__) || defined(__bsdi__)
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
68 int
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
69 read_toc(const char *dev) {
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
70 int drive;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
71 struct cdrom_tochdr tochdr;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
72 struct cdrom_tocentry tocentry;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
73 int i;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
74
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
75 drive = open(dev, O_RDONLY | O_NONBLOCK);
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
76 if( drive<0 ) {
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
77 return drive;
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
78 }
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
79
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
80 ioctl(drive, CDROMREADTOCHDR, &tochdr);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
81 for (i = tochdr.cdth_trk0; i <= tochdr.cdth_trk1; i++) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
82 tocentry.cdte_track = i;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
83 tocentry.cdte_format = CDROM_MSF;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
84 ioctl(drive, CDROMREADTOCENTRY, &tocentry);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
85 cdtoc[i-1].min = tocentry.cdte_addr.msf.minute;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
86 cdtoc[i-1].sec = tocentry.cdte_addr.msf.second;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
87 cdtoc[i-1].frame = tocentry.cdte_addr.msf.frame;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
88 cdtoc[i-1].frame += cdtoc[i-1].min*60*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
89 cdtoc[i-1].frame += cdtoc[i-1].sec*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
90 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
91 tocentry.cdte_track = 0xAA;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
92 tocentry.cdte_format = CDROM_MSF;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
93 ioctl(drive, CDROMREADTOCENTRY, &tocentry);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
94 cdtoc[tochdr.cdth_trk1].min = tocentry.cdte_addr.msf.minute;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
95 cdtoc[tochdr.cdth_trk1].sec = tocentry.cdte_addr.msf.second;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
96 cdtoc[tochdr.cdth_trk1].frame = tocentry.cdte_addr.msf.frame;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
97 cdtoc[tochdr.cdth_trk1].frame += cdtoc[tochdr.cdth_trk1].min*60*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
98 cdtoc[tochdr.cdth_trk1].frame += cdtoc[tochdr.cdth_trk1].sec*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
99 close(drive);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
100 return tochdr.cdth_trk1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
101 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
102
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
103 #elif defined(WIN32)
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
104 int
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
105 read_toc(const char *dev) {
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
106 HANDLE drive;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
107 DWORD r;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
108 CDROM_TOC toc;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
109 char device[10];
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
110 int i;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
111
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
112 sprintf(device, "\\\\.\\%s", dev);
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
113 drive = CreateFile(device, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
114
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
115 if(!DeviceIoControl(drive, IOCTL_CDROM_READ_TOC, NULL, 0, &toc, sizeof(CDROM_TOC), &r, 0)) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
116 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToReadTOC);
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
117 return 0;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
118 }
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
119
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
120 for (i = toc.FirstTrack; i <= toc.LastTrack; i++) {
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
121 toc.FirstTrack = i;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
122 cdtoc[i-1].min = toc.TrackData[i - 1].Address[1];
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
123 cdtoc[i-1].sec = toc.TrackData[i - 1].Address[2];
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
124 cdtoc[i-1].frame = toc.TrackData[i - 1].Address[3];
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
125 cdtoc[i-1].frame += cdtoc[i-1].min*60*75;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
126 cdtoc[i-1].frame += cdtoc[i-1].sec*75;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
127 }
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
128 toc.FirstTrack = 0xAA;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
129 cdtoc[toc.LastTrack].min = toc.TrackData[toc.LastTrack].Address[1];
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
130 cdtoc[toc.LastTrack].sec = toc.TrackData[toc.LastTrack].Address[2];
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
131 cdtoc[toc.LastTrack].frame = toc.TrackData[toc.LastTrack].Address[3];
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
132 cdtoc[toc.LastTrack].frame += cdtoc[toc.LastTrack].min*60*75;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
133 cdtoc[toc.LastTrack].frame += cdtoc[toc.LastTrack].sec*75;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
134 CloseHandle(drive);
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
135 return toc.LastTrack;
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
136 }
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
137
17044
cb84dbc30d7b When it comes to CD/DVD handling bsdi has a linux CD/DVD compatibility
diego
parents: 17012
diff changeset
138 #elif defined(__FreeBSD__) || defined(__DragonFly__)
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
139 int
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
140 read_toc(const char *dev) {
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
141 int drive;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
142 struct ioc_toc_header tochdr;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
143 struct ioc_read_toc_single_entry tocentry;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
144 int i;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
145
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
146 drive = open(dev, O_RDONLY | O_NONBLOCK);
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
147 if( drive<0 ) {
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
148 return drive;
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
149 }
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
150
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
151 ioctl(drive, CDIOREADTOCHEADER, &tochdr);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
152 for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
153 tocentry.track = i;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
154 tocentry.address_format = CD_MSF_FORMAT;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
155 ioctl(drive, CDIOREADTOCENTRY, &tocentry);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
156 cdtoc[i-1].min = tocentry.entry.addr.msf.minute;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
157 cdtoc[i-1].sec = tocentry.entry.addr.msf.second;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
158 cdtoc[i-1].frame = tocentry.entry.addr.msf.frame;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
159 cdtoc[i-1].frame += cdtoc[i-1].min*60*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
160 cdtoc[i-1].frame += cdtoc[i-1].sec*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
161 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
162 tocentry.track = 0xAA;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
163 tocentry.address_format = CD_MSF_FORMAT;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
164 ioctl(drive, CDIOREADTOCENTRY, &tocentry);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
165 cdtoc[tochdr.ending_track].min = tocentry.entry.addr.msf.minute;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
166 cdtoc[tochdr.ending_track].sec = tocentry.entry.addr.msf.second;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
167 cdtoc[tochdr.ending_track].frame = tocentry.entry.addr.msf.frame;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
168 cdtoc[tochdr.ending_track].frame += cdtoc[tochdr.ending_track].min*60*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
169 cdtoc[tochdr.ending_track].frame += cdtoc[tochdr.ending_track].sec*75;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
170 close(drive);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
171 return tochdr.ending_track;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
172 }
7269
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
173
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
174 #elif defined(__NetBSD__) || defined(__OpenBSD__)
8609
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
175 int
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
176 read_toc(const char *dev) {
8609
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
177 int drive;
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
178 struct ioc_toc_header tochdr;
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
179 struct ioc_read_toc_entry tocentry;
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
180 int i;
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
181 struct cd_toc_entry toc_buffer;
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
182
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
183 drive = open(dev, O_RDONLY | O_NONBLOCK);
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
184 if( drive<0 ) {
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
185 return drive;
8609
1d98280b9ad1 The following patch allows the MPlayer "cdparanoia" support to work on
arpi
parents: 8557
diff changeset
186 }
7269
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
187
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
188 ioctl(drive, CDIOREADTOCHEADER, &tochdr);
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
189 for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) {
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
190 tocentry.starting_track = i;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
191 tocentry.address_format = CD_MSF_FORMAT;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
192 tocentry.data = &toc_buffer;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
193 tocentry.data_len = sizeof(toc_buffer);
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
194 ioctl(drive, CDIOREADTOCENTRYS, &tocentry);
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
195 cdtoc[i-1].min = toc_buffer.addr.msf.minute;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
196 cdtoc[i-1].sec = toc_buffer.addr.msf.second;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
197 cdtoc[i-1].frame = toc_buffer.addr.msf.frame;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
198 cdtoc[i-1].frame += cdtoc[i-1].min*60*75;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
199 cdtoc[i-1].frame += cdtoc[i-1].sec*75;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
200 }
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
201 tocentry.starting_track = 0xAA;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
202 tocentry.address_format = CD_MSF_FORMAT;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
203 ioctl(drive, CDIOREADTOCENTRYS, &tocentry);
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
204 cdtoc[tochdr.ending_track].min = toc_buffer.addr.msf.minute;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
205 cdtoc[tochdr.ending_track].sec = toc_buffer.addr.msf.second;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
206 cdtoc[tochdr.ending_track].frame = toc_buffer.addr.msf.frame;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
207 cdtoc[tochdr.ending_track].frame += cdtoc[tochdr.ending_track].min*60*75;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
208 cdtoc[tochdr.ending_track].frame += cdtoc[tochdr.ending_track].sec*75;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
209 close(drive);
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
210 return tochdr.ending_track;
a5f1baaf7714 Applied patch for OpenBDS from Marc Espie (submitted by Bj«Órn Sandell <biorn@dce.chalmers.se>)
bertrand
parents: 6697
diff changeset
211 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
212 #endif
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
213
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
214 /**
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
215 \brief Reads TOC from CD in the given device and prints the number of tracks
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
216 and the length of each track in minute:second:frame format.
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
217 \param *dev the device to analyse
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
218 \return if the command line -identify is given, returns the last track of
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
219 the TOC or -1 if the TOC can't be read,
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
220 otherwise just returns 0 and let cddb_resolve the TOC
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
221 */
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
222 int cdd_identify(const char *dev)
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
223 {
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
224 cdtoc_last_track = 0;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
225 if (identify)
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
226 {
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
227 int i, min, sec, frame;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
228 cdtoc_last_track = read_toc(dev);
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
229 if (cdtoc_last_track < 0) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
230 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToOpenDevice, dev);
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
231 return -1;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
232 }
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
233 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_CDDA_TRACKS=%d\n", cdtoc_last_track);
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
234 for (i = 1; i <= cdtoc_last_track; i++)
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
235 {
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
236 frame = cdtoc[i].frame - cdtoc[i-1].frame;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
237 sec = frame / 75;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
238 frame -= sec * 75;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
239 min = sec / 60;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
240 sec -= min * 60;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
241 mp_msg(MSGT_GLOBAL, MSGL_INFO, "ID_CDDA_TRACK_%d_MSF=%02d:%02d:%02d\n", i, min, sec, frame);
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
242 }
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
243 }
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
244 return cdtoc_last_track;
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
245 }
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
246
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
247 unsigned int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
248 cddb_sum(int n) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
249 unsigned int ret;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
250
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
251 ret = 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
252 while (n > 0) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
253 ret += (n % 10);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
254 n /= 10;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
255 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
256 return ret;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
257 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
258
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
259 unsigned long
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
260 cddb_discid(int tot_trks) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
261 unsigned int i, t = 0, n = 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
262
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
263 i = 0;
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
264 while (i < (unsigned int)tot_trks) {
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
265 n = n + cddb_sum((cdtoc[i].min * 60) + cdtoc[i].sec);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
266 i++;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
267 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
268 t = ((cdtoc[tot_trks].min * 60) + cdtoc[tot_trks].sec) -
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
269 ((cdtoc[0].min * 60) + cdtoc[0].sec);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
270 return ((n % 0xff) << 24 | t << 8 | tot_trks);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
271 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
272
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
273
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
274
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
275 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
276 cddb_http_request(char *command, int (*reply_parser)(HTTP_header_t*,cddb_data_t*), cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
277 char request[4096];
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
278 int fd, ret = 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
279 URL_t *url;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
280 HTTP_header_t *http_hdr;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
281
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
282 if( reply_parser==NULL || command==NULL || cddb_data==NULL ) return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
283
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
284 sprintf( request, "http://%s/~cddb/cddb.cgi?cmd=%s%s&proto=%d", cddb_data->freedb_server, command, cddb_data->cddb_hello, cddb_data->freedb_proto_level );
18176
f72bc5754209 Part3 of Otvos Attila's oattila AT chello-hu mp_msg changes, with lots of modifications as usual
reynaldo
parents: 17446
diff changeset
285 mp_msg(MSGT_OPEN, MSGL_INFO,"Request[%s]\n", request );
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
286
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
287 url = url_new(request);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
288 if( url==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
289 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_NotAValidURL);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
290 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
291 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
292
11965
3d75bcc28231 enable seeking in http streams
attila
parents: 10121
diff changeset
293 fd = http_send_request(url,0);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
294 if( fd<0 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
295 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToSendHTTPRequest);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
296 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
297 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
298
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
299 http_hdr = http_read_response( fd );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
300 if( http_hdr==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
301 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToReadHTTPResponse);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
302 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
303 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
304
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
305 http_debug_hdr(http_hdr);
18176
f72bc5754209 Part3 of Otvos Attila's oattila AT chello-hu mp_msg changes, with lots of modifications as usual
reynaldo
parents: 17446
diff changeset
306 mp_msg(MSGT_OPEN, MSGL_INFO,"body=[%s]\n", http_hdr->body );
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
307
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
308 switch(http_hdr->status_code) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
309 case 200:
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
310 ret = reply_parser(http_hdr, cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
311 break;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
312 case 400:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
313 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_HTTPErrorNOTFOUND);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
314 break;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
315 default:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
316 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_HTTPErrorUnknown);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
317 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
318
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
319 http_free( http_hdr );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
320 url_free( url );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
321
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
322 return ret;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
323 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
324
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
325 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
326 cddb_read_cache(cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
327 char file_name[100];
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
328 struct stat stats;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
329 int file_fd, ret;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
330 size_t file_size;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
331
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
332 if( cddb_data==NULL || cddb_data->cache_dir==NULL ) return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
333
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
334 sprintf( file_name, "%s%08lx", cddb_data->cache_dir, cddb_data->disc_id);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
335
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
336 file_fd = open(file_name, O_RDONLY
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
337 #ifdef WIN32
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
338 | O_BINARY
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
339 #endif
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
340 );
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
341 if( file_fd<0 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
342 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_NoCacheFound);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
343 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
344 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
345
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
346 ret = fstat( file_fd, &stats );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
347 if( ret<0 ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
348 perror("fstat");
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
349 file_size = 4096;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
350 } else {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
351 file_size = stats.st_size;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
352 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
353
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
354 cddb_data->xmcd_file = (char*)malloc(file_size);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
355 if( cddb_data->xmcd_file==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
356 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MemAllocFailed);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
357 close(file_fd);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
358 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
359 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
360 cddb_data->xmcd_file_size = read(file_fd, cddb_data->xmcd_file, file_size);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
361 if( cddb_data->xmcd_file_size!=file_size ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
362 mp_msg(MSGT_DEMUX, MSGL_WARN, MSGTR_MPDEMUX_CDDB_NotAllXMCDFileHasBeenRead);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
363 close(file_fd);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
364 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
365 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
366
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
367 close(file_fd);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
368
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
369 return 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
370 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
371
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
372 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
373 cddb_write_cache(cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
374 // We have the file, save it for cache.
7721
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
375 struct stat file_stat;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
376 char file_name[100];
7721
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
377 int file_fd, ret;
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
378 int wrote=0;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
379
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
380 if( cddb_data==NULL || cddb_data->cache_dir==NULL ) return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
381
7721
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
382 // Check if the CDDB cache dir exist
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
383 ret = stat( cddb_data->cache_dir, &file_stat );
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
384 if( ret<0 ) {
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
385 // Directory not present, create it.
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
386 ret = mkdir( cddb_data->cache_dir, 0755 );
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
387 #ifdef __MINGW32__
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
388 if( ret<0 && errno != EEXIST ) {
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
389 #else
7721
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
390 if( ret<0 ) {
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
391 #endif
7721
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
392 perror("mkdir");
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
393 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToCreateDirectory, cddb_data->cache_dir);
7721
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
394 return -1;
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
395 }
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
396 }
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
397
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
398 sprintf( file_name, "%s%08lx", cddb_data->cache_dir, cddb_data->disc_id );
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
399
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
400 file_fd = creat(file_name, S_IREAD|S_IWRITE);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
401 if( file_fd<0 ) {
7721
765afc1fcd67 Create the ~/.cddb directory if not present.
bertrand
parents: 7431
diff changeset
402 perror("create");
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
403 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
404 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
405
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
406 wrote = write(file_fd, cddb_data->xmcd_file, cddb_data->xmcd_file_size);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
407 if( wrote<0 ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
408 perror("write");
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
409 close(file_fd);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
410 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
411 }
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
412 if( (unsigned int)wrote!=cddb_data->xmcd_file_size ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
413 mp_msg(MSGT_DEMUX, MSGL_WARN, MSGTR_MPDEMUX_CDDB_NotAllXMCDFileHasBeenWritten);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
414 close(file_fd);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
415 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
416 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
417
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
418 close(file_fd);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
419
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
420 return 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
421 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
422
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
423 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
424 cddb_read_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
425 unsigned long disc_id;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
426 char category[100];
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
427 char *ptr=NULL, *ptr2=NULL;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
428 int ret, status;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
429
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
430 if( http_hdr==NULL || cddb_data==NULL ) return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
431
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
432 ret = sscanf( http_hdr->body, "%d ", &status);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
433 if( ret!=1 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
434 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
435 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
436 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
437
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
438 switch(status) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
439 case 210:
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
440 ret = sscanf( http_hdr->body, "%d %s %08lx", &status, category, &disc_id);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
441 if( ret!=3 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
442 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
443 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
444 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
445 // Check if it's a xmcd database file
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
446 ptr = strstr(http_hdr->body, "# xmcd");
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
447 if( ptr==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
448 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_InvalidXMCDDatabaseReturned);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
449 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
450 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
451 // Ok found the beginning of the file
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
452 // look for the end
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
453 ptr2 = strstr(ptr, "\r\n.\r\n");
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
454 if( ptr2==NULL ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
455 ptr2 = strstr(ptr, "\n.\n");
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
456 if( ptr2==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
457 mp_msg(MSGT_DEMUX, MSGL_FIXME, "Unable to find '.'\n");
8557
97cf659a4c38 - fixed uninitialized offsets[]
arpi
parents: 7953
diff changeset
458 ptr2=ptr+strlen(ptr); //return -1;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
459 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
460 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
461 // Ok found the end
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
462 // do a sanity check
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7746
diff changeset
463 if( http_hdr->body_size<(unsigned int)(ptr2-ptr) ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
464 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_UnexpectedFIXME);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
465 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
466 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
467 cddb_data->xmcd_file = ptr;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
468 cddb_data->xmcd_file_size = ptr2-ptr+2;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
469 cddb_data->xmcd_file[cddb_data->xmcd_file_size] = '\0';
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
470 // Avoid the http_free function to free the xmcd file...save a mempcy...
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
471 http_hdr->body = NULL;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
472 http_hdr->body_size = 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
473 return cddb_write_cache(cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
474 default:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
475 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
476 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
477 return 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
478 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
479
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
480 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
481 cddb_request_titles(cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
482 char command[1024];
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
483 sprintf( command, "cddb+read+%s+%08lx", cddb_data->category, cddb_data->disc_id);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
484 return cddb_http_request(command, cddb_read_parse, cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
485 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
486
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
487 int
8746
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
488 cddb_parse_matches_list(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) {
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
489 char album_title[100];
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
490 char *ptr = NULL;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
491 int ret;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
492
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
493 ptr = strstr(http_hdr->body, "\n");
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
494 if( ptr==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
495 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_UnableToFindEOL);
8746
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
496 return -1;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
497 }
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
498 ptr++;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
499 // We have a list of exact/inexact matches, so which one do we use?
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
500 // So let's take the first one.
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
501 ret = sscanf(ptr, "%s %08lx %s", cddb_data->category, &(cddb_data->disc_id), album_title);
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
502 if( ret!=3 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
503 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
8746
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
504 return -1;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
505 }
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
506 ptr = strstr(http_hdr->body, album_title);
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
507 if( ptr!=NULL ) {
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
508 char *ptr2;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
509 int len;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
510 ptr2 = strstr(ptr, "\n");
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
511 if( ptr2==NULL ) {
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
512 len = (http_hdr->body_size)-(ptr-(http_hdr->body));
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
513 } else {
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
514 len = ptr2-ptr+1;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
515 }
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
516 strncpy(album_title, ptr, len);
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
517 album_title[len-2]='\0';
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
518 }
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
519 mp_msg(MSGT_DEMUX, MSGL_STATUS, MSGTR_MPDEMUX_CDDB_ParseOKFoundAlbumTitle, album_title);
8746
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
520 return 0;
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
521 }
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
522
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
523 int
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
524 cddb_query_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
525 char album_title[100];
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
526 char *ptr = NULL;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
527 int ret, status;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
528
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
529 ret = sscanf( http_hdr->body, "%d ", &status);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
530 if( ret!=1 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
531 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
532 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
533 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
534
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
535 switch(status) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
536 case 200:
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
537 // Found exact match
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
538 ret = sscanf(http_hdr->body, "%d %s %08lx %s", &status, cddb_data->category, &(cddb_data->disc_id), album_title);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
539 if( ret!=4 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
540 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
541 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
542 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
543 ptr = strstr(http_hdr->body, album_title);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
544 if( ptr!=NULL ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
545 char *ptr2;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
546 int len;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
547 ptr2 = strstr(ptr, "\n");
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
548 if( ptr2==NULL ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
549 len = (http_hdr->body_size)-(ptr-(http_hdr->body));
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
550 } else {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
551 len = ptr2-ptr+1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
552 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
553 strncpy(album_title, ptr, len);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
554 album_title[len-2]='\0';
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
555 }
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
556 mp_msg(MSGT_DEMUX, MSGL_STATUS, MSGTR_MPDEMUX_CDDB_ParseOKFoundAlbumTitle, album_title);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
557 return cddb_request_titles(cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
558 case 202:
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
559 // No match found
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
560 mp_msg(MSGT_DEMUX, MSGL_WARN, MSGTR_MPDEMUX_CDDB_AlbumNotFound);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
561 break;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
562 case 210:
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
563 // Found exact matches, list follows
8746
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
564 cddb_parse_matches_list(http_hdr, cddb_data);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
565 return cddb_request_titles(cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
566 /*
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
567 body=[210 Found exact matches, list follows (until terminating `.')
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
568 misc c711930d Santana / Supernatural
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
569 rock c711930d Santana / Supernatural
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
570 blues c711930d Santana / Supernatural
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
571 .]
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
572 */
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
573 case 211:
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
574 // Found inexact matches, list follows
8746
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
575 cddb_parse_matches_list(http_hdr, cddb_data);
f1fc23f6203b - If CDDB fail, try CDDA
bertrand
parents: 8609
diff changeset
576 return cddb_request_titles(cddb_data);
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
577 case 500:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
578 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_ServerReturnsCommandSyntaxErr);
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
579 break;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
580 default:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
581 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
582 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
583 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
584 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
585
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
586 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
587 cddb_proto_level_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
588 int max;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
589 int ret, status;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
590 char *ptr;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
591
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
592 ret = sscanf( http_hdr->body, "%d ", &status);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
593 if( ret!=1 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
594 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
595 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
596 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
597
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
598 switch(status) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
599 case 210:
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
600 ptr = strstr(http_hdr->body, "max proto:");
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
601 if( ptr==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
602 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
603 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
604 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
605 ret = sscanf(ptr, "max proto: %d", &max);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
606 if( ret!=1 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
607 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
608 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
609 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
610 cddb_data->freedb_proto_level = max;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
611 return 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
612 default:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
613 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
614 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
615 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
616 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
617
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
618 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
619 cddb_get_proto_level(cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
620 return cddb_http_request("stat", cddb_proto_level_parse, cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
621 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
622
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
623 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
624 cddb_freedb_sites_parse(HTTP_header_t *http_hdr, cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
625 int ret, status;
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
626
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
627 ret = sscanf( http_hdr->body, "%d ", &status);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
628 if( ret!=1 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
629 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
630 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
631 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
632
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
633 switch(status) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
634 case 210:
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
635 // TODO: Parse the sites
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
636 ret = cddb_data->anonymous; // For gcc complaining about unused parameter.
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
637 return 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
638 case 401:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
639 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_NoSitesInfoAvailable);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
640 break;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
641 default:
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
642 mp_msg(MSGT_DEMUX, MSGL_FIXME, MSGTR_MPDEMUX_CDDB_UnhandledCode);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
643 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
644 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
645 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
646
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
647 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
648 cddb_get_freedb_sites(cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
649 return cddb_http_request("sites", cddb_freedb_sites_parse, cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
650 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
651
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
652 void
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
653 cddb_create_hello(cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
654 char host_name[51];
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
655 char *user_name;
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
656
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
657 if( cddb_data->anonymous ) { // Default is anonymous
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
658 /* Note from Eduardo Pérez Ureta <eperez@it.uc3m.es> :
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
659 * We don't send current user/host name in hello to prevent spam.
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
660 * Software that sends this is considered spyware
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
661 * that most people don't like.
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
662 */
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
663 user_name = "anonymous";
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
664 strcpy(host_name, "localhost");
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
665 } else {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
666 if( gethostname(host_name, 50)<0 ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
667 strcpy(host_name, "localhost");
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
668 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
669 user_name = getenv("LOGNAME");
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
670 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
671 sprintf( cddb_data->cddb_hello, "&hello=%s+%s+%s+%s", user_name, host_name, "MPlayer", VERSION );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
672 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
673
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
674 int
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
675 cddb_retrieve(cddb_data_t *cddb_data) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
676 char offsets[1024], command[1024];
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
677 char *ptr;
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
678 unsigned int i, time_len;
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
679 int ret;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
680
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
681 ptr = offsets;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
682 for( i=0; i<cddb_data->tracks ; i++ ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
683 ptr += sprintf(ptr, "%d+", cdtoc[i].frame );
12289
e197979a0883 potentially exploitable buffer overflow with maliciously crafted cd toc
rfelker
parents: 11965
diff changeset
684 if (ptr-offsets > sizeof offsets - 40) break;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
685 }
8557
97cf659a4c38 - fixed uninitialized offsets[]
arpi
parents: 7953
diff changeset
686 ptr[0]=0;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
687 time_len = (cdtoc[cddb_data->tracks].frame)/75;
8557
97cf659a4c38 - fixed uninitialized offsets[]
arpi
parents: 7953
diff changeset
688
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
689 cddb_data->freedb_server = DEFAULT_FREEDB_SERVER;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
690 cddb_data->freedb_proto_level = 1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
691 cddb_data->xmcd_file = NULL;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
692
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
693 cddb_create_hello(cddb_data);
6475
837ca6fd4adf Checked the return value when retrieving the protocol level.
bertrand
parents: 6474
diff changeset
694 if( cddb_get_proto_level(cddb_data)<0 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
695 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToGetProtocolLevel);
6475
837ca6fd4adf Checked the return value when retrieving the protocol level.
bertrand
parents: 6474
diff changeset
696 return -1;
837ca6fd4adf Checked the return value when retrieving the protocol level.
bertrand
parents: 6474
diff changeset
697 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
698
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
699 //cddb_get_freedb_sites(&cddb_data);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
700
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
701 sprintf(command, "cddb+query+%08lx+%d+%s%d", cddb_data->disc_id, cddb_data->tracks, offsets, time_len );
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
702 ret = cddb_http_request(command, cddb_query_parse, cddb_data);
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
703 if( ret<0 ) return -1;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
704
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
705 if( cddb_data->cache_dir!=NULL ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
706 free(cddb_data->cache_dir);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
707 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
708 return 0;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
709 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
710
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
711 int
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
712 cddb_resolve(const char *dev, char **xmcd_file) {
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
713 char cddb_cache_dir[] = DEFAULT_CACHE_DIR;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
714 char *home_dir = NULL;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
715 cddb_data_t cddb_data;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
716
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
717 if (cdtoc_last_track <= 0)
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
718 {
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
719 cdtoc_last_track = read_toc(dev);
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
720 if (cdtoc_last_track < 0) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
721 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_MPDEMUX_CDDB_FailedToOpenDevice, dev);
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
722 return -1;
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
723 }
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
724 }
16524
83d101e1bedb Prints the number of tracks and MSF length for each track of an audio CD,
gpoirier
parents: 15566
diff changeset
725 cddb_data.tracks = cdtoc_last_track;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
726 cddb_data.disc_id = cddb_discid(cddb_data.tracks);
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
727 cddb_data.anonymous = 1; // Don't send user info by default
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
728
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
729 // Check if there is a CD in the drive
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
730 // FIXME: That's not really a good way to check
8962
c61e70388f6b Removed the hardcoded cdrom device.
bertrand
parents: 8746
diff changeset
731 if( cddb_data.disc_id==0 ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
732 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MPDEMUX_CDDB_NoCDInDrive);
7746
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
733 return -1;
15ce89ba92cf Don't start a CDDB request to the CDDB server if there is no CD in the drive,
bertrand
parents: 7721
diff changeset
734 }
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
735
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
736 home_dir = getenv("HOME");
16935
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
737 #ifdef __MINGW32__
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
738 if( home_dir==NULL ) home_dir = getenv("USERPROFILE");
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
739 if( home_dir==NULL ) home_dir = getenv("HOMEPATH");
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
740 // Last resort, store the cddb cache in the mplayer directory
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
741 if( home_dir==NULL ) home_dir = (char *)get_path("");
60bd6aeed405 make it optionally possible to compile MPlayer with libcdio instead of libcdparanoia
faust3
parents: 16524
diff changeset
742 #endif
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
743 if( home_dir==NULL ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
744 cddb_data.cache_dir = NULL;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
745 } else {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
746 cddb_data.cache_dir = (char*)malloc(strlen(home_dir)+strlen(cddb_cache_dir)+1);
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
747 if( cddb_data.cache_dir==NULL ) {
16967
32e2c59c8e86 [TRIVIAL] More translatables to help_mp and printfs to mp_msg on libmpdemux
reynaldo
parents: 16935
diff changeset
748 mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_MemAllocFailed);
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
749 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
750 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
751 sprintf(cddb_data.cache_dir, "%s%s", home_dir, cddb_cache_dir );
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
752 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
753
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
754 // Check for a cached file
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
755 if( cddb_read_cache(&cddb_data)<0 ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
756 // No Cache found
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
757 if( cddb_retrieve(&cddb_data)<0 ) {
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
758 return -1;
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
759 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
760 }
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
761
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
762 if( cddb_data.xmcd_file!=NULL ) {
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
763 // printf("%s\n", cddb_data.xmcd_file );
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
764 *xmcd_file = cddb_data.xmcd_file;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
765 return 0;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
766 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
767
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
768 return -1;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
769 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
770
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
771 /*******************************************************************************************************************
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
772 *
7431
e46eeafcd4df Moved all the cdinfo specific from cddb to a standalone file(cdinfo.c), so
bertrand
parents: 7269
diff changeset
773 * xmcd parser
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
774 *
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
775 *******************************************************************************************************************/
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
776 char*
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
777 xmcd_parse_dtitle(cd_info_t *cd_info, char *line) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
778 char *ptr, *album;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
779 ptr = strstr(line, "DTITLE=");
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
780 if( ptr!=NULL ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
781 ptr += 7;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
782 album = strstr(ptr, "/");
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
783 if( album==NULL ) return NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
784 cd_info->album = (char*)malloc(strlen(album+2)+1);
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
785 if( cd_info->album==NULL ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
786 return NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
787 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
788 strcpy( cd_info->album, album+2 );
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
789 album--;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
790 album[0] = '\0';
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
791 cd_info->artist = (char*)malloc(strlen(ptr)+1);
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
792 if( cd_info->artist==NULL ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
793 return NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
794 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
795 strcpy( cd_info->artist, ptr );
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
796 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
797 return ptr;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
798 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
799
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
800 char*
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
801 xmcd_parse_dgenre(cd_info_t *cd_info, char *line) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
802 char *ptr;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
803 ptr = strstr(line, "DGENRE=");
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
804 if( ptr!=NULL ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
805 ptr += 7;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
806 cd_info->genre = (char*)malloc(strlen(ptr)+1);
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
807 if( cd_info->genre==NULL ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
808 return NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
809 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
810 strcpy( cd_info->genre, ptr );
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
811 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
812 return ptr;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
813 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
814
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
815 char*
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
816 xmcd_parse_ttitle(cd_info_t *cd_info, char *line) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
817 unsigned int track_nb;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
818 unsigned long sec, off;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
819 char *ptr;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
820 ptr = strstr(line, "TTITLE");
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
821 if( ptr!=NULL ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
822 ptr += 6;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
823 // Here we point to the track number
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
824 track_nb = atoi(ptr);
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
825 ptr = strstr(ptr, "=");
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
826 if( ptr==NULL ) return NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
827 ptr++;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
828
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
829 sec = cdtoc[track_nb].frame;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
830 off = cdtoc[track_nb+1].frame-sec+1;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
831
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
832 cd_info_add_track( cd_info, ptr, track_nb+1, (unsigned int)(off/(60*75)), (unsigned int)((off/75)%60), (unsigned int)(off%75), sec, off );
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
833 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
834 return ptr;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
835 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
836
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
837 cd_info_t*
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
838 cddb_parse_xmcd(char *xmcd_file) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
839 cd_info_t *cd_info = NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
840 int length, pos = 0;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
841 char *ptr, *ptr2;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
842 unsigned int audiolen;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
843 if( xmcd_file==NULL ) return NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
844
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
845 cd_info = cd_info_new();
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
846 if( cd_info==NULL ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
847 return NULL;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
848 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
849
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
850 length = strlen(xmcd_file);
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
851 ptr = xmcd_file;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
852 while( ptr!=NULL && pos<length ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
853 // Read a line
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
854 ptr2 = ptr;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
855 while( ptr2[0]!='\0' && ptr2[0]!='\r' && ptr2[0]!='\n' ) ptr2++;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
856 if( ptr2[0]=='\0' ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
857 break;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
858 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
859 ptr2[0] = '\0';
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
860 // Ignore comments
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
861 if( ptr[0]!='#' ) {
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
862 // Search for the album title
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
863 if( xmcd_parse_dtitle(cd_info, ptr) );
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
864 // Search for the genre
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
865 else if( xmcd_parse_dgenre(cd_info, ptr) );
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
866 // Search for a track title
7953
60624e692b95 GCC warning fixes
bertrand
parents: 7746
diff changeset
867 else if( xmcd_parse_ttitle(cd_info, ptr) ) audiolen++; // <-- audiolen++ to shut up gcc warning
6697
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
868 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
869 if( ptr2[1]=='\n' ) ptr2++;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
870 pos = (ptr2+1)-ptr;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
871 ptr = ptr2+1;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
872 }
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
873
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
874 audiolen = cdtoc[cd_info->nb_tracks].frame-cdtoc[0].frame;
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
875 cd_info->min = (unsigned int)(audiolen/(60*75));
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
876 cd_info->sec = (unsigned int)((audiolen/75)%60);
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
877 cd_info->msec = (unsigned int)(audiolen%75);
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
878
4cade272ce2b Added a simple xmcd parser to retreive the tracks name.
bertrand
parents: 6475
diff changeset
879 return cd_info;
6474
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
880 }
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
881
654b26c941e5 CDDB support added.
bertrand
parents:
diff changeset
882 #endif