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

Reply via email to