Author: agrundman
Date: Fri Sep  9 05:39:58 2011
New Revision: 9505

URL: http://svn.slimdevices.com/jive?rev=9505&view=rev
Log:
 r79552@andy-imac (orig r9503):  ayoung | 2011-09-08 11:27:33 -0400
 bug 13814: Implement synchronized unpause 
 Improve accuracy of timed start and resume by delaying evaluation of delay 
interval until where it is used in the output thread/process.
 r79553@andy-imac (orig r9504):  ayoung | 2011-09-09 05:10:02 -0400
 bug 3639: Crossfade on skip next/play 
 Define and implement ImmediateCrossfade capability in SqueezePlay.

Modified:
    7.6/branches/usb-audio/   (props changed)
    
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
    7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode.c
    
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa_backend.c
    
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_null.c
    
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c
    
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c
    
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h

Propchange: 7.6/branches/usb-audio/
------------------------------------------------------------------------------
--- svk:merge (original)
+++ svk:merge Fri Sep  9 05:39:58 2011
@@ -15,7 +15,7 @@
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.4/trunk:8423
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.5/private-branches/7.5.3-rc:9282
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.5/trunk:9408
-bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.6/trunk:9500
+bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.6/trunk:9504
 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.6/branches/usb-audio/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
URL: 
http://svn.slimdevices.com/jive/7.6/branches/usb-audio/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua?rev=9505&r1=9504&r2=9505&view=diff
==============================================================================
--- 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
 (original)
+++ 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
 Fri Sep  9 05:39:58 2011
@@ -116,6 +116,8 @@
                slimproto:capability("spdr")
                slimproto:capability("Spdirect", cap)
        end
+
+       slimproto:capability("ImmediateCrossfade")
 
        slimproto:capability("test")
 

