Author: richard
Date: Wed Jan 14 09:01:07 2009
New Revision: 3814
URL: http://svn.slimdevices.com?rev=3814&root=Jive&view=rev
Log:
Bug: N/A
Description:
Add support for copyrighted material.
Modified:
7.4/trunk/squeezeplay/src/squeezeplay/share/jive/audio/Playback.lua
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_priv.h
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_tones.c
7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_vorbis.c
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=3814&root=Jive&r1=3813&r2=3814&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 09:01:07 2009
@@ -319,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/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=3814&root=Jive&r1=3813&r2=3814&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 Wed
Jan 14 09:01:07 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/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c?rev=3814&root=Jive&r1=3813&r2=3814&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_flac.c Wed
Jan 14 09:01:07 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/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c?rev=3814&root=Jive&r1=3813&r2=3814&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_mad.c Wed Jan
14 09:01:07 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/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c?rev=3814&root=Jive&r1=3813&r2=3814&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_output.c Wed
Jan 14 09:01:07 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/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c?rev=3814&root=Jive&r1=3813&r2=3814&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_pcm.c Wed Jan
14 09:01:07 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/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=3814&root=Jive&r1=3813&r2=3814&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 09:01:07 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);
Modified: 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_tones.c
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_tones.c?rev=3814&root=Jive&r1=3813&r2=3814&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_tones.c
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_tones.c Wed
Jan 14 09:01:07 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/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_vorbis.c
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_vorbis.c?rev=3814&root=Jive&r1=3813&r2=3814&view=diff
==============================================================================
--- 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_vorbis.c
(original)
+++ 7.4/trunk/squeezeplay/src/squeezeplay/src/audio/decode/decode_vorbis.c Wed
Jan 14 09:01:07 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/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.c
URL:
http://svn.slimdevices.com/7.4/trunk/squeezeplay/src/squeezeplay/src/audio/streambuf.c?rev=3814&root=Jive&r1=3813&r2=3814&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
09:01:07 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;
}
@@ -462,6 +474,7 @@
}
streambuf_bytes_received = 0;
+ streambuf_copyright = FALSE;
return 0;
}
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=3814&root=Jive&r1=3813&r2=3814&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
09:01:07 2009
@@ -47,6 +47,10 @@
extern ssize_t streambuf_feed_fd(int fd);
+extern bool_t streambuf_is_copyright();
+
+extern void streambuf_set_copyright();
+
extern void streambuf_set_filter(streambuf_filter_t filter);
extern int luaopen_streambuf(lua_State *L);
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins