summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog1
-rwxr-xr-xautogen.sh14
-rw-r--r--configure.ac4
-rw-r--r--doc/faq/faq.sgml19
-rw-r--r--src/combined/ffmpeg/ff_video_decoder.c30
5 files changed, 44 insertions, 24 deletions
diff --git a/ChangeLog b/ChangeLog
index d436f451d..fdea0eb67 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;