Mercurial > mplayer.hg
annotate dvdread/dvd_input.c @ 24050:1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
author | diego |
---|---|
date | Wed, 15 Aug 2007 11:57:30 +0000 |
parents | de28f9e8cb00 |
children | dcf5fe229d37 |
rev | line source |
---|---|
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
1 /* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */ |
7029 | 2 /* |
3 * Copyright (C) 2002 Samuel Hocevar <sam@zoy.org>, | |
4 * Håkan Hjort <d95hjort@dtek.chalmers.se> | |
5 * | |
14938
25df9508f9a8
Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents:
14607
diff
changeset
|
6 * Modified for use with MPlayer, changes contained in libdvdread_changes.diff. |
18783 | 7 * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ |
14938
25df9508f9a8
Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents:
14607
diff
changeset
|
8 * $Id$ |
25df9508f9a8
Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents:
14607
diff
changeset
|
9 * |
7029 | 10 * This program is free software; you can redistribute it and/or modify |
11 * it under the terms of the GNU General Public License as published by | |
12 * the Free Software Foundation; either version 2 of the License, or | |
13 * (at your option) any later version. | |
14 * | |
15 * This program is distributed in the hope that it will be useful, | |
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 * GNU General Public License for more details. | |
19 * | |
20 * You should have received a copy of the GNU General Public License | |
21 * along with this program; if not, write to the Free Software | |
22 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. | |
23 */ | |
24 | |
15874 | 25 #include "config.h" |
26 | |
7029 | 27 #include <stdio.h> |
28 #include <stdlib.h> | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
29 #define __USE_GNU /* to get O_DIRECT in linux */ |
7029 | 30 #include <fcntl.h> |
31 #include <unistd.h> | |
32 | |
33 #include "dvd_reader.h" | |
34 #include "dvd_input.h" | |
35 | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
36 #include "dvdread_internal.h" |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
37 |
15874 | 38 /* The function pointers that is the exported interface of this file. */ |
39 dvd_input_t (*dvdinput_open) (const char *); | |
40 int (*dvdinput_close) (dvd_input_t); | |
41 int (*dvdinput_seek) (dvd_input_t, int); | |
42 int (*dvdinput_title) (dvd_input_t, int); | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
43 /** |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
44 * pointer must be aligned to 2048 bytes |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
45 * if reading from a raw/O_DIRECT file |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
46 */ |
15874 | 47 int (*dvdinput_read) (dvd_input_t, void *, int, int); |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
48 |
15874 | 49 char * (*dvdinput_error) (dvd_input_t); |
7029 | 50 |
15874 | 51 #ifdef HAVE_DVDCSS_DVDCSS_H |
52 /* linking to libdvdcss */ | |
20983 | 53 #include <dvdcss/dvdcss.h> |
15874 | 54 #define DVDcss_open(a) dvdcss_open((char*)(a)) |
55 #define DVDcss_close dvdcss_close | |
56 #define DVDcss_seek dvdcss_seek | |
57 #define DVDcss_title dvdcss_title | |
58 #define DVDcss_read dvdcss_read | |
59 #define DVDcss_error dvdcss_error | |
60 #else | |
61 /* dlopening libdvdcss */ | |
62 #include <dlfcn.h> | |
63 typedef struct dvdcss_s *dvdcss_handle; | |
64 static dvdcss_handle (*DVDcss_open) (const char *); | |
65 static int (*DVDcss_close) (dvdcss_handle); | |
66 static int (*DVDcss_seek) (dvdcss_handle, int, int); | |
67 static int (*DVDcss_title) (dvdcss_handle, int); | |
68 static int (*DVDcss_read) (dvdcss_handle, void *, int, int); | |
69 static char * (*DVDcss_error) (dvdcss_handle); | |
70 #endif | |
7029 | 71 |
72 /* The DVDinput handle, add stuff here for new input methods. */ | |
73 struct dvd_input_s { | |
74 /* libdvdcss handle */ | |
75 dvdcss_handle dvdcss; | |
76 | |
77 /* dummy file input */ | |
78 int fd; | |
79 }; | |
80 | |
81 | |
82 /** | |
83 * initialize and open a DVD device or file. | |
84 */ | |
85 static dvd_input_t css_open(const char *target) | |
86 { | |
87 dvd_input_t dev; | |
15874 | 88 |
7029 | 89 /* Allocate the handle structure */ |
11776
12615e408fb9
Fix (possible) memory corruption. dvd_input_t is pointer to struct dvd_input_s and not a struct.
lumag
parents:
7033
diff
changeset
|
90 dev = (dvd_input_t) malloc(sizeof(struct dvd_input_s)); |
7029 | 91 if(dev == NULL) { |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
92 /* malloc has set errno to ENOMEM */ |
7029 | 93 return NULL; |
94 } | |
95 | |
96 /* Really open it with libdvdcss */ | |
97 dev->dvdcss = DVDcss_open(target); | |
98 if(dev->dvdcss == 0) { | |
99 free(dev); | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
100 dev = NULL; |
7029 | 101 } |
102 | |
103 return dev; | |
104 } | |
105 | |
106 /** | |
107 * return the last error message | |
108 */ | |
109 static char *css_error(dvd_input_t dev) | |
110 { | |
111 return DVDcss_error(dev->dvdcss); | |
112 } | |
113 | |
114 /** | |
115 * seek into the device. | |
116 */ | |
15874 | 117 static int css_seek(dvd_input_t dev, int blocks) |
7029 | 118 { |
15874 | 119 /* DVDINPUT_NOFLAGS should match the DVDCSS_NOFLAGS value. */ |
120 return DVDcss_seek(dev->dvdcss, blocks, DVDINPUT_NOFLAGS); | |
7029 | 121 } |
122 | |
123 /** | |
124 * set the block for the begining of a new title (key). | |
125 */ | |
126 static int css_title(dvd_input_t dev, int block) | |
127 { | |
128 return DVDcss_title(dev->dvdcss, block); | |
129 } | |
130 | |
131 /** | |
132 * read data from the device. | |
133 */ | |
134 static int css_read(dvd_input_t dev, void *buffer, int blocks, int flags) | |
135 { | |
136 return DVDcss_read(dev->dvdcss, buffer, blocks, flags); | |
137 } | |
138 | |
139 /** | |
140 * close the DVD device and clean up the library. | |
141 */ | |
142 static int css_close(dvd_input_t dev) | |
143 { | |
144 int ret; | |
145 | |
146 ret = DVDcss_close(dev->dvdcss); | |
147 | |
148 if(ret < 0) | |
149 return ret; | |
150 | |
151 free(dev); | |
152 | |
153 return 0; | |
154 } | |
155 | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
156 /* Need to use O_BINARY for WIN32 */ |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
157 #ifndef O_BINARY |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
158 #ifdef _O_BINARY |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
159 #define O_BINARY _O_BINARY |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
160 #else |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
161 #define O_BINARY 0 |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
162 #endif |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
163 #endif |
15874 | 164 |
165 /** | |
166 * initialize and open a DVD device or file. | |
167 */ | |
168 static dvd_input_t file_open(const char *target) | |
169 { | |
170 dvd_input_t dev; | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
171 char *use_odirect; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
172 int oflags; |
15874 | 173 |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
174 oflags = O_RDONLY | O_BINARY; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
175 use_odirect = getenv("DVDREAD_USE_DIRECT"); |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
176 if(use_odirect) { |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
177 #ifndef O_DIRECT |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
178 #define O_DIRECT 0 |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
179 #endif |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
180 oflags |= O_DIRECT; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
181 } |
15874 | 182 /* Allocate the library structure */ |
17786
f0f54034c7e9
fix another sizeof(dvd_input_t) bug (must be struct dvd_input_s instead)
reimar
parents:
15874
diff
changeset
|
183 dev = (dvd_input_t) malloc(sizeof(struct dvd_input_s)); |
15874 | 184 if(dev == NULL) { |
185 return NULL; | |
186 } | |
187 | |
188 /* Open the device */ | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
189 dev->fd = open(target, oflags); |
15874 | 190 if(dev->fd < 0) { |
191 free(dev); | |
192 return NULL; | |
193 } | |
194 | |
195 return dev; | |
196 } | |
197 | |
198 /** | |
199 * return the last error message | |
200 */ | |
201 static char *file_error(dvd_input_t dev) | |
202 { | |
203 /* use strerror(errno)? */ | |
204 return (char *)"unknown error"; | |
205 } | |
206 | |
207 /** | |
208 * seek into the device. | |
209 */ | |
210 static int file_seek(dvd_input_t dev, int blocks) | |
211 { | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
212 off_t pos = (off_t)blocks * (off_t)DVD_VIDEO_LB_LEN; |
15874 | 213 |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
214 pos = lseek(dev->fd, pos, SEEK_SET); |
15874 | 215 if(pos < 0) { |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
216 return pos; |
15874 | 217 } |
218 /* assert pos % DVD_VIDEO_LB_LEN == 0 */ | |
219 return (int) (pos / DVD_VIDEO_LB_LEN); | |
220 } | |
221 | |
222 /** | |
223 * set the block for the begining of a new title (key). | |
224 */ | |
225 static int file_title(dvd_input_t dev, int block) | |
226 { | |
227 return -1; | |
228 } | |
229 | |
230 /** | |
231 * read data from the device. | |
232 */ | |
233 static int file_read(dvd_input_t dev, void *buffer, int blocks, int flags) | |
234 { | |
235 size_t len; | |
236 ssize_t ret; | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
237 unsigned char *buf = buffer; |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
238 |
15874 | 239 len = (size_t)blocks * DVD_VIDEO_LB_LEN; |
240 | |
241 while(len > 0) { | |
242 | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
243 ret = read(dev->fd, buf, len); |
15874 | 244 |
245 if(ret < 0) { | |
246 /* One of the reads failed, too bad. We won't even bother | |
247 * returning the reads that went ok, and as in the posix spec | |
248 * the file postition is left unspecified after a failure. */ | |
249 return ret; | |
250 } | |
251 | |
252 if(ret == 0) { | |
253 /* Nothing more to read. Return the whole blocks, if any, that we got. | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
254 and adjust the file possition back to the previous block boundary. */ |
15874 | 255 size_t bytes = (size_t)blocks * DVD_VIDEO_LB_LEN - len; |
256 off_t over_read = -(bytes % DVD_VIDEO_LB_LEN); | |
257 /*off_t pos =*/ lseek(dev->fd, over_read, SEEK_CUR); | |
258 /* should have pos % 2048 == 0 */ | |
259 return (int) (bytes / DVD_VIDEO_LB_LEN); | |
260 } | |
261 | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
262 buf+=ret; |
15874 | 263 len -= ret; |
264 } | |
265 | |
266 return blocks; | |
267 } | |
268 | |
269 /** | |
270 * close the DVD device and clean up. | |
271 */ | |
272 static int file_close(dvd_input_t dev) | |
273 { | |
274 int ret; | |
275 | |
276 ret = close(dev->fd); | |
277 | |
278 if(ret < 0) | |
279 return ret; | |
280 | |
281 free(dev); | |
282 | |
283 return 0; | |
284 } | |
285 | |
286 | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
287 static void *dvdcss_library = NULL; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
288 static int dvdcss_library_init = 0; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
289 |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
290 /** |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
291 * Free any objects allocated by dvdinput_setup. |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
292 * Should only be called when libdvdread is not to be used any more. |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
293 * Closes dlopened libraries. |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
294 */ |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
295 void dvdinput_free(void) |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
296 { |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
297 #ifdef HAVE_DVDCSS_DVDCSS_H |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
298 /* linked statically, nothing to free */ |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
299 return; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
300 #else |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
301 if(dvdcss_library) { |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
302 dlclose(dvdcss_library); |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
303 dvdcss_library = NULL; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
304 } |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
305 dvdcss_library_init = 0; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
306 return; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
307 #endif |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
308 } |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
309 |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
310 |
7029 | 311 /** |
312 * Setup read functions with either libdvdcss or minimal DVD access. | |
313 */ | |
15874 | 314 int dvdinput_setup(void) |
7029 | 315 { |
15874 | 316 char **dvdcss_version = NULL; |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
317 int verbose; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
318 |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
319 /* dlopening libdvdcss */ |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
320 if(dvdcss_library_init) { |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
321 /* libdvdcss is already dlopened, function ptrs set */ |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
322 if(dvdcss_library) { |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
323 return 1; /* css available */ |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
324 } else { |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
325 return 0; /* css not available */ |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
326 } |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
327 } |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
328 |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
329 verbose = get_verbose(); |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
330 |
15874 | 331 #ifdef HAVE_DVDCSS_DVDCSS_H |
332 /* linking to libdvdcss */ | |
333 dvdcss_library = &dvdcss_library; /* Give it some value != NULL */ | |
334 /* the DVDcss_* functions have been #defined at the top */ | |
335 dvdcss_version = &dvdcss_interface_2; | |
336 | |
337 #else | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
338 |
15874 | 339 dvdcss_library = dlopen("libdvdcss.so.2", RTLD_LAZY); |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
340 |
15874 | 341 if(dvdcss_library != NULL) { |
342 #if defined(__OpenBSD__) && !defined(__ELF__) | |
343 #define U_S "_" | |
344 #else | |
345 #define U_S | |
346 #endif | |
347 DVDcss_open = (dvdcss_handle (*)(const char*)) | |
348 dlsym(dvdcss_library, U_S "dvdcss_open"); | |
349 DVDcss_close = (int (*)(dvdcss_handle)) | |
350 dlsym(dvdcss_library, U_S "dvdcss_close"); | |
351 DVDcss_title = (int (*)(dvdcss_handle, int)) | |
352 dlsym(dvdcss_library, U_S "dvdcss_title"); | |
353 DVDcss_seek = (int (*)(dvdcss_handle, int, int)) | |
354 dlsym(dvdcss_library, U_S "dvdcss_seek"); | |
355 DVDcss_read = (int (*)(dvdcss_handle, void*, int, int)) | |
356 dlsym(dvdcss_library, U_S "dvdcss_read"); | |
357 DVDcss_error = (char* (*)(dvdcss_handle)) | |
358 dlsym(dvdcss_library, U_S "dvdcss_error"); | |
7029 | 359 |
15874 | 360 dvdcss_version = (char **)dlsym(dvdcss_library, U_S "dvdcss_interface_2"); |
361 | |
362 if(dlsym(dvdcss_library, U_S "dvdcss_crack")) { | |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
363 if(verbose >= 0) { |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
364 fprintf(stderr, |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
365 "libdvdread: Old (pre-0.0.2) version of libdvdcss found.\n" |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
366 "libdvdread: You should get the latest version from " |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
367 "http://www.videolan.org/\n" ); |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
368 } |
15874 | 369 dlclose(dvdcss_library); |
370 dvdcss_library = NULL; | |
371 } else if(!DVDcss_open || !DVDcss_close || !DVDcss_title || !DVDcss_seek | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
372 || !DVDcss_read || !DVDcss_error || !dvdcss_version) { |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
373 if(verbose >= 0) { |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
374 fprintf(stderr, "libdvdread: Missing symbols in libdvdcss.so.2, " |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
375 "this shouldn't happen !\n"); |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
376 } |
15874 | 377 dlclose(dvdcss_library); |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
378 dvdcss_library = NULL; |
15874 | 379 } |
380 } | |
381 #endif /* HAVE_DVDCSS_DVDCSS_H */ | |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
382 |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
383 dvdcss_library_init = 1; |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
384 |
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
385 if(dvdcss_library) { |
7029 | 386 /* |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
387 char *psz_method = getenv( "DVDCSS_METHOD" ); |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
388 char *psz_verbose = getenv( "DVDCSS_VERBOSE" ); |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
389 fprintf(stderr, "DVDCSS_METHOD %s\n", psz_method); |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
390 fprintf(stderr, "DVDCSS_VERBOSE %s\n", psz_verbose); |
7029 | 391 */ |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
392 if(verbose >= 1) { |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
393 fprintf(stderr, "libdvdread: Using libdvdcss version %s for DVD access\n", |
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
394 *dvdcss_version); |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
395 } |
15874 | 396 /* libdvdcss wrapper functions */ |
397 dvdinput_open = css_open; | |
398 dvdinput_close = css_close; | |
399 dvdinput_seek = css_seek; | |
400 dvdinput_title = css_title; | |
401 dvdinput_read = css_read; | |
402 dvdinput_error = css_error; | |
7029 | 403 return 1; |
404 | |
15874 | 405 } else { |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
406 if(verbose >= 1) { |
24050
1542693b2a30
Sync libdvdread with version 0.9.5 (cosmetic changes).
diego
parents:
24047
diff
changeset
|
407 fprintf(stderr, "libdvdread: Encrypted DVD support unavailable.\n"); |
24047
de28f9e8cb00
Sync libdvdread with version 0.9.5 (functional changes).
diego
parents:
20983
diff
changeset
|
408 } |
15874 | 409 /* libdvdcss replacement functions */ |
410 dvdinput_open = file_open; | |
411 dvdinput_close = file_close; | |
412 dvdinput_seek = file_seek; | |
413 dvdinput_title = file_title; | |
414 dvdinput_read = file_read; | |
415 dvdinput_error = file_error; | |
416 return 0; | |
417 } | |
7029 | 418 } |