--- src/input/libdvdnav/dvdnav.c +++ src/input/libdvdnav/dvdnav.c @@ -67,7 +67,7 @@ struct timeval time; /* Create a new structure */ - fprintf(MSG_OUT, "libdvdnav: Using dvdnav version %s from http://dvd.sf.net\n", VERSION); + fprintf(MSG_OUT, "libdvdnav: Using dvdnav version %s from http://xine.sf.net\n", VERSION); (*dest) = NULL; this = (dvdnav_t*)malloc(sizeof(dvdnav_t)); --- src/input/libdvdnav/dvd_reader.c +++ src/input/libdvdnav/dvd_reader.c @@ -61,6 +61,7 @@ #include #endif +#include "compat.h" #include "dvd_udf.h" #include "dvd_input.h" #include "dvd_reader.h" @@ -409,7 +410,7 @@ if( cdir >= 0 ) { chdir( path_copy ); - new_path = getcwd( NULL, PATH_MAX ); + new_path = getcwd( NULL, XINE_PATH_MAX ); fchdir( cdir ); close( cdir ); if( new_path ) { @@ -595,7 +596,7 @@ static int findDVDFile( dvd_reader_t *dvd, const char *file, char *filename ) { - char video_path[ PATH_MAX + 1 ]; + char video_path[ XINE_PATH_MAX + 1 ]; const char *nodirfile; int ret; @@ -629,7 +630,7 @@ */ static dvd_file_t *DVDOpenFilePath( dvd_reader_t *dvd, char *filename ) { - char full_path[ PATH_MAX + 1 ]; + char full_path[ XINE_PATH_MAX + 1 ]; dvd_file_t *dvd_file; struct stat fileinfo; dvd_input_t dev; @@ -722,7 +723,7 @@ static dvd_file_t *DVDOpenVOBPath( dvd_reader_t *dvd, int title, int menu ) { char filename[ MAX_UDF_FILE_NAME_LEN ]; - char full_path[ PATH_MAX + 1 ]; + char full_path[ XINE_PATH_MAX + 1 ]; struct stat fileinfo; dvd_file_t *dvd_file; int i; Index: dvd_input.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/input/libdvdnav/dvd_input.c,v retrieving revision 1.6 diff -u -r1.6 dvd_input.c --- dvd_input.c 5 Apr 2004 18:01:09 -0000 1.6 +++ dvd_input.c 27 May 2006 16:11:09 -0000 @@ -35,6 +35,7 @@ int (*dvdinput_title) (dvd_input_t, int); int (*dvdinput_read) (dvd_input_t, void *, int, int); char * (*dvdinput_error) (dvd_input_t); +int (*dvdinput_is_encrypted) (dvd_input_t); #ifdef HAVE_DVDCSS_DVDCSS_H /* linking to libdvdcss */ @@ -55,6 +56,73 @@ #include "../../msvc/contrib/dlfcn.c" #endif +/* Copied from css.h */ +#define KEY_SIZE 5 + +typedef uint8_t dvd_key_t[KEY_SIZE]; + +typedef struct dvd_title_s +{ + int i_startlb; + dvd_key_t p_key; + struct dvd_title_s *p_next; +} dvd_title_t; + +typedef struct css_s +{ + int i_agid; /* Current Authenication Grant ID. */ + dvd_key_t p_bus_key; /* Current session key. */ + dvd_key_t p_disc_key; /* This DVD disc's key. */ + dvd_key_t p_title_key; /* Current title key. */ +} css_t; + +/* Copied from libdvdcss.h */ + +#ifndef PATH_MAX +#define PATH_MAX 4096 +#endif + +struct dvdcss_s +{ + /* File descriptor */ + char * psz_device; + int i_fd; + int i_read_fd; + int i_pos; + + /* File handling */ + void *pf_seek; + void *pf_read; + void *pf_readv; + + /* Decryption stuff */ + int i_method; + css_t css; + int b_ioctls; + int b_scrambled; + dvd_title_t *p_titles; + + /* Key cache directory and pointer to the filename */ + char psz_cachefile[PATH_MAX]; + char * psz_block; + + /* Error management */ + char * psz_error; + int b_errors; + int b_debug; + +#ifdef WIN32 + int b_file; + char * p_readv_buffer; + int i_readv_buf_size; +#endif + +#ifndef WIN32 + int i_raw_fd; +#endif +}; + + typedef struct dvdcss_s *dvdcss_handle; static dvdcss_handle (*DVDcss_open) (const char *); static int (*DVDcss_close) (dvdcss_handle); @@ -149,8 +217,13 @@ return 0; } - - +static int css_is_encrypted (dvd_input_t dev) +{ + if (dev->dvdcss == NULL) { + return 0; + } + return dev->dvdcss->b_scrambled; +} @@ -269,6 +342,10 @@ return 0; } +static int file_is_encrypted (dvd_input_t dev) +{ + return 0; +} /** * Setup read functions with either libdvdcss or minimal DVD access. @@ -347,6 +424,7 @@ dvdinput_title = css_title; dvdinput_read = css_read; dvdinput_error = css_error; + dvdinput_is_encrypted = css_is_encrypted; return 1; } else { @@ -359,6 +437,7 @@ dvdinput_title = file_title; dvdinput_read = file_read; dvdinput_error = file_error; + dvdinput_is_encrypted = file_is_encrypted; return 0; } } Index: dvd_input.h =================================================================== RCS file: /cvsroot/xine/xine-lib/src/input/libdvdnav/dvd_input.h,v retrieving revision 1.1 diff -u -r1.1 dvd_input.h --- dvd_input.h 29 Apr 2003 15:58:29 -0000 1.1 +++ dvd_input.h 27 May 2006 16:11:09 -0000 @@ -38,6 +38,7 @@ extern int (*dvdinput_title) (dvd_input_t, int); extern int (*dvdinput_read) (dvd_input_t, void *, int, int); extern char * (*dvdinput_error) (dvd_input_t); +extern int (*dvdinput_is_encrypted) (dvd_input_t); /** * Setup function accessed by dvd_reader.c. Returns 1 if there is CSS support. Index: dvd_reader.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/input/libdvdnav/dvd_reader.c,v retrieving revision 1.11 diff -u -r1.11 dvd_reader.c --- dvd_reader.c 20 Sep 2004 19:30:04 -0000 1.11 +++ dvd_reader.c 27 May 2006 16:11:09 -0000 @@ -480,6 +480,13 @@ me->mnt_fsname, me->mnt_dir ); auth_drive = DVDOpenImageFile( me->mnt_fsname, have_css ); + /* If the device is not encrypted, don't access the device + * directly as it would fail for non-UDF DVDs */ + if ( dvdinput_is_encrypted( auth_drive->dev ) == 0) { + DVDClose( auth_drive ); + auth_drive = NULL; + break; + } dev_name = strdup(me->mnt_fsname); break; } Index: src/input/libdvdnav/md5.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/input/libdvdnav/md5.c,v retrieving revision 1.2 diff -u -r1.2 md5.c --- src/input/libdvdnav/md5.c 29 Apr 2003 21:46:05 -0000 1.2 +++ src/input/libdvdnav/md5.c 2 Jun 2006 19:14:50 -0000 @@ -26,14 +26,8 @@ #include -#if STDC_HEADERS || defined _LIBC -# include -# include -#else -# ifndef HAVE_MEMCPY -# define memcpy(d, s, n) bcopy ((s), (d), (n)) -# endif -#endif +#include +#include #include "md5.h" /* #include "unlocked-io.h" */ Index: src/input/libdvdnav/bswap.h =================================================================== RCS file: /cvsroot/xine/xine-lib/src/input/libdvdnav/bswap.h,v retrieving revision 1.3 diff -u -p -u -r1.3 bswap.h --- src/input/libdvdnav/bswap.h 26 May 2003 23:11:44 -0000 1.3 +++ src/input/libdvdnav/bswap.h 17 Sep 2006 12:50:16 -0000 @@ -35,7 +35,7 @@ #include #endif -#if defined(__linux__) +#if defined(__linux__) || defined(__GLIBC__) #include #define B2N_16(x) x = bswap_16(x) #define B2N_32(x) x = bswap_32(x) @@ -41,6 +41,12 @@ #define B2N_32(x) x = bswap_32(x) #define B2N_64(x) x = bswap_64(x) +#elif defined(__APPLE__) +#include +#define B2N_16(x) x = OSSwapBigToHostInt16(x) +#define B2N_32(x) x = OSSwapBigToHostInt32(x) +#define B2N_64(x) x = OSSwapBigToHostInt64(x) + #elif defined(__NetBSD__) #include #define B2N_16(x) BE16TOH(x) Index: src/input/libdvdnav/dvd_reader.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/input/libdvdnav/dvd_reader.c,v retrieving revision 1.13 diff -u -p -u -r1.13 dvd_reader.c --- src/input/libdvdnav/dvd_reader.c 15 Jun 2006 14:26:40 -0000 1.13 +++ src/input/libdvdnav/dvd_reader.c 17 Sep 2006 12:50:16 -0000 @@ -32,8 +32,13 @@ #include #include -/* misc win32 helpers */ -#ifdef WIN32 +#ifndef HAVE_GETTIMEOFDAY +# ifdef WIN32 +# include +struct timezone; +# else +# include +# endif /* replacement gettimeofday implementation */ #include static inline int _private_gettimeofday( struct timeval *tv, void *tz ) @@ -45,6 +50,10 @@ static inline int _private_gettimeofday( return 0; } #define gettimeofday(TV, TZ) _private_gettimeofday((TV), (TZ)) +#endif + +/* misc win32 helpers */ +#ifdef WIN32 #include /* read() */ #define lseek64 _lseeki64 #endif Index: src/input/libdvdnav/dvd_reader.h =================================================================== RCS file: /cvsroot/xine/xine-lib/src/input/libdvdnav/dvd_reader.h,v retrieving revision 1.5 diff -u -p -u -r1.5 dvd_reader.h --- src/input/libdvdnav/dvd_reader.h 16 Mar 2004 11:43:38 -0000 1.5 +++ src/input/libdvdnav/dvd_reader.h 17 Sep 2006 12:50:16 -0000 @@ -21,9 +21,11 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifdef _MSC_VER +#ifdef HAVE_CONFIG_H #include +#endif +#ifdef _MSC_VER #include #include #endif Index: src/input/libdvdnav/dvdnav_internal.h =================================================================== RCS file: /cvsroot/xine/xine-lib/src/input/libdvdnav/dvdnav_internal.h,v retrieving revision 1.15 diff -u -p -u -r1.15 dvdnav_internal.h --- src/input/libdvdnav/dvdnav_internal.h 20 Sep 2004 19:30:04 -0000 1.15 +++ src/input/libdvdnav/dvdnav_internal.h 17 Sep 2006 12:50:16 -0000 @@ -34,6 +34,34 @@ #include #include +#ifndef HAVE_GETTIMEOFDAY +# ifdef WIN32 +# include +struct timezone; +# else +# include +# endif +/* replacement gettimeofday implementation */ +#include +static inline int dvdnav_private_gettimeofday( struct timeval *tv, void *tz ) +{ + struct timeb t; + ftime( &t ); + tv->tv_sec = t.time; + tv->tv_usec = t.millitm * 1000; + return 0; +} +#define gettimeofday(TV, TZ) dvdnav_private_gettimeofday((TV), (TZ)) +#define HAVE_GETTIMEOFDAY 1 +#endif + +#ifndef HAVE_SNPRINTF +# ifdef HAVE__SNPRINTF +# define snprintf _snprintf +# define HAVE_SNPRINTF 1 +# endif +#endif + #ifdef WIN32 /* pthread_mutex_* wrapper for win32 */ @@ -45,17 +73,6 @@ typedef CRITICAL_SECTION pthread_mutex_t #define pthread_mutex_unlock(a) LeaveCriticalSection(a) #define pthread_mutex_destroy(a) -/* replacement gettimeofday implementation */ -#include -static inline int _private_gettimeofday( struct timeval *tv, void *tz ) -{ - struct timeb t; - ftime( &t ); - tv->tv_sec = t.time; - tv->tv_usec = t.millitm * 1000; - return 0; -} -#define gettimeofday(TV, TZ) _private_gettimeofday((TV), (TZ)) #include /* read() */ #define lseek64 _lseeki64 Index: src/input/libdvdnav/remap.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/input/libdvdnav/remap.c,v retrieving revision 1.4 diff -u -p -u -r1.4 remap.c --- src/input/libdvdnav/remap.c 25 Aug 2003 21:51:40 -0000 1.4 +++ src/input/libdvdnav/remap.c 17 Sep 2006 12:50:16 -0000 @@ -22,14 +22,17 @@ #include #include -#ifndef _MSC_VER +#ifdef HAVE_SYS_PARAM_H #include +#endif + +#ifdef HAVE_SYS_FCNTL_H #include #else #ifndef MAXPATHLEN #define MAXPATHLEN 255 #endif -#endif /* _MSC_VER */ +#endif /* HAVE fcntl.h */ #include #include "remap.h" Index: src/input/libdvdnav/searching.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/input/libdvdnav/searching.c,v retrieving revision 1.19 diff -u -p -u -r1.19 searching.c --- src/input/libdvdnav/searching.c 14 Oct 2005 21:02:16 -0000 1.19 +++ src/input/libdvdnav/searching.c 17 Sep 2006 12:50:16 -0000 @@ -105,7 +105,6 @@ dvdnav_status_t dvdnav_time_search(dvdna int32_t found; cell_playback_t *cell; dvd_state_t *state; - dvdnav_status_t result; if(this->position_current.still != 0) { printerr("Cannot seek in a still frame.");