N: Gildas Bazin
E: gbazin@netcourrier.com
+C: gbazin
D: mingw32 port, various win32 fixes
D: DirectX audio and video output
+N: Billy Biggs
+E: vektor@dumbterm.net
+D: libdvdcss enhancements
+
N: Stéphane Borel
E: stef@via.ecp.fr
C: stef
#
# All possible plugin directories, needed for make clean
#
-PLUGINS_DIR := alsa beos darwin directx dsp dummy dvd esd fb ggi glide gtk downmix idct imdct macosx mga motion mpeg qt sdl text x11 yuv
+PLUGINS_DIR := alsa beos darwin directx dsp dummy dvd esd fb ggi glide gtk downmix idct imdct kde macosx mga motion mpeg qt sdl text x11 yuv
#
# All possible plugin objects
#
-PLUGINS_TARGETS := alsa/alsa beos/beos darwin/darwin directx/directx dsp/dsp dummy/dummy dummy/null dvd/dvd esd/esd fb/fb ggi/ggi glide/glide gtk/gnome gtk/gtk downmix/downmix downmix/downmixsse downmix/downmix3dn idct/idct idct/idctclassic idct/idctmmx idct/idctmmxext imdct/imdct imdct/imdct3dn imdct/imdctsse macosx/macosx mga/mga motion/motion motion/motionmmx motion/motionmmxext mpeg/es mpeg/ps mpeg/ts qt/qt sdl/sdl text/ncurses text/rc x11/x11 x11/xvideo yuv/yuv yuv/yuvmmx
+PLUGINS_TARGETS := alsa/alsa beos/beos darwin/darwin directx/directx dsp/dsp dummy/dummy dummy/null dvd/dvd esd/esd fb/fb ggi/ggi glide/glide gtk/gnome gtk/gtk downmix/downmix downmix/downmixsse downmix/downmix3dn idct/idct idct/idctclassic idct/idctmmx idct/idctmmxext imdct/imdct imdct/imdct3dn imdct/imdctsse kde/kde macosx/macosx mga/mga motion/motion motion/motionmmx motion/motionmmxext mpeg/es mpeg/ps mpeg/ts qt/qt sdl/sdl text/ncurses text/rc x11/x11 x11/xvideo yuv/yuv yuv/yuvmmx
#
# C Objects
# Translate plugin names
#
ifneq (,$(PLUGINS))
-PLUGIN_OBJ := $(shell for i in $(PLUGINS) ; do echo " "$(PLUGINS_TARGETS)" " | sed -e 's@.*/\('$$i'\) .*@lib/\1.so@' -e 's@^ .*@@' ; done)
+PLUGIN_OBJ := $(shell for i in $(PLUGINS) ; do echo " "$(PLUGINS_TARGETS)" " | sed -e 's@.*/\('$$i'\) .*@plugins/\1.so@' -e 's@^ .*@@' ; done)
endif
ifneq (,$(BUILTINS))
-BUILTIN_OBJ := $(shell for i in $(BUILTINS) ; do echo " "$(PLUGINS_TARGETS)" " | sed -e 's@.*/\('$$i'\) .*@lib/\1.a@' -e 's@^ .*@@' ; done)
+BUILTIN_OBJ := $(shell for i in $(BUILTINS) ; do echo " "$(PLUGINS_TARGETS)" " | sed -e 's@.*/\('$$i'\) .*@plugins/\1.a@' -e 's@^ .*@@' ; done)
endif
# All symbols must be exported
clean: libdvdcss-clean plugins-clean vlc-clean
rm -f src/*/*.o extras/*/*.o
rm -f lib/*.so lib/*.so.* lib/*.a
+ rm -f plugins/*.so plugins/*.so.* plugins/*.a
libdvdcss-clean:
cd extras/libdvdcss && $(MAKE) clean
plugins-install:
mkdir -p $(DESTDIR)$(libdir)/videolan/vlc
ifneq (,$(PLUGINS))
- $(INSTALL) -m 644 $(PLUGINS:%=lib/%.so) $(DESTDIR)$(libdir)/videolan/vlc
+ $(INSTALL) -m 644 $(PLUGINS:%=plugins/%.so) $(DESTDIR)$(libdir)/videolan/vlc
endif
libdvdcss-install:
$(INSTALL) vlc vlc.app/Contents/MacOS/
$(INSTALL) share/vlc.icns vlc.app/Contents/Resources/
ifneq (,$(PLUGINS))
- $(INSTALL) $(PLUGINS:%=lib/%.so) vlc.app/Contents/MacOS/lib
+ $(INSTALL) $(PLUGINS:%=plugins/%.so) vlc.app/Contents/MacOS/plugins
endif
$(INSTALL) -m 644 share/*.psf vlc.app/Contents/MacOS/share
endif
#
plugins: Makefile.modules Makefile.opts Makefile.dep Makefile $(PLUGIN_OBJ)
$(PLUGIN_OBJ): FORCE
- cd $(shell echo " "$(PLUGINS_TARGETS)" " | sed -e 's@.* \([^/]*/\)'$(@:lib/%.so=%)' .*@plugins/\1@' -e 's@^ .*@@') && $(MAKE) $(@:%=../../%)
+ cd $(shell echo " "$(PLUGINS_TARGETS)" " | sed -e 's@.* \([^/]*/\)'$(@:plugins/%.so=%)' .*@plugins/\1@' -e 's@^ .*@@') && $(MAKE) $(@:%=../../%)
#
# Built-in modules target
#
builtins: Makefile.modules Makefile.opts Makefile.dep Makefile $(BUILTIN_OBJ)
$(BUILTIN_OBJ): FORCE
- cd $(shell echo " "$(PLUGINS_TARGETS)" " | sed -e 's@.* \([^/]*/\)'$(@:lib/%.a=%)' .*@plugins/\1@' -e 's@^ .*@@') && $(MAKE) $(@:%=../../%)
+ cd $(shell echo " "$(PLUGINS_TARGETS)" " | sed -e 's@.* \([^/]*/\)'$(@:plugins/%.a=%)' .*@plugins/\1@' -e 's@^ .*@@') && $(MAKE) $(@:%=../../%)
#
# libdvdcss target
LIB_GNOME = @LIB_GNOME@
LIB_GTK = @LIB_GTK@
LIB_IDCTALTIVEC = @LIB_IDCTALTIVEC@
+LIB_KDE = @LIB_KDE@
LIB_MACOSX = @LIB_MACOSX@
LIB_NCURSES = @LIB_NCURSES@
LIB_QT = @LIB_QT@
# Check whether --enable-kde or --disable-kde was given.
if test "${enable_kde+set}" = set; then
enableval="$enable_kde"
- if test x$enable_kde = xyes; then PLUGINS="${PLUGINS} kde"; ALIASES="${ALIASES} kvlc"; fi
+ if test x$enable_kde = xyes; then
+ PLUGINS="${PLUGINS} kde";
+ ALIASES="${ALIASES} kvlc";
+ LIB_KDE="-lkfile"
+ fi
fi
# Extract the first word of "gtk-config", so it can be a program name with args.
set dummy gtk-config; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4237: checking for $ac_word" >&5
+echo "configure:4241: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4297: checking for $ac_hdr" >&5
+echo "configure:4301: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4302 "configure"
+#line 4306 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4307: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4311: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4359: checking for $ac_hdr" >&5
+echo "configure:4363: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4364 "configure"
+#line 4368 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4369: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4373: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
enableval="$enable_alsa"
if test x$enable_alsa = xyes; then ac_safe=`echo "sys/asoundlib.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for sys/asoundlib.h""... $ac_c" 1>&6
-echo "configure:4407: checking for sys/asoundlib.h" >&5
+echo "configure:4411: checking for sys/asoundlib.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4412 "configure"
+#line 4416 "configure"
#include "confdefs.h"
#include <sys/asoundlib.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4417: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4421: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for main in -lasound""... $ac_c" 1>&6
-echo "configure:4434: checking for main in -lasound" >&5
+echo "configure:4438: checking for main in -lasound" >&5
ac_lib_var=`echo asound'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lasound $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4442 "configure"
+#line 4446 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:4449: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4453: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
+
trap '' 1 2 15
s%@LIB_GNOME@%$LIB_GNOME%g
s%@LIB_GTK@%$LIB_GTK%g
s%@LIB_IDCTALTIVEC@%$LIB_IDCTALTIVEC%g
+s%@LIB_KDE@%$LIB_KDE%g
s%@LIB_MACOSX@%$LIB_MACOSX%g
s%@LIB_NCURSES@%$LIB_NCURSES%g
s%@LIB_QT@%$LIB_QT%g
dnl
AC_ARG_ENABLE(kde,
[ --enable-kde KDE interface support (default disabled)],
- [if test x$enable_kde = xyes; then PLUGINS="${PLUGINS} kde"; ALIASES="${ALIASES} kvlc"; fi])
+ [if test x$enable_kde = xyes; then
+ PLUGINS="${PLUGINS} kde";
+ ALIASES="${ALIASES} kvlc";
+ LIB_KDE="-lkfile"
+ fi])
dnl
dnl Gnome module
AC_SUBST(LIB_GNOME)
AC_SUBST(LIB_GTK)
AC_SUBST(LIB_IDCTALTIVEC)
+AC_SUBST(LIB_KDE)
AC_SUBST(LIB_MACOSX)
AC_SUBST(LIB_NCURSES)
AC_SUBST(LIB_QT)
* css.c: Functions for DVD authentification and unscrambling
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
- * $Id: css.c,v 1.4 2001/07/07 21:10:58 gbazin Exp $
+ * $Id: css.c,v 1.5 2001/07/11 02:01:03 sam Exp $
*
* Author: Stéphane Borel <stef@via.ecp.fr>
*
#ifdef HAVE_CSS
static int CSSGetASF ( dvdcss_handle dvdcss );
static void CSSCryptKey ( int i_key_type, int i_varient,
- u8 const * pi_challenge, u8* pi_key );
+ u8 const * p_challenge, u8* p_key );
static int CSSCracker ( int i_start, unsigned char * p_crypted,
unsigned char * p_decrypted,
dvd_key_t * p_sector_key, dvd_key_t * p_key );
{
#ifdef HAVE_CSS
/* structures defined in cdrom.h or dvdio.h */
- char p_buffer[2048 + 4 + 1];
+ unsigned char p_buffer[2048 + 4 + 1];
char psz_warning[32];
int i_agid = 0;
int i_ret = -1;
for( i = 0 ; i < 10; ++i )
{
- dvdcss->css.disc.pi_challenge[i] = i;
+ dvdcss->css.disc.p_challenge[i] = i;
}
/* Get challenge from host */
for( i = 0 ; i < 10 ; ++i )
{
- p_buffer[9-i] = dvdcss->css.disc.pi_challenge[i];
+ p_buffer[9-i] = dvdcss->css.disc.p_challenge[i];
}
/* Send challenge to LU */
/* Send key1 to host */
for( i = 0 ; i < KEY_SIZE ; i++ )
{
- dvdcss->css.disc.pi_key1[i] = p_buffer[4-i];
+ dvdcss->css.disc.p_key1[i] = p_buffer[4-i];
}
for( i = 0 ; i < 32 ; ++i )
{
- CSSCryptKey( 0, i, dvdcss->css.disc.pi_challenge,
- dvdcss->css.disc.pi_key_check );
+ CSSCryptKey( 0, i, dvdcss->css.disc.p_challenge,
+ dvdcss->css.disc.p_key_check );
- if( memcmp( dvdcss->css.disc.pi_key_check,
- dvdcss->css.disc.pi_key1, KEY_SIZE ) == 0 )
+ if( memcmp( dvdcss->css.disc.p_key_check,
+ dvdcss->css.disc.p_key1, KEY_SIZE ) == 0 )
{
sprintf( psz_warning, "drive authentic, using variant %d", i );
_dvdcss_debug( dvdcss, psz_warning );
/* Send challenge to host */
for( i = 0 ; i < 10 ; ++i )
{
- dvdcss->css.disc.pi_challenge[i] = p_buffer[9-i];
+ dvdcss->css.disc.p_challenge[i] = p_buffer[9-i];
}
CSSCryptKey( 1, dvdcss->css.disc.i_varient,
- dvdcss->css.disc.pi_challenge,
- dvdcss->css.disc.pi_key2 );
+ dvdcss->css.disc.p_challenge,
+ dvdcss->css.disc.p_key2 );
/* Get key2 from host */
for( i = 0 ; i < KEY_SIZE ; ++i )
{
- p_buffer[4-i] = dvdcss->css.disc.pi_key2[i];
+ p_buffer[4-i] = dvdcss->css.disc.p_key2[i];
}
/* Send key2 to LU */
_dvdcss_debug( dvdcss, "authentication established" );
- memcpy( dvdcss->css.disc.pi_challenge,
- dvdcss->css.disc.pi_key1, KEY_SIZE );
- memcpy( dvdcss->css.disc.pi_challenge+KEY_SIZE,
- dvdcss->css.disc.pi_key2, KEY_SIZE );
+ memcpy( dvdcss->css.disc.p_challenge,
+ dvdcss->css.disc.p_key1, KEY_SIZE );
+ memcpy( dvdcss->css.disc.p_challenge+KEY_SIZE,
+ dvdcss->css.disc.p_key2, KEY_SIZE );
CSSCryptKey( 2, dvdcss->css.disc.i_varient,
- dvdcss->css.disc.pi_challenge,
- dvdcss->css.disc.pi_key_check );
+ dvdcss->css.disc.p_challenge,
+ dvdcss->css.disc.p_key_check );
_dvdcss_debug( dvdcss, "received session key" );
/* Unencrypt disc key using bus key */
for( i = 0 ; i < 2048 ; i++ )
{
- p_buffer[ i ] ^= dvdcss->css.disc.pi_key_check[ 4 - (i % KEY_SIZE) ];
- }
- memcpy( dvdcss->css.disc.pi_key_check, p_buffer, 2048 );
-
- /* initialize title key to know it empty */
- for( i = 0 ; i < KEY_SIZE ; i++ )
- {
- dvdcss->css.pi_title_key[i] = 0;
+ p_buffer[ i ] ^= dvdcss->css.disc.p_key_check[ 4 - (i % KEY_SIZE) ];
}
+ memcpy( dvdcss->css.disc.p_key_check, p_buffer, 2048 );
/* Test authentication success */
switch( CSSGetASF( dvdcss ) )
*****************************************************************************
* The DVD should have been opened and authenticated before.
*****************************************************************************/
-int CSSGetKey( dvdcss_handle dvdcss )
+int CSSGetKey( dvdcss_handle dvdcss, int i_pos, dvd_key_t p_titlekey )
{
#ifdef HAVE_CSS
/*
* with Frank A. Stevenson algorithm.
* Does not use any player key table and ioctls.
*/
- u8 pi_buf[0x800];
- dvd_key_t pi_key;
- int i_pos;
+ u8 p_buf[0x800];
+ dvd_key_t p_key;
boolean_t b_encrypted;
boolean_t b_stop_scanning;
int i_blocks_read;
for( i = 0 ; i < KEY_SIZE ; i++ )
{
- pi_key[i] = 0;
+ p_key[i] = 0;
}
b_encrypted = 0;
b_stop_scanning = 0;
- /* Position of the title on the disc */
- i_pos = dvdcss->css.i_title_pos;
-
- do {
- i_pos = dvdcss_seek( dvdcss, i_pos );
- i_blocks_read = dvdcss_read( dvdcss, pi_buf, 1, DVDCSS_NOFLAGS );
-
- /* PES_scrambling_control */
- if( pi_buf[0x14] & 0x30 )
+ do
{
- b_encrypted = 1;
- i_best_plen = 0;
- i_best_p = 0;
+ i_pos = dvdcss_seek( dvdcss, i_pos );
+ i_blocks_read = dvdcss_read( dvdcss, p_buf, 1, DVDCSS_NOFLAGS );
- for( i = 2 ; i < 0x30 ; i++ )
+ /* PES_scrambling_control */
+ if( p_buf[0x14] & 0x30 )
{
- for( j = i+1 ; ( j < 0x80 ) &&
- ( pi_buf[0x7F - (j%i)] == pi_buf[0x7F-j] ) ; j++ );
+ b_encrypted = 1;
+ i_best_plen = 0;
+ i_best_p = 0;
+
+ for( i = 2 ; i < 0x30 ; i++ )
{
- if( j > i_best_plen )
+ for( j = i+1 ;
+ j < 0x80 && ( p_buf[0x7F - (j%i)] == p_buf[0x7F-j] );
+ j++ );
{
- i_best_plen = j;
- i_best_p = i;
+ if( j > i_best_plen )
+ {
+ i_best_plen = j;
+ i_best_p = i;
+ }
}
}
- }
- if( ( i_best_plen > 20 ) && ( i_best_plen / i_best_p >= 2) )
- {
- i = CSSCracker( 0, &pi_buf[0x80],
- &pi_buf[0x80 - ( i_best_plen / i_best_p) *i_best_p],
- (dvd_key_t*)&pi_buf[0x54],
- &pi_key );
- b_stop_scanning = ( i >= 0 );
+ if( ( i_best_plen > 20 ) && ( i_best_plen / i_best_p >= 2) )
+ {
+ i = CSSCracker( 0, &p_buf[0x80],
+ &p_buf[0x80 - ( i_best_plen / i_best_p) *i_best_p],
+ (dvd_key_t*)&p_buf[0x54],
+ &p_key );
+ b_stop_scanning = ( i >= 0 );
+ }
}
- }
- i_pos += i_blocks_read;
- } while( i_blocks_read == 0x1 && !b_stop_scanning);
+ i_pos += i_blocks_read;
+
+ } while( i_blocks_read == 0x1 && !b_stop_scanning );
- if( b_stop_scanning)
+ if( b_stop_scanning )
{
- memcpy( dvdcss->css.pi_title_key,
- &pi_key, sizeof(dvd_key_t) );
+ memcpy( p_titlekey, &p_key, sizeof(dvd_key_t) );
_dvdcss_debug( dvdcss, "vts key initialized" );
return 0;
}
if( !b_encrypted )
{
- _dvdcss_debug( dvdcss, "this file was _NOT_ encrypted!" );
+ _dvdcss_debug( dvdcss, "file was unscrambled" );
return 0;
}
* sec : sector to descramble
* key : title key for this sector
*****************************************************************************/
-int CSSDescrambleSector( dvd_key_t pi_key, u8* pi_sec )
+int CSSDescrambleSector( dvd_key_t p_key, u8* p_sec )
{
#ifdef HAVE_CSS
unsigned int i_t1, i_t2, i_t3, i_t4, i_t5, i_t6;
- u8* pi_end = pi_sec + 0x800;
+ u8* p_end = p_sec + 0x800;
/* PES_scrambling_control */
- if( pi_sec[0x14] & 0x30)
+ if( p_sec[0x14] & 0x30)
{
- i_t1 = ((pi_key)[0] ^ pi_sec[0x54]) | 0x100;
- i_t2 = (pi_key)[1] ^ pi_sec[0x55];
- i_t3 = (((pi_key)[2]) | ((pi_key)[3] << 8) |
- ((pi_key)[4] << 16)) ^ ((pi_sec[0x56]) |
- (pi_sec[0x57] << 8) | (pi_sec[0x58] << 16));
+ i_t1 = ((p_key)[0] ^ p_sec[0x54]) | 0x100;
+ i_t2 = (p_key)[1] ^ p_sec[0x55];
+ i_t3 = (((p_key)[2]) | ((p_key)[3] << 8) |
+ ((p_key)[4] << 16)) ^ ((p_sec[0x56]) |
+ (p_sec[0x57] << 8) | (p_sec[0x58] << 16));
i_t4 = i_t3 & 7;
i_t3 = i_t3 * 2 + 8 - i_t4;
- pi_sec += 0x80;
+ p_sec += 0x80;
i_t5 = 0;
- while( pi_sec != pi_end )
+ while( p_sec != p_end )
{
- i_t4 = pi_css_tab2[i_t2] ^ pi_css_tab3[i_t1];
+ i_t4 = p_css_tab2[i_t2] ^ p_css_tab3[i_t1];
i_t2 = i_t1>>1;
i_t1 = ( ( i_t1 & 1 ) << 8 ) ^ i_t4;
- i_t4 = pi_css_tab5[i_t4];
+ i_t4 = p_css_tab5[i_t4];
i_t6 = ((((((( i_t3 >> 3 ) ^ i_t3 ) >> 1 ) ^
i_t3 ) >> 8 ) ^ i_t3 ) >> 5) & 0xff;
i_t3 = (i_t3 << 8 ) | i_t6;
- i_t6 = pi_css_tab4[i_t6];
+ i_t6 = p_css_tab4[i_t6];
i_t5 += i_t6 + i_t4;
- *pi_sec = pi_css_tab1[*pi_sec] ^( i_t5 & 0xff );
- pi_sec++;
+ *p_sec = p_css_tab1[*p_sec] ^( i_t5 & 0xff );
+ p_sec++;
i_t5 >>= 8;
}
}
* i_varient : between 0 and 31.
*****************************************************************************/
static void CSSCryptKey( int i_key_type, int i_varient,
- u8 const * pi_challenge, u8* pi_key )
+ u8 const * p_challenge, u8* p_key )
{
/* Permutation table for challenge */
- u8 ppi_perm_challenge[3][10] =
+ u8 pp_perm_challenge[3][10] =
{ { 1, 3, 0, 7, 5, 2, 9, 6, 4, 8 },
{ 6, 1, 9, 3, 8, 5, 7, 4, 0, 2 },
{ 4, 0, 3, 5, 7, 2, 8, 6, 1, 9 } };
/* Permutation table for varient table for key2 and buskey */
- u8 ppi_perm_varient[2][32] =
+ u8 pp_perm_varient[2][32] =
{ { 0x0a, 0x08, 0x0e, 0x0c, 0x0b, 0x09, 0x0f, 0x0d,
0x1a, 0x18, 0x1e, 0x1c, 0x1b, 0x19, 0x1f, 0x1d,
0x02, 0x00, 0x06, 0x04, 0x03, 0x01, 0x07, 0x05,
0x13, 0x1b, 0x17, 0x1f, 0x03, 0x0b, 0x07, 0x0f,
0x11, 0x19, 0x15, 0x1d, 0x01, 0x09, 0x05, 0x0d } };
- u8 pi_varients[32] =
+ u8 p_varients[32] =
{ 0xB7, 0x74, 0x85, 0xD0, 0xCC, 0xDB, 0xCA, 0x73,
0x03, 0xFE, 0x31, 0x03, 0x52, 0xE0, 0xB7, 0x42,
0x63, 0x16, 0xF2, 0x2A, 0x79, 0x52, 0xFF, 0x1B,
0x7A, 0x11, 0xCA, 0x1A, 0x9B, 0x40, 0xAD, 0x01 };
/* The "secret" key */
- u8 pi_secret[5] = { 0x55, 0xD6, 0xC4, 0xC5, 0x28 };
+ u8 p_secret[5] = { 0x55, 0xD6, 0xC4, 0xC5, 0x28 };
- u8 pi_bits[30];
- u8 pi_scratch[10];
- u8 pi_tmp1[5];
- u8 pi_tmp2[5];
+ u8 p_bits[30];
+ u8 p_scratch[10];
+ u8 p_tmp1[5];
+ u8 p_tmp2[5];
u8 i_lfsr0_o; /* 1 bit used */
u8 i_lfsr1_o; /* 1 bit used */
u32 i_lfsr0;
int i;
for (i = 9; i >= 0; --i)
- pi_scratch[i] = pi_challenge[ppi_perm_challenge[i_key_type][i]];
+ p_scratch[i] = p_challenge[pp_perm_challenge[i_key_type][i]];
i_css_varient = ( i_key_type == 0 ) ? i_varient :
- ppi_perm_varient[i_key_type-1][i_varient];
+ pp_perm_varient[i_key_type-1][i_varient];
/*
* This encryption engine implements one of 32 variations
*/
for( i = 5 ; --i >= 0 ; )
{
- pi_tmp1[i] = pi_scratch[5 + i] ^ pi_secret[i] ^ pi_crypt_tab2[i];
+ p_tmp1[i] = p_scratch[5 + i] ^ p_secret[i] ^ p_crypt_tab2[i];
}
/*
* initial values are non-zero. Thus when we initialise them from
* the seed, we ensure that a bit is set.
*/
- i_lfsr0 = ( pi_tmp1[0] << 17 ) | ( pi_tmp1[1] << 9 ) |
- (( pi_tmp1[2] & ~7 ) << 1 ) | 8 | ( pi_tmp1[2] & 7 );
- i_lfsr1 = ( pi_tmp1[3] << 9 ) | 0x100 | pi_tmp1[4];
+ i_lfsr0 = ( p_tmp1[0] << 17 ) | ( p_tmp1[1] << 9 ) |
+ (( p_tmp1[2] & ~7 ) << 1 ) | 8 | ( p_tmp1[2] & 7 );
+ i_lfsr1 = ( p_tmp1[3] << 9 ) | 0x100 | p_tmp1[4];
- i_index = sizeof(pi_bits);
+ i_index = sizeof(p_bits);
i_carry = 0;
do
i_val |= ( i_combined & 1 ) << i_bit;
}
- pi_bits[--i_index] = i_val;
+ p_bits[--i_index] = i_val;
} while( i_index > 0 );
/* This term is used throughout the following to
* select one of 32 different variations on the
* algorithm.
*/
- i_cse = pi_varients[i_css_varient] ^ pi_crypt_tab2[i_css_varient];
+ i_cse = p_varients[i_css_varient] ^ p_crypt_tab2[i_css_varient];
/* Now the actual blocks doing the encryption. Each
* of these works on 40 bits at a time and are quite
* similar.
*/
i_index = 0;
- for( i = 5, i_term = 0 ; --i >= 0 ; i_term = pi_scratch[i] )
+ for( i = 5, i_term = 0 ; --i >= 0 ; i_term = p_scratch[i] )
{
- i_index = pi_bits[25 + i] ^ pi_scratch[i];
- i_index = pi_crypt_tab1[i_index] ^ ~pi_crypt_tab2[i_index] ^ i_cse;
+ i_index = p_bits[25 + i] ^ p_scratch[i];
+ i_index = p_crypt_tab1[i_index] ^ ~p_crypt_tab2[i_index] ^ i_cse;
- pi_tmp1[i] = pi_crypt_tab2[i_index] ^ pi_crypt_tab3[i_index] ^ i_term;
+ p_tmp1[i] = p_crypt_tab2[i_index] ^ p_crypt_tab3[i_index] ^ i_term;
}
- pi_tmp1[4] ^= pi_tmp1[0];
+ p_tmp1[4] ^= p_tmp1[0];
- for( i = 5, i_term = 0 ; --i >= 0 ; i_term = pi_tmp1[i] )
+ for( i = 5, i_term = 0 ; --i >= 0 ; i_term = p_tmp1[i] )
{
- i_index = pi_bits[20 + i] ^ pi_tmp1[i];
- i_index = pi_crypt_tab1[i_index] ^ ~pi_crypt_tab2[i_index] ^ i_cse;
+ i_index = p_bits[20 + i] ^ p_tmp1[i];
+ i_index = p_crypt_tab1[i_index] ^ ~p_crypt_tab2[i_index] ^ i_cse;
- pi_tmp2[i] = pi_crypt_tab2[i_index] ^ pi_crypt_tab3[i_index] ^ i_term;
+ p_tmp2[i] = p_crypt_tab2[i_index] ^ p_crypt_tab3[i_index] ^ i_term;
}
- pi_tmp2[4] ^= pi_tmp2[0];
+ p_tmp2[4] ^= p_tmp2[0];
- for( i = 5, i_term = 0 ; --i >= 0 ; i_term = pi_tmp2[i] )
+ for( i = 5, i_term = 0 ; --i >= 0 ; i_term = p_tmp2[i] )
{
- i_index = pi_bits[15 + i] ^ pi_tmp2[i];
- i_index = pi_crypt_tab1[i_index] ^ ~pi_crypt_tab2[i_index] ^ i_cse;
- i_index = pi_crypt_tab2[i_index] ^ pi_crypt_tab3[i_index] ^ i_term;
+ i_index = p_bits[15 + i] ^ p_tmp2[i];
+ i_index = p_crypt_tab1[i_index] ^ ~p_crypt_tab2[i_index] ^ i_cse;
+ i_index = p_crypt_tab2[i_index] ^ p_crypt_tab3[i_index] ^ i_term;
- pi_tmp1[i] = pi_crypt_tab0[i_index] ^ pi_crypt_tab2[i_index];
+ p_tmp1[i] = p_crypt_tab0[i_index] ^ p_crypt_tab2[i_index];
}
- pi_tmp1[4] ^= pi_tmp1[0];
+ p_tmp1[4] ^= p_tmp1[0];
- for( i = 5, i_term = 0 ; --i >= 0 ; i_term = pi_tmp1[i] )
+ for( i = 5, i_term = 0 ; --i >= 0 ; i_term = p_tmp1[i] )
{
- i_index = pi_bits[10 + i] ^ pi_tmp1[i];
- i_index = pi_crypt_tab1[i_index] ^ ~pi_crypt_tab2[i_index] ^ i_cse;
+ i_index = p_bits[10 + i] ^ p_tmp1[i];
+ i_index = p_crypt_tab1[i_index] ^ ~p_crypt_tab2[i_index] ^ i_cse;
- i_index = pi_crypt_tab2[i_index] ^ pi_crypt_tab3[i_index] ^ i_term;
+ i_index = p_crypt_tab2[i_index] ^ p_crypt_tab3[i_index] ^ i_term;
- pi_tmp2[i] = pi_crypt_tab0[i_index] ^ pi_crypt_tab2[i_index];
+ p_tmp2[i] = p_crypt_tab0[i_index] ^ p_crypt_tab2[i_index];
}
- pi_tmp2[4] ^= pi_tmp2[0];
+ p_tmp2[4] ^= p_tmp2[0];
- for( i = 5, i_term = 0 ; --i >= 0 ; i_term = pi_tmp2[i] )
+ for( i = 5, i_term = 0 ; --i >= 0 ; i_term = p_tmp2[i] )
{
- i_index = pi_bits[5 + i] ^ pi_tmp2[i];
- i_index = pi_crypt_tab1[i_index] ^ ~pi_crypt_tab2[i_index] ^ i_cse;
+ i_index = p_bits[5 + i] ^ p_tmp2[i];
+ i_index = p_crypt_tab1[i_index] ^ ~p_crypt_tab2[i_index] ^ i_cse;
- pi_tmp1[i] = pi_crypt_tab2[i_index] ^ pi_crypt_tab3[i_index] ^ i_term;
+ p_tmp1[i] = p_crypt_tab2[i_index] ^ p_crypt_tab3[i_index] ^ i_term;
}
- pi_tmp1[4] ^= pi_tmp1[0];
+ p_tmp1[4] ^= p_tmp1[0];
- for(i = 5, i_term = 0 ; --i >= 0 ; i_term = pi_tmp1[i] )
+ for(i = 5, i_term = 0 ; --i >= 0 ; i_term = p_tmp1[i] )
{
- i_index = pi_bits[i] ^ pi_tmp1[i];
- i_index = pi_crypt_tab1[i_index] ^ ~pi_crypt_tab2[i_index] ^ i_cse;
+ i_index = p_bits[i] ^ p_tmp1[i];
+ i_index = p_crypt_tab1[i_index] ^ ~p_crypt_tab2[i_index] ^ i_cse;
- pi_key[i] = pi_crypt_tab2[i_index] ^ pi_crypt_tab3[i_index] ^ i_term;
+ p_key[i] = p_crypt_tab2[i_index] ^ p_crypt_tab3[i_index] ^ i_term;
}
return;
dvd_key_t * p_sector_key,
dvd_key_t * p_key )
{
- unsigned char pi_buffer[10];
+ unsigned char p_buffer[10];
unsigned int i_t1, i_t2, i_t3, i_t4, i_t5, i_t6;
unsigned int i_try;
unsigned int i_candidate;
for( i = 0 ; i < 10 ; i++ )
{
- pi_buffer[i] = pi_css_tab1[p_crypted[i]] ^ p_decrypted[i];
+ p_buffer[i] = p_css_tab1[p_crypted[i]] ^ p_decrypted[i];
}
for( i_try = i_start ; i_try < 0x10000 ; i_try++ )
for( i = 0 ; i < 4 ; i++ )
{
/* advance LFSR1 normaly */
- i_t4 = pi_css_tab2[i_t2] ^ pi_css_tab3[i_t1];
+ i_t4 = p_css_tab2[i_t2] ^ p_css_tab3[i_t1];
i_t2 = i_t1 >> 1;
i_t1 = ( ( i_t1 & 1 ) << 8 ) ^ i_t4;
- i_t4 = pi_css_tab5[i_t4];
+ i_t4 = p_css_tab5[i_t4];
/* deduce i_t6 & i_t5 */
- i_t6 = pi_buffer[i];
+ i_t6 = p_buffer[i];
if( i_t5 )
{
i_t6 = ( i_t6 + 0xff ) & 0x0ff;
}
i_t6 -= i_t4;
i_t5 += i_t6 + i_t4;
- i_t6 = pi_css_tab4[ i_t6 ];
+ i_t6 = p_css_tab4[ i_t6 ];
/* feed / advance i_t3 / i_t5 */
i_t3 = ( i_t3 << 8 ) | i_t6;
i_t5 >>= 8;
/* iterate 6 more times to validate candidate key */
for( ; i < 10 ; i++ )
{
- i_t4 = pi_css_tab2[i_t2] ^ pi_css_tab3[i_t1];
+ i_t4 = p_css_tab2[i_t2] ^ p_css_tab3[i_t1];
i_t2 = i_t1 >> 1;
i_t1 = ( ( i_t1 & 1 ) << 8 ) ^ i_t4;
- i_t4 = pi_css_tab5[i_t4];
+ i_t4 = p_css_tab5[i_t4];
i_t6 = ((((((( i_t3 >> 3 ) ^ i_t3 ) >> 1 ) ^
i_t3 ) >> 8 ) ^ i_t3 ) >> 5 ) & 0xff;
i_t3 = ( i_t3 << 8 ) | i_t6;
- i_t6 = pi_css_tab4[i_t6];
+ i_t6 = p_css_tab4[i_t6];
i_t5 += i_t6 + i_t4;
- if( ( i_t5 & 0xff ) != pi_buffer[i] )
+ if( ( i_t5 & 0xff ) != p_buffer[i] )
{
break;
}
* css.h: Structures for DVD authentification and unscrambling
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
- * $Id: css.h,v 1.3 2001/07/07 21:10:58 gbazin Exp $
+ * $Id: css.h,v 1.4 2001/07/11 02:01:03 sam Exp $
*
* Author: Stéphane Borel <stef@via.ecp.fr>
*
typedef struct disc_s
{
- u8 pi_challenge[2*KEY_SIZE];
- dvd_key_t pi_key1;
- dvd_key_t pi_key2;
- dvd_key_t pi_key_check;
+ u8 p_challenge[2*KEY_SIZE];
+ dvd_key_t p_key1;
+ dvd_key_t p_key2;
+ dvd_key_t p_key_check;
u8 i_varient;
} disc_t;
typedef struct title_key_s
{
- int i_occ;
- dvd_key_t pi_key;
+ int i_startlb;
+ dvd_key_t p_key;
+ struct title_key_s *p_next;
} title_key_t;
typedef struct css_s
{
int i_agid;
disc_t disc;
- u8 pi_disc_key[2048];
- int i_title;
- int i_title_pos;
- dvd_key_t pi_title_key;
+ u8 p_disc_key[2048];
} css_t;
/*****************************************************************************
int CSSTest ( dvdcss_handle );
int CSSInit ( dvdcss_handle );
-int CSSGetKey ( dvdcss_handle );
+int CSSGetKey ( dvdcss_handle, int, dvd_key_t );
int CSSDescrambleSector ( u8 * , u8 * );
* csstables.h: CSS Tables for DVD unscrambling
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
- * $Id: csstables.h,v 1.1 2001/06/12 22:14:44 sam Exp $
+ * $Id: csstables.h,v 1.2 2001/07/11 02:01:03 sam Exp $
*
* Author: Stéphane Borel <stef@via.ecp.fr>
*
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
-static u8 pi_css_tab1[ 256 ] =
+static u8 p_css_tab1[ 256 ] =
{
0x33, 0x73, 0x3b, 0x26, 0x63, 0x23, 0x6b, 0x76,
0x3e, 0x7e, 0x36, 0x2b, 0x6e, 0x2e, 0x66, 0x7b,
0xba, 0xfa, 0xb2, 0xaf, 0xea, 0xaa, 0xe2, 0xff
};
-static u8 pi_css_tab2[ 256 ] =
+static u8 p_css_tab2[ 256 ] =
{
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x09, 0x08, 0x0b, 0x0a, 0x0d, 0x0c, 0x0f, 0x0e,
0xe4, 0xe5, 0xe6, 0xe7, 0xe0, 0xe1, 0xe2, 0xe3
};
-static u8 pi_css_tab3[ 512 ] =
+static u8 p_css_tab3[ 512 ] =
{
0x00, 0x24, 0x49, 0x6d, 0x92, 0xb6, 0xdb, 0xff,
0x00, 0x24, 0x49, 0x6d, 0x92, 0xb6, 0xdb, 0xff,
0x00, 0x24, 0x49, 0x6d, 0x92, 0xb6, 0xdb, 0xff
};
-static u8 pi_css_tab4[ 256 ] =
+static u8 p_css_tab4[ 256 ] =
{
0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
};
-static u8 pi_css_tab5[ 256 ] =
+static u8 p_css_tab5[ 256 ] =
{
0xff, 0x7f, 0xbf, 0x3f, 0xdf, 0x5f, 0x9f, 0x1f,
0xef, 0x6f, 0xaf, 0x2f, 0xcf, 0x4f, 0x8f, 0x0f,
0xe0, 0x60, 0xa0, 0x20, 0xc0, 0x40, 0x80, 0x00
};
-static u8 pi_crypt_tab0[ 256 ] =
+static u8 p_crypt_tab0[ 256 ] =
{
0xB7, 0xF4, 0x82, 0x57, 0xDA, 0x4D, 0xDB, 0xE2,
0x2F, 0x52, 0x1A, 0xA8, 0x68, 0x5A, 0x8A, 0xFF,
0xAD, 0x94, 0x77, 0x04, 0x9A, 0x39, 0xCF, 0x7C
};
-static u8 pi_crypt_tab1[ 256 ] =
+static u8 p_crypt_tab1[ 256 ] =
{
0x8C, 0x47, 0xB0, 0xE1, 0xEB, 0xFC, 0xEB, 0x56,
0x10, 0xE5, 0x2C, 0x1A, 0x5D, 0xEF, 0xBE, 0x4F,
0xAA, 0x1B, 0x79, 0x8E, 0x97, 0xB4, 0xC3, 0xF4
};
-static u8 pi_crypt_tab2[ 256 ] =
+static u8 p_crypt_tab2[ 256 ] =
{
0xB7, 0x75, 0x81, 0xD5, 0xDC, 0xCA, 0xDE, 0x66,
0x23, 0xDF, 0x15, 0x26, 0x62, 0xD1, 0x83, 0x77,
0x29, 0x91, 0xF0, 0x02, 0x18, 0x3A, 0x4E, 0x7C
};
-static u8 pi_crypt_tab3[ 288 ] =
+static u8 p_crypt_tab3[ 288 ] =
{
0x73, 0x51, 0x95, 0xE1, 0x12, 0xE4, 0xC0, 0x58,
0xEE, 0xF2, 0x08, 0x1B, 0xA9, 0xFA, 0x98, 0x4C,
* libdvdcss.c: DVD reading library.
*****************************************************************************
* Copyright (C) 1998-2001 VideoLAN
- * $Id: libdvdcss.c,v 1.4 2001/07/07 21:10:58 gbazin Exp $
+ * $Id: libdvdcss.c,v 1.5 2001/07/11 02:01:03 sam Exp $
*
* Authors: Stéphane Borel <stef@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
}
/* Initialize structure */
+ dvdcss->p_keys = NULL;
dvdcss->b_debug = i_flags & DVDCSS_INIT_DEBUG;
dvdcss->b_errors = !(i_flags & DVDCSS_INIT_QUIET);
dvdcss->psz_error = "no error";
/*****************************************************************************
* dvdcss_crack: crack the current title key
*****************************************************************************/
-extern int dvdcss_crack ( dvdcss_handle dvdcss, int i_title, int i_block )
+extern int dvdcss_crack ( dvdcss_handle dvdcss, int i_block )
{
+ title_key_t **pp_writekey;
+ title_key_t **pp_currentkey;
+ title_key_t *p_titlekey;
+ dvd_key_t p_key;
int i_ret;
if( ! dvdcss->b_encrypted )
return 0;
}
- /* Crack CSS title key for current VTS */
- dvdcss->css.i_title = i_title;
- dvdcss->css.i_title_pos = i_block;
+ /* Check if we've already cracked this key */
+ p_titlekey = dvdcss->p_keys;
+ while( p_titlekey != NULL
+ && p_titlekey->p_next != NULL
+ && p_titlekey->p_next->i_startlb < i_block )
+ {
+ p_titlekey = p_titlekey->p_next;
+ }
- i_ret = CSSGetKey( dvdcss );
+ if( p_titlekey != NULL && p_titlekey->i_startlb == i_block )
+ {
+ /* We've already cracked this key, nothing to do */
+ return 0;
+ }
+
+ /* Crack CSS title key for current VTS */
+ i_ret = CSSGetKey( dvdcss, i_block, p_key );
if( i_ret < 0 )
{
return -1;
}
+ /* Add key to keytable if it isn't empty */
+ if( p_key[0] || p_key[1] || p_key[2] || p_key[3] || p_key[4] )
+ {
+ /* Find our spot in the list */
+ pp_writekey = &(dvdcss->p_keys);
+ pp_currentkey = pp_writekey;
+ while( *pp_currentkey != NULL
+ && (*pp_currentkey)->i_startlb < i_block )
+ {
+ pp_writekey = pp_currentkey;
+ pp_currentkey = &((*pp_currentkey)->p_next);
+ }
+
+ /* Write in the new key */
+ p_titlekey = *pp_writekey;
+ *pp_writekey = malloc( sizeof( title_key_t ) );
+ (*pp_writekey)->i_startlb = i_block;
+ memcpy( (*pp_writekey)->p_key, p_key, KEY_SIZE );
+ (*pp_writekey)->p_next = p_titlekey;
+ }
+
return 0;
}
int i_blocks,
int i_flags )
{
- int i_ret;
+ title_key_t *p_current;
+ int i_ret, i_index;
i_ret = _dvdcss_read( dvdcss, p_buffer, i_blocks );
- if( i_ret != i_blocks
+ if( i_ret <= 0
|| !dvdcss->b_encrypted
|| !(i_flags & DVDCSS_READ_DECRYPT) )
{
return i_ret;
}
- while( i_ret )
+ /* find our key */
+ p_current = dvdcss->p_keys;
+ while( p_current != NULL
+ && p_current->p_next
+ && p_current->p_next->i_startlb < dvdcss->i_seekpos )
+ {
+ p_current = p_current->p_next;
+ }
+
+ if( p_current == NULL )
+ {
+ /* no css key found to use, so no decryption to do */
+ return 0;
+ }
+
+ /* Decrypt the blocks we managed to read */
+ for( i_index = i_ret; i_index; i_index-- )
{
- CSSDescrambleSector( dvdcss->css.pi_title_key, p_buffer );
+ CSSDescrambleSector( p_current->p_key, p_buffer );
((u8*)p_buffer)[0x14] &= 0x8f;
(u8*)p_buffer += DVDCSS_BLOCK_SIZE;
- i_ret--;
}
- return i_blocks;
+ return i_ret;
}
/*****************************************************************************
int i_flags )
{
#define P_IOVEC ((struct iovec*)p_iovec)
- int i_ret;
+ title_key_t *p_current;
+ int i_ret, i_index;
void *iov_base;
size_t iov_len;
i_ret = _dvdcss_readv( dvdcss, P_IOVEC, i_blocks );
- if( i_ret != i_blocks
+ if( i_ret <= 0
|| !dvdcss->b_encrypted
|| !(i_flags & DVDCSS_READ_DECRYPT) )
{
return i_ret;
}
+ /* Find our key */
+ p_current = dvdcss->p_keys;
+ while( p_current != NULL
+ && p_current->p_next
+ && p_current->p_next->i_startlb < dvdcss->i_seekpos )
+ {
+ p_current = p_current->p_next;
+ }
+
+ if( p_current == NULL )
+ {
+ /* no css key found to use, so no decryption to do */
+ return 0;
+ }
+
+
/* Initialize loop for decryption */
iov_base = P_IOVEC->iov_base;
iov_len = P_IOVEC->iov_len;
- while( i_ret )
+ /* Decrypt the blocks we managed to read */
+ for( i_index = i_ret; i_index; i_index-- )
{
/* Check that iov_len is a multiple of 2048 */
if( iov_len & 0x7ff )
iov_len = P_IOVEC->iov_len;
}
- CSSDescrambleSector( dvdcss->css.pi_title_key, iov_base );
+ CSSDescrambleSector( p_current->p_key, iov_base );
((u8*)iov_base)[0x14] &= 0x8f;
(u8*)iov_base += DVDCSS_BLOCK_SIZE;
(u8*)iov_len -= DVDCSS_BLOCK_SIZE;
-
- i_ret--;
}
- return i_blocks;
+ return i_ret;
#undef P_IOVEC
}
*****************************************************************************/
extern int dvdcss_close ( dvdcss_handle dvdcss )
{
+ title_key_t *p_currentkey;
int i_ret;
+ /* Free our list of keys */
+ p_currentkey = dvdcss->p_keys;
+ while( p_currentkey )
+ {
+ title_key_t *p_tmpkey = p_currentkey->p_next;
+ free( p_currentkey );
+ p_currentkey = p_tmpkey;
+ }
+
i_ret = _dvdcss_close( dvdcss );
if( i_ret < 0 )
static int _dvdcss_seek ( dvdcss_handle dvdcss, int i_blocks )
{
-
#if defined( WIN32 )
if( WIN2K )
{
#else
off_t i_read;
+ dvdcss->i_seekpos = i_blocks;
+
i_read = lseek( dvdcss->i_fd,
(off_t)i_blocks * (off_t)DVDCSS_BLOCK_SIZE, SEEK_SET );
static int _dvdcss_read ( dvdcss_handle dvdcss, void *p_buffer, int i_blocks )
{
- int i_read;
-
#if defined( WIN32 )
if( WIN2K )
{
+ int i_bytes;
+
if( !ReadFile( (HANDLE) dvdcss->i_fd, p_buffer,
i_blocks * DVDCSS_BLOCK_SIZE,
- (LPDWORD)&i_read, NULL ) )
+ (LPDWORD)&i_bytes, NULL ) )
{
- i_read = -DVDCSS_BLOCK_SIZE;
+ return -1;
}
- return i_read / DVDCSS_BLOCK_SIZE;
+ return i_bytes / DVDCSS_BLOCK_SIZE;
}
else
{
- i_read = _win32_dvdcss_aread( dvdcss->i_fd, p_buffer, i_blocks );
- return i_read;
+ return _win32_dvdcss_aread( dvdcss->i_fd, p_buffer, i_blocks );
}
-#else
- i_read = read( dvdcss->i_fd, p_buffer, (size_t)i_blocks * DVDCSS_BLOCK_SIZE );
- return i_read / DVDCSS_BLOCK_SIZE;
+#else
+ int i_bytes;
+
+ i_bytes = read( dvdcss->i_fd, p_buffer, (size_t)i_blocks * DVDCSS_BLOCK_SIZE );
+ return i_bytes / DVDCSS_BLOCK_SIZE;
#endif
}
ResetEvent( hEvent );
if( fd->lpSendCommand( (void*) &ssc ) == SS_PENDING )
+ {
WaitForSingleObject( hEvent, INFINITE );
+ }
CloseHandle( hEvent );
- if(ssc.SRB_Status != SS_COMP)
+ if( ssc.SRB_Status != SS_COMP )
{
- return -1;
+ return -1;
}
fd->i_blocks += i_blocks;
}
#endif
+
* private.h: private DVD reading library data
*****************************************************************************
* Copyright (C) 1998-2001 VideoLAN
- * $Id: libdvdcss.h,v 1.3 2001/06/14 02:47:44 sam Exp $
+ * $Id: libdvdcss.h,v 1.4 2001/07/11 02:01:03 sam Exp $
*
* Authors: Stéphane Borel <stef@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
{
/* File descriptor */
int i_fd;
+ int i_seekpos;
/* Decryption stuff */
- css_t css;
- boolean_t b_encrypted;
+ css_t css;
+ boolean_t b_encrypted;
+ title_key_t *p_keys;
/* Error management */
char *psz_error;
* libdvdcss.h: DVD reading library, exported functions.
*****************************************************************************
* Copyright (C) 1998-2001 VideoLAN
- * $Id: dvdcss.h,v 1.3 2001/06/20 07:43:48 sam Exp $
+ * $Id: dvdcss.h,v 1.4 2001/07/11 02:01:03 sam Exp $
*
* Authors: Stéphane Borel <stef@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
int i_flags );
extern int dvdcss_close ( dvdcss_handle );
extern int dvdcss_crack ( dvdcss_handle,
- int i_title,
int i_block );
extern int dvdcss_seek ( dvdcss_handle,
int i_blocks );
--- /dev/null
+*.a
+*.so
+*.so.*
# Real targets
#
-../../lib/alsa.so: $(PLUGIN_C)
+../../plugins/alsa.so: $(PLUGIN_C)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_ALSA)
-../../lib/alsa.a: $(BUILTIN_C)
+../../plugins/alsa.a: $(BUILTIN_C)
ar r $@ $^
$(RANLIB) $@
* aout_alsa.c : Alsa functions library
*****************************************************************************
* Copyright (C) 2000 VideoLAN
- * $Id: aout_alsa.c,v 1.16 2001/05/30 17:03:11 sam Exp $
+ * $Id: aout_alsa.c,v 1.17 2001/07/11 02:01:03 sam Exp $
*
* Authors: Henri Fallon <henri@videolan.org> - Original Author
* Jeffrey Baker <jwbaker@acm.org> - Port to ALSA 1.0 API
- *
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
{
int i_open_return, i_close_return;
aout_sys_t local_sys;
-
+
/* Open device */
- i_open_return = snd_pcm_open( &(local_sys.p_alsa_handle), "plug:0,0",
+ i_open_return = snd_pcm_open( &(local_sys.p_alsa_handle), "plug:0,0",
SND_PCM_STREAM_PLAYBACK, 0 );
if( i_open_return )
{
- intf_ErrMsg( "Aout_alsa: error opening alsa device in aout_probe(%d)"
- " : %s", i_open_return, snd_strerror( i_open_return ) );
- intf_WarnMsg( 1, "Aout_alsa : module scored 0" );
+ intf_WarnMsg( 2, "aout info: could not probe ALSA device (%s)",
+ snd_strerror( i_open_return ) );
return ( 0 );
}
/* Close it */
i_close_return = snd_pcm_close( local_sys.p_alsa_handle );
-
+
if( i_close_return )
{
- intf_ErrMsg( "Aout_alsa: error closing alsa device in aout_probe(%d)"
- " : %s", i_close_return, snd_strerror( i_close_return ) );
- intf_WarnMsg( 1, "Aout_alsa : module scored 0" );
+ intf_ErrMsg( "aout error: could not close ALSA device (%s)",
+ snd_strerror( i_close_return ) );
return( 0 );
}
-
+
if( TestMethod( AOUT_METHOD_VAR, "alsa" ) )
{
- intf_WarnMsg( 1, "Aout_alsa : module scored 999" );
return( 999 );
}
/* And return score */
return( 100 );
-}
+}
/*****************************************************************************
* aout_Open : creates a handle and opens an alsa device
{
int i_open_returns;
-
+
/* Allocate structures */
p_aout->p_sys = malloc( sizeof( aout_sys_t ) );
if( p_aout->p_sys == NULL )
{
- intf_ErrMsg( "Aout_alsa : Could not allocate memory : %s",
+ intf_ErrMsg( "aout error: failed allocating memory for ALSA (%s)",
strerror(ENOMEM) );
return( 1 );
}
AOUT_RATE_DEFAULT );
/* Open device */
- if( ( i_open_returns = snd_pcm_open(&(p_aout->p_sys->p_alsa_handle),
- "plug:0,0",
+ if( ( i_open_returns = snd_pcm_open(&(p_aout->p_sys->p_alsa_handle),
+ "plug:0,0",
SND_PCM_STREAM_PLAYBACK, 0) ) )
{
- intf_ErrMsg( "Could not open alsa device; exit = %i",
- i_open_returns );
- intf_ErrMsg( "This means : %s", snd_strerror(i_open_returns) );
+ intf_ErrMsg( "aout error: could not open ALSA device (%s)",
+ snd_strerror(i_open_returns) );
return( -1 );
}
- intf_DbgMsg( "Aout_alsa : Alsa device successfully opened" );
+ intf_DbgMsg( "aout info: ALSA device successfully opened" );
return( 0 );
}
*****************************************************************************/
static int aout_SetFormat( aout_thread_t *p_aout )
{
-
+
int i_rv;
int i_format;
-
+
snd_pcm_hw_params_t *p_hw;
snd_pcm_sw_params_t *p_sw;
-
+
snd_pcm_hw_params_alloca(&p_hw);
snd_pcm_sw_params_alloca(&p_sw);
- switch (p_aout->i_format) {
+ switch (p_aout->i_format)
+ {
case AOUT_FMT_S16_LE:
i_format = SND_PCM_FORMAT_S16_LE;
p_aout->p_sys->bytes_per_sample = 2;
break;
-
+
default:
i_format = SND_PCM_FORMAT_S16_BE;
p_aout->p_sys->bytes_per_sample = 2;
}
p_aout->p_sys->samples_per_frame = p_aout->i_channels;
- p_aout->p_sys->bytes_per_frame = p_aout->p_sys->samples_per_frame *
+ p_aout->p_sys->bytes_per_frame = p_aout->p_sys->samples_per_frame *
p_aout->p_sys->bytes_per_sample;
i_rv = snd_pcm_hw_params_any( p_aout->p_sys->p_alsa_handle, p_hw );
if( i_rv < 0 )
{
- intf_ErrMsg( "Aout_alsa: Unable to retrieve initial parameters." );
+ intf_ErrMsg( "aout error: unable to retrieve initial parameters" );
return( -1 );
}
-
- i_rv = snd_pcm_hw_params_set_access( p_aout->p_sys->p_alsa_handle, p_hw,
+
+ i_rv = snd_pcm_hw_params_set_access( p_aout->p_sys->p_alsa_handle, p_hw,
SND_PCM_ACCESS_RW_INTERLEAVED );
if( i_rv < 0 )
{
- intf_ErrMsg( "Aout_alsa: Unable to set interleaved stream format." );
+ intf_ErrMsg( "aout error: unable to set interleaved stream format" );
return( -1 );
}
-
- i_rv = snd_pcm_hw_params_set_format( p_aout->p_sys->p_alsa_handle,
+
+ i_rv = snd_pcm_hw_params_set_format( p_aout->p_sys->p_alsa_handle,
p_hw, i_format );
if( i_rv < 0 )
{
- intf_ErrMsg( "Aout_alsa: Unable to set stream sample size and word"
- " order." );
+ intf_ErrMsg( "aout error: unable to set stream sample size and word"
+ " order" );
return( -1 );
}
- i_rv = snd_pcm_hw_params_set_channels( p_aout->p_sys->p_alsa_handle, p_hw,
+ i_rv = snd_pcm_hw_params_set_channels( p_aout->p_sys->p_alsa_handle, p_hw,
p_aout->i_channels );
if( i_rv < 0 )
{
- intf_ErrMsg( "Aout_alsa: Unable to set number of output channels." );
+ intf_ErrMsg( "aout error: unable to set number of output channels" );
return( -1 );
}
-
- i_rv = snd_pcm_hw_params_set_rate_near( p_aout->p_sys->p_alsa_handle, p_hw,
+
+ i_rv = snd_pcm_hw_params_set_rate_near( p_aout->p_sys->p_alsa_handle, p_hw,
p_aout->l_rate, 0 );
if( i_rv < 0 )
{
- intf_ErrMsg( "Aout_alsa: Unable to set sample rate." );
+ intf_ErrMsg( "aout error: unable to set sample rate" );
return( -1 );
}
- else
- p_aout->p_sys->rate = i_rv;
-
+ p_aout->p_sys->rate = i_rv;
+
i_rv = snd_pcm_hw_params_set_buffer_time_near( p_aout->p_sys->p_alsa_handle,
- p_hw, AOUT_BUFFER_DURATION,
+ p_hw, AOUT_BUFFER_DURATION,
0 );
if( i_rv < 0 )
{
- intf_ErrMsg( "Aout_alsa: Unable to set buffer time." );
+ intf_ErrMsg( "aout error: unable to set buffer time" );
return( -1 );
}
- else
- p_aout->p_sys->buffer_time = i_rv;
-
+ p_aout->p_sys->buffer_time = i_rv;
+
i_rv = snd_pcm_hw_params_set_period_time_near( p_aout->p_sys->p_alsa_handle,
p_hw, p_aout->p_sys->buffer_time / p_aout->p_sys->bytes_per_frame, 0 );
if( i_rv < 0 )
{
- intf_ErrMsg( "Aout_alsa: Unable to set period time." );
+ intf_ErrMsg( "aout error: unable to set period time" );
return( -1 );
}
- else
- p_aout->p_sys->period_time = i_rv;
-
+ p_aout->p_sys->period_time = i_rv;
+
i_rv = snd_pcm_hw_params(p_aout->p_sys->p_alsa_handle, p_hw);
if (i_rv < 0)
{
- intf_ErrMsg( "Aout_alsa: Unable to set hardware configuration." );
+ intf_ErrMsg( "aout error: unable to set hardware configuration" );
return( -1 );
}
-
+
p_aout->p_sys->chunk_size = snd_pcm_hw_params_get_period_size( p_hw, 0 );
- p_aout->p_sys->buffer_size = snd_pcm_hw_params_get_buffer_size( p_hw );
+ p_aout->p_sys->buffer_size = snd_pcm_hw_params_get_buffer_size( p_hw );
- snd_pcm_sw_params_current( p_aout->p_sys->p_alsa_handle, p_sw );
- i_rv = snd_pcm_sw_params_set_sleep_min( p_aout->p_sys->p_alsa_handle, p_sw,
+ snd_pcm_sw_params_current( p_aout->p_sys->p_alsa_handle, p_sw );
+ i_rv = snd_pcm_sw_params_set_sleep_min( p_aout->p_sys->p_alsa_handle, p_sw,
0 );
- i_rv = snd_pcm_sw_params_set_avail_min( p_aout->p_sys->p_alsa_handle, p_sw,
+ i_rv = snd_pcm_sw_params_set_avail_min( p_aout->p_sys->p_alsa_handle, p_sw,
p_aout->p_sys->chunk_size );
/* Worked with the CVS version but not with 0.9beta3
- i_rv = snd_pcm_sw_params_set_start_threshold( p_aout->p_sys->p_alsa_handle,
+ i_rv = snd_pcm_sw_params_set_start_threshold( p_aout->p_sys->p_alsa_handle,
p_sw, p_aout->p_sys->buffer_size );
-
- i_rv = snd_pcm_sw_params_set_stop_threshold( p_aout->p_sys->p_alsa_handle,
+
+ i_rv = snd_pcm_sw_params_set_stop_threshold( p_aout->p_sys->p_alsa_handle,
p_sw, p_aout->p_sys->buffer_size);
*/
- i_rv = snd_pcm_sw_params( p_aout->p_sys->p_alsa_handle, p_sw );
+ i_rv = snd_pcm_sw_params( p_aout->p_sys->p_alsa_handle, p_sw );
if( i_rv < 0 )
{
- intf_ErrMsg( "Aout_alsa: Unable to set software configuration." );
+ intf_ErrMsg( "aout error: unable to set software configuration" );
return( -1 );
- }
-
+ }
return( 0 );
}
/*****************************************************************************
- * static void aout_HandleXrun : reprepare the output
+ * aout_HandleXrun : reprepare the output
*****************************************************************************
* When buffer gets empty, the driver goes in "Xrun" state, where it needs
* to be reprepared before playing again
{
int i_rv;
- intf_ErrMsg( "Aout_alsa: resetting output after buffer underrun." );
-
+ intf_ErrMsg( "aout error: resetting output after buffer underrun" );
+
i_rv = snd_pcm_reset( p_aout->p_sys->p_alsa_handle );
i_rv = snd_pcm_prepare( p_aout->p_sys->p_alsa_handle );
if( i_rv < 0 )
- intf_ErrMsg( "Aout_alsa: Unable to recover from buffer underrun: %s",
+ {
+ intf_ErrMsg( "aout error: unable to recover from buffer underrun (%s)",
snd_strerror( i_rv ) );
+ }
}
{
snd_pcm_status_t *p_status;
int i_alsa_get_status_returns;
-
+
snd_pcm_status_alloca( &p_status );
- i_alsa_get_status_returns = snd_pcm_status( p_aout->p_sys->p_alsa_handle,
+ i_alsa_get_status_returns = snd_pcm_status( p_aout->p_sys->p_alsa_handle,
p_status );
if( i_alsa_get_status_returns )
{
- intf_ErrMsg ( "Aout_alsa: Error getting alsa buffer info (%d) : %s",
- i_alsa_get_status_returns,
+ intf_ErrMsg ( "aout error: failed getting alsa buffer info (%s)",
snd_strerror ( i_alsa_get_status_returns ) );
return ( -1 );
}
case SND_PCM_STATE_PREPARED:
case SND_PCM_STATE_RUNNING:
break;
-
+
default:
- intf_ErrMsg( "Aout_alsa: Encountered unhandled condition %i!",
+ intf_ErrMsg( "aout error: unhandled condition %i",
snd_pcm_status_get_state( p_status ) );
break;
- }
+ }
- return( snd_pcm_status_get_avail(p_status) *
+ return( snd_pcm_status_get_avail(p_status) *
p_aout->p_sys->bytes_per_frame );
}
snd_pcm_uframes_t tot_frames;
snd_pcm_uframes_t frames_left;
snd_pcm_uframes_t rv;
-
+
tot_frames = i_size / p_aout->p_sys->bytes_per_frame;
frames_left = tot_frames;
while( frames_left > 0 )
- {
- rv = snd_pcm_writei( p_aout->p_sys->p_alsa_handle, buffer +
- (tot_frames - frames_left) *
+ {
+ rv = snd_pcm_writei( p_aout->p_sys->p_alsa_handle, buffer +
+ (tot_frames - frames_left) *
p_aout->p_sys->bytes_per_frame, frames_left );
if( (signed int) rv < 0 )
{
- intf_ErrMsg( "Aout_alsa: error writing to output: %s",
+ intf_ErrMsg( "aout error: failed writing to output (%s)",
snd_strerror( rv ) );
return;
}
if( i_close_returns )
{
- intf_ErrMsg( "Aout_alsa: error closing alsa device (%d): %s",
+ intf_ErrMsg( "aout error: failed closing ALSA device (%s)",
i_close_returns, snd_strerror( i_close_returns ) );
}
free( p_aout->p_sys );
-
- intf_DbgMsg( "Aout_alsa : Alsa device closed" );
+
+ intf_DbgMsg( "aout: ALSA device closed" );
}
/*****************************************************************************
p_function_list->functions.aout.pf_play = aout_Play;
p_function_list->functions.aout.pf_close = aout_Close;
}
+
# Real targets
#
-../../lib/beos.so: $(PLUGIN_CPP)
+../../plugins/beos.so: $(PLUGIN_CPP)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_BEOS)
-../../lib/beos.a: $(BUILTIN_CPP)
+../../plugins/beos.a: $(BUILTIN_CPP)
ar r $@ $^
$(RANLIB) $@
# Real targets
#
-../../lib/darwin.so: $(PLUGIN_C)
+../../plugins/darwin.so: $(PLUGIN_C)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_DARWIN)
-../../lib/darwin.a: $(BUILTIN_C)
+../../plugins/darwin.a: $(BUILTIN_C)
ar r $@ $^
$(RANLIB) $@
# Real targets
#
-../../lib/directx.so: $(PLUGIN_C)
+../../plugins/directx.so: $(PLUGIN_C)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_DIRECTX)
-../../lib/directx.a: $(BUILTIN_C)
+../../plugins/directx.a: $(BUILTIN_C)
ar r $@ $^
$(RANLIB) $@
# Real targets
#
-../../lib/downmix.so: $(PLUGIN_DOWNMIX)
+../../plugins/downmix.so: $(PLUGIN_DOWNMIX)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/downmix.a: $(BUILTIN_DOWNMIX)
+../../plugins/downmix.a: $(BUILTIN_DOWNMIX)
ar r $@ $^
$(RANLIB) $@
-../../lib/downmixsse.so: $(PLUGIN_DOWNMIXSSE)
+../../plugins/downmixsse.so: $(PLUGIN_DOWNMIXSSE)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/downmixsse.a: $(BUILTIN_DOWNMIXSSE)
+../../plugins/downmixsse.a: $(BUILTIN_DOWNMIXSSE)
ar r $@ $^
$(RANLIB) $@
-../../lib/downmix3dn.so: $(PLUGIN_DOWNMIX3DN)
+../../plugins/downmix3dn.so: $(PLUGIN_DOWNMIX3DN)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/downmix3dn.a: $(BUILTIN_DOWNMIX3DN)
+../../plugins/downmix3dn.a: $(BUILTIN_DOWNMIX3DN)
ar r $@ $^
$(RANLIB) $@
* downmix.c : AC3 downmix module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: downmix.c,v 1.2 2001/05/30 17:03:12 sam Exp $
+ * $Id: downmix.c,v 1.3 2001/07/11 02:01:04 sam Exp $
*
* Authors: Gaël Hendryckx <jimmy@via.ecp.fr>
*
*****************************************************************************/
static int downmix_Probe( probedata_t *p_data )
{
- if( TestMethod( DOWNMIX_METHOD_VAR, "downmix" ) )
+ if( TestMethod( DOWNMIX_METHOD_VAR, "downmix" )
+ || TestMethod( DOWNMIX_METHOD_VAR, "c" ) )
{
return( 999 );
}
* downmix3dn.c : accelerated 3D Now! AC3 downmix module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: downmix3dn.c,v 1.3 2001/06/03 12:47:21 sam Exp $
+ * $Id: downmix3dn.c,v 1.4 2001/07/11 02:01:04 sam Exp $
*
* Authors: Gaël Hendryckx <jimmy@via.ecp.fr>
*
return( 0 );
}
- if( TestMethod( DOWNMIX_METHOD_VAR, "downmix3dn" ) )
+ if( TestMethod( DOWNMIX_METHOD_VAR, "downmix3dn" )
+ || TestMethod( DOWNMIX_METHOD_VAR, "3dn" ) )
{
return( 999 );
}
* downmixsse.c : accelerated SSE AC3 downmix module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: downmixsse.c,v 1.3 2001/06/03 12:47:21 sam Exp $
+ * $Id: downmixsse.c,v 1.4 2001/07/11 02:01:04 sam Exp $
*
* Authors: Gaël Hendryckx <jimmy@via.ecp.fr>
*
return( 0 );
}
- if( TestMethod( DOWNMIX_METHOD_VAR, "downmixsse" ) )
+ if( TestMethod( DOWNMIX_METHOD_VAR, "downmixsse" )
+ || TestMethod( DOWNMIX_METHOD_VAR, "sse" ) )
{
return( 999 );
}
# Real targets
#
-../../lib/dsp.so: $(PLUGIN_C)
+../../plugins/dsp.so: $(PLUGIN_C)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/dsp.a: $(BUILTIN_C)
+../../plugins/dsp.a: $(BUILTIN_C)
ar r $@ $^
$(RANLIB) $@
# Real targets
#
-../../lib/null.so: $(PLUGIN_NULL)
+../../plugins/null.so: $(PLUGIN_NULL)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/null.a: $(BUILTIN_NULL)
+../../plugins/null.a: $(BUILTIN_NULL)
ar r $@ $^
$(RANLIB) $@
-../../lib/dummy.so: $(PLUGIN_DUMMY)
+../../plugins/dummy.so: $(PLUGIN_DUMMY)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/dummy.a: $(BUILTIN_DUMMY)
+../../plugins/dummy.a: $(BUILTIN_DUMMY)
ar r $@ $^
$(RANLIB) $@
#
ifeq (1,$(LOCAL_LIBDVDCSS))
-../../lib/dvd.so: libdvdcss $(PLUGIN_DVD)
+../../plugins/dvd.so: libdvdcss $(PLUGIN_DVD)
$(CC) $(PCFLAGS) -o $@ $(PLUGIN_DVD) $(PLCFLAGS) ../../lib/libdvdcss.a $(LIB_DVD)
-../../lib/dvd.a: libdvdcss $(BUILTIN_DVD)
+../../plugins/dvd.a: libdvdcss $(BUILTIN_DVD)
ar r $@ $(BUILTIN_DVD)
$(RANLIB) $@
else
-../../lib/dvd.so: $(PLUGIN_DVD)
+../../plugins/dvd.so: $(PLUGIN_DVD)
$(CC) $(PCFLAGS) -o $@ $(PLUGIN_DVD) $(PLCFLAGS) $(LIB_DVD)
-../../lib/dvd.a: $(BUILTIN_DVD)
+../../plugins/dvd.a: $(BUILTIN_DVD)
ar r $@ $(BUILTIN_DVD)
$(RANLIB) $@
endif
* -dvd_udf to find files
*****************************************************************************
* Copyright (C) 1998-2001 VideoLAN
- * $Id: input_dvd.c,v 1.78 2001/06/29 11:34:28 stef Exp $
+ * $Id: input_dvd.c,v 1.79 2001/07/11 02:01:04 sam Exp $
*
* Author: Stéphane Borel <stef@via.ecp.fr>
*
if( strlen( p_input->p_source ) > 4
&& !strncasecmp( p_input->p_source, "dvd:", 4 ) )
{
- dvdhandle = dvdcss_open( p_input->p_source + 4,
- DVDCSS_INIT_QUIET );
+ dvdhandle = dvdcss_open( p_input->p_source + 4, DVDCSS_INIT_QUIET );
}
else
{
- dvdhandle = dvdcss_open( p_input->p_source,
- DVDCSS_INIT_QUIET );
+ dvdhandle = dvdcss_open( p_input->p_source, DVDCSS_INIT_QUIET );
}
if( dvdhandle == NULL )
* CSS cracking has to be done again
*/
dvdcss_crack( p_dvd->dvdhandle,
- vmg.title_inf.p_attr[p_dvd->i_title-1].i_title_set_num,
vts.i_pos + vts.manager_inf.i_title_vob_start_sector );
/*
< p_input->stream.p_selected_area->i_size );
b_eof = b_eot && ( ( p_dvd->i_title + 1 ) >= p_input->stream.i_area_nb );
- vlc_mutex_unlock( &p_input->stream.stream_lock );
-
if( b_eof )
{
+ vlc_mutex_unlock( &p_input->stream.stream_lock );
return 1;
}
{
intf_WarnMsg( 4, "dvd info: new title" );
p_dvd->i_title++;
- vlc_mutex_lock( &p_input->stream.stream_lock );
DVDSetArea( p_input, p_input->stream.pp_areas[p_dvd->i_title] );
vlc_mutex_unlock( &p_input->stream.stream_lock );
return 0;
}
+ vlc_mutex_unlock( &p_input->stream.stream_lock );
+
if( i_read_blocks == i_block_once )
{
return 0;
# Real targets
#
-../../lib/esd.so: $(PLUGIN_C)
+../../plugins/esd.so: $(PLUGIN_C)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_ESD)
-../../lib/esd.a: $(BUILTIN_C)
+../../plugins/esd.a: $(BUILTIN_C)
ar r $@ $^
$(RANLIB) $@
# Real targets
#
-../../lib/fb.so: $(PLUGIN_C)
+../../plugins/fb.so: $(PLUGIN_C)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/fb.a: $(BUILTIN_C)
+../../plugins/fb.a: $(BUILTIN_C)
ar r $@ $^
$(RANLIB) $@
# Real targets
#
-../../lib/ggi.so: $(PLUGIN_C)
+../../plugins/ggi.so: $(PLUGIN_C)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_GGI)
-../../lib/ggi.a: $(BUILTIN_C)
+../../plugins/ggi.a: $(BUILTIN_C)
ar r $@ $^
$(RANLIB) $@
# Real targets
#
-../../lib/glide.so: $(PLUGIN_GLIDE)
+../../plugins/glide.so: $(PLUGIN_GLIDE)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_GLIDE)
-../../lib/glide.a: $(BUILTIN_GLIDE)
+../../plugins/glide.a: $(BUILTIN_GLIDE)
ar r $@ $^
$(RANLIB) $@
# Real targets
#
-../../lib/gtk.so: $(PLUGIN_GTK) $(PLUGIN_GTKCOMMON)
+../../plugins/gtk.so: $(PLUGIN_GTK) $(PLUGIN_GTKCOMMON)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_GTK)
-../../lib/gtk.a: $(BUILTIN_GTK)
+../../plugins/gtk.a: $(BUILTIN_GTK)
ar r $@ $^
$(RANLIB) $@
-../../lib/gnome.so: $(PLUGIN_GNOME) $(PLUGIN_GTKCOMMON)
+../../plugins/gnome.so: $(PLUGIN_GNOME) $(PLUGIN_GTKCOMMON)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_GNOME)
-../../lib/gnome.a: $(BUILTIN_GNOME)
+../../plugins/gnome.a: $(BUILTIN_GNOME)
ar r $@ $^
$(RANLIB) $@
# Real targets
#
-../../lib/idct.so: $(PLUGIN_IDCT) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_C)
+../../plugins/idct.so: $(PLUGIN_IDCT) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_C)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/idct.a: $(BUILTIN_IDCT)
+../../plugins/idct.a: $(BUILTIN_IDCT)
ar r $@ $^
$(RANLIB) $@
-../../lib/idctclassic.so: $(PLUGIN_IDCTCLASSIC) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_C)
+../../plugins/idctclassic.so: $(PLUGIN_IDCTCLASSIC) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_C)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/idctclassic.a: $(BUILTIN_IDCTCLASSIC)
+../../plugins/idctclassic.a: $(BUILTIN_IDCTCLASSIC)
ar r $@ $^
$(RANLIB) $@
-../../lib/idctmmx.so: $(PLUGIN_IDCTMMX) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_MMX)
+../../plugins/idctmmx.so: $(PLUGIN_IDCTMMX) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_MMX)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/idctmmx.a: $(BUILTIN_IDCTMMX)
+../../plugins/idctmmx.a: $(BUILTIN_IDCTMMX)
ar r $@ $^
$(RANLIB) $@
-../../lib/idctmmxext.so: $(PLUGIN_IDCTMMXEXT) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_MMX)
+../../plugins/idctmmxext.so: $(PLUGIN_IDCTMMXEXT) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_MMX)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/idctmmxext.a: $(BUILTIN_IDCTMMXEXT)
+../../plugins/idctmmxext.a: $(BUILTIN_IDCTMMXEXT)
ar r $@ $^
$(RANLIB) $@
-../../lib/idctaltivec.so: $(PLUGIN_IDCTALTIVEC) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_C)
+../../plugins/idctaltivec.so: $(PLUGIN_IDCTALTIVEC) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_C)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_IDCTALTIVEC)
-../../lib/idctaltivec.a: $(BUILTIN_IDCTALTIVEC)
+../../plugins/idctaltivec.a: $(BUILTIN_IDCTALTIVEC)
ar r $@ $^
$(RANLIB) $@
* idct.c : IDCT module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: idct.c,v 1.11 2001/06/03 12:47:21 sam Exp $
+ * $Id: idct.c,v 1.12 2001/07/11 02:01:04 sam Exp $
*
* Authors: Gaël Hendryckx <jimmy@via.ecp.fr>
*
*****************************************************************************/
static int idct_Probe( probedata_t *p_data )
{
- if( TestMethod( IDCT_METHOD_VAR, "idct" ) )
+ if( TestMethod( IDCT_METHOD_VAR, "idct" )
+ || TestMethod( IDCT_METHOD_VAR, "c" ))
{
return( 999 );
}
* idctaltivec.c : Altivec IDCT module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: idctaltivec.c,v 1.8 2001/06/03 12:47:21 sam Exp $
+ * $Id: idctaltivec.c,v 1.9 2001/07/11 02:01:04 sam Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
return( 0 );
}
- if( TestMethod( IDCT_METHOD_VAR, "idctaltivec" ) )
+ if( TestMethod( IDCT_METHOD_VAR, "idctaltivec" )
+ || TestMethod( IDCT_METHOD_VAR, "altivec" ) )
{
return( 999 );
}
* idctclassic.c : Classic IDCT module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: idctclassic.c,v 1.11 2001/06/03 12:47:21 sam Exp $
+ * $Id: idctclassic.c,v 1.12 2001/07/11 02:01:04 sam Exp $
*
* Authors: Gaël Hendryckx <jimmy@via.ecp.fr>
*
*****************************************************************************/
static int idct_Probe( probedata_t *p_data )
{
- if( TestMethod( IDCT_METHOD_VAR, "idctclassic" ) )
+ if( TestMethod( IDCT_METHOD_VAR, "idctclassic" )
+ || TestMethod( IDCT_METHOD_VAR, "classic" ) )
{
return( 999 );
}
* idctmmx.c : MMX IDCT module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: idctmmx.c,v 1.13 2001/06/03 12:47:21 sam Exp $
+ * $Id: idctmmx.c,v 1.14 2001/07/11 02:01:04 sam Exp $
*
* Authors: Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
* Michel Lespinasse <walken@zoy.org>
return( 0 );
}
- if( TestMethod( IDCT_METHOD_VAR, "idctmmx" ) )
+ if( TestMethod( IDCT_METHOD_VAR, "idctmmx" )
+ || TestMethod( IDCT_METHOD_VAR, "mmx" ) )
{
return( 999 );
}
* idctmmxext.c : MMX EXT IDCT module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: idctmmxext.c,v 1.10 2001/06/03 12:47:21 sam Exp $
+ * $Id: idctmmxext.c,v 1.11 2001/07/11 02:01:04 sam Exp $
*
* Authors: Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
* Michel Lespinasse <walken@zoy.org>
return( 0 );
}
- if( TestMethod( IDCT_METHOD_VAR, "idctmmxext" ) )
+ if( TestMethod( IDCT_METHOD_VAR, "idctmmxext" )
+ || TestMethod( IDCT_METHOD_VAR, "mmxext" ) )
{
return( 999 );
}
# Real targets
#
-../../lib/imdct.so: $(PLUGIN_IMDCT) $(PLUGIN_IMDCTCOMMON)
+../../plugins/imdct.so: $(PLUGIN_IMDCT) $(PLUGIN_IMDCTCOMMON)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/imdct.a: $(BUILTIN_IMDCT)
+../../plugins/imdct.a: $(BUILTIN_IMDCT)
ar r $@ $^
$(RANLIB) $@
-../../lib/imdctsse.so: $(PLUGIN_IMDCTSSE) $(PLUGIN_IMDCTCOMMON)
+../../plugins/imdctsse.so: $(PLUGIN_IMDCTSSE) $(PLUGIN_IMDCTCOMMON)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/imdctsse.a: $(BUILTIN_IMDCTSSE)
+../../plugins/imdctsse.a: $(BUILTIN_IMDCTSSE)
ar r $@ $^
$(RANLIB) $@
-../../lib/imdct3dn.so: $(PLUGIN_IMDCT3DN) $(PLUGIN_IMDCTCOMMON)
+../../plugins/imdct3dn.so: $(PLUGIN_IMDCT3DN) $(PLUGIN_IMDCTCOMMON)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/imdct3dn.a: $(BUILTIN_IMDCT3DN)
+../../plugins/imdct3dn.a: $(BUILTIN_IMDCT3DN)
ar r $@ $^
$(RANLIB) $@
* imdct.c : IMDCT module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: imdct.c,v 1.3 2001/06/03 12:47:21 sam Exp $
+ * $Id: imdct.c,v 1.4 2001/07/11 02:01:04 sam Exp $
*
* Authors: Gaël Hendryckx <jimmy@via.ecp.fr>
*
*****************************************************************************/
static int imdct_Probe( probedata_t *p_data )
{
- if( TestMethod( IMDCT_METHOD_VAR, "imdct" ) )
+ if( TestMethod( IMDCT_METHOD_VAR, "imdct" )
+ || TestMethod( IMDCT_METHOD_VAR, "c" ) )
{
return( 999 );
}
* imdct3dn.c : accelerated 3D Now! IMDCT module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: imdct3dn.c,v 1.5 2001/06/12 00:30:41 reno Exp $
+ * $Id: imdct3dn.c,v 1.6 2001/07/11 02:01:04 sam Exp $
*
* Authors: Gaël Hendryckx <jimmy@via.ecp.fr>
*
return( 0 );
}
- if( TestMethod( IMDCT_METHOD_VAR, "imdct3dn" ) )
+ if( TestMethod( IMDCT_METHOD_VAR, "imdct3dn" )
+ || TestMethod( IMDCT_METHOD_VAR, "3dn" ) )
{
return( 999 );
}
* imdctsse.c : accelerated SSE IMDCT module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: imdctsse.c,v 1.5 2001/06/12 00:30:41 reno Exp $
+ * $Id: imdctsse.c,v 1.6 2001/07/11 02:01:04 sam Exp $
*
* Authors: Gaël Hendryckx <jimmy@via.ecp.fr>
*
return( 0 );
}
- if( TestMethod( IMDCT_METHOD_VAR, "imdctsse" ) )
+ if( TestMethod( IMDCT_METHOD_VAR, "imdctsse" )
+ || TestMethod( IMDCT_METHOD_VAR, "sse" ) )
{
return( 999 );
}
# Objects
#
+MOCFILES = kinterfacemain.moc.cpp \
+ kvlcslider.moc.cpp \
+ kdiskdialog.moc.cpp \
+ knetdialog.moc.cpp \
+ ktitlemenu.moc.cpp
+
PLUGIN_KDE = kde.o \
kdeinterface.o \
kinterfacemain.o \
knetdialog.o \
ktitlemenu.o
-PLUGIN_KDE_MOC = kinterfacemain.moc.o \
- kvlcslider.moc.o \
- kdiskdialog.moc.o \
- knetdialog.moc.o \
- ktitlemenu.moc.o
+PLUGIN_KDE_MOC = $(MOCFILES:%.cpp=%.o)
-#BUILTIN_KDE = $(PLUGIN_KDE:%.o=BUILTIN_%.o)
-#BUILTIN_KDE_MOC = $(PLUGIN_KDE_MOC:%.o=BUILTIN_%.o)
+BUILTIN_KDE = $(PLUGIN_KDE:%.o=BUILTIN_%.o)
+BUILTIN_KDE_MOC = $(MOCFILES:%.cpp=BUILTIN_%.o)
ALL_OBJ = $(PLUGIN_KDE) $(PLUGIN_KDE_MOC) $(BUILTIN_KDE) $(BUILTIN_KDE_MOC)
include ../../Makefile.modules
+$(MOCFILES): %.moc.cpp: %.h
+ $(MOC) $< -o $@
+
$(PLUGIN_KDE): %.o: .dep/%.dpp
$(PLUGIN_KDE): %.o: %.cpp
- $(CC) $(CFLAGS) $(PCFLAGS) -I/usr/include/kde -I/usr/include/qt -c -o $@ $<
+ $(CC) $(CFLAGS) $(PCFLAGS) -I/usr/include/kde -I/usr/include/qt -DPLUGIN -DMODULE_NAME=kde -c -o $@ $<
$(PLUGIN_KDE_MOC): %.o: .dep/%.dpp
$(PLUGIN_KDE_MOC): %.o: %.cpp
- $(CC) $(CFLAGS) $(PCFLAGS) -I/usr/include/kde -I/usr/include/qt -c -o $@ $<
-$(PLUGIN_KDE_MOC:%.moc.o=%.moc.cpp): %.moc.cpp: %.h
- moc $< -o $@
+ $(CC) $(CFLAGS) $(PCFLAGS) -I/usr/include/kde -I/usr/include/qt -DPLUGIN -DMODULE_NAME=kde -c -o $@ $<
-#$(BUILTIN_KDE): BUILTIN_%.o: .dep/%.dpp
-#$(BUILTIN_KDE): BUILTIN_%.o: %.cpp
-# $(CC) $(CFLAGS) -DBUILTIN -I/usr/include/kde -I/usr/include/qt -c -o $@ $<
+$(BUILTIN_KDE): BUILTIN_%.o: .dep/%.dpp
+$(BUILTIN_KDE): BUILTIN_%.o: %.cpp
+ $(CC) $(CFLAGS) -DBUILTIN -I/usr/include/kde -I/usr/include/qt -DBUILTIN -DMODULE_NAME=kde -c -o $@ $<
-#$(BUILTIN_KDE_MOC): BUILTIN_%.o: dep/%.dpp
-#$(BUILTIN_KDE_MOC): BUILTIN_%.o: %.cpp
-# $(CC) $(CFLAGS) -DBUILTIN -I/usr/include/kde -I/usr/include/qt -c -o $@ $<
-#$(BUILTIN_KDE_MOC: %.moc.o=%.cpp): %.moc.cpp: %.h
-# $(MOC) $< -o $@
+$(BUILTIN_KDE_MOC): BUILTIN_%.o: .dep/%.dpp
+$(BUILTIN_KDE_MOC): BUILTIN_%.o: %.cpp
+ $(CC) $(CFLAGS) -DBUILTIN -I/usr/include/kde -I/usr/include/qt -DBUILTIN -DMODULE_NAME=kde -c -o $@ $<
#
# Real targets
#
-../../lib/kde.so: $(PLUGIN_KDE) $(PLUGIN_KDE_MOC)
- $(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_KDE) -lkfile
+../../plugins/kde.so: $(PLUGIN_KDE) $(PLUGIN_KDE_MOC)
+ $(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_KDE)
-#../../lib/kde.a: $(BUILTIN_KDE)
-# ar r $@ $^
-# $(RANLIB) $@
+../../plugins/kde.a: $(BUILTIN_KDE) $(BUILTIN_KDE_MOC)
+ ar r $@ $^
+ $(RANLIB) $@
#include "threads.h"
#include "mtime.h"
#include "tests.h"
-#include "modules.h"
#include "stream_control.h"
#include "input_ext-intf.h"
#include "interface.h"
#include "main.h"
+
+#include "modules.h"
+#include "modules_export.h"
}
-#endif /* _INTF_PLUGIN_H_ */
\ No newline at end of file
+#endif /* _INTF_PLUGIN_H_ */
-/***************************************************************************
- kde.cpp - description
- -------------------
- begin : Sun Mar 25 2001
- copyright : (C) 2001 by andres
- email : dae@chez.com
- ***************************************************************************/
-#define MODULE_NAME kde
+/*****************************************************************************
+ * kde.cpp : KDE plugin for vlc
+ *****************************************************************************
+ * Copyright (C) 2001 VideoLAN
+ * $Id: kde.cpp,v 1.3 2001/07/11 02:01:04 sam Exp $
+ *
+ * Authors: Andres <dae@chez.com> Sun Mar 25 2001
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
+ *****************************************************************************/
+#define MODULE_NAME kde
#include "intf_plugin.h"
extern "C"
MODULE_DEACTIVATE_STOP
} /* extern "C" */
+
# Real targets
#
-../../lib/macosx.so: $(PLUGIN_MACOSX)
+../../plugins/macosx.so: $(PLUGIN_MACOSX)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_MACOSX)
-../../lib/macosx.a: $(BUILTIN_MACOSX)
+../../plugins/macosx.a: $(BUILTIN_MACOSX)
ar r $@ $^
$(RANLIB) $@
# Real targets
#
-../../lib/mga.so: $(PLUGIN_C)
+../../plugins/mga.so: $(PLUGIN_C)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/mga.a: $(BUILTIN_C)
+../../plugins/mga.a: $(BUILTIN_C)
ar r $@ $^
$(RANLIB) $@
# Real targets
#
-../../lib/motion.so: $(PLUGIN_MOTION) $(PLUGIN_MOTIONCOMMON)
+../../plugins/motion.so: $(PLUGIN_MOTION) $(PLUGIN_MOTIONCOMMON)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/motion.a: $(BUILTIN_MOTION)
+../../plugins/motion.a: $(BUILTIN_MOTION)
ar r $@ $^
$(RANLIB) $@
-../../lib/motionclassic.so: $(PLUGIN_MOTIONCLASSIC) $(PLUGIN_MOTIONCOMMON)
+../../plugins/motionclassic.so: $(PLUGIN_MOTIONCLASSIC) $(PLUGIN_MOTIONCOMMON)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/motionclassic.a: $(BUILTIN_MOTIONCLASSIC)
+../../plugins/motionclassic.a: $(BUILTIN_MOTIONCLASSIC)
ar r $@ $^
$(RANLIB) $@
-../../lib/motionmmx.so: $(PLUGIN_MOTIONMMX) $(PLUGIN_MOTIONCOMMON)
+../../plugins/motionmmx.so: $(PLUGIN_MOTIONMMX) $(PLUGIN_MOTIONCOMMON)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/motionmmx.a: $(BUILTIN_MOTIONMMX)
+../../plugins/motionmmx.a: $(BUILTIN_MOTIONMMX)
ar r $@ $^
$(RANLIB) $@
-../../lib/motionmmxext.so: $(PLUGIN_MOTIONMMXEXT) $(PLUGIN_MOTIONCOMMON)
+../../plugins/motionmmxext.so: $(PLUGIN_MOTIONMMXEXT) $(PLUGIN_MOTIONCOMMON)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/motionmmxext.a: $(BUILTIN_MOTIONMMXEXT)
+../../plugins/motionmmxext.a: $(BUILTIN_MOTIONMMXEXT)
ar r $@ $^
$(RANLIB) $@
* motion.c : C motion compensation module for vlc
*****************************************************************************
* Copyright (C) 2000 VideoLAN
- * $Id: motion.c,v 1.7 2001/06/07 15:27:44 sam Exp $
+ * $Id: motion.c,v 1.8 2001/07/11 02:01:05 sam Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
*****************************************************************************/
int _M( motion_Probe )( probedata_t *p_data )
{
- if( TestMethod( MOTION_METHOD_VAR, "motion" ) )
+ if( TestMethod( MOTION_METHOD_VAR, "motion" )
+ || TestMethod( MOTION_METHOD_VAR, "c" ) )
{
return( 999 );
}
* motionmmx.c : MMX motion compensation module for vlc
*****************************************************************************
* Copyright (C) 2000 VideoLAN
- * $Id: motionmmx.c,v 1.8 2001/06/07 15:27:44 sam Exp $
+ * $Id: motionmmx.c,v 1.9 2001/07/11 02:01:05 sam Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
return( 0 );
}
- if( TestMethod( MOTION_METHOD_VAR, "motionmmx" ) )
+ if( TestMethod( MOTION_METHOD_VAR, "motionmmx" )
+ || TestMethod( MOTION_METHOD_VAR, "mmx" ) )
{
return( 999 );
}
* motionmmxext.c : MMX EXT motion compensation module for vlc
*****************************************************************************
* Copyright (C) 2000 VideoLAN
- * $Id: motionmmxext.c,v 1.8 2001/06/07 15:27:44 sam Exp $
+ * $Id: motionmmxext.c,v 1.9 2001/07/11 02:01:05 sam Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
return( 0 );
}
- if( TestMethod( MOTION_METHOD_VAR, "motionmmxext" ) )
+ if( TestMethod( MOTION_METHOD_VAR, "motionmmxext" )
+ || TestMethod( MOTION_METHOD_VAR, "mmxext" ) )
{
return( 999 );
}
# Real targets
#
-../../lib/es.so: $(PLUGIN_ES)
+../../plugins/es.so: $(PLUGIN_ES)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/es.a: $(BUILTIN_ES)
+../../plugins/es.a: $(BUILTIN_ES)
ar r $@ $^
$(RANLIB) $@
-../../lib/ps.so: $(PLUGIN_PS)
+../../plugins/ps.so: $(PLUGIN_PS)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/ps.a: $(BUILTIN_PS)
+../../plugins/ps.a: $(BUILTIN_PS)
ar r $@ $^
$(RANLIB) $@
-../../lib/ts.so: $(PLUGIN_TS)
+../../plugins/ts.so: $(PLUGIN_TS)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_TS)
-../../lib/ts.a: $(BUILTIN_TS)
+../../plugins/ts.a: $(BUILTIN_TS)
ar r $@ $^
$(RANLIB) $@
$(PLUGIN_QT): %.o: .dep/%.dpp
$(PLUGIN_QT): %.o: %.moc
- $(CC) $(CFLAGS) -DPLUGIN $(PCFLAGS) -I/usr/include/qt -I${QTDIR}/include -c -o $@ $(<:%.moc=%.cpp)
+ $(CC) $(CFLAGS) -DPLUGIN $(PCFLAGS) -I/usr/include/qt -I${QTDIR}/include -DPLUGIN -DMODULE_NAME=qt -c -o $@ $(<:%.moc=%.cpp)
$(PLUGIN_QT:%.o=%.moc): %.moc: %.cpp
grep -q Q_OBJECT $< && $(MOC) -i $< -o $@ || true
$(BUILTIN_QT): BUILTIN_%.o: .dep/%.dpp
$(BUILTIN_QT): %.o: %.moc
- $(CC) $(CFLAGS) -DBUILTIN -I/usr/include/qt -I${QTDIR}/include -c -o $@ $(<:BUILTIN_%.moc=%.cpp)
+ $(CC) $(CFLAGS) -DBUILTIN -I/usr/include/qt -I${QTDIR}/include -DBUILTIN -DMODULE_NAME=qt -c -o $@ $(<:BUILTIN_%.moc=%.cpp)
$(BUILTIN_QT:%.o=%.moc): BUILTIN_%.moc: %.cpp
grep -q Q_OBJECT $< && $(MOC) -i $< -o $@ || true
# Real targets
#
-../../lib/qt.so: $(PLUGIN_QT)
+../../plugins/qt.so: $(PLUGIN_QT)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_QT)
-../../lib/qt.a: $(BUILTIN_QT)
+../../plugins/qt.a: $(BUILTIN_QT)
ar r $@ $^
$(RANLIB) $@
# Real targets
#
-../../lib/sdl.so: $(PLUGIN_SDL)
+../../plugins/sdl.so: $(PLUGIN_SDL)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_SDL)
-../../lib/sdl.a: $(BUILTIN_SDL)
+../../plugins/sdl.a: $(BUILTIN_SDL)
ar r $@ $^
$(RANLIB) $@
* vout_sdl.c: SDL video output display method
*****************************************************************************
* Copyright (C) 1998, 1999, 2000 VideoLAN
- * $Id: vout_sdl.c,v 1.56 2001/07/06 08:43:31 sam Exp $
+ * $Id: vout_sdl.c,v 1.57 2001/07/11 02:01:05 sam Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
* Pierre Baillet <oct@zoy.org>
p_vout->p_rendered_pic->i_width,
p_vout->p_rendered_pic->i_height,
SDL_YV12_OVERLAY,
- p_vout->p_sys->p_display
- );
+ p_vout->p_sys->p_display );
+
+ if( p_vout->p_sys->p_overlay != NULL )
+ {
+ intf_WarnMsg( 2, "vout: YUV acceleration %s",
+ p_vout->p_sys->p_overlay->hw_overlay
+ ? "activated" : "unavailable !" );
+ }
}
if( p_vout->p_sys->p_overlay == NULL )
}
else
{
-
- intf_WarnMsg( 2, "vout: YUV acceleration %s",
- p_vout->p_sys->p_overlay->hw_overlay
- ? "activated" : "unavailable !" );
-
- SDL_LockYUVOverlay(p_vout->p_sys->p_overlay);
+ SDL_LockYUVOverlay( p_vout->p_sys->p_overlay );
/* copy the data into video buffers */
/* Y first */
- memcpy(p_vout->p_sys->p_overlay->pixels[0],
- p_vout->p_rendered_pic->p_y,
- p_vout->p_sys->p_overlay->h *
- p_vout->p_sys->p_overlay->pitches[0]);
+ memcpy( p_vout->p_sys->p_overlay->pixels[0],
+ p_vout->p_rendered_pic->p_y,
+ p_vout->p_sys->p_overlay->h *
+ p_vout->p_sys->p_overlay->pitches[0] );
/* then V */
- memcpy(p_vout->p_sys->p_overlay->pixels[1],
- p_vout->p_rendered_pic->p_v,
- p_vout->p_sys->p_overlay->h *
- p_vout->p_sys->p_overlay->pitches[1] / 2);
+ memcpy( p_vout->p_sys->p_overlay->pixels[1],
+ p_vout->p_rendered_pic->p_v,
+ p_vout->p_sys->p_overlay->h *
+ p_vout->p_sys->p_overlay->pitches[1] / 2 );
/* and U */
- memcpy(p_vout->p_sys->p_overlay->pixels[2],
- p_vout->p_rendered_pic->p_u,
- p_vout->p_sys->p_overlay->h *
- p_vout->p_sys->p_overlay->pitches[2] / 2);
+ memcpy( p_vout->p_sys->p_overlay->pixels[2],
+ p_vout->p_rendered_pic->p_u,
+ p_vout->p_sys->p_overlay->h *
+ p_vout->p_sys->p_overlay->pitches[2] / 2 );
#define BUFFER (&p_vout->p_buffer[p_vout->i_buffer_index])
disp.w = BUFFER->i_pic_width;
# Real targets
#
-../../lib/ncurses.so: $(PLUGIN_NCURSES)
+../../plugins/ncurses.so: $(PLUGIN_NCURSES)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_NCURSES)
-../../lib/ncurses.a: $(BUILTIN_NCURSES)
+../../plugins/ncurses.a: $(BUILTIN_NCURSES)
ar r $@ $^
$(RANLIB) $@
-../../lib/rc.so: $(PLUGIN_RC)
+../../plugins/rc.so: $(PLUGIN_RC)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/rc.a: $(BUILTIN_RC)
+../../plugins/rc.a: $(BUILTIN_RC)
ar r $@ $^
$(RANLIB) $@
# Real targets
#
-../../lib/x11.so: $(PLUGIN_X11)
+../../plugins/x11.so: $(PLUGIN_X11)
ifeq ($(SYS),nto-qnx)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_X11) -lsocket
else
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_X11)
endif
-../../lib/x11.a: $(BUILTIN_X11)
+../../plugins/x11.a: $(BUILTIN_X11)
ar r $@ $^
$(RANLIB) $@
-../../lib/xvideo.so: $(PLUGIN_XVIDEO)
+../../plugins/xvideo.so: $(PLUGIN_XVIDEO)
ifeq ($(SYS),nto-qnx)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_XVIDEO) -lsocket
else
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_XVIDEO)
endif
-../../lib/xvideo.a: $(BUILTIN_XVIDEO)
+../../plugins/xvideo.a: $(BUILTIN_XVIDEO)
ar r $@ $^
$(RANLIB) $@
# Real targets
#
-../../lib/yuv.so: $(PLUGIN_YUV)
+../../plugins/yuv.so: $(PLUGIN_YUV)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_YUV)
-../../lib/yuv.a: $(BUILTIN_YUV)
+../../plugins/yuv.a: $(BUILTIN_YUV)
ar r $@ $^
$(RANLIB) $@
-../../lib/yuvmmx.so: $(PLUGIN_YUVMMX)
+../../plugins/yuvmmx.so: $(PLUGIN_YUVMMX)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
-../../lib/yuvmmx.a: $(BUILTIN_YUVMMX)
+../../plugins/yuvmmx.a: $(BUILTIN_YUVMMX)
ar r $@ $^
$(RANLIB) $@
* case by optimized functions.
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: video_yuv.c,v 1.14 2001/06/03 12:47:21 sam Exp $
+ * $Id: video_yuv.c,v 1.15 2001/07/11 02:01:05 sam Exp $
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
*
*****************************************************************************/
static int yuv_Probe( probedata_t *p_data )
{
- if( TestMethod( YUV_METHOD_VAR, "yuv" ) )
+ if( TestMethod( YUV_METHOD_VAR, "yuv" )
+ || TestMethod( YUV_METHOD_VAR, "c" ) )
{
return( 999 );
}
* Provides functions to perform the YUV conversion.
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: video_yuvmmx.c,v 1.10 2001/06/03 12:47:21 sam Exp $
+ * $Id: video_yuvmmx.c,v 1.11 2001/07/11 02:01:05 sam Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
return( 0 );
}
- if( TestMethod( YUV_METHOD_VAR, "yuvmmx" ) )
+ if( TestMethod( YUV_METHOD_VAR, "yuvmmx" )
+ || TestMethod( YUV_METHOD_VAR, "mmx" ) )
{
return( 999 );
}
* modules.c : Built-in and plugin modules management functions
*****************************************************************************
* Copyright (C) 2001 VideoLAN
- * $Id: modules.c,v 1.37 2001/06/25 11:34:08 sam Exp $
+ * $Id: modules.c,v 1.38 2001/07/11 02:01:05 sam Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
* Ethan C. Baldridge <BaldridgeE@cadmus.com>
void module_InitBank( void )
{
#ifdef HAVE_DYNAMIC_PLUGINS
- static char * path[] = { ".", "lib", PLUGIN_PATH, NULL, NULL };
+ static char * path[] = { ".", "plugins", PLUGIN_PATH, NULL, NULL };
char ** ppsz_path = path;
char * psz_fullpath;
}
else
{
- intf_WarnMsg( 1, "module: hiding unused plugin module `%s'",
+ intf_WarnMsg( 3, "module: hiding unused plugin module `%s'",
p_module->psz_name );
HideModule( p_module );
p_module_bank->first = p_module;
/* Immediate message so that a slow module doesn't make the user wait */
- intf_WarnMsgImm( 2, "module: plugin module `%s', %s",
+ intf_WarnMsgImm( 2, "module: new plugin module `%s', %s",
p_module->psz_name, p_module->psz_longname );
return( 0 );
p_module_bank->first = p_module;
/* Immediate message so that a slow module doesn't make the user wait */
- intf_WarnMsgImm( 2, "module: builtin module `%s', %s",
+ intf_WarnMsgImm( 2, "module: new builtin module `%s', %s",
p_module->psz_name, p_module->psz_longname );
return( 0 );
* thread, and destroy a previously oppened video output thread.
*****************************************************************************
* Copyright (C) 2000 VideoLAN
- * $Id: video_output.c,v 1.133 2001/07/10 06:07:53 gbazin Exp $
+ * $Id: video_output.c,v 1.134 2001/07/11 02:01:05 sam Exp $
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
*
p_vout->b_fullscreen = main_GetIntVariable( VOUT_FULLSCREEN_VAR,
VOUT_FULLSCREEN_DEFAULT );
- intf_WarnMsg( 3, "wished configuration: %dx%d, %d/%d bpp (%d Bpl)",
+ intf_WarnMsg( 3, "vout info: asking for %dx%d, %d/%d bpp (%d Bpl)",
p_vout->i_width, p_vout->i_height, p_vout->i_screen_depth,
p_vout->i_bytes_per_pixel * 8, p_vout->i_bytes_per_line );
p_vout->i_width, p_vout->i_height, p_vout->i_screen_depth,
p_vout->i_bytes_per_pixel * 8 );
- intf_WarnMsg( 3, "actual configuration: %dx%d, %d/%d bpp (%d Bpl), "
+ intf_WarnMsg( 3, "vout info: got %dx%d, %d/%d bpp (%d Bpl), "
"masks: 0x%x/0x%x/0x%x",
p_vout->i_width, p_vout->i_height, p_vout->i_screen_depth,
p_vout->i_bytes_per_pixel * 8, p_vout->i_bytes_per_line,
p_vout->i_pictures--;
}
intf_WarnMsg( 1,
- "warning: late picture skipped (%p)", p_pic );
+ "vout warning: late picture skipped (%p)", p_pic );
vlc_mutex_unlock( &p_vout->picture_lock );
continue;
* vpar_synchro.c : frame dropping routines
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: vpar_synchro.c,v 1.90 2001/05/07 03:14:10 stef Exp $
+ * $Id: vpar_synchro.c,v 1.91 2001/07/11 02:01:05 sam Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Samuel Hocevar <sam@via.ecp.fr>
{
case I_CODING_TYPE:
if( p_vpar->synchro.i_eta_p
- && p_vpar->synchro.i_eta_p != p_vpar->synchro.i_n_p )
+ && p_vpar->synchro.i_eta_p != p_vpar->synchro.i_n_p )
{
- intf_WarnMsg( 3, "Stream periodicity changed from P[%d] to P[%d]",
+ intf_WarnMsg( 3, "vpar info: stream periodicity changed "
+ "from P[%d] to P[%d]",
p_vpar->synchro.i_n_p, p_vpar->synchro.i_eta_p );
p_vpar->synchro.i_n_p = p_vpar->synchro.i_eta_p;
}
case P_CODING_TYPE:
p_vpar->synchro.i_eta_p++;
if( p_vpar->synchro.i_eta_b
- && p_vpar->synchro.i_eta_b != p_vpar->synchro.i_n_b )
+ && p_vpar->synchro.i_eta_b != p_vpar->synchro.i_n_b )
{
- intf_WarnMsg( 3, "Stream periodicity changed from B[%d] to B[%d]",
+ intf_WarnMsg( 3, "vpar info: stream periodicity changed "
+ "from B[%d] to B[%d]",
p_vpar->synchro.i_n_b, p_vpar->synchro.i_eta_b );
p_vpar->synchro.i_n_b = p_vpar->synchro.i_eta_b;
}