diff --git a/configure b/configure index 38b2e35358..cde5d548f9 100755 --- a/configure +++ b/configure @@ -140,7 +140,7 @@ Optional features: --disable-win32 disable Win32 DLL support [autodetect] --disable-dshow disable DirectShow support [autodetect] --disable-xanim disable XAnim DLL support [autodetect] - --disable-real disable RealPlayer8 DLL support [autodetect] + --disable-real disable RealPlayer DLL support [autodetect] --disable-xvid disable XviD codec [autodetect] --disable-divx4linux disable DivX4linux codec [autodetect] --enable-opendivx enable _old_ OpenDivx codec [disable] @@ -235,6 +235,7 @@ Use these options if autodetection fails: --with-libdvdnav=DIR libdvdnav in DIR --with-win32libdir=DIR W*ndows DLL files in DIR --with-xanimlibdir=DIR XAnim DLL files in DIR + --with-reallibdir=DIR RealPlayer DLL files in DIR --with-xvidcore=PATH path to XviD libcore.a (e.g: /opt/lib/libcore.a) --with-sdl-config=PATH path to sdl*-config (e.g.: /opt/bin/sdl-config) --with-gtk-config=PATH path to gtk*-config (e.g.: /opt/bin/gtk-config) @@ -1084,6 +1085,10 @@ for ac_option do _xanimlibdir=`echo $ac_option | cut -d '=' -f 2` _xanim=yes ;; + --with-reallibdir=*) + _reallibdir=`echo $ac_option | cut -d '=' -f 2` + _real=yes + ;; --with-csslibdir=*) _csslibdir=`echo $ac_option | cut -d '=' -f 2` _css=yes @@ -3252,18 +3257,34 @@ else _nocodecmodules="xanim $_nocodecmodules" fi -echocheck "RealPlayer8 DLL" +echocheck "RealPlayer DLL" if test "$_real" = auto ; then _real=no if test "$_dl" = yes ; then if linux ; then _real=yes - echores "yes" elif freebsd ; then _real=yes - echores "yes" + elif netbsd ; then + _real=yes else - echores "no (tested only on Linux and FreeBSD arch)" + echores "no (tested only on Linux/FreeBSD/NetBSD)" + fi + if test "$_real" = yes ; then + if test -z "$_reallibdir" ; then + for I in /usr/lib/real /usr/lib/RealPlayer*/Codecs ; do + if test -d "$I" ; then + _reallibdir="$I" + break; + fi; + done + fi + fi + test "$_reallibdir" || _real=no + if test "$_real" = yes ; then + echores "yes (using $_reallibdir)" + else + echores "no (no suitable directory found - see DOCS/codecs.html)" fi else echores "no (dynamic loader support needed)" @@ -3273,9 +3294,11 @@ else fi if test "$_real" = yes ; then _def_real='#define USE_REALCODECS 1' + _def_real_path="#define REALCODEC_PATH \"$_reallibdir\"" _codecmodules="real $_codecmodules" else _def_real='#undef USE_REALCODECS' + _def_real_path="#undef REALCODEC_PATH" _nocodecmodules="real $_nocodecmodules" fi @@ -4218,6 +4241,8 @@ $_def_xanim_path /* RealPlayer DLL support */ $_def_real +/* Default search path */ +$_def_real_path /* Use 3dnow/mmxext/sse/mmx optimized fast memcpy() [maybe buggy... signal 4]*/ $_def_fastmemcpy diff --git a/libmpcodecs/ad_real.c b/libmpcodecs/ad_real.c index 2e9ee11610..26ac42d299 100644 --- a/libmpcodecs/ad_real.c +++ b/libmpcodecs/ad_real.c @@ -31,8 +31,8 @@ void *__builtin_new(unsigned long size) { return malloc(size); } -#ifdef __FreeBSD__ -void* __ctype_b=NULL; +#if defined(__FreeBSD__) || defined(__NetBSD__) +void *__ctype_b=NULL; #endif static ulong (*raCloseCodec)(ulong); @@ -64,7 +64,7 @@ static int preinit(sh_audio_t *sh){ int len; void* prop; char path[4096]; - sprintf(path, LIBDIR "/real/%s", sh->codec->dll); + sprintf(path, REALCODEC_PATH "/%s", sh->codec->dll); handle = dlopen (path, RTLD_LAZY); if(!handle){ mp_msg(MSGT_DECAUDIO,MSGL_WARN,"Cannot open dll: %s\n",dlerror()); diff --git a/libmpcodecs/vd_real.c b/libmpcodecs/vd_real.c index c095110f6e..036fb5a3fd 100644 --- a/libmpcodecs/vd_real.c +++ b/libmpcodecs/vd_real.c @@ -14,7 +14,7 @@ #include "vd_internal.h" static vd_info_t info = { - "RealPlayer 8 video codecs", + "RealVideo decoder", "real", VFM_REAL, "Florian Schneider", @@ -48,11 +48,11 @@ void __pure_virtual(void) { // exit(1); } -#ifdef __FreeBSD__ +#if defined(__FreeBSD__) || defined(__NetBSD__) void ___brk_addr(void) {exit(0);} -char** __environ={NULL}; +char **__environ={NULL}; #undef stderr -FILE* stderr=NULL; +FILE *stderr=NULL; #endif // to set/get/query special features/parameters @@ -147,11 +147,11 @@ static int init(sh_video_t *sh){ mp_msg(MSGT_DECVIDEO,MSGL_V,"realvideo codec id: 0x%08X sub-id: 0x%08X\n",extrahdr[1],extrahdr[0]); - sprintf(path, LIBDIR "/real/%s", sh->codec->dll); + sprintf(path, REALCODEC_PATH "/%s", sh->codec->dll); if(!load_syms(path)){ mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_MissingDLLcodec,sh->codec->dll); - mp_msg(MSGT_DECVIDEO,MSGL_HINT,"You need to copy the contents of the codecs directory from RealPlayer8\n"); - mp_msg(MSGT_DECVIDEO,MSGL_HINT,"into " LIBDIR "/real/ !\n"); + mp_msg(MSGT_DECVIDEO,MSGL_HINT,"You need to copy the contents from the RealPlayer codecs directory\n"); + mp_msg(MSGT_DECVIDEO,MSGL_HINT,"into " REALCODEC_PATH "/ !\n"); return 0; } // only I420 supported diff --git a/libmpdemux/demux_real.c b/libmpdemux/demux_real.c index 86bc65fc05..bb7e59fc41 100644 --- a/libmpdemux/demux_real.c +++ b/libmpdemux/demux_real.c @@ -8,6 +8,13 @@ TODO: fix the whole syncing mechanism $Log$ + Revision 1.16 2002/06/13 00:14:28 atmos4 + Implement Nilmoni's and Bernd Ernesti's patches for: + Better real codec dir detection and NetBSD real support. + Fix Nilmonis code, so it's working like expected. + Move a debug printf to mp_msg and some fixes in demux_real.c. + Some cosmetics :) -> RealPlayer 8 to RealPlayer, as RealOne (aka RealPlayer 9 works, too) + Revision 1.15 2002/06/10 13:55:56 arpi export subpacket-size and matrix w*h to the codec (cook) @@ -446,7 +453,7 @@ loop: if (sh_audio != NULL) { dp = new_demux_packet(len); stream_read(demuxer->stream, dp->buffer, len); - fprintf(stderr,"audio block len=%d\n",len); + mp_dbg(MSGT_DEMUX,MSGL_DBG2,"audio block len=%d\n",len); if (sh_audio->format == 0x2000) { char *ptr = dp->buffer; @@ -1073,7 +1080,7 @@ int demux_seek_real(demuxer_t *demuxer, float rel_seek_secs, int flags) sh_video_t *sh_video = d_video->sh; int video_chunk_pos = d_video->pos; int vid = d_video->id, aid = d_audio->id; - int next_offset; + int next_offset = 0; int rel_seek_frames = 0; int streams = 0; @@ -1144,5 +1151,5 @@ int demux_seek_real(demuxer_t *demuxer, float rel_seek_secs, int flags) // printf("seek: pos: %d, current packets: a: %d, v: %d\n", // next_offset, priv->current_apacket, priv->current_vpacket); - stream_seek(demuxer->stream, next_offset); + return stream_seek(demuxer->stream, next_offset); }