Author: ayoung
Date: Thu Sep  8 08:27:33 2011
New Revision: 9503

URL: http://svn.slimdevices.com/jive?rev=9503&view=rev
Log:
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.

Modified:
    7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c
    7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa_backend.c
    7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_null.c
    7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c
    7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h

Modified: 7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c
URL: 
http://svn.slimdevices.com/jive/7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c?rev=9503&r1=9502&r2=9503&view=diff
==============================================================================
--- 7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c (original)
+++ 7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c Thu Sep  8 
08:27:33 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();
        }

Modified: 
7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa_backend.c
URL: 
http://svn.slimdevices.com/jive/7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa_backend.c?rev=9503&r1=9502&r2=9503&view=diff
==============================================================================
--- 
7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa_backend.c 
(original)
+++ 
7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa_backend.c 
Thu Sep  8 08:27:33 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/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_null.c
URL: 
http://svn.slimdevices.com/jive/7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_null.c?rev=9503&r1=9502&r2=9503&view=diff
==============================================================================
--- 7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_null.c 
(original)
+++ 7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_null.c Thu 
Sep  8 08:27:33 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/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c
URL: 
http://svn.slimdevices.com/jive/7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c?rev=9503&r1=9502&r2=9503&view=diff
==============================================================================
--- 7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c 
(original)
+++ 7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c 
Thu Sep  8 08:27:33 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/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h
URL: 
http://svn.slimdevices.com/jive/7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h?rev=9503&r1=9502&r2=9503&view=diff
==============================================================================
--- 7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h 
(original)
+++ 7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h Thu 
Sep  8 08:27:33 2011
@@ -152,6 +152,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
[email protected]
http://lists.slimdevices.com/mailman/listinfo/jive-checkins

Reply via email to