Author: titmuss
Date: Wed Jan 14 09:23:18 2009
New Revision: 3815

URL: http://svn.slimdevices.com?rev=3815&root=Jive&view=rev
Log:
 r3...@harrypotter (orig r3812):  richard | 2009-01-14 09:15:34 +0000
 Bug: N/A
 Description:
 Fix isRunning() to return false after a "once" timer has completed.
 
 
 r3...@harrypotter (orig r3813):  richard | 2009-01-14 10:30:26 +0000
 Bug: N/A
 Description:
 Allow streambuf filters to send any status packets, not just metadata, to SC.
 
 
 r3...@harrypotter (orig r3814):  richard | 2009-01-14 17:01:07 +0000
 Bug: N/A
 Description:
 Add support for copyrighted material.
 
 

Modified:
    7.4/branches/pango/   (props changed)
    7.4/branches/pango/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
    7.4/branches/pango/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua
    7.4/branches/pango/squeezeplay/src/squeezeplay/share/jive/ui/Timer.lua
    7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode.c
    
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c
    
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c
    7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c
    
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c
    7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c
    
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h
    
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_tones.c
    
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_vorbis.c
    7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/streambuf.c
    7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/streambuf.h

Propchange: 7.4/branches/pango/
------------------------------------------------------------------------------
--- svk:merge (original)
+++ svk:merge Wed Jan 14 09:23:18 2009
@@ -4,7 +4,7 @@
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.2/trunk:2921
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.3/private-branches/jive-refresh:3653
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.3/trunk:3753
-bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.4/trunk:3804
+bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.4/trunk:3814
 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/branches/pango/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
URL: 
http://svn.slimdevices.com/7.4/branches/pango/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua?rev=3815&root=Jive&r1=3814&r2=3815&view=diff
==============================================================================
--- 
7.4/branches/pango/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua 
(original)
+++ 
7.4/branches/pango/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua 
Wed Jan 14 09:23:18 2009
@@ -262,14 +262,10 @@
                self:sendStatus(status, "STMt")
        end
 
-       -- stream metadata
-       local metadata = decode:streamMetadata()
-       if metadata then
-               -- XXXX extend META with more data
-               self.slimproto:send({
-                       opcode = "META",
-                       metadata = metadata.metadata,
-               })
+       -- stream metadata or status codes
+       local packet = decode:dequeuePacket()
+       if packet then
+               self.slimproto:send(packet)
        end
 end
 
@@ -323,6 +319,8 @@
                self:_streamDisconnect(TCP_CLOSE_LOCAL_RST)
                return
        end
+
+log:warn("######## ", self.header)
 
        local status, err = self.stream:write(self, self.header)
        self.jnt:t_removeWrite(self.stream)

Modified: 
7.4/branches/pango/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua
URL: 
http://svn.slimdevices.com/7.4/branches/pango/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua?rev=3815&root=Jive&r1=3814&r2=3815&view=diff
==============================================================================
--- 7.4/branches/pango/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua 
(original)
+++ 7.4/branches/pango/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua 
Wed Jan 14 09:23:18 2009
@@ -199,14 +199,6 @@
 
                return {
                        data.headers
-               }
-       end,
-
-       META = function(self, data)
-               assert(data.metadata)
-
-               return  {
-                       data.metadata
                }
        end,
 
@@ -536,14 +528,18 @@
        end
 
        assert(packet.opcode)
-       assert(opcodes[packet.opcode], "Unknown opcode")
        packet.jiffies = Framework:getTicks()
 
        log:debug("send opcode=", packet.opcode)
 
        -- encode packet
        local fn = opcodes[packet.opcode]
