summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarren Salt <linux@youmustbejoking.demon.co.uk>2007-12-03 23:52:57 +0000
committerDarren Salt <linux@youmustbejoking.demon.co.uk>2007-12-03 23:52:57 +0000
commit048e921c00ddd8acbb003d24692355638ef739d4 (patch)
tree8d3700e6b6537b48327d8e83cb4178a56f0bd8e8
parentb16de9c5e59ce99cba75f51cde8f2c441d36e55b (diff)
parent0aa00fb217357cee4ef1008677e1247bb24eb42c (diff)
downloadxine-lib-048e921c00ddd8acbb003d24692355638ef739d4.tar.gz
xine-lib-048e921c00ddd8acbb003d24692355638ef739d4.tar.bz2
Merge from 1.1.
--HG-- rename : src/demuxers/demux_ogg.c => src/combined/xine_ogg_demuxer.c
-rw-r--r--ChangeLog8
-rw-r--r--debian/changelog8
-rw-r--r--debian/control5
-rw-r--r--doc/man/en/xine.57
-rw-r--r--src/audio_out/audio_alsa_out.c6
-rw-r--r--src/combined/xine_ogg_demuxer.c2
-rw-r--r--src/xine-engine/audio_out.c47
7 files changed, 55 insertions, 28 deletions
diff --git a/ChangeLog b/ChangeLog
index 253431772..a06625e22 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -62,6 +62,14 @@ xine-lib (1.1.9) (unreleased)
This requires conversion to UTF-8 of entities with codes >= 128.
* Fixed ATSC support. [Bug 1749508]
* Fixed a possible DVB plugin crash when switching channels.
+ * Fixed ogg demuxer to not discard data at the end of the stream.
+ * Fixed deadlock on ao_close while paused.
+ * Nicer wakeup behaviour, using select instead of nanosleep (800 -> 100
+ wakeups/s).
+ * Fixed ALSA close function to not discard all data that had been written
+ but not played yet.
+ * Fixed a race condition between ao_loop and ao_close to not lose the last
+ buffer.
xine-lib (1.1.8)
* Send a channel-changed event to the frontend when receiving the SYNC
diff --git a/debian/changelog b/debian/changelog
index a12d9233a..63a658013 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,11 +5,13 @@ xine-lib-1.2 (1.2.0~hg-0) experimental; urgency=low
-- Darren Salt <linux@youmustbejoking.demon.co.uk> Tue, 17 Apr 2007 16:50:37 +0100
-xine-lib (1.1.6~hg-0) unstable; urgency=low
+xine-lib (1.1.9~hg-0) unstable; urgency=low
- * Hg snapshot.
+ [ Reinhard Tartler ]
+ * remove gs from build-dependencies
+ * change the maintainer field to xine-devel@lists.sourceforge.net.
- -- Darren Salt <linux@youmustbejoking.demon.co.uk> Mon, 16 Apr 2007 22:00:07 +0100
+ -- Reinhard Tartler <siretart@tauware.de> Sun, 25 Nov 2007 23:45:52 +0100
xine-lib (1.1.5~cvs-0) unstable; urgency=low
diff --git a/debian/control b/debian/control
index 9486b110b..4bf8b3823 100644
--- a/debian/control
+++ b/debian/control
@@ -1,8 +1,7 @@
Source: xine-lib-1.2
Section: libs
Priority: optional
-Maintainer: Darren Salt <linux@youmustbejoking.demon.co.uk>
-Uploaders: Reinhard Tartler <siretart@tauware.de>
+Maintainer: xine Developers <xine-devel@lists.sourceforge.net>
Build-Depends: debhelper (>= 5.0.1), binutils (>= 2.12.90.0.9), pkg-config,
automake1.9, autoconf, libtool,
libxcb-xinerama0-dev | libxv-dev (<< 1:1.0.3), libxcb-xv0-dev | libxv-dev (<< 1:1.0.3),
@@ -21,7 +20,7 @@ Build-Depends: debhelper (>= 5.0.1), binutils (>= 2.12.90.0.9), pkg-config,
libflac-dev, libpulse-dev, libsdl1.2-dev, libwavpack-dev,
libsmbclient-dev, libspeex-dev, libmng-dev,
libmad0-dev, libmpcdec-dev, libcdio-dev (>= 0.76-1), libvcdinfo-dev,
- w3m, gs, xmlto, librsvg2-bin
+ w3m, xmlto, librsvg2-bin
Build-Conflicts: libdvdnav-dev
Standards-Version: 3.7.2
diff --git a/doc/man/en/xine.5 b/doc/man/en/xine.5
index 3a67589dd..297aff48e 100644
--- a/doc/man/en/xine.5
+++ b/doc/man/en/xine.5
@@ -79,15 +79,14 @@ to read from. Valid MRLs may be plain file names or one of the following
.BR rtsp://<host>... " (requires Real codecs)"
.br
.LP
+Additional input plugins will provide additional MRL types. The ones listed
+above are available with stock libxine.
+
\fBNOTE:\fP where a file name is required, the \fIfull path must be
provided\fP - from a shell, you can use \fB"$PWD/file"\fP or
\fB"$(pwd)/file"\fP or \fB"\`pwd\`/file"\fP if the file is in the current
directory. (Which one depends on your shell; all three work in bash.)
-Several MRLs may be specified in order to play a number of consecutive
-streams. Additional input plugins will provide additional MRL types. The ones
-listed above are available with stock libxine...
-
As of xine-lib 1.1.3, the DVD title number may be 0 (select navigation) and
the chapter number may be 0 (full title).
diff --git a/src/audio_out/audio_alsa_out.c b/src/audio_out/audio_alsa_out.c
index e92bfbb3a..4ce2b1be3 100644
--- a/src/audio_out/audio_alsa_out.c
+++ b/src/audio_out/audio_alsa_out.c
@@ -856,7 +856,11 @@ static int ao_alsa_write(ao_driver_t *this_gen, int16_t *data, uint32_t count) {
static void ao_alsa_close(ao_driver_t *this_gen) {
alsa_driver_t *this = (alsa_driver_t *) this_gen;
- if(this->audio_fd) snd_pcm_close(this->audio_fd);
+ if(this->audio_fd) {
+ snd_pcm_nonblock(this->audio_fd, 0);
+ snd_pcm_drain(this->audio_fd);
+ snd_pcm_close(this->audio_fd);
+ }
this->audio_fd = NULL;
this->has_pause_resume = 0; /* This is set at open time */
}
diff --git a/src/combined/xine_ogg_demuxer.c b/src/combined/xine_ogg_demuxer.c
index f8a4437a4..2a69c4da2 100644
--- a/src/combined/xine_ogg_demuxer.c
+++ b/src/combined/xine_ogg_demuxer.c
@@ -242,7 +242,7 @@ static int read_ogg_packet (demux_ogg_t *this) {
bytes = this->input->read(this->input, buffer, CHUNKSIZE);
if (bytes == 0) {
if (total == 0) {
- printf("read_ogg_packet read nothing\n");
+ lprintf("read_ogg_packet read nothing\n");
return 0;
}
break;
diff --git a/src/xine-engine/audio_out.c b/src/xine-engine/audio_out.c
index 76d678aa2..aac1739aa 100644
--- a/src/xine-engine/audio_out.c
+++ b/src/xine-engine/audio_out.c
@@ -342,9 +342,7 @@ static void fifo_append (audio_fifo_t *fifo,
pthread_mutex_unlock (&fifo->mutex);
}
-static audio_buffer_t *fifo_remove_int (audio_fifo_t *fifo, int blocking) {
- audio_buffer_t *buf;
-
+static audio_buffer_t *fifo_peek_int (audio_fifo_t *fifo, int blocking) {
while (!fifo->first) {
pthread_cond_signal (&fifo->empty);
if (blocking)
@@ -359,25 +357,38 @@ static audio_buffer_t *fifo_remove_int (audio_fifo_t *fifo, int blocking) {
return NULL;
}
}
+ return fifo->first;
+}
- buf = fifo->first;
-
- if (buf) {
- fifo->first = buf->next;
+static audio_buffer_t *fifo_remove_int (audio_fifo_t *fifo, int blocking) {
+ audio_buffer_t *buf = fifo_peek_int(fifo, blocking);
+ if (!buf)
+ return NULL;
- if (!fifo->first) {
+ fifo->first = buf->next;
- fifo->last = NULL;
- fifo->num_buffers = 0;
- pthread_cond_signal (&fifo->empty);
+ if (!fifo->first) {
- } else
- fifo->num_buffers--;
+ fifo->last = NULL;
+ fifo->num_buffers = 0;
+ pthread_cond_signal (&fifo->empty);
- }
+ } else
+ fifo->num_buffers--;
buf->next = NULL;
-
+
+ return buf;
+}
+
+static audio_buffer_t *fifo_peek (audio_fifo_t *fifo) {
+
+ audio_buffer_t *buf;
+
+ pthread_mutex_lock (&fifo->mutex);
+ buf = fifo_peek_int(fifo, 1);
+ pthread_mutex_unlock (&fifo->mutex);
+
return buf;
}
@@ -1000,7 +1011,7 @@ static void *ao_loop (void *this_gen) {
if (!in_buf) {
lprintf ("loop: get buf from fifo\n");
- in_buf = fifo_remove (this->out_fifo);
+ in_buf = fifo_peek (this->out_fifo);
bufs_since_sync++;
lprintf ("got a buffer\n");
}
@@ -1013,6 +1024,7 @@ static void *ao_loop (void *this_gen) {
}
if (this->discard_buffers) {
+ fifo_remove (this->out_fifo);
if (in_buf->stream)
_x_refcounter_dec(in_buf->stream->refcounter);
fifo_append (this->free_fifo, in_buf);
@@ -1039,6 +1051,7 @@ static void *ao_loop (void *this_gen) {
cur_time = this->clock->get_current_time (this->clock);
if (in_buf->vpts < cur_time ) {
lprintf ("loop: next fifo\n");
+ fifo_remove (this->out_fifo);
if (in_buf->stream)
_x_refcounter_dec(in_buf->stream->refcounter);
fifo_append (this->free_fifo, in_buf);
@@ -1163,6 +1176,7 @@ static void *ao_loop (void *this_gen) {
/* drop package */
lprintf ("loop: drop package, next fifo\n");
+ fifo_remove (this->out_fifo);
if (in_buf->stream)
_x_refcounter_dec(in_buf->stream->refcounter);
fifo_append (this->free_fifo, in_buf);
@@ -1229,6 +1243,7 @@ static void *ao_loop (void *this_gen) {
} else {
result = 0;
}
+ fifo_remove (this->out_fifo);
if( result < 0 ) {
/* device unplugged. */