Commit a50a0a25 authored by Sam Hocevar's avatar Sam Hocevar

  * libdvdcss enhancements by Billy Biggs <vektor@dumbterm.net>. This breaks
    vlc's DVD input (looks like decoders are expecting data too early and
    DVD input can't cope with it due to decryption). Needs to be investigated.
  * Plugins are now compiled in plugins/* and libraries in lib/*.
  * The KDE UI compiles again but does not work yet.
  * ALSA plugin message corrections.
  * Calculation modules can now be calledwith a shorter name
    (eg. '--downmix mmx' instead of '--downmix downmixmmx').
  * Fixed insane verbosity of the SDL plugin.
parent 96ab9e69
......@@ -21,9 +21,14 @@ D: directory browsing code in modules.c
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: Stphane Borel
E: stef@via.ecp.fr
C: stef
......
......@@ -11,12 +11,12 @@
#
# 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
......@@ -83,10 +83,10 @@ CPP_DEP := $(CPP_OBJ:%.o=.dep/%.dpp)
# 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
......@@ -104,6 +104,7 @@ all: vlc ${ALIASES} plugins vlc.app
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
......@@ -144,7 +145,7 @@ endif
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:
......@@ -270,7 +271,7 @@ ifneq (,$(findstring darwin,$(SYS)))
$(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
......@@ -343,14 +344,14 @@ 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
......
......@@ -72,6 +72,7 @@ LIB_GLIDE = @LIB_GLIDE@
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@
......
......@@ -4208,7 +4208,11 @@ fi
# 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
......@@ -4233,7 +4237,7 @@ if test x$enable_gtk != xno; then
# 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
......@@ -4293,17 +4297,17 @@ if test x$enable_x11 != xno; then
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*
......@@ -4355,17 +4359,17 @@ if test x$enable_xvideo != xno; then
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*
......@@ -4403,17 +4407,17 @@ if test "${enable_alsa+set}" = set; then
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*
......@@ -4430,7 +4434,7 @@ fi
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
......@@ -4438,14 +4442,14 @@ else
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
......@@ -4526,6 +4530,7 @@ fi
trap '' 1 2 15
......@@ -4708,6 +4713,7 @@ s%@LIB_GLIDE@%$LIB_GLIDE%g
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
......
......@@ -531,7 +531,11 @@ dnl KDE module
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
......@@ -650,6 +654,7 @@ AC_SUBST(LIB_GLIDE)
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)
......
......@@ -2,7 +2,7 @@
* 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: Stphane Borel <stef@via.ecp.fr>
*
......@@ -56,7 +56,7 @@
#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 );
......@@ -94,7 +94,7 @@ int CSSInit( dvdcss_handle dvdcss )
{
#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;
......@@ -143,13 +143,13 @@ int CSSInit( dvdcss_handle dvdcss )
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 */
......@@ -169,16 +169,16 @@ int CSSInit( dvdcss_handle dvdcss )
/* 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 );
......@@ -203,17 +203,17 @@ int CSSInit( dvdcss_handle dvdcss )
/* 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 */
......@@ -225,14 +225,14 @@ int CSSInit( dvdcss_handle dvdcss )
_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" );
......@@ -267,15 +267,9 @@ fprintf( stderr, "DISK KEY: %02x %02x %02x %02x %02x\n", p_buffer[0], p_buffer[1
/* 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 ) )
......@@ -305,7 +299,7 @@ fprintf( stderr, "DISK KEY: %02x %02x %02x %02x %02x\n", p_buffer[0], p_buffer[1
*****************************************************************************
* 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
/*
......@@ -313,9 +307,8 @@ int CSSGetKey( dvdcss_handle dvdcss )
* 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;
......@@ -325,21 +318,19 @@ int CSSGetKey( dvdcss_handle dvdcss )
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 {
do
{
i_pos = dvdcss_seek( dvdcss, i_pos );
i_blocks_read = dvdcss_read( dvdcss, pi_buf, 1, DVDCSS_NOFLAGS );
i_blocks_read = dvdcss_read( dvdcss, p_buf, 1, DVDCSS_NOFLAGS );
/* PES_scrambling_control */
if( pi_buf[0x14] & 0x30 )
if( p_buf[0x14] & 0x30 )
{
b_encrypted = 1;
i_best_plen = 0;
......@@ -347,8 +338,9 @@ int CSSGetKey( dvdcss_handle dvdcss )
for( i = 2 ; i < 0x30 ; i++ )
{
for( j = i+1 ; ( j < 0x80 ) &&
( pi_buf[0x7F - (j%i)] == pi_buf[0x7F-j] ) ; j++ );
for( j = i+1 ;
j < 0x80 && ( p_buf[0x7F - (j%i)] == p_buf[0x7F-j] );
j++ );
{
if( j > i_best_plen )
{
......@@ -360,28 +352,28 @@ int CSSGetKey( dvdcss_handle dvdcss )
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 );
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);
if( b_stop_scanning)
} while( i_blocks_read == 0x1 && !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;
}
......@@ -400,38 +392,38 @@ int CSSGetKey( dvdcss_handle dvdcss )
* 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;
}
}
......@@ -491,16 +483,16 @@ static int CSSGetASF( dvdcss_handle dvdcss )
* 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,
......@@ -510,19 +502,19 @@ static void CSSCryptKey( int i_key_type, int i_varient,
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;
......@@ -538,10 +530,10 @@ static void CSSCryptKey( int i_key_type, int i_varient,
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
......@@ -562,7 +554,7 @@ static void CSSCryptKey( int i_key_type, int i_varient,
*/
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];
}
/*
......@@ -592,11 +584,11 @@ static void CSSCryptKey( int i_key_type, int i_varient,
* 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
......@@ -617,74 +609,74 @@ static void CSSCryptKey( int i_key_type, int i_varient,
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;
......@@ -701,7 +693,7 @@ static int CSSCracker( int i_start,
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;
......@@ -711,7 +703,7 @@ static int CSSCracker( int i_start,
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++ )
......@@ -725,12 +717,12 @@ static int CSSCracker( int i_start,
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;
......@@ -741,7 +733,7 @@ static int CSSCracker( int i_start,
}
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;
......@@ -752,16 +744,16 @@ static int CSSCracker( int i_start,
/* 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;
}
......
......@@ -2,7 +2,7 @@
* 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: Stphane Borel <stef@via.ecp.fr>
*
......@@ -32,27 +32,25 @@ typedef u8 dvd_key_t[KEY_SIZE];
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;
/*****************************************************************************
......@@ -62,6 +60,6 @@ struct css_s;
int CSSTest ( dvdcss_handle );
int CSSInit ( dvdcss_handle );
int CSSGetKey ( dvdcss_handle );
int CSSGetKey ( dvdcss_handle, int, dvd_key_t );
int CSSDescrambleSector ( u8 * , u8 * );
......@@ -2,7 +2,7 @@
* 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: Stphane Borel <stef@via.ecp.fr>
*
......@@ -29,7 +29,7 @@
* 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,
......@@ -65,7 +65,7 @@ static u8 pi_css_tab1[ 256 ] =
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,
......@@ -101,7 +101,7 @@ static u8 pi_css_tab2[ 256 ] =
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,
......@@ -169,7 +169,7 @@ static u8 pi_css_tab3[ 512 ] =
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,
......@@ -205,7 +205,7 @@ static u8 pi_css_tab4[ 256 ] =
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,
......@@ -241,7 +241,7 @@ static u8 pi_css_tab5[ 256 ] =
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,
......@@ -277,7 +277,7 @@ static u8 pi_crypt_tab0[ 256 ] =
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,
......@@ -313,7 +313,7 @@ static u8 pi_crypt_tab1[ 256 ] =
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,
......@@ -349,7 +349,7 @@ static u8 pi_crypt_tab2[ 256 ] =
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,
......
......@@ -2,7 +2,7 @@
* 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: Stphane Borel <stef@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
......@@ -94,6 +94,7 @@ extern dvdcss_handle dvdcss_open ( char *psz_target, int i_flags )
}
/* 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";
......@@ -151,8 +152,12 @@ extern int dvdcss_seek ( dvdcss_handle dvdcss, int i_blocks )
/*****************************************************************************
* 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 )
......@@ -160,11 +165,23 @@ extern int dvdcss_crack ( dvdcss_handle dvdcss, int i_title, int i_block )
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 )
{
......@@ -177,6 +194,27 @@ extern int dvdcss_crack ( dvdcss_handle dvdcss, int i_title, int i_block )
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;
}
......@@ -187,26 +225,42 @@ extern int dvdcss_read ( dvdcss_handle dvdcss, void *p_buffer,
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 )
{
CSSDescrambleSector( dvdcss->css.pi_title_key, p_buffer );
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( 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;
}
/*****************************************************************************
......@@ -217,24 +271,42 @@ extern int dvdcss_readv ( dvdcss_handle dvdcss, void *p_iovec,
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 )
......@@ -249,16 +321,14 @@ extern int dvdcss_readv ( dvdcss_handle dvdcss, void *p_iovec,
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
}
......@@ -267,8 +337,18 @@ extern int dvdcss_readv ( dvdcss_handle dvdcss, void *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 )
......@@ -344,7 +424,6 @@ static int _dvdcss_close ( dvdcss_handle dvdcss )
static int _dvdcss_seek ( dvdcss_handle dvdcss, int i_blocks )
{
#if defined( WIN32 )
if( WIN2K )
{
......@@ -375,6 +454,8 @@ static int _dvdcss_seek ( dvdcss_handle dvdcss, int i_blocks )
#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 );
......@@ -385,28 +466,29 @@ static int _dvdcss_seek ( dvdcss_handle dvdcss, int i_blocks )
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;
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
}
......@@ -670,11 +752,13 @@ static int _win32_dvdcss_aread( int i_fd, void *p_data, int i_blocks )
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;
}
......@@ -685,3 +769,4 @@ static int _win32_dvdcss_aread( int i_fd, void *p_data, int i_blocks )
}
#endif
......@@ -2,7 +2,7 @@
* 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: Stphane Borel <stef@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
......@@ -34,10 +34,12 @@ struct dvdcss_s
{
/* File descriptor */
int i_fd;
int i_seekpos;
/* Decryption stuff */
css_t css;
boolean_t b_encrypted;
title_key_t *p_keys;
/* Error management */
char *psz_error;
......
......@@ -2,7 +2,7 @@
* 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: Stphane Borel <stef@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
......@@ -46,7 +46,6 @@ extern dvdcss_handle dvdcss_open ( char *psz_target,
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 );
......
*.a
*.so
*.so.*
......@@ -22,10 +22,10 @@ include ../../Makefile.modules
# 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) $@
......@@ -2,7 +2,7 @@
* 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
......@@ -94,9 +94,8 @@ static int aout_Probe( probedata_t *p_data )
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 );
}
......@@ -105,15 +104,13 @@ static int aout_Probe( probedata_t *p_data )
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 );
}
......@@ -135,7 +132,7 @@ static int aout_Open( aout_thread_t *p_aout )
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 );
}
......@@ -151,13 +148,12 @@ static int aout_Open( aout_thread_t *p_aout )
"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 );
}
......@@ -180,7 +176,8 @@ static int aout_SetFormat( aout_thread_t *p_aout )
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;
......@@ -199,7 +196,7 @@ static int aout_SetFormat( aout_thread_t *p_aout )
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 );
}
......@@ -207,7 +204,7 @@ static int aout_SetFormat( aout_thread_t *p_aout )
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 );
}
......@@ -215,8 +212,8 @@ static int aout_SetFormat( aout_thread_t *p_aout )
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 );
}
......@@ -224,7 +221,7 @@ static int aout_SetFormat( aout_thread_t *p_aout )
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 );
}
......@@ -232,10 +229,9 @@ static int aout_SetFormat( aout_thread_t *p_aout )
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;
i_rv = snd_pcm_hw_params_set_buffer_time_near( p_aout->p_sys->p_alsa_handle,
......@@ -243,26 +239,24 @@ static int aout_SetFormat( aout_thread_t *p_aout )
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;
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;
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 );
}
......@@ -286,16 +280,15 @@ static int aout_SetFormat( aout_thread_t *p_aout )
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
......@@ -304,13 +297,15 @@ static void aout_HandleXrun(aout_thread_t *p_aout)
{
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 ) );
}
}
......@@ -334,8 +329,7 @@ static long aout_GetBufInfo( aout_thread_t *p_aout, long l_buffer_limit )
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 );
}
......@@ -352,7 +346,7 @@ static long aout_GetBufInfo( aout_thread_t *p_aout, long l_buffer_limit )
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;
}
......@@ -383,7 +377,7 @@ static void aout_Play( aout_thread_t *p_aout, byte_t *buffer, int i_size )
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;
}
......@@ -403,13 +397,13 @@ static void aout_Close( aout_thread_t *p_aout )
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" );
}
/*****************************************************************************
......@@ -425,3 +419,4 @@ void _M( aout_getfunctions )( function_list_t * p_function_list )
p_function_list->functions.aout.pf_play = aout_Play;
p_function_list->functions.aout.pf_close = aout_Close;
}
......@@ -22,10 +22,10 @@ include ../../Makefile.modules
# 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) $@
......@@ -22,10 +22,10 @@ include ../../Makefile.modules
# 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) $@
......@@ -22,10 +22,10 @@ include ../../Makefile.modules
# 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) $@
......@@ -40,24 +40,24 @@ $(BUILTIN_DOWNMIX3DN): BUILTIN_DOWNMIX3DN_%.o: %.c
# 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) $@
......@@ -2,7 +2,7 @@
* 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: Gal Hendryckx <jimmy@via.ecp.fr>
*
......@@ -95,7 +95,8 @@ static void downmix_getfunctions( function_list_t * p_function_list )
*****************************************************************************/
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 );
}
......
......@@ -2,7 +2,7 @@
* 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: Gal Hendryckx <jimmy@via.ecp.fr>
*
......@@ -100,7 +100,8 @@ static int downmix_Probe( probedata_t *p_data )
return( 0 );
}
if( TestMethod( DOWNMIX_METHOD_VAR, "downmix3dn" ) )
if( TestMethod( DOWNMIX_METHOD_VAR, "downmix3dn" )
|| TestMethod( DOWNMIX_METHOD_VAR, "3dn" ) )
{
return( 999 );
}
......
......@@ -2,7 +2,7 @@
* 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: Gal Hendryckx <jimmy@via.ecp.fr>
*
......@@ -100,7 +100,8 @@ static int downmix_Probe( probedata_t *p_data )
return( 0 );
}
if( TestMethod( DOWNMIX_METHOD_VAR, "downmixsse" ) )
if( TestMethod( DOWNMIX_METHOD_VAR, "downmixsse" )
|| TestMethod( DOWNMIX_METHOD_VAR, "sse" ) )
{
return( 999 );
}
......
......@@ -22,10 +22,10 @@ include ../../Makefile.modules
# 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) $@
......@@ -26,17 +26,17 @@ include ../../Makefile.modules
# 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) $@
......@@ -31,17 +31,17 @@ $(BUILTIN_DVD): BUILTIN_%.o: %.c
#
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
......
......@@ -10,7 +10,7 @@
* -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: Stphane Borel <stef@via.ecp.fr>
*
......@@ -334,13 +334,11 @@ static void DVDOpen( struct input_thread_s *p_input )
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 )
......@@ -442,7 +440,6 @@ static int DVDSetArea( input_thread_t * p_input, input_area_t * p_area )
* 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 );
/*
......@@ -927,10 +924,9 @@ intf_WarnMsg( 2, "Sector: 0x%x Read: %d Chapter: %d", p_dvd->i_sector, i_block_o
< 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;
}
......@@ -938,12 +934,13 @@ intf_WarnMsg( 2, "Sector: 0x%x Read: %d Chapter: %d", p_dvd->i_sector, i_block_o
{
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;
......
......@@ -22,10 +22,10 @@ include ../../Makefile.modules
# 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) $@
......@@ -22,10 +22,10 @@ include ../../Makefile.modules
# 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) $@
......@@ -22,10 +22,10 @@ include ../../Makefile.modules
# 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) $@
......@@ -30,10 +30,10 @@ $(BUILTIN_GLIDE): BUILTIN_%.o: %.c
# 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) $@
......@@ -50,18 +50,18 @@ $(BUILTIN_GNOME): BUILTIN_GNOME_%.o: %.c
# 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) $@
......@@ -69,38 +69,38 @@ $(BUILTIN_IDCTALTIVEC): BUILTIN_IDCTALTIVEC_%.o: %.c
# 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) $@
......@@ -2,7 +2,7 @@
* 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: Gal Hendryckx <jimmy@via.ecp.fr>
*
......@@ -101,7 +101,8 @@ static void idct_getfunctions( function_list_t * p_function_list )
*****************************************************************************/
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 );
}
......
......@@ -2,7 +2,7 @@
* 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>
*
......@@ -108,7 +108,8 @@ static int idct_Probe( probedata_t *p_data )
return( 0 );
}
if( TestMethod( IDCT_METHOD_VAR, "idctaltivec" ) )
if( TestMethod( IDCT_METHOD_VAR, "idctaltivec" )
|| TestMethod( IDCT_METHOD_VAR, "altivec" ) )
{
return( 999 );
}
......
......@@ -2,7 +2,7 @@
* 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: Gal Hendryckx <jimmy@via.ecp.fr>
*
......@@ -103,7 +103,8 @@ static void idct_getfunctions( function_list_t * p_function_list )
*****************************************************************************/
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 );
}
......
......@@ -2,7 +2,7 @@
* 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>
......@@ -113,7 +113,8 @@ static int idct_Probe( probedata_t *p_data )
return( 0 );
}
if( TestMethod( IDCT_METHOD_VAR, "idctmmx" ) )
if( TestMethod( IDCT_METHOD_VAR, "idctmmx" )
|| TestMethod( IDCT_METHOD_VAR, "mmx" ) )
{
return( 999 );
}
......
......@@ -2,7 +2,7 @@
* 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>
......@@ -113,7 +113,8 @@ static int idct_Probe( probedata_t *p_data )
return( 0 );
}
if( TestMethod( IDCT_METHOD_VAR, "idctmmxext" ) )
if( TestMethod( IDCT_METHOD_VAR, "idctmmxext" )
|| TestMethod( IDCT_METHOD_VAR, "mmxext" ) )
{
return( 999 );
}
......
......@@ -44,24 +44,24 @@ $(BUILTIN_IMDCT3DN): BUILTIN_IMDCT3DN_%.o: %.c
# 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) $@
......@@ -2,7 +2,7 @@
* 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: Gal Hendryckx <jimmy@via.ecp.fr>
*
......@@ -93,7 +93,8 @@ static void imdct_getfunctions( function_list_t * p_function_list )
*****************************************************************************/
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 );
}
......
......@@ -2,7 +2,7 @@
* 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: Gal Hendryckx <jimmy@via.ecp.fr>
*
......@@ -98,7 +98,8 @@ static int imdct_Probe( probedata_t *p_data )
return( 0 );
}
if( TestMethod( IMDCT_METHOD_VAR, "imdct3dn" ) )
if( TestMethod( IMDCT_METHOD_VAR, "imdct3dn" )
|| TestMethod( IMDCT_METHOD_VAR, "3dn" ) )
{
return( 999 );
}
......
......@@ -2,7 +2,7 @@
* 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: Gal Hendryckx <jimmy@via.ecp.fr>
*
......@@ -98,7 +98,8 @@ static int imdct_Probe( probedata_t *p_data )
return( 0 );
}
if( TestMethod( IMDCT_METHOD_VAR, "imdctsse" ) )
if( TestMethod( IMDCT_METHOD_VAR, "imdctsse" )
|| TestMethod( IMDCT_METHOD_VAR, "sse" ) )
{
return( 999 );
}
......
......@@ -7,6 +7,12 @@
# 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 \
......@@ -15,14 +21,10 @@ PLUGIN_KDE = kde.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)
......@@ -32,34 +34,33 @@ 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) $@
......@@ -24,7 +24,6 @@ extern "C"
#include "threads.h"
#include "mtime.h"
#include "tests.h"
#include "modules.h"
#include "stream_control.h"
#include "input_ext-intf.h"
......@@ -34,6 +33,9 @@ extern "C"
#include "interface.h"
#include "main.h"
#include "modules.h"
#include "modules_export.h"
}
#endif /* _INTF_PLUGIN_H_ */
/***************************************************************************
kde.cpp - description
-------------------
begin : Sun Mar 25 2001
copyright : (C) 2001 by andres
email : dae@chez.com
***************************************************************************/
/*****************************************************************************
* 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"
......@@ -38,3 +53,4 @@ MODULE_DEACTIVATE_START
MODULE_DEACTIVATE_STOP
} /* extern "C" */
......@@ -30,10 +30,10 @@ $(BUILTIN_MACOSX): BUILTIN_%.o: %.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) $@
......@@ -22,10 +22,10 @@ include ../../Makefile.modules
# 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) $@
......@@ -44,31 +44,31 @@ $(BUILTIN_MOTIONMMXEXT): BUILTIN_MOTIONMMXEXT_%.o: %.c
# 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) $@
......@@ -2,7 +2,7 @@
* 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>
*
......@@ -73,7 +73,8 @@ MODULE_DEACTIVATE_STOP
*****************************************************************************/
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 );
}
......
......@@ -2,7 +2,7 @@
* 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>
*
......@@ -78,7 +78,8 @@ int _M( motion_Probe )( probedata_t *p_data )
return( 0 );
}
if( TestMethod( MOTION_METHOD_VAR, "motionmmx" ) )
if( TestMethod( MOTION_METHOD_VAR, "motionmmx" )
|| TestMethod( MOTION_METHOD_VAR, "mmx" ) )
{
return( 999 );
}
......
......@@ -2,7 +2,7 @@
* 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>
*
......@@ -78,7 +78,8 @@ int _M( motion_Probe )( probedata_t *p_data )
return( 0 );
}
if( TestMethod( MOTION_METHOD_VAR, "motionmmxext" ) )
if( TestMethod( MOTION_METHOD_VAR, "motionmmxext" )
|| TestMethod( MOTION_METHOD_VAR, "mmxext" ) )
{
return( 999 );
}
......
......@@ -28,24 +28,24 @@ include ../../Makefile.modules
# 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) $@
......@@ -20,13 +20,13 @@ include ../../Makefile.modules
$(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
......@@ -34,10 +34,10 @@ $(BUILTIN_QT:%.o=%.moc): BUILTIN_%.moc: %.cpp
# 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) $@
......@@ -30,10 +30,10 @@ $(BUILTIN_SDL): BUILTIN_%.o: %.c
# 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) $@
......@@ -2,7 +2,7 @@
* 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>
......@@ -559,8 +559,14 @@ static void vout_Display( vout_thread_t *p_vout )
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 )
......@@ -571,28 +577,23 @@ static void vout_Display( vout_thread_t *p_vout )
}
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],
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]);
p_vout->p_sys->p_overlay->pitches[0] );
/* then V */
memcpy(p_vout->p_sys->p_overlay->pixels[1],
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);
p_vout->p_sys->p_overlay->pitches[1] / 2 );
/* and U */
memcpy(p_vout->p_sys->p_overlay->pixels[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);
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;
......
......@@ -26,17 +26,17 @@ include ../../Makefile.modules
# 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) $@
......@@ -33,25 +33,25 @@ include ../../Makefile.modules
# 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) $@
......@@ -27,17 +27,17 @@ include ../../Makefile.modules
# 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) $@
......@@ -5,7 +5,7 @@
* 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>
*
......@@ -82,7 +82,8 @@ void _M( yuv_getfunctions )( function_list_t * p_function_list )
*****************************************************************************/
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 );
}
......
......@@ -3,7 +3,7 @@
* 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>
*
......@@ -85,7 +85,8 @@ static int yuv_Probe( probedata_t *p_data )
return( 0 );
}
if( TestMethod( YUV_METHOD_VAR, "yuvmmx" ) )
if( TestMethod( YUV_METHOD_VAR, "yuvmmx" )
|| TestMethod( YUV_METHOD_VAR, "mmx" ) )
{
return( 999 );
}
......
......@@ -2,7 +2,7 @@
* 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>
......@@ -120,7 +120,7 @@ static module_symbols_t symbols;
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;
......@@ -302,7 +302,7 @@ void module_ManageBank( void )
}
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 );
......@@ -557,7 +557,7 @@ static int AllocatePluginModule( char * psz_filename )
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 );
......@@ -673,7 +673,7 @@ static int AllocateBuiltinModule( int ( *pf_init ) ( module_t * ),
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 );
......
......@@ -5,7 +5,7 @@
* 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>
*
......@@ -196,7 +196,7 @@ vout_thread_t * vout_CreateThread ( int *pi_status )
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 );
......@@ -889,7 +889,7 @@ static int InitThread( vout_thread_t *p_vout )
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,
......@@ -1041,7 +1041,7 @@ static void RunThread( vout_thread_t *p_vout)
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;
......
......@@ -2,7 +2,7 @@
* 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>
......@@ -460,7 +460,8 @@ void vpar_SynchroNewPicture( vpar_thread_t * p_vpar, int i_coding_type,
if( p_vpar->synchro.i_eta_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;
}
......@@ -489,7 +490,8 @@ void vpar_SynchroNewPicture( vpar_thread_t * p_vpar, int i_coding_type,
if( p_vpar->synchro.i_eta_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;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment