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