Author: ayoung
Date: Fri Sep 9 02:10:02 2011
New Revision: 9504
URL: http://svn.slimdevices.com/jive?rev=9504&view=rev
Log:
bug 3639: Crossfade on skip next/play
Define and implement ImmediateCrossfade capability in SqueezePlay.
Modified:
7.6/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c
7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c
7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h
Modified: 7.6/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
URL:
http://svn.slimdevices.com/jive/7.6/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua?rev=9504&r1=9503&r2=9504&view=diff
==============================================================================
--- 7.6/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
(original)
+++ 7.6/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua Fri Sep
9 02:10:02 2011
@@ -116,6 +116,8 @@
slimproto:capability("spdr")
slimproto:capability("Spdirect", cap)
end
+
+ slimproto:capability("ImmediateCrossfade")
slimproto:capability("test")
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=9504&r1=9503&r2=9504&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 Fri Sep 9
02:10:02 2011
@@ -256,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/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c
URL:
http://svn.slimdevices.com/jive/7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c?rev=9504&r1=9503&r2=9504&view=diff
==============================================================================
--- 7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c
(original)
+++ 7.6/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c Fri
Sep 9 02:10:02 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/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=9504&r1=9503&r2=9504&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 Fri
Sep 9 02:10:02 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.
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/mailman/listinfo/jive-checkins