Modified: 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode.c
URL: 
http://svn.slimdevices.com/jive/7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode.c?rev=9505&r1=9504&r2=9505&view=diff
==============================================================================
--- 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode.c 
(original)
+++ 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode.c 
Fri Sep  9 05:39:58 2011
@@ -123,26 +123,18 @@
 
 
 static void decode_resume_audio_handler(void) {
-       int start_interval = 0;
        Uint32 start_jiffies;
 
        start_jiffies = mqueue_read_u32(&decode_mqueue);
        mqueue_read_complete(&decode_mqueue);
        
-       if (start_jiffies) {
-               start_interval = start_jiffies - jive_jiffies();
-       }
-       
-       LOG_DEBUG(log_audio_decode, "decode_resume_audio_handler 
start_interval=%d", start_interval);
+       LOG_DEBUG(log_audio_decode, "decode_resume_audio_handler 
start_jiffies=%u", start_jiffies);
        debug_fullness();
 
        decode_audio_lock();
 
-       if (start_interval) {
-               decode_audio->add_silence_ms = start_interval;
-       }
-
        if (((decode_audio->state & (DECODE_STATE_RUNNING | 
DECODE_STATE_AUTOSTART)) == 0)) {
+               decode_audio->start_at_jiffies = start_jiffies;
                decode_audio->state = DECODE_STATE_AUTOSTART;
                decode_audio->f->resume();
        }
@@ -264,6 +256,13 @@
                params[i] = mqueue_read_u8(&decode_mqueue);
        }
        mqueue_read_complete(&decode_mqueue);
+
+       if (decoder) {
+               decoder->stop(decoder_data);
+
+               decoder = NULL;
+               decoder_data = NULL;
+       }
 
        for (i=0; i<(sizeof(all_decoders)/sizeof(struct decode_module *)); i++) 
{
                if (all_decoders[i]->id == decoder_id) {

Modified: 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa_backend.c
URL: 
http://svn.slimdevices.com/jive/7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa_backend.c?rev=9505&r1=9504&r2=9505&view=diff
==============================================================================
--- 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa_backend.c
 (original)
+++ 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa_backend.c
 Fri Sep  9 05:39:58 2011
@@ -286,6 +286,12 @@
                        && decode_frames > (decode_audio->output_threshold * 
state->pcm_sample_rate / 10)
                )
        {
+               u32_t now = jive_jiffies();
+
+               if (decode_audio->start_at_jiffies > now && now > 
decode_audio->start_at_jiffies - 5000)
+                       /* This does not consider any delay in the ALSA output 
chain - usually 1 period which is 10ms by default */
+                       decode_audio->add_silence_ms = 
decode_audio->start_at_jiffies - now;
+
                decode_audio->state &= ~DECODE_STATE_AUTOSTART;
                decode_audio->state |= DECODE_STATE_RUNNING;
        }

Modified: 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_null.c
URL: 
http://svn.slimdevices.com/jive/7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_null.c?rev=9505&r1=9504&r2=9505&view=diff
==============================================================================
--- 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_null.c
 (original)
+++ 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_null.c
 Fri Sep  9 05:39:58 2011
@@ -47,6 +47,11 @@
                        && bytes_used >= 
SAMPLES_TO_BYTES((u32_t)((decode_audio->output_threshold * stream_sample_rate) 
/ 10))
                )
        {
+               u32_t now = jive_jiffies();
+
+               if (decode_audio->start_at_jiffies > now && now > 
decode_audio->start_at_jiffies - 5000)
+                       decode_audio->add_silence_ms = 
decode_audio->start_at_jiffies - now;
+
                decode_audio->state &= ~DECODE_STATE_AUTOSTART;
                decode_audio->state |= DECODE_STATE_RUNNING;
        }

Modified: 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c
URL: 
http://svn.slimdevices.com/jive/7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c?rev=9505&r1=9504&r2=9505&view=diff
==============================================================================
--- 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c
 (original)
+++ 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c
 Fri Sep  9 05:39:58 2011
@@ -285,11 +285,23 @@
                
                if (decode_transition_type & TRANSITION_CROSSFADE) {
                        size_t crossfadeBytes;
+                       fft_fixed interval;
+
+                       if (decode_transition_type & TRANSITION_IMMEDIATE) {
+                               size_t wanted = 
SAMPLES_TO_BYTES(decode_transition_period * decode_audio->track_sample_rate);
+                               size_t used = 
fifo_bytes_used(&decode_audio->fifo);
+
+                               if (used > wanted) {
+                                       size_t skip = used - wanted;
+                                       if (skip > decode_audio->fifo.wptr) 
decode_audio->fifo.wptr += decode_audio->fifo.size;
+                                       decode_audio->fifo.wptr -= skip;
+                               }
+                       }
 
                        /* We are being asked to do a crossfade. Find out
                         * if it is possible.
                         */
-                       fft_fixed interval = 
determine_transition_interval(sample_rate, decode_transition_period, 
&crossfadeBytes);
+                       interval = determine_transition_interval(sample_rate, 
decode_transition_period, &crossfadeBytes);
 
                        if (interval) {
                                LOG_DEBUG(log_audio_decode, "Starting CROSSFADE 
over %d seconds, requiring %d bytes", fixed_to_s32(interval), (unsigned 
int)crossfadeBytes);
@@ -298,7 +310,8 @@
                                crossfade_ptr = decode_audio->fifo.wptr;
 
                                /* Buffer position to start crossfade */
-                               decode_audio->fifo.wptr = (crossfadeBytes <= 
decode_audio->fifo.wptr) ? (decode_audio->fifo.wptr - crossfadeBytes) : 
(decode_audio->fifo.wptr - crossfadeBytes + decode_audio->fifo.size);
+                               if (crossfadeBytes > decode_audio->fifo.wptr) 
decode_audio->fifo.wptr += decode_audio->fifo.size;
+                               decode_audio->fifo.wptr -= crossfadeBytes;
 
                                /* Gain steps */
                                transition_gain_step = fixed_div(FIXED_ONE, 
fixed_mul(interval, s32_to_fixed(TRANSITION_STEPS_PER_SECOND)));
@@ -491,6 +504,9 @@
                /* Halve the period for fade in/fade out */
                decode_transition_period >>= 1;
                break;
+       case 5:
+               decode_transition_type = TRANSITION_CROSSFADE | 
TRANSITION_IMMEDIATE;
+               break;
        }
 }
 

Modified: 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c
URL: 
http://svn.slimdevices.com/jive/7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c?rev=9505&r1=9504&r2=9505&view=diff
==============================================================================
--- 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c
 (original)
+++ 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c
 Fri Sep  9 05:39:58 2011
@@ -62,6 +62,12 @@
                        && bytes_used >= 
SAMPLES_TO_BYTES((u32_t)((decode_audio->output_threshold * stream_sample_rate) 
/ 10))
                )
        {
+               u32_t now = jive_jiffies();
+
+               if (decode_audio->start_at_jiffies > now && now > 
decode_audio->start_at_jiffies - 5000)
+                       /* This does not consider any delay in the port-audio 
output chain */
+                       decode_audio->add_silence_ms = 
decode_audio->start_at_jiffies - now;
+
                decode_audio->state &= ~DECODE_STATE_AUTOSTART;
                decode_audio->state |= DECODE_STATE_RUNNING;
        }

Modified: 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h
URL: 
http://svn.slimdevices.com/jive/7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h?rev=9505&r1=9504&r2=9505&view=diff
==============================================================================
--- 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h
 (original)
+++ 
7.6/branches/usb-audio/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h
 Fri Sep  9 05:39:58 2011
@@ -20,6 +20,7 @@
 #define TRANSITION_CROSSFADE    0x1
 #define TRANSITION_FADE_IN      0x2
 #define TRANSITION_FADE_OUT     0x4
+#define TRANSITION_IMMEDIATE    0x8
 
 /* Transition steps per second should be a common factor
  * of all supported sample rates.
@@ -152,6 +153,7 @@
        /* sync state */
        size_t skip_ahead_bytes;
        int add_silence_ms;
+       u32_t start_at_jiffies;
 
        /* effect_fifo locks: effect_gain */
        struct fifo effect_fifo;

_______________________________________________
Jive-checkins mailing list
Jive-checkins@lists.slimdevices.com
http://lists.slimdevices.com/mailman/listinfo/jive-checkins

Reply via email to