Author: titmuss
Date: Tue May 13 08:35:09 2008
New Revision: 2449
URL: http://svn.slimdevices.com?rev=2449&root=Jive&view=rev
Log:
Bug: N/A
Description:
Improve flac playback.
Modified:
7.2/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c
7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c
7.2/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.c
7.2/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.h
Modified: 7.2/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
URL:
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua?rev=2449&root=Jive&r1=2448&r2=2449&view=diff
==============================================================================
--- 7.2/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
(original)
+++ 7.2/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua Tue May
13 08:35:09 2008
@@ -201,7 +201,7 @@
end
-function _streamDisconnect(self)
+function _streamDisconnect(self, flush)
if not self.stream then
return
end
@@ -212,6 +212,9 @@
self.jnt:t_removeRead(self.stream)
self.stream:disconnect()
+ if flush then
+ self.stream:flush()
+ end
self.stream = nil
-- XXXX do we need to notify SqueezeCenter
@@ -265,8 +268,9 @@
if data.command == 's' then
-- start
- -- disconnect any existing stream
- self:_streamDisconnect()
+ -- if we aborted the stream early, or there's any junk left
+ -- over, flush out whatever's left.
+ self:_streamDisconnect(true)
Decode:start(string.byte(data.mode),
string.byte(data.transitionType),
Modified: 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c
URL:
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c?rev=2449&root=Jive&r1=2448&r2=2449&view=diff
==============================================================================
--- 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c
(original)
+++ 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c Tue
May 13 08:35:09 2008
@@ -34,6 +34,7 @@
struct decode_flac *self = (struct decode_flac *) data;
const size_t requested_bytes = *bytes;
+ bool_t streaming;
if (self->error_occurred) {
return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
@@ -44,14 +45,17 @@
return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
}
- *bytes = streambuf_read(buffer, 0, requested_bytes);
+ *bytes = streambuf_read(buffer, 0, requested_bytes, &streaming);
if (*bytes == 0) {
current_decoder_state |= DECODE_STATE_UNDERRUN;
+
+ if (!streaming) {
+ return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM;
+ }
}
else {
current_decoder_state &= ~DECODE_STATE_UNDERRUN;
}
-
return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
}
@@ -142,11 +146,7 @@
const FLAC__StreamDecoderErrorStatus status,
void *data) {
- struct decode_flac *self = (struct decode_flac *) data;
-
- DEBUG_ERROR("FLAC error: %s\n",
FLAC__StreamDecoderErrorStatusString[status]);
-
- self->error_occurred = TRUE;
+ DEBUG_TRACE("FLAC error: %s\n",
FLAC__StreamDecoderErrorStatusString[status]);
}
@@ -167,7 +167,7 @@
state = FLAC__stream_decoder_get_state(self->decoder);
if (state == FLAC__STREAM_DECODER_ABORTED ||
state == FLAC__STREAM_DECODER_END_OF_STREAM) {
- DEBUG_ERROR("FLAC error %d", state);
+ DEBUG_TRACE("FLAC error: %s",
FLAC__StreamDecoderStateString[state]);
current_decoder_state |= DECODE_STATE_ERROR;
}
Modified: 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c
URL:
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c?rev=2449&root=Jive&r1=2448&r2=2449&view=diff
==============================================================================
--- 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c
(original)
+++ 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c Tue May
13 08:35:09 2008
@@ -170,7 +170,7 @@
return FALSE;
}
- sz = streambuf_read(self->read_buffer + self->leftover, 0, BLOCKSIZE -
self->leftover);
+ sz = streambuf_read(self->read_buffer + self->leftover, 0, BLOCKSIZE -
self->leftover, NULL);
if (!sz) {
current_decoder_state |= DECODE_STATE_UNDERRUN;
return FALSE;
Modified: 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.c
URL:
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.c?rev=2449&root=Jive&r1=2448&r2=2449&view=diff
==============================================================================
--- 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.c (original)
+++ 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.c Tue May 13
08:35:09 2008
@@ -37,7 +37,7 @@
static struct fifo streambuf_fifo;
static size_t streambuf_lptr = 0;
static bool_t streambuf_loop = FALSE;
-
+static bool_t streambuf_streaming = FALSE;
size_t streambuf_get_size(void) {
@@ -117,6 +117,8 @@
size_t n;
fifo_lock(&streambuf_fifo);
+
+ streambuf_streaming = TRUE;
while (size) {
n = fifo_bytes_until_wptr_wrap(&streambuf_fifo);
@@ -138,6 +140,8 @@
size_t n, size;
fifo_lock(&streambuf_fifo);
+
+ streambuf_streaming = TRUE;
size = fifo_bytes_free(&streambuf_fifo);
if (size < 4096) {
@@ -152,11 +156,15 @@
n = recv(fd, streambuf_buf + streambuf_fifo.wptr, n, 0);
if (n < 0) {
+ streambuf_streaming = FALSE;
+
fifo_unlock(&streambuf_fifo);
return -SOCKETERROR;
}
-
- if (n > 0) {
+ else if (n == 0) {
+ streambuf_streaming = FALSE;
+ }
+ else {
fifo_wptr_incby(&streambuf_fifo, n);
}
@@ -165,16 +173,19 @@
}
-size_t streambuf_read(u8_t *buf, size_t min, size_t max) {
+size_t streambuf_read(u8_t *buf, size_t min, size_t max, bool_t *streaming) {
size_t sz, w;
fifo_lock(&streambuf_fifo);
+
+ if (streaming) {
+ *streaming = streambuf_streaming;
+ }
sz = streambuf_get_usedbytes();
if (sz < min) {
fifo_unlock(&streambuf_fifo);
-
return 0; /* underrun */
}
@@ -340,8 +351,6 @@
* 1: self
*/
- // XXXX adjust tcp window size?
-
stream = lua_touserdata(L, 1);
@@ -359,7 +368,7 @@
return 1;
}
- if (n < 0 && n != -ENOSPC) {
+ if (n < 0) {
CLOSESOCKET(stream->fd);
lua_pushnil(L);
Modified: 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.h
URL:
http://svn.slimdevices.com/7.2/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.h?rev=2449&root=Jive&r1=2448&r2=2449&view=diff
==============================================================================
--- 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.h (original)
+++ 7.2/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.h Tue May 13
08:35:09 2008
@@ -19,7 +19,7 @@
extern void streambuf_flush(void);
-extern size_t streambuf_read(u8_t *buf, size_t min, size_t max);
+extern size_t streambuf_read(u8_t *buf, size_t min, size_t max, bool_t
*streaming);
extern int streambuf_openL(lua_State *L);
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins