Author: titmuss
Date: Mon Sep  1 11:49:16 2008
New Revision: 2886

URL: http://svn.slimdevices.com?rev=2886&root=Jive&view=rev
Log:
 [EMAIL PROTECTED] (orig r2883):  awy | 2008-08-22 11:20:23 +0100
 Handle skipAhead (strm-a)
 [EMAIL PROTECTED] (orig r2884):  awy | 2008-08-22 12:48:58 +0100
 Initialize sentDecoderFullEvent to false, so that STMl events are sent (for 
sync start).
 Add 1s STMt tick while decoding.

Modified:
    7.4/trunk/   (props changed)
    7.4/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
    7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c
    7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c
    7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c
    7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h

Propchange: 7.4/trunk/
------------------------------------------------------------------------------
--- svk:merge (original)
+++ svk:merge Mon Sep  1 11:49:16 2008
@@ -2,7 +2,7 @@
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.1/branches/discovery-refactor:2596
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.1/trunk:2873
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.2/trunk:2880
-bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.3/trunk:2881
+bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.3/trunk:2884
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/7.0:2013
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/SN:1083
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/scrolling:1378

Modified: 7.4/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
URL: 
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua?rev=2886&root=Jive&r1=2885&r2=2886&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua 
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua Mon Sep 
 1 11:49:16 2008
@@ -12,6 +12,7 @@
 
 local Task                   = require("jive.ui.Task")
 local Timer                  = require("jive.ui.Timer")
+local Framework              = require("jive.ui.Framework")
 
 local debug                  = require("jive.utils.debug")
 local log                    = require("jive.utils.log").logger("audio")
@@ -62,6 +63,8 @@
        self.threshold = 0
        self.tracksStarted = 0
 
+       self.statusTimestamp = 0
+
        self.sentResume = false
        self.sentDecoderFullEvent = false
        self.sentDecoderUnderrunEvent = false
@@ -79,6 +82,7 @@
        status.serverTimestamp = serverTimestamp
 
        self.slimproto:send(status)
+       self.statusTimestamp = Framework:getTicks()
 end
 
 
@@ -185,6 +189,11 @@
                end
        end
 
+       if status.decodeState & DECODE_RUNNING and 
+               Framework:getTicks() > self.statusTimestamp + 1000
+       then
+               self:sendStatus(status, "STMt")
+       end
 
        -- stream metadata
        local metadata = Decode:streamMetadata()
@@ -283,7 +292,7 @@
 
 
 function _strm(self, data)
-       log:info("strm ", data.command)
+       if data.command ~= 't' then log:info("strm ", data.command)     end
 
        if data.command == 's' then
                -- start
@@ -313,7 +322,7 @@
                self.threshold = data.threshold * 1024
 
                self.sentResume = false
-               self.sentDecoderFullEvent = true
+               self.sentDecoderFullEvent = false
                self.sentDecoderUnderrunEvent = false
                self.sentOutputUnderrunEvent = false
                self.sentAudioUnderrunEvent = false

Modified: 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c
URL: 
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c?rev=2886&root=Jive&r1=2885&r2=2886&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c (original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c Mon Sep  1 
11:49:16 2008
@@ -35,6 +35,7 @@
 u32_t decode_elapsed_samples = 0;
 bool_t decode_first_buffer = FALSE;
 u32_t current_sample_rate = 44100;
+u32_t skip_ahead_bytes = 0;
 
 
 /* decoder fifo used to store decoded samples */
@@ -123,8 +124,8 @@
        mqueue_read_complete(&decode_mqueue);
 
        DEBUG_TRACE("decode_skip_ahead_handler interval=%d", interval);
-
-       // XXXX
+       
+       skip_ahead_bytes = SAMPLES_TO_BYTES((u32_t)((interval * 
current_sample_rate) / 1000));
 }
 
 

Modified: 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c
URL: 
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c?rev=2886&root=Jive&r1=2885&r2=2886&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c 
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c Mon 
Sep  1 11:49:16 2008
@@ -42,7 +42,7 @@
  */
 static void callback(void *outputBuffer,
                    unsigned long framesPerBuffer) {
-       size_t bytes_used, len;
+       size_t bytes_used, len, skip_bytes = 0;
        bool_t reached_start_point;
        Uint8 *outputArray = (u8_t *)outputBuffer;
 
@@ -60,7 +60,14 @@
                return;
        }
 
-       bytes_used = fifo_bytes_used(&decode_fifo);     
+       bytes_used = fifo_bytes_used(&decode_fifo);
+       
+       /* only skip if it will not cause an underrun */
+       if (bytes_used + skip_ahead_bytes >= len) {
+               skip_bytes = skip_ahead_bytes;
+               bytes_used -= skip_bytes;
+       }
+
        if (bytes_used > len) {
                bytes_used = len;
        }
@@ -69,6 +76,7 @@
        if (bytes_used == 0) {
                current_audio_state |= DECODE_STATE_UNDERRUN;
                memset(outputArray, 0, len);
+               DEBUG_ERROR("Audio underrun: used 0 bytes");
 
                return;
        }
@@ -76,9 +84,29 @@
        if (bytes_used < len) {
                current_audio_state |= DECODE_STATE_UNDERRUN;
                memset(outputArray + bytes_used, 0, len - bytes_used);
+               DEBUG_ERROR("Audio underrun: used %d bytes , requested %d 
bytes", bytes_used, len);
        }
        else {
                current_audio_state &= ~DECODE_STATE_UNDERRUN;
+       }
+       
+       if (skip_bytes) {
+               size_t wrap;
+
+               DEBUG_TRACE("Skipping %d bytes", skip_bytes);
+               
+               wrap = fifo_bytes_until_rptr_wrap(&decode_fifo);
+
+               if (wrap < skip_bytes) {
+                       fifo_rptr_incby(&decode_fifo, wrap);
+                       skip_bytes -= wrap;
+                       skip_ahead_bytes -= wrap;
+                       decode_elapsed_samples += BYTES_TO_SAMPLES(wrap);
+               }
+
+               fifo_rptr_incby(&decode_fifo, skip_bytes);
+               skip_ahead_bytes -= skip_bytes;
+               decode_elapsed_samples += BYTES_TO_SAMPLES(skip_bytes);
        }
 
        while (bytes_used) {

Modified: 
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c
URL: 
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c?rev=2886&root=Jive&r1=2885&r2=2886&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c 
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c 
Mon Sep  1 11:49:16 2008
@@ -40,7 +40,7 @@
                    const PaStreamCallbackTimeInfo *timeInfo,
                    PaStreamCallbackFlags statusFlags,
                    void *userData) {
-       size_t bytes_used, len;
+       size_t bytes_used, len, skip_bytes = 0;
        bool_t reached_start_point;
        Uint8 *outputArray = (u8_t *)outputBuffer;
 
@@ -65,6 +65,13 @@
        fifo_lock(&decode_fifo);
 
        bytes_used = fifo_bytes_used(&decode_fifo);     
+
+       /* only skip if it will not cause an underrun */
+       if (bytes_used + skip_ahead_bytes >= len) {
+               skip_bytes = skip_ahead_bytes;
+               bytes_used -= skip_bytes;
+       }
+
        if (bytes_used > len) {
                bytes_used = len;
        }
@@ -84,6 +91,25 @@
        }
        else {
                current_audio_state &= ~DECODE_STATE_UNDERRUN;
+       }
+
+       if (skip_bytes) {
+               size_t wrap;
+
+               DEBUG_TRACE("Skipping %d bytes", skip_bytes);
+               
+               wrap = fifo_bytes_until_rptr_wrap(&decode_fifo);
+
+               if (wrap < skip_bytes) {
+                       fifo_rptr_incby(&decode_fifo, wrap);
+                       skip_bytes -= wrap;
+                       skip_ahead_bytes -= wrap;
+                       decode_elapsed_samples += BYTES_TO_SAMPLES(wrap);
+               }
+
+               fifo_rptr_incby(&decode_fifo, skip_bytes);
+               skip_ahead_bytes -= skip_bytes;
+               decode_elapsed_samples += BYTES_TO_SAMPLES(skip_bytes);
        }
 
        while (bytes_used) {

Modified: 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h
URL: 
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h?rev=2886&root=Jive&r1=2885&r2=2886&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h 
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h Mon 
Sep  1 11:49:16 2008
@@ -120,6 +120,7 @@
 extern u32_t decode_elapsed_samples;
 extern bool_t decode_first_buffer;
 extern u32_t current_sample_rate;
+extern u32_t skip_ahead_bytes;
 
 /* The fifo used to store decoded samples */
 extern u8_t decode_fifo_buf[DECODE_FIFO_SIZE];

_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins

Reply via email to