From 7e9dd1f2257ee37b6b3057de11cf57571b85924f Mon Sep 17 00:00:00 2001 From: Darren Salt Date: Fri, 13 Feb 2009 18:01:29 +0000 Subject: Fix a build failure on *BSD due to some rather useful GNUisms. Their sed doesn't have \s and their tail doesn't handle -ve line counts. --- ChangeLog | 1 + src/combined/ffmpeg/Makefile.am | 3 +-- src/combined/ffmpeg/mkcodeclist.pl | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index b3e8baaf2..efc81a544 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ xine-lib (1.1.17) 2009-??-?? * Enable libmpeg2new. This is not yet production code; the old mpeg2 decoder remains the default. + * Fix a build failure on *BSD due to some rather useful GNUisms. xine-lib (1.1.16.2) 2009-02-10 * Build fixes related to ImageMagick 6.4 & later. diff --git a/src/combined/ffmpeg/Makefile.am b/src/combined/ffmpeg/Makefile.am index daae18509..24cab7577 100644 --- a/src/combined/ffmpeg/Makefile.am +++ b/src/combined/ffmpeg/Makefile.am @@ -64,8 +64,7 @@ avcodec_video.list: AV_CODECS:=/CODEC_ID_MPEG1VIDEO/,/CODEC_ID_PCM_S16LE/ avcodec_audio.list avcodec_video.list: echo '#include "$(srcdir)/ffmpeg_decoder.h"' | $(AV_CPP) - |\ - sed -e $(AV_CODECS)'! d; s/^\s*//; s/[=,].*//; /^$$/ d' |\ - head -n -1 >$@ + sed -e $(AV_CODECS)'! d; s/^[ \t]*//; s/[=,].*//; /^$$/ d' >$@ # Generate the mappings. These are #included where needed. ff_%_list.h: $(srcdir)/mkcodeclist.pl avcodec_%.list $(srcdir)/xine_%.list diff --git a/src/combined/ffmpeg/mkcodeclist.pl b/src/combined/ffmpeg/mkcodeclist.pl index c4070eb32..b4a10921a 100755 --- a/src/combined/ffmpeg/mkcodeclist.pl +++ b/src/combined/ffmpeg/mkcodeclist.pl @@ -12,10 +12,12 @@ my $line; # Read in the ffmpeg codec IDs my %codecs; open LIST, "< $ffmpeg" or die $!; -while (defined ($line = )) { +$line = ; +while (defined $line) { chomp $line; $line =~ s/^CODEC_ID_//o; $codecs{$line} = 0; + $line = ; } close LIST or die $!; -- cgit v1.2.3 From bc41d754bd2bc6777ae8de4111d4ea5986f6083f Mon Sep 17 00:00:00 2001 From: Miguel Freitas Date: Mon, 16 Feb 2009 22:36:27 -0300 Subject: Protect audio loop so it cannot write to a paused device (fix pause/resume freeze with pulseaudio). --- ChangeLog | 2 ++ src/xine-engine/audio_out.c | 19 +++++++++++++++++-- src/xine-engine/xine.c | 15 +++++++++++---- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index efc81a544..0c294888b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ xine-lib (1.1.17) 2009-??-?? * Enable libmpeg2new. This is not yet production code; the old mpeg2 decoder remains the default. * Fix a build failure on *BSD due to some rather useful GNUisms. + * Protect audio loop so it cannot write to a paused device (fix + pause/resume freeze with pulseaudio). xine-lib (1.1.16.2) 2009-02-10 * Build fixes related to ImageMagick 6.4 & later. diff --git a/src/xine-engine/audio_out.c b/src/xine-engine/audio_out.c index 43553875e..170a64be0 100644 --- a/src/xine-engine/audio_out.c +++ b/src/xine-engine/audio_out.c @@ -243,6 +243,7 @@ typedef struct { audio_fifo_t *free_fifo; audio_fifo_t *out_fifo; int64_t last_audio_vpts; + pthread_mutex_t current_speed_lock; uint32_t current_speed; /* the current playback speed */ /* FIXME: replace all this->clock->speed with this->current_speed. we should make * sure nobody will change speed without going through xine.c:set_speed_internal */ @@ -1040,6 +1041,7 @@ static void *ao_loop (void *this_gen) { * we must process/free buffers otherwise the entire engine will stop. */ + pthread_mutex_lock(&this->current_speed_lock); if ( this->audio_loop_running && (this->clock->speed == XINE_SPEED_PAUSE || (this->clock->speed != XINE_FINE_SPEED_NORMAL && @@ -1055,6 +1057,7 @@ static void *ao_loop (void *this_gen) { _x_refcounter_dec(in_buf->stream->refcounter); fifo_append (this->free_fifo, in_buf); in_buf = NULL; + pthread_mutex_unlock(&this->current_speed_lock); continue; } @@ -1065,6 +1068,7 @@ static void *ao_loop (void *this_gen) { } lprintf ("loop:pause: I feel sleepy (%d buffers).\n", this->out_fifo->num_buffers); + pthread_mutex_unlock(&this->current_speed_lock); xine_usec_sleep (10000); lprintf ("loop:pause: I wake up.\n"); continue; @@ -1274,6 +1278,7 @@ static void *ao_loop (void *this_gen) { fifo_append (this->free_fifo, in_buf); in_buf = NULL; } + pthread_mutex_unlock(&this->current_speed_lock); /* Give other threads a chance to use functions which require this->driver_lock to * be available. This is needed when using NPTL on Linux (and probably PThreads @@ -1684,6 +1689,7 @@ static void ao_exit(xine_audio_port_t *this_gen) { free (this->frame_buf[1]); free (this->zero_space); + pthread_mutex_destroy(&this->current_speed_lock); pthread_mutex_destroy(&this->flush_audio_driver_lock); pthread_cond_destroy(&this->flush_audio_driver_reached); @@ -1910,8 +1916,15 @@ static int ao_set_property (xine_audio_port_t *this_gen, int property, int value if (value != XINE_FINE_SPEED_NORMAL && value != XINE_SPEED_PAUSE && !this->slow_fast_audio ) this->ao.control(&this->ao, AO_CTRL_FLUSH_BUFFERS, NULL); - this->ao.control(&this->ao, - (value == XINE_SPEED_PAUSE) ? AO_CTRL_PLAY_PAUSE : AO_CTRL_PLAY_RESUME, NULL); + if( value == XINE_SPEED_PAUSE ) { + /* current_speed_lock is here to make sure the ao_loop will pause in a safe place. + * that is, we cannot pause writing to device, filling gaps etc. */ + pthread_mutex_lock(&this->current_speed_lock); + this->ao.control(&this->ao, AO_CTRL_PLAY_PAUSE, NULL); + pthread_mutex_unlock(&this->current_speed_lock); + } else { + this->ao.control(&this->ao, AO_CTRL_PLAY_RESUME, NULL); + } this->current_speed = value; if( this->slow_fast_audio ) ao_update_resample_factor(this); @@ -2056,6 +2069,7 @@ xine_audio_port_t *_x_ao_new_port (xine_t *xine, ao_driver_t *driver, this->driver = driver; this->xine = xine; this->clock = xine->clock; + this->current_speed = xine->clock->speed; this->streams = xine_list_new(); /* warning: driver_lock is a recursive mutex. it must NOT be @@ -2087,6 +2101,7 @@ xine_audio_port_t *_x_ao_new_port (xine_t *xine, ao_driver_t *driver, this->discard_buffers = 0; this->zero_space = calloc (1, ZERO_BUF_SIZE * 4 * 6); /* MAX as 32bit, 6 channels. */ + pthread_mutex_init( &this->current_speed_lock, NULL ); pthread_mutex_init( &this->flush_audio_driver_lock, NULL ); pthread_cond_init( &this->flush_audio_driver_reached, NULL ); diff --git a/src/xine-engine/xine.c b/src/xine-engine/xine.c index 63a5b7213..aebbffb39 100644 --- a/src/xine-engine/xine.c +++ b/src/xine-engine/xine.c @@ -330,17 +330,20 @@ static xine_ticket_t *XINE_MALLOC ticket_init(void) { static void set_speed_internal (xine_stream_t *stream, int speed) { xine_t *xine = stream->xine; + int old_speed = xine->clock->speed; - if (xine->clock->speed != XINE_SPEED_PAUSE && speed == XINE_SPEED_PAUSE) + if (old_speed != XINE_SPEED_PAUSE && speed == XINE_SPEED_PAUSE) /* get all decoder and post threads in a state where they agree to be blocked */ xine->port_ticket->revoke(xine->port_ticket, 0); - if (xine->clock->speed == XINE_SPEED_PAUSE && speed != XINE_SPEED_PAUSE) + if (old_speed == XINE_SPEED_PAUSE && speed != XINE_SPEED_PAUSE) /* all decoder and post threads may continue now */ xine->port_ticket->issue(xine->port_ticket, 0); - stream->xine->clock->set_fine_speed (stream->xine->clock, speed); - + if (old_speed != XINE_SPEED_PAUSE && speed == XINE_SPEED_PAUSE) + /* set master clock so audio_out loop can pause in a safe place */ + stream->xine->clock->set_fine_speed (stream->xine->clock, speed); + /* see coment on audio_out loop about audio_paused */ if( stream->audio_out ) { xine->port_ticket->acquire(xine->port_ticket, 1); @@ -350,6 +353,10 @@ static void set_speed_internal (xine_stream_t *stream, int speed) { xine->port_ticket->release(xine->port_ticket, 1); } + + if (old_speed == XINE_SPEED_PAUSE || speed != XINE_SPEED_PAUSE) + /* master clock is set after resuming the audio device (audio_out loop may continue) */ + stream->xine->clock->set_fine_speed (stream->xine->clock, speed); } -- cgit v1.2.3 From e554df7addfea632ef9ae4be09049f459710bbe6 Mon Sep 17 00:00:00 2001 From: Darren Salt Date: Tue, 17 Feb 2009 01:02:00 +0000 Subject: Update documentation etc. to point at the new home page. --HG-- extra : transplant_source : %8D9%B3J%8E%DE%A1%81t%7E%A0%08%13%A4%AE%9C%EA.%C3%10 --- README | 2 +- debian/watch | 2 +- doc/faq/faq.sgml | 2 +- doc/hackersguide/intro.sgml | 4 ++-- doc/internal/HOWTO.release | 22 +++++++++++++--------- doc/man/en/xine.5 | 4 ++-- misc/xine-lib.spec.in | 4 ++-- src/input/vcd/xineplug_inp_vcd.c | 2 +- 8 files changed, 23 insertions(+), 19 deletions(-) diff --git a/README b/README index 349fdd2b1..ce6e85d0d 100644 --- a/README +++ b/README @@ -19,7 +19,7 @@ Individual frontends (e.g. xine-ui, gxine, totem, ...) may provide additional documentation in their packages. For more information on xine features (supported multimedia formats etc.) -see the xine homepage, located at http://xinehq.de/ +see the xine homepage, located at http://www.xine-project.org/ The xine-lib XML parser (src/xine-utils/xmlparser.[ch] and src/xine-utils/xmllexer.[ch]) is released under the GNU LGPL, see COPYING.LIB diff --git a/debian/watch b/debian/watch index c82dbbc10..d3a4d7702 100644 --- a/debian/watch +++ b/debian/watch @@ -1,4 +1,4 @@ version=3 -http://xinehq.de/index.php/releases \ +http://www.xine-project.org/releases \ (?:.*/)?xine/xine-lib-([\d\.]*).tar.gz \ debian uupdate diff --git a/doc/faq/faq.sgml b/doc/faq/faq.sgml index 5dbd1c6a4..48f9b2416 100644 --- a/doc/faq/faq.sgml +++ b/doc/faq/faq.sgml @@ -199,7 +199,7 @@ tools for further info. You can also find links to third parties providing xine RPMs on the xine homepage at - http://xinehq.de/index.php/releases. + http://www.xine-project.org/releases. See the next section of this FAQ for instructions on how to build xine diff --git a/doc/hackersguide/intro.sgml b/doc/hackersguide/intro.sgml index c7dce6254..4e96d2de1 100644 --- a/doc/hackersguide/intro.sgml +++ b/doc/hackersguide/intro.sgml @@ -6,7 +6,7 @@ You are currently looking at a piece of documentation for xine. xine is a free video player. It lives on - http://xinehq.de/. Specifically + http://www.xine-project.org/. Specifically this document goes under the moniker of the "xine Hackers' Guide". @@ -36,7 +36,7 @@ New versions of this document can also be obtained from the xine web site: - http://xinehq.de/. + http://www.xine-project.org/. diff --git a/doc/internal/HOWTO.release b/doc/internal/HOWTO.release index 2128ca391..38532aac0 100644 --- a/doc/internal/HOWTO.release +++ b/doc/internal/HOWTO.release @@ -127,15 +127,19 @@ hands. (also make sure it gets immediately approved by the xine-announce moderator!) -12) write the announcement for xinehq: - You need to login on xinehq and use your admin privileges to create a - news article in the "New Releases" section. Include a link to the - SourceForge Release notes/Changelog page and one to the download page. - - Warning: triple-check that you get the HTML correct! If you have - unmatched quotes, you might break the whole website so that it - can only be repaired by manually fiddling with mysql to get the - HTML right! +12) write the announcement for xine-project.org: + You need to have an account on alioth.debian.org and a checked-out copy + of ssh://hg.debian.org//hg/xine-lib/xine-project-www/ (using Mercurial). + Add the new news item near the top of pages/news/items.xml (use the + provided template), run update.sh (requires xsltproc; if this fails, + re-edit), check that it looks fine in a convenient browser, then commit + and push the change. At present, you will need to request a web site + update via #xine on irc.oftc.net or by contacting a site admin. + + You should include a link to the SourceForge Release notes/Changelog + page and one to the download page. + + Warning: triple-check that you get the XML correct! 13) write the Freshmeat announcement: use your freshmeat account to log into their website, if you aren't diff --git a/doc/man/en/xine.5 b/doc/man/en/xine.5 index 0524dee6d..eba55aef5 100644 --- a/doc/man/en/xine.5 +++ b/doc/man/en/xine.5 @@ -346,8 +346,8 @@ stream. .br The programs are documented fully on the xine home page: -.UR http://xinehq.de/ -.IR "http://xinehq.de/" +.UR http://www.xine-project.org/ +.IR "http://www.xine-project.org/" .UE .SH AUTHOR This text was extracted from the xine man page by Darren Salt diff --git a/misc/xine-lib.spec.in b/misc/xine-lib.spec.in index 453ffa306..952c5e0d2 100644 --- a/misc/xine-lib.spec.in +++ b/misc/xine-lib.spec.in @@ -79,8 +79,8 @@ Version: %{version} Release: %{release} License: GPL Group: Development/Libraries -URL: http://xinehq.de -Source: http://xinehq.de/files/@PACKAGE@-@VERSION@.tar.bz2 +URL: http://www.xine-project.org +Source: http://prdownloads.sourceforge.net/xine/@PACKAGE@-@VERSION@.tar.bz2 Packager: Manfred Tremmel Obsoletes: xine Obsoletes: xine-lib diff --git a/src/input/vcd/xineplug_inp_vcd.c b/src/input/vcd/xineplug_inp_vcd.c index 55b7f9b84..50382ee7e 100644 --- a/src/input/vcd/xineplug_inp_vcd.c +++ b/src/input/vcd/xineplug_inp_vcd.c @@ -20,7 +20,7 @@ /* These are plugin routines called by the xine engine. See Chapter 4. Extending xine's input - http://xinehq.de/index.php/hackersguide/index.php?resource=5.3&action=default#INPUT + http://www.xine-project.org/hackersguide#INPUT and the comments in input_plugin.h This is what is referred to below a "the xine plugin spec" -- cgit v1.2.3