Author: titmuss
Date: Wed May 7 03:02:28 2008
New Revision: 2427
URL: http://svn.slimdevices.com?rev=2427&root=Jive&view=rev
Log:
Bug: N/A
Description:
Fix Flac 24/stereo playback.
Fix stream handling, to prevent closed fd's being used in the select loop.
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
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=2427&root=Jive&r1=2426&r2=2427&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 Wed May
7 03:02:28 2008
@@ -1,5 +1,5 @@
-local assert = assert
+local assert, tostring = assert, tostring
local oo = require("loop.base")
@@ -174,7 +174,7 @@
status.decodeState & DECODE_RUNNING == 0 then
if self.autostart == '1' and not self.sentResume then
- log:info("resume")
+ log:info("resume decodeFull=", status.decodeFull, "
threshold=", self.threshold)
Decode:resume()
self.sentResume = true
@@ -188,8 +188,42 @@
end
+function _streamConnect(self, serverIp, serverPort)
+ self.stream = Stream:connect(serverIp, serverPort)
+
+ log:info("connect streambuf")
+
+ local wtask = Task("streambufW", self, _streamWrite)
+ self.jnt:t_addWrite(self.stream, wtask, 5)
+
+ self.rtask = Task("streambufR", self, _streamRead)
+ self.jnt:t_addRead(self.stream, self.rtask, 0) -- XXXX timeout?
+end
+
+
+function _streamDisconnect(self)
+ if not self.stream then
+ return
+ end
+
+ log:info("disconnect streambuf")
+
+ self.jnt:t_removeWrite(self.stream)
+ self.jnt:t_removeRead(self.stream)
+
+ self.stream:disconnect()
+ self.stream = nil
+
+ -- XXXX do we need to notify SqueezeCenter
+end
+
+
function _streamWrite(self, networkErr)
- -- XXXX networkErr
+ if networkErr then
+ log:error("write error: ", networkErr)
+ self:_streamDisconnect()
+ return
+ end
local status, err = self.stream:write(self.header)
self.jnt:t_removeWrite(self.stream)
@@ -201,7 +235,11 @@
function _streamRead(self, networkErr)
- -- XXXX networkErr
+ if networkErr then
+ log:error("read error: ", networkErr)
+ self:_streamDisconnect()
+ return
+ end
local n = self.stream:read()
while n do
@@ -217,8 +255,7 @@
n = self.stream:read()
end
- self.jnt:t_removeRead(self.stream)
- self.stream = nil
+ self:_streamDisconnect()
end
@@ -227,6 +264,10 @@
if data.command == 's' then
-- start
+
+ -- disconnect any existing stream
+ self:_streamDisconnect()
+
Decode:start(string.byte(data.mode),
string.byte(data.transitionType),
data.transitionPeriod,
@@ -241,11 +282,6 @@
local serverIp = data.serverIp == 0 and
self.slimproto:getServerIp() or data.serverIp
- if self.stream then
- -- disconnect any existing stream
- self.stream:disconnect()
- end
-
-- reset stream state
-- XXXX flags
self.header = data.header
@@ -259,21 +295,13 @@
self.sentAudioUnderrunEvent = false
-- connect to server
- self.stream = Stream:connect(serverIp, data.serverPort)
-
- local wtask = Task("streambufW", self, _streamWrite)
- self.jnt:t_addWrite(self.stream, wtask, 30)
-
- self.rtask = Task("streambufR", self, _streamRead)
- self.jnt:t_addRead(self.stream, self.rtask, 0) -- XXXX timeout?
+ self:_streamConnect(serverIp, data.serverPort)
elseif data.command == 'q' then
-- quit
-- XXXX check against ip3k
Decode:stop()
- if self.stream then
- self.stream:disconnect()
- end
+ self:_streamDisconnect()
self.tracksStarted = 0
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=2427&root=Jive&r1=2426&r2=2427&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 Wed
May 7 03:02:28 2008
@@ -104,8 +104,8 @@
}
else /* bits_per_sample == 24 */ {
for (i=0; i<frame->header.blocksize; i++) {
- *sptr++ = *lptr++ << 8;
- *sptr++ = *rptr++ << 8;
+ *sptr++ = *lptr++;
+ *sptr++ = *rptr++;
}
}
}
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=2427&root=Jive&r1=2426&r2=2427&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 Wed May
7 03:02:28 2008
@@ -232,6 +232,9 @@
self->stereo = (params[2] == '2');
self->big_endian = (params[3] == '0');
+ DEBUG_TRACE("sample_size=%d sample_rate=%d stereo=%d big_endian=%d\n",
+ self->sample_size, self->sample_rate, self->stereo,
self->big_endian);
+
self->read_buffer = malloc(sizeof(u8_t) * BLOCKSIZE);
self->write_buffer = malloc(sizeof(sample_t) * 2 * BLOCKSIZE);
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins