diff options
-rw-r--r-- | ChangeLog | 1 | ||||
-rwxr-xr-x | autogen.sh | 14 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | doc/faq/faq.sgml | 19 | ||||
-rw-r--r-- | src/combined/ffmpeg/ff_video_decoder.c | 30 |
5 files changed, 44 insertions, 24 deletions
@@ -1,5 +1,6 @@ xine-lib (1.1.17) 2009-??-?? * Fix build with older ffmpeg, both internal and in Debian 5.0. + * Add version check for CACA library and disable CACA plugin if needed xine-lib (1.1.16) 2009-01-07 * Security fixes: diff --git a/autogen.sh b/autogen.sh index 13e663510..ac99c9d98 100755 --- a/autogen.sh +++ b/autogen.sh @@ -37,12 +37,13 @@ case `echo -n` in *) _echo_n=-n _echo_c=;; esac +srcdir="`dirname "$0"`" + detect_configure_ac() { - srcdir=`dirname $0` test -z "$srcdir" && srcdir=. - (test -f $srcdir/configure.ac) || { + (test -f "$srcdir"/configure.ac) || { echo $_echo_n "*** Error ***: Directory "\`$srcdir\`" does not look like the" echo " top-level directory" exit 1 @@ -248,7 +249,11 @@ run_configure () { echo " ** If you wish to pass arguments to ./configure, please" echo " ** specify them on the command line." fi - ./configure "$@" + if test -f configure; then + ./configure "$@" + else + "$srcdir"/configure "$@" + fi } @@ -256,6 +261,7 @@ run_configure () { # MAIN #--------------- detect_configure_ac +cd "$srcdir" detect_autoconf detect_libtool detect_automake @@ -295,6 +301,8 @@ case "$1" in run_autoheader run_automake run_autoconf + # return to our original directory + cd - >/dev/null run_configure "$@" ;; esac diff --git a/configure.ac b/configure.ac index beb344314..167312e56 100644 --- a/configure.ac +++ b/configure.ac @@ -952,7 +952,9 @@ AC_ARG_WITH([caca], AS_HELP_STRING([--without-caca], [Do not build CACA support])) if test "x$with_caca" != "xno"; then - PKG_CHECK_MODULES([CACA], [caca cucul], [have_caca="yes"], [have_caca="no"]) + have_caca=yes + PKG_CHECK_MODULES([CACA], [caca >= 0.99beta14 cucul >= 0.99beta14 ], + [], [AC_MSG_RESULT(no); have_caca="no"]) if test "x$with_caca" = "xyes" && test "x$have_caca" = "xno"; then AC_MSG_ERROR([CACA support requested, but libcaca 0.99 not found]) fi diff --git a/doc/faq/faq.sgml b/doc/faq/faq.sgml index 1a624aba0..01305c87e 100644 --- a/doc/faq/faq.sgml +++ b/doc/faq/faq.sgml @@ -866,18 +866,13 @@ xine. </para> <para> - Possibly the most convenient way to get the Real codecs is to download - them from the MPlayer website - <ulink url="http://www.mplayerhq.hu/design7/dload.html"> - http://www.mplayerhq.hu/design7/dload.html - </ulink>. - The package is called "essential". Unpack it and move everything you - find inside to <filename>/usr/lib/codecs</filename> and set the - <parameter>decoder.external.real_codecs_path</parameter> in your xine config file - to <filename>/usr/lib/codecs</filename> (actually you can place them - anywhere you want, e.g. someplace in your home directory, but then you'll - have to set <parameter>decoder.external.real_codecs_path</parameter> accordingly). - Restart xine then and you should be able to watch Real files/streams. + Possibly the most convenient way to get the Real codecs is to install + RealPlayer 9 or RealPlayer 10 and set the + <parameter>decoder.external.real_codecs_path</parameter> in your xine + config file to the name of the directory which contains the codecs + (look for drvc.so); it's probably something like + <filename>/opt/real/RealPlayer/codecs/</filename>. Restart xine then + and you should be able to watch Real files/streams. </para> </sect3> <sect3 id="realnetworkstreams"> diff --git a/src/combined/ffmpeg/ff_video_decoder.c b/src/combined/ffmpeg/ff_video_decoder.c index 801155ab2..e17ca909e 100644 --- a/src/combined/ffmpeg/ff_video_decoder.c +++ b/src/combined/ffmpeg/ff_video_decoder.c @@ -88,6 +88,7 @@ struct ff_video_decoder_s { uint64_t pts_tag_mask; uint64_t pts_tag; int pts_tag_counter; + int pts_tag_stable_counter; #endif /* AVCODEC_HAS_REORDERED_OPAQUE */ int video_step; @@ -1210,19 +1211,29 @@ static void ff_check_pts_tagging(ff_video_decoder_t *this, uint64_t pts) { if (this->pts_tag_mask == 0) return; /* pts tagging inactive */ - - if ((pts & this->pts_tag_mask) != this->pts_tag) + if ((pts & this->pts_tag_mask) != this->pts_tag) { + this->pts_tag_stable_counter = 0; return; /* pts still outdated */ + } + + /* the tag should be stable for 100 frames */ + this->pts_tag_stable_counter++; if (this->pts_tag != 0) { - /* first pass: reset pts_tag */ - this->pts_tag = 0; + if (this->pts_tag_stable_counter >= 100) { + /* first pass: reset pts_tag */ + this->pts_tag = 0; + this->pts_tag_stable_counter = 0; + } } else if (pts == 0) return; /* cannot detect second pass */ else { - /* second pass: reset pts_tag_mask and pts_tag_counter */ - this->pts_tag_mask = 0; - this->pts_tag_counter = 0; + if (this->pts_tag_stable_counter >= 100) { + /* second pass: reset pts_tag_mask and pts_tag_counter */ + this->pts_tag_mask = 0; + this->pts_tag_counter = 0; + this->pts_tag_stable_counter = 0; + } } } @@ -1577,6 +1588,7 @@ static void ff_reset (video_decoder_t *this_gen) { this->pts_tag_mask = 0; this->pts_tag = 0; this->pts_tag_counter = 0; + this->pts_tag_stable_counter = 0; #endif /* AVCODEC_HAS_REORDERED_OPAQUE */ } @@ -1600,9 +1612,11 @@ static void ff_discontinuity (video_decoder_t *this_gen) { this->pts_tag_counter++; this->pts_tag_mask = 0; this->pts_tag = 0; + this->pts_tag_stable_counter = 0; { /* pts values typically don't use the uppermost bits. therefore we put the tag there */ int counter_mask = 1; + int counter = 2 * this->pts_tag_counter + 1; /* always set the uppermost bit in tag_mask */ uint64_t tag_mask = 0x8000000000000000ull; while (this->pts_tag_counter >= counter_mask) { @@ -1610,7 +1624,7 @@ static void ff_discontinuity (video_decoder_t *this_gen) { * mirror the counter into the uppermost bits. this allows us to enlarge mask as * necessary and while previous taggings can still be detected to be outdated. */ - if (this->pts_tag_counter & counter_mask) + if (counter & counter_mask) this->pts_tag |= tag_mask; this->pts_tag_mask |= tag_mask; tag_mask >>= 1; |