Author: titmuss
Date: Mon Sep 1 11:49:16 2008
New Revision: 2886
URL: http://svn.slimdevices.com?rev=2886&root=Jive&view=rev
Log:
[EMAIL PROTECTED] (orig r2883): awy | 2008-08-22 11:20:23 +0100
Handle skipAhead (strm-a)
[EMAIL PROTECTED] (orig r2884): awy | 2008-08-22 12:48:58 +0100
Initialize sentDecoderFullEvent to false, so that STMl events are sent (for
sync start).
Add 1s STMt tick while decoding.
Modified:
7.4/trunk/ (props changed)
7.4/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h
Propchange: 7.4/trunk/
------------------------------------------------------------------------------
--- svk:merge (original)
+++ svk:merge Mon Sep 1 11:49:16 2008
@@ -2,7 +2,7 @@
bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.1/branches/discovery-refactor:2596
bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.1/trunk:2873
bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.2/trunk:2880
-bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.3/trunk:2881
+bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.3/trunk:2884
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.4/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua?rev=2886&root=Jive&r1=2885&r2=2886&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua Mon Sep
1 11:49:16 2008
@@ -12,6 +12,7 @@
local Task = require("jive.ui.Task")
local Timer = require("jive.ui.Timer")
+local Framework = require("jive.ui.Framework")
local debug = require("jive.utils.debug")
local log = require("jive.utils.log").logger("audio")
@@ -62,6 +63,8 @@
self.threshold = 0
self.tracksStarted = 0
+ self.statusTimestamp = 0
+
self.sentResume = false
self.sentDecoderFullEvent = false
self.sentDecoderUnderrunEvent = false
@@ -79,6 +82,7 @@
status.serverTimestamp = serverTimestamp
self.slimproto:send(status)
+ self.statusTimestamp = Framework:getTicks()
end
@@ -185,6 +189,11 @@
end
end
+ if status.decodeState & DECODE_RUNNING and
+ Framework:getTicks() > self.statusTimestamp + 1000
+ then
+ self:sendStatus(status, "STMt")
+ end
-- stream metadata
local metadata = Decode:streamMetadata()
@@ -283,7 +292,7 @@
function _strm(self, data)
- log:info("strm ", data.command)
+ if data.command ~= 't' then log:info("strm ", data.command) end
if data.command == 's' then
-- start
@@ -313,7 +322,7 @@
self.threshold = data.threshold * 1024
self.sentResume = false
- self.sentDecoderFullEvent = true
+ self.sentDecoderFullEvent = false
self.sentDecoderUnderrunEvent = false
self.sentOutputUnderrunEvent = false
self.sentAudioUnderrunEvent = false
Modified: 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c?rev=2886&root=Jive&r1=2885&r2=2886&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c (original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c Mon Sep 1
11:49:16 2008
@@ -35,6 +35,7 @@
u32_t decode_elapsed_samples = 0;
bool_t decode_first_buffer = FALSE;
u32_t current_sample_rate = 44100;
+u32_t skip_ahead_bytes = 0;
/* decoder fifo used to store decoded samples */
@@ -123,8 +124,8 @@
mqueue_read_complete(&decode_mqueue);
DEBUG_TRACE("decode_skip_ahead_handler interval=%d", interval);
-
- // XXXX
+
+ skip_ahead_bytes = SAMPLES_TO_BYTES((u32_t)((interval *
current_sample_rate) / 1000));
}
Modified: 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c?rev=2886&root=Jive&r1=2885&r2=2886&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c Mon
Sep 1 11:49:16 2008
@@ -42,7 +42,7 @@
*/
static void callback(void *outputBuffer,
unsigned long framesPerBuffer) {
- size_t bytes_used, len;
+ size_t bytes_used, len, skip_bytes = 0;
bool_t reached_start_point;
Uint8 *outputArray = (u8_t *)outputBuffer;
@@ -60,7 +60,14 @@
return;
}
- bytes_used = fifo_bytes_used(&decode_fifo);
+ bytes_used = fifo_bytes_used(&decode_fifo);
+
+ /* only skip if it will not cause an underrun */
+ if (bytes_used + skip_ahead_bytes >= len) {
+ skip_bytes = skip_ahead_bytes;
+ bytes_used -= skip_bytes;
+ }
+
if (bytes_used > len) {
bytes_used = len;
}
@@ -69,6 +76,7 @@
if (bytes_used == 0) {
current_audio_state |= DECODE_STATE_UNDERRUN;
memset(outputArray, 0, len);
+ DEBUG_ERROR("Audio underrun: used 0 bytes");
return;
}
@@ -76,9 +84,29 @@
if (bytes_used < len) {
current_audio_state |= DECODE_STATE_UNDERRUN;
memset(outputArray + bytes_used, 0, len - bytes_used);
+ DEBUG_ERROR("Audio underrun: used %d bytes , requested %d
bytes", bytes_used, len);
}
else {
current_audio_state &= ~DECODE_STATE_UNDERRUN;
+ }
+
+ if (skip_bytes) {
+ size_t wrap;
+
+ DEBUG_TRACE("Skipping %d bytes", skip_bytes);
+
+ wrap = fifo_bytes_until_rptr_wrap(&decode_fifo);
+
+ if (wrap < skip_bytes) {
+ fifo_rptr_incby(&decode_fifo, wrap);
+ skip_bytes -= wrap;
+ skip_ahead_bytes -= wrap;
+ decode_elapsed_samples += BYTES_TO_SAMPLES(wrap);
+ }
+
+ fifo_rptr_incby(&decode_fifo, skip_bytes);
+ skip_ahead_bytes -= skip_bytes;
+ decode_elapsed_samples += BYTES_TO_SAMPLES(skip_bytes);
}
while (bytes_used) {
Modified:
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c?rev=2886&root=Jive&r1=2885&r2=2886&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_portaudio.c
Mon Sep 1 11:49:16 2008
@@ -40,7 +40,7 @@
const PaStreamCallbackTimeInfo *timeInfo,
PaStreamCallbackFlags statusFlags,
void *userData) {
- size_t bytes_used, len;
+ size_t bytes_used, len, skip_bytes = 0;
bool_t reached_start_point;
Uint8 *outputArray = (u8_t *)outputBuffer;
@@ -65,6 +65,13 @@
fifo_lock(&decode_fifo);
bytes_used = fifo_bytes_used(&decode_fifo);
+
+ /* only skip if it will not cause an underrun */
+ if (bytes_used + skip_ahead_bytes >= len) {
+ skip_bytes = skip_ahead_bytes;
+ bytes_used -= skip_bytes;
+ }
+
if (bytes_used > len) {
bytes_used = len;
}
@@ -84,6 +91,25 @@
}
else {
current_audio_state &= ~DECODE_STATE_UNDERRUN;
+ }
+
+ if (skip_bytes) {
+ size_t wrap;
+
+ DEBUG_TRACE("Skipping %d bytes", skip_bytes);
+
+ wrap = fifo_bytes_until_rptr_wrap(&decode_fifo);
+
+ if (wrap < skip_bytes) {
+ fifo_rptr_incby(&decode_fifo, wrap);
+ skip_bytes -= wrap;
+ skip_ahead_bytes -= wrap;
+ decode_elapsed_samples += BYTES_TO_SAMPLES(wrap);
+ }
+
+ fifo_rptr_incby(&decode_fifo, skip_bytes);
+ skip_ahead_bytes -= skip_bytes;
+ decode_elapsed_samples += BYTES_TO_SAMPLES(skip_bytes);
}
while (bytes_used) {
Modified: 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h?rev=2886&root=Jive&r1=2885&r2=2886&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h Mon
Sep 1 11:49:16 2008
@@ -120,6 +120,7 @@
extern u32_t decode_elapsed_samples;
extern bool_t decode_first_buffer;
extern u32_t current_sample_rate;
+extern u32_t skip_ahead_bytes;
/* The fifo used to store decoded samples */
extern u8_t decode_fifo_buf[DECODE_FIFO_SIZE];
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins