]> git.sesse.net Git - vlc/blob - extras/contrib/src/Patches/libdvdnav.patch
145b3c46f3e73b60b95bfd65467db34a882d4d22
[vlc] / extras / contrib / src / Patches / libdvdnav.patch
1 diff --git a/configure.ac b/configure.ac
2 index e5ee5c4..b381093 100644
3 --- a/configure.ac
4 +++ b/configure.ac
5 @@ -161,25 +166,61 @@ AC_SUBST(THREAD_LIBS)
6  AC_SUBST(THREAD_CFLAGS)
7  
8  dnl ---------------------------------------------
9 -dnl dynamic linker
10 +dnl dvdcss checking
11  dnl ---------------------------------------------
12 -case $host in
13 -  *mingw32*)
14 -    CFLAGS="-idirafter \$(top_srcdir)/msvc/include $CFLAGS"
15 -    LDFLAGS="-no-undefined $LDFLAGS"
16 -    ;;
17 -  *cygwin*)
18 -    LDFLAGS="-no-undefined $LDFLAGS"
19 -    ;;
20 -  *)
21 -    AC_CHECK_LIB(c, dlopen,
22 -                DYNAMIC_LD_LIBS="",
23 -                AC_CHECK_LIB(dl, dlopen,
24 -                             DYNAMIC_LD_LIBS="-ldl",
25 -                             AC_MSG_ERROR(dynamic linker needed)))
26 -    AC_SUBST(DYNAMIC_LD_LIBS)
27 -    ;;
28 -esac
29 +AC_ARG_WITH( [libdvdcss],
30 +    [  --with-libdvdcss[=PATH]    force linking against libdvdcss],
31 +    [if test x"$withval" != xno; then
32 +       link_dvdcss=yes
33 +     fi
34 +     if test x"$withval" != xyes; then
35 +       dvdcss_path=$withval
36 +     fi])
37 +
38 +if test x"$link_dvdcss" != xyes; then
39 +dnl dlopen libdvdcss
40 +  AC_CHECK_FUNC( dlopen,
41 +    [DL_LIBS="" ],
42 +    AC_CHECK_LIB( dl, dlopen,
43 +      [DL_LIBS=-ld ],
44 +      AC_MSG_ERROR(You need libdl (dlopen))
45 +    )
46 +  )
47 +else
48 +dnl link with libdvdcss
49 +  if test -z "$dvdcss_path"; then
50 +    AC_CHECK_LIB(dvdcss, dvdcss_interface_2,
51 +      [ CSS_LIBS=-ldvdcss ],
52 +      AC_MSG_ERROR(You need libdvdcss.so.2 or later)
53 +    )
54 +    AC_CHECK_HEADERS(dvdcss/dvdcss.h,
55 +      [ ],
56 +      AC_MSG_ERROR(You need libdvdcss (dvdcss.h))
57 +    )
58 +  else
59 +    saved_CFLAGS=$CFLAGS
60 +    CFLAGS="$CFLAGS -L$dvdcss_path/lib"
61 +    AC_CHECK_LIB(dvdcss, dvdcss_interface_2,
62 +      [ CSS_LIBS="-L$dvdcss_path/lib -R$dvdcss_path/lib -ldvdcss"
63 +        CSS_CFLAGS=-I$dvdcss_path/include ],
64 +      AC_MSG_ERROR(You need libdvdcss.so.2 or later)
65 +    )
66 +    CFLAGS=$saved_CFLAGS
67 +    dnl -w added to shutup GCC3.1's cpp warning about -I/usr/local
68 +    saved_CPPFLAGS=$CPPFLAGS
69 +    CPPFLAGS="-w $CPPFLAGS -I$dvdcss_path/include"
70 +    AC_CHECK_HEADERS(dvdcss/dvdcss.h,
71 +      [ ],
72 +      AC_MSG_ERROR(You need libdvdcss (dvdcss.h))
73 +    )
74 +    CPPFLAGS=$saved_CPPFLAGS
75 +  fi
76 +fi
77 +
78 +AC_SUBST(DL_LIBS)
79 +AC_SUBST(CSS_LIBS)
80 +AC_SUBST(CSS_CFLAGS)
81
82  
83  dnl ---------------------------------------------
84  dnl cflags
85 diff --git a/examples/Makefile.am b/examples/Makefile.am
86 index 3cfda2f..3015dd5 100644
87 --- a/examples/Makefile.am
88 +++ b/examples/Makefile.am
89 @@ -8,7 +8,7 @@ noinst_PROGRAMS = menus
90  
91  menus_SOURCES = menus.c
92  menus_LDFLAGS = -L$(top_srcdir)/src/
93 -menus_LDADD   = $(DVDNAV_LIB)
94 +menus_LDADD   = $(DVDNAV_LIB) $(CSS_LIBS)  
95  
96  $(DVDNAV_LIB):
97         @cd $(top_builddir)/src/ && $(MAKE) libdvdnav.la
98 diff --git a/src/libdvdread/dvd_input.c b/src/libdvdread/dvd_input.c
99 index d55aac7..63b416f 100644
100 --- a/src/libdvdread/dvd_input.c
101 +++ b/src/libdvdread/dvd_input.c
102 @@ -27,6 +27,11 @@
103  #include "dvd_reader.h"
104  #include "dvd_input.h"
105  
106 +#ifdef WIN32
107 +#   define lseek _lseeki64
108 +#   undef off_t
109 +#   define off_t int64_t
110 +#endif
111  
112  /* The function pointers that is the exported interface of this file. */
113  dvd_input_t (*dvdinput_open)  (const char *);
114 diff --git a/src/vm/vm.c b/src/vm/vm.c
115 index 53bef88..db855c7 100644
116 --- a/src/vm/vm.c
117 +++ b/src/vm/vm.c
118 @@ -134,24 +134,25 @@ static void vm_print_current_domain_state(vm_t *vm) {
119  }
120  #endif
121  
122 +#include <libdvdread/dvd_input.h>
123 +
124  static void dvd_read_name(char *name, const char *device) {
125      /* Because we are compiling with _FILE_OFFSET_BITS=64
126       * all off_t are 64bit.
127       */
128      off_t off;
129 -    int fd, i;
130 +    dvd_input_t fd; int i;
131      uint8_t data[DVD_VIDEO_LB_LEN];
132  
133      /* Read DVD name */
134 -    fd = open(device, O_RDONLY);
135 +    fd = dvdinput_open(device);
136      if (fd > 0) { 
137 -      off = lseek( fd, 32 * (off_t) DVD_VIDEO_LB_LEN, SEEK_SET );
138 -      if( off == ( 32 * (off_t) DVD_VIDEO_LB_LEN ) ) {
139 -        off = read( fd, data, DVD_VIDEO_LB_LEN ); 
140 -        close(fd);
141 -        if (off == ( (off_t) DVD_VIDEO_LB_LEN )) {
142 +      off = dvdinput_seek( fd, 16 );
143 +      if( off == 16 ) {
144 +        off = dvdinput_read( fd, data, 1, DVDINPUT_NOFLAGS ); 
145 +        if (off == 1 ) {
146            fprintf(MSG_OUT, "libdvdnav: DVD Title: ");
147 -          for(i=25; i < 73; i++ ) {
148 +          for(i=40; i < 73; i++ ) {
149              if((data[i] == 0)) break;
150              if((data[i] > 32) && (data[i] < 127)) {
151                fprintf(MSG_OUT, "%c", data[i]);
152 @@ -159,10 +160,12 @@ static void dvd_read_name(char *name, const char *device) {
153                fprintf(MSG_OUT, " ");
154              }
155            }
156 -          strncpy(name, (char*) &data[25], 48);
157 -          name[48] = 0;
158 +          strncpy(name, (char*) &data[40], 32);
159 +          i=31;
160 +          while( (i >= 0) && (name[i] <= ' ')) --i;
161 +          name[i+1] = '\0';
162            fprintf(MSG_OUT, "\nlibdvdnav: DVD Serial Number: ");
163 -          for(i=73; i < 89; i++ ) {
164 +          for(i=813; i < 829; i++ ) {
165              if((data[i] == 0)) break;
166              if((data[i] > 32) && (data[i] < 127)) {
167                fprintf(MSG_OUT, "%c", data[i]);
168 @@ -186,7 +189,7 @@ static void dvd_read_name(char *name, const char *device) {
169        } else {
170          fprintf(MSG_OUT, "libdvdnav: Can't seek to block %u\n", 32 );
171        }
172 -      close(fd);
173 +      dvdinput_close(fd);
174      } else {
175      fprintf(MSG_OUT, "NAME OPEN FAILED\n");
176    }