Author: richard
Date: Wed Jan 14 02:30:26 2009
New Revision: 3813
URL: http://svn.slimdevices.com?rev=3813&root=Jive&view=rev
Log:
Bug: N/A
Description:
Allow streambuf filters to send any status packets, not just metadata, to SC.
Modified:
7.4/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
7.4/trunk/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode.c
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.c
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.h
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=3813&root=Jive&r1=3812&r2=3813&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 Wed Jan
14 02:30:26 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
Modified: 7.4/trunk/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua?rev=3813&root=Jive&r1=3812&r2=3813&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/share/jive/net/SlimProto.lua Wed Jan
14 02:30:26 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/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=3813&root=Jive&r1=3812&r2=3813&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 Wed Jan 14
02:30:26 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/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=3813&root=Jive&r1=3812&r2=3813&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 Wed
Jan 14 02:30:26 2009
@@ -68,23 +68,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 {
int (*init)(lua_State *L);
Modified: 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.c
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.c?rev=3813&root=Jive&r1=3812&r2=3813&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.c (original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.c Wed Jan 14
02:30:26 2009
@@ -325,7 +325,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 +333,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;
}
Modified: 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.h
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.h?rev=3813&root=Jive&r1=3812&r2=3813&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.h (original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.h Wed Jan 14
02:30:26 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,8 @@
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 int streambuf_closeL(lua_State *L);
-
-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_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