-       local body = table.concat(fn(self, packet))
+       local body
+       if fn then
+               body = table.concat(fn(self, packet))
+       else
+               body = packet.data
+       end
 
        local data = table.concat({
                packet.opcode,

Modified: 7.4/branches/pango/squeezeplay/src/squeezeplay/share/jive/ui/Timer.lua
URL: 
http://svn.slimdevices.com/7.4/branches/pango/squeezeplay/src/squeezeplay/share/jive/ui/Timer.lua?rev=3815&root=Jive&r1=3814&r2=3815&view=diff
==============================================================================
--- 7.4/branches/pango/squeezeplay/src/squeezeplay/share/jive/ui/Timer.lua 
(original)
+++ 7.4/branches/pango/squeezeplay/src/squeezeplay/share/jive/ui/Timer.lua Wed 
Jan 14 09:23:18 2009
@@ -180,6 +180,8 @@
                -- call back may modify the timer so update it first
                if not timer.once then
                        timer:_insertTimer(timer.expires + timer.interval)
+               else
+                       timer.expires = nil
                end
 
                local status, err = pcall(timer.callback)

Modified: 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode.c
URL: 
http://svn.slimdevices.com/7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode.c?rev=3815&root=Jive&r1=3814&r2=3815&view=diff
==============================================================================
--- 7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode.c 
(original)
+++ 7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode.c 
Wed Jan 14 09:23:18 2009
@@ -28,7 +28,6 @@
 /* current decoder state */
 u32_t current_decoder_state = 0;
 u32_t current_audio_state = 0;
-
 
 /* state variables for the current track */
 u32_t decode_num_tracks_started = 0;
@@ -50,7 +49,8 @@
 
 
 /* meta data mqueue */
-struct decode_metadata *decode_metadata;
+static void *packet_data = NULL;
+static size_t packet_len = 0;
 
 
 /* audio instance */
@@ -310,51 +310,56 @@
 /*
  * stream metadata interface
  */
-void decode_queue_metadata(struct decode_metadata *metadata) {
-       fifo_lock(&decode_fifo);
-
-       if (decode_metadata) {
-               DEBUG_TRACE("Dropped metadata");
-               free(decode_metadata);
-       }
-
-       metadata->timestamp = SDL_GetTicks();
-       metadata->fullness = fifo_bytes_used(&decode_fifo);
-
-       decode_metadata = metadata;
-
-       fifo_unlock(&decode_fifo);
-}
-
-
-static int decode_stream_metadata(lua_State *L) {
+void decode_queue_metadata(enum metadata_type type, u8_t *metadata, size_t 
metadata_len) {
+       char *buf;
+
+       buf = malloc(metadata_len + 4);
+       strncpy(buf, "META", 4);
+       memcpy(buf + 4, metadata, metadata_len);
+
+       decode_queue_packet(buf, metadata_len + 4);
+       /* decode_queue_packet will free buf */
+}
+
+
+void decode_queue_packet(void *data, size_t len) {
+       fifo_lock(&decode_fifo);
+
+       if (packet_data) {
+               /* if this happens often we need to implement a queue */
+               DEBUG_ERROR("dropped queued packet");
+               free(packet_data);
+       }
+
+       packet_data = data;
+       packet_len = len;
+
+       fifo_unlock(&decode_fifo);
+}
+
+
+static int decode_dequeue_packet(lua_State *L) {
        /*
         * 1: self
         */
 
        fifo_lock(&decode_fifo);
 
-       if (!decode_metadata) {
+       if (!packet_data) {
                fifo_unlock(&decode_fifo);
                return 0;
        }
 
        lua_newtable(L);
 
-       lua_pushinteger(L, decode_metadata->type);
-       lua_setfield(L, 2, "type");
-
-       lua_pushinteger(L, decode_metadata->timestamp);
-       lua_setfield(L, 2, "timestamp");
-
-       lua_pushinteger(L, decode_metadata->fullness);
-       lua_setfield(L, 2, "fullness");
-
-       lua_pushlstring(L, (char *) &decode_metadata->data, 
decode_metadata->len);
-       lua_setfield(L, 2, "metadata");
-
-       free(decode_metadata);
-       decode_metadata = NULL;
+       lua_pushlstring(L, (const char *)packet_data, 4);
+       lua_setfield(L, 2, "opcode");
+
+       lua_pushlstring(L, (const char *)packet_data + 4, packet_len - 4);
+       lua_setfield(L, 2, "data");
+
+       free(packet_data);
+       packet_data = NULL;
 
        fifo_unlock(&decode_fifo);
 
@@ -727,7 +732,7 @@
        { "start", decode_start },
        { "songEnded", decode_song_ended },
        { "status", decode_status },
-       { "streamMetadata", decode_stream_metadata },
+       { "dequeuePacket", decode_dequeue_packet },
        { "audioEnable", decode_audio_enable },
        { "audioGain", decode_audio_gain },
        { NULL, NULL }

Modified: 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c
URL: 
http://svn.slimdevices.com/7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c?rev=3815&root=Jive&r1=3814&r2=3815&view=diff
==============================================================================
--- 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c 
(original)
+++ 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c 
Wed Jan 14 09:23:18 2009
@@ -11,6 +11,7 @@
 #include "audio/fifo.h"
 #include "audio/fixed_math.h"
 #include "audio/mqueue.h"
+#include "audio/streambuf.h"
 #include "audio/decode/decode.h"
 #include "audio/decode/decode_priv.h"
 
@@ -33,11 +34,15 @@
        unsigned int period_count;
        unsigned int rate_max;
 
-       /* alsa state */
+       /* alsa pcm state */
        snd_pcm_t *pcm;
        snd_pcm_hw_params_t *hw_params;
        snd_pcm_sframes_t period_size;
 
+       /* alsa control state */
+       snd_hctl_t *hctl;
+       snd_hctl_elem_t *iec958_elem;
+
        /* playback state */
        u32_t new_sample_rate;
        u32_t pcm_sample_rate;
@@ -61,6 +66,8 @@
 static struct decode_alsa *playback_state;
 static struct decode_alsa *effects_state;
 
+
+static void decode_alsa_copyright(bool_t copyright);
 
 
 /*
@@ -183,8 +190,12 @@
        }
 
        reached_start_point = decode_check_start_point();
-       if (reached_start_point && current_sample_rate != 
state->pcm_sample_rate) {
-               state->new_sample_rate = current_sample_rate;
+       if (reached_start_point) {
+               if (current_sample_rate != state->pcm_sample_rate) {
+                       state->new_sample_rate = current_sample_rate;
+               }
+
+               decode_alsa_copyright(streambuf_is_copyright());
        }
 }
 
@@ -203,21 +214,26 @@
 static int pcm_close(struct decode_alsa *state) {
        int err;
 
-       if (!state->pcm) {
-               return 0;
-       }
-
-       if ((err = snd_pcm_drain(state->pcm)) < 0) {
-               DEBUG_ERROR("snd_pcm_drain error: %s", snd_strerror(err));
-       }
-
-       if ((err = snd_pcm_close(state->pcm)) < 0) {
-               DEBUG_ERROR("snd_pcm_close error: %s", snd_strerror(err));
-       }
-
-       snd_pcm_hw_params_free(state->hw_params);
-
-       state->pcm = NULL;
+       if (state->pcm) {
+               if ((err = snd_pcm_drain(state->pcm)) < 0) {
+                       DEBUG_ERROR("snd_pcm_drain error: %s", 
snd_strerror(err));
+               }
+
+               if ((err = snd_pcm_close(state->pcm)) < 0) {
+                       DEBUG_ERROR("snd_pcm_close error: %s", 
snd_strerror(err));
+               }
+
+               snd_pcm_hw_params_free(state->hw_params);
+
+               state->pcm = NULL;
+       }
+
+       if (state->hctl) {
+               snd_hctl_close(state->hctl);
+               state->hctl = NULL;
+               state->iec958_elem = NULL;
+       }
+
        return 0;
 }
 
@@ -226,6 +242,7 @@
        int err, dir;
        unsigned int val;
        snd_pcm_uframes_t size;
+       snd_ctl_elem_id_t *id;
 
        /* Close existing pcm (if any) */
        if (state->pcm) {
@@ -315,6 +332,29 @@
                return err;
        }
        state->period_size = size;
+
+       /* iec958 control */
+       if ((err = snd_hctl_open(&state->hctl, state->name, 0)) < 0) {
+               DEBUG_ERROR("snd_hctl_open failed: %s", snd_strerror(err));
+               goto skip_iec958;
+       }
+
+       if ((err = snd_hctl_load(state->hctl)) < 0) {
+               DEBUG_ERROR("snd_hctl_load failed: %s", snd_strerror(err));
+               goto skip_iec958;
+       }
+
+       /* dies with warning on GCC 4.2:
+        * snd_ctl_elem_id_alloca(&id);
+        */
+       id = (snd_ctl_elem_id_t *) alloca(snd_ctl_elem_id_sizeof());
+       memset(id, 0, snd_ctl_elem_id_sizeof());
+       snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
+       snd_ctl_elem_id_set_name(id, "IEC958 Playback Default");
+
+       state->iec958_elem = snd_hctl_find_elem(state->hctl, id);
+
+ skip_iec958:
 
 #ifdef RUNTIME_DEBUG
        snd_pcm_dump(state->pcm, output);
@@ -615,6 +655,51 @@
 static void decode_alsa_gain(s32_t left_gain, s32_t right_gain) {
        playback_state->lgain = left_gain;
        playback_state->rgain = right_gain;
+}
+
+
+static void decode_alsa_copyright(bool_t copyright) {
+       snd_ctl_elem_value_t *control;
+       snd_aes_iec958_t iec958;
+       int err;
+
+       DEBUG_TRACE("copyright %s asserted", (copyright)?"is":"not");
+
+       if (!playback_state->iec958_elem) {
+               /* not supported */
+               return;
+       }
+
+       /* dies with warning on GCC 4.2:
+        * snd_ctl_elem_value_alloca(&control);
+        */
+       control = (snd_ctl_elem_value_t *) alloca(snd_ctl_elem_value_sizeof());
+       memset(control, 0, snd_ctl_elem_value_sizeof());
+
+       if ((err = snd_hctl_elem_read(playback_state->iec958_elem, control)) < 
0) {
+               DEBUG_ERROR("snd_hctl_elem_read error: %s", snd_strerror(err));
+               return;
+       }
+
+       snd_ctl_elem_value_get_iec958(control, &iec958);
+
+       /* 0 = copyright, 1 = not copyright */
+       if (copyright) {
+               iec958.status[0] &= ~(1<<2);
+       }
+       else {
+               iec958.status[0] |= (1<<2);
+       }
+
+       snd_ctl_elem_value_set_iec958(control, &iec958);
+
+       DEBUG_TRACE("iec958 status: %02x %02x %02x %02x\n",
+                   iec958.status[0], iec958.status[1], iec958.status[2], 
iec958.status[3]);
+
+       if ((err = snd_hctl_elem_write(playback_state->iec958_elem, control)) < 
0) {
+               DEBUG_ERROR("snd_hctl_elem_write error: %s", snd_strerror(err));
+               return;
+       }
 }
 
 

Modified: 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c
URL: 
http://svn.slimdevices.com/7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c?rev=3815&root=Jive&r1=3814&r2=3815&view=diff
==============================================================================
--- 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c 
(original)
+++ 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c 
Wed Jan 14 09:23:18 2009
@@ -116,8 +116,7 @@
 
        decode_output_samples(sbuf,
                              frame->header.blocksize,
-                             frame->header.sample_rate,
-                             FALSE);
+                             frame->header.sample_rate);
 
        free(sbuf);
 

Modified: 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c
URL: 
http://svn.slimdevices.com/7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c?rev=3815&root=Jive&r1=3814&r2=3815&view=diff
==============================================================================
--- 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c 
(original)
+++ 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c 
Wed Jan 14 09:23:18 2009
@@ -377,8 +377,7 @@
                        if (buf == buf_end) {
                                decode_output_samples(self->output_buffer,
                                                      (buf - 
self->output_buffer) / 2,
-                                                     self->sample_rate,
-                                                     FALSE);
+                                                     self->sample_rate);
 
                                buf = self->output_buffer;
                        }
@@ -386,8 +385,7 @@
 
                decode_output_samples(self->output_buffer,
                                      (buf - self->output_buffer) / 2,
-                                     self->sample_rate,
-                                     FALSE);
+                                     self->sample_rate);
        }
 
        /* If we've come to the guard pointer, we're done */

Modified: 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c
URL: 
http://svn.slimdevices.com/7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c?rev=3815&root=Jive&r1=3814&r2=3815&view=diff
==============================================================================
--- 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c 
(original)
+++ 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c 
Wed Jan 14 09:23:18 2009
@@ -332,8 +332,7 @@
 }
 
 
-void decode_output_samples(sample_t *buffer, u32_t nsamples, int sample_rate,
-                          bool_t copyright_asserted) {
+void decode_output_samples(sample_t *buffer, u32_t nsamples, int sample_rate) {
        size_t bytes_out;
 
        /* Some decoders can pass no samples at the start of the track. Stop

Modified: 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c
URL: 
http://svn.slimdevices.com/7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c?rev=3815&root=Jive&r1=3814&r2=3815&view=diff
==============================================================================
--- 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c 
(original)
+++ 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c 
Wed Jan 14 09:23:18 2009
@@ -129,7 +129,7 @@
        }
 
        if (num_samples) {
-               decode_output_samples(self->write_buffer, self->stereo ? 
num_samples / 2 : num_samples, self->sample_rate, FALSE);
+               decode_output_samples(self->write_buffer, self->stereo ? 
num_samples / 2 : num_samples, self->sample_rate);
        }
 
        self->leftover = sz - (read_pos - self->read_buffer);

Modified: 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h
URL: 
http://svn.slimdevices.com/7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h?rev=3815&root=Jive&r1=3814&r2=3815&view=diff
==============================================================================
--- 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h 
(original)
+++ 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h 
Wed Jan 14 09:23:18 2009
@@ -52,8 +52,7 @@
 
 extern u32_t decode_output_percent_used(void);
 
-extern void decode_output_samples(sample_t *buffer, u32_t samples, int 
sample_rate,
-                                  bool_t copyright_asserted);
+extern void decode_output_samples(sample_t *buffer, u32_t samples, int 
sample_rate);
 
 extern void decode_output_remove_padding(u32_t nsamples, u32_t sample_rate);
 
@@ -67,23 +66,6 @@
 
 extern void decode_set_track_polarity_inversion(u8_t inversion);
 
-
-/* Stream metadata */
-
-struct decode_metadata {
-       enum {
-               SHOUTCAST = 0,
-               WMA_GUID = 1,
-       } type;
-
-       u32_t timestamp;
-       size_t fullness;
-
-       size_t len;
-       u8_t data;
-};
-
-extern void decode_queue_metadata(struct decode_metadata *metadata);
 
 /* Audio output api */
 struct decode_audio {

Modified: 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_tones.c
URL: 
http://svn.slimdevices.com/7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_tones.c?rev=3815&root=Jive&r1=3814&r2=3815&view=diff
==============================================================================
--- 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_tones.c 
(original)
+++ 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_tones.c 
Wed Jan 14 09:23:18 2009
@@ -161,7 +161,7 @@
                        break;
        }               
 
-       decode_output_samples(self->write_buffer, BLOCKSIZE / 2, 
self->sample_rate, FALSE);
+       decode_output_samples(self->write_buffer, BLOCKSIZE / 2, 
self->sample_rate);
                                              
        return TRUE;
 }              

Modified: 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_vorbis.c
URL: 
http://svn.slimdevices.com/7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_vorbis.c?rev=3815&root=Jive&r1=3814&r2=3815&view=diff
==============================================================================
--- 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_vorbis.c 
(original)
+++ 
7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/decode/decode_vorbis.c 
Wed Jan 14 09:23:18 2009
@@ -188,7 +188,7 @@
                                        }
                                }
 
-                               decode_output_samples((sample_t *)(void 
*)self->output_buffer, nsamples, self->sample_rate, FALSE);
+                               decode_output_samples((sample_t *)(void 
*)self->output_buffer, nsamples, self->sample_rate);
 
                                return TRUE;
                        }

Modified: 7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/streambuf.c
URL: 
http://svn.slimdevices.com/7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/streambuf.c?rev=3815&root=Jive&r1=3814&r2=3815&view=diff
==============================================================================
--- 7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/streambuf.c 
(original)
+++ 7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/streambuf.c Wed 
Jan 14 09:23:18 2009
@@ -46,6 +46,8 @@
 static streambuf_filter_t streambuf_filter;
 static streambuf_filter_t streambuf_next_filter;
 
+static bool_t streambuf_copyright;
+
 /* shoutcast metadata state */
 static u32_t icy_meta_interval;
 static s32_t icy_meta_remaining;
@@ -272,6 +274,16 @@
        fifo_unlock(&streambuf_fifo);
 
        return n;
+}
+
+
+bool_t streambuf_is_copyright() {
+       return streambuf_copyright;
+}
+
+
+void streambuf_set_copyright() {
+       streambuf_copyright = TRUE;
 }
 
 
@@ -325,7 +337,7 @@
                }
                else {
                        /* we're reading the metadata */
-                       struct decode_metadata *icy_buf;
+                       u8_t *icy_buf;
                        size_t icy_len = -icy_meta_remaining;
 
                        if (avail < icy_len) {
@@ -333,20 +345,13 @@
                                break;
                        }
 
-                       icy_buf = malloc(sizeof(struct decode_metadata) + 
icy_len - 1);
-
-                       icy_buf->type = SHOUTCAST;
-                       icy_buf->len = icy_len;
-
-                       r = streambuf_fast_read(&icy_buf->data, icy_len, 
icy_len, NULL);
+                       icy_buf = alloca(icy_len);
+                       r = streambuf_fast_read(icy_buf, icy_len, icy_len, 
NULL);
                        assert(r == icy_len);
-
-                       // XXXX queue metadata
-                       assert( strstr( (char *)&icy_buf->data, "StreamTitle" ) 
!= NULL );
-                       DEBUG_TRACE("got icy metadata: %s", (char *) 
&icy_buf->data);
-
-                       decode_queue_metadata(icy_buf);
-                       /* decode will free icy_buf */
+                       assert( strstr( (char *)icy_buf, "StreamTitle" ) != 
NULL );
+                       DEBUG_TRACE("got icy metadata: %s", (char *) icy_buf);
+
+                       decode_queue_metadata(SHOUTCAST, icy_buf, icy_len);
 
                        icy_meta_remaining = icy_meta_interval;
                }
@@ -469,6 +474,7 @@
        }
 
        streambuf_bytes_received = 0;
+       streambuf_copyright = FALSE;
 
        return 0;
 }

Modified: 7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/streambuf.h
URL: 
http://svn.slimdevices.com/7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/streambuf.h?rev=3815&root=Jive&r1=3814&r2=3815&view=diff
==============================================================================
--- 7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/streambuf.h 
(original)
+++ 7.4/branches/pango/squeezeplay/src/squeezeplay/src/audio/streambuf.h Wed 
Jan 14 09:23:18 2009
@@ -7,6 +7,20 @@
 
 /* streambuf filter, used to parse metadata */
 typedef ssize_t (*streambuf_filter_t)(u8_t *buf, size_t min, size_t max, 
bool_t *streaming);
+
+
+/* Stream metadata */
+
+enum metadata_type {
+       SHOUTCAST = 0,
+       WMA_GUID = 1,
+};
+
+extern void decode_queue_metadata(enum metadata_type type, u8_t *metadata, 
size_t metadata_len);
+
+extern void decode_queue_packet(void *data, size_t len);
+
+/* Stream buffer */
 
 extern size_t streambuf_get_size(void);
 
@@ -31,20 +45,12 @@
 
 extern size_t streambuf_read(u8_t *buf, size_t min, size_t max, bool_t 
*streaming);
 
-extern int streambuf_openL(lua_State *L);
+extern ssize_t streambuf_feed_fd(int fd);
 
-extern int streambuf_closeL(lua_State *L);
+extern bool_t streambuf_is_copyright();
 
-extern int streambuf_flushL(lua_State *L);
-
-extern int streambuf_getfdL(lua_State *L);
-
-extern void streambuf_feed(u8_t *buf, size_t size);
-
-extern ssize_t streambuf_feed_fd(int fd);
+extern void streambuf_set_copyright();
 
 extern void streambuf_set_filter(streambuf_filter_t filter);
 
-extern int streambuf_readL(lua_State *L);
-
 extern int luaopen_streambuf(lua_State *L);

_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins

Reply via email to