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
[email protected]
http://lists.slimdevices.com/mailman/listinfo/jive-checkins