aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Wollesen <encoded@xmtp.net>2008-09-12 16:00:01 +0200
committerMax Kellermann <max@duempel.org>2008-09-12 16:00:01 +0200
commit43ee3c3b366e6a8df088a5684431403f09138ffa (patch)
tree6c04cc4a9ea85e02020c23ac3f44274955776f93
parent1333c392444fad9dc23f4d7a07c39fd275e72e4e (diff)
downloadmpd-43ee3c3b366e6a8df088a5684431403f09138ffa.tar.gz
mpd-43ee3c3b366e6a8df088a5684431403f09138ffa.tar.xz
mpd-43ee3c3b366e6a8df088a5684431403f09138ffa.zip
shout: send shout metadata
Support sending metadata to a shout server using shout_metadata_new() and shout_metadata_add(). The Ogg Vorbis encoder does not support this currently. [mk: this patch was separated from Eric's patch "Refactor and cleanup of shout Ogg and MP3 audio outputs", I added a description]
Diffstat (limited to '')
-rw-r--r--src/audioOutputs/audioOutput_shout.c16
-rw-r--r--src/audioOutputs/audioOutput_shout.h4
-rw-r--r--src/audioOutputs/audioOutput_shout_ogg.c4
3 files changed, 19 insertions, 5 deletions
diff --git a/src/audioOutputs/audioOutput_shout.c b/src/audioOutputs/audioOutput_shout.c
index 7c11cb7e2..5bd2b575c 100644
--- a/src/audioOutputs/audioOutput_shout.c
+++ b/src/audioOutputs/audioOutput_shout.c
@@ -40,6 +40,7 @@ static struct shout_data *new_shout_data(void)
struct shout_data *ret = xmalloc(sizeof(*ret));
ret->shout_conn = shout_new();
+ ret->shout_meta = shout_metadata_new();
ret->opened = 0;
ret->tag = NULL;
ret->tag_to_send = 0;
@@ -59,6 +60,8 @@ static struct shout_data *new_shout_data(void)
static void free_shout_data(struct shout_data *sd)
{
+ if (sd->shout_meta)
+ shout_metadata_free(sd->shout_meta);
if (sd->shout_conn)
shout_free(sd->shout_conn);
if (sd->tag)
@@ -427,12 +430,19 @@ static int my_shout_open_device(struct audio_output *audio_output)
static void send_metadata(struct shout_data * sd)
{
+ static const int size = 1024;
+ char song[size];
+
if (!sd->opened || !sd->tag)
return;
- if (shout_ogg_encoder_send_metadata(sd)) {
- close_shout_conn(sd);
- return;
+ if (shout_ogg_encoder_send_metadata(sd, song, size)) {
+ shout_metadata_add(sd->shout_meta, "song", song);
+ if (SHOUTERR_SUCCESS != shout_set_metadata(sd->shout_conn,
+ sd->shout_meta)) {
+ ERROR("error setting shout metadata\n");
+ return;
+ }
}
sd->tag_to_send = 0;
diff --git a/src/audioOutputs/audioOutput_shout.h b/src/audioOutputs/audioOutput_shout.h
index 295a7e14f..eee2ccad2 100644
--- a/src/audioOutputs/audioOutput_shout.h
+++ b/src/audioOutputs/audioOutput_shout.h
@@ -51,6 +51,7 @@ typedef struct _ogg_vorbis_data {
struct shout_data {
shout_t *shout_conn;
+ shout_metadata_t *shout_meta;
int shout_error;
ogg_vorbis_data od;
@@ -83,7 +84,8 @@ int shout_ogg_encoder_clear_encoder(struct shout_data *sd);
int init_encoder(struct shout_data *sd);
-int shout_ogg_encoder_send_metadata(struct shout_data * sd);
+int shout_ogg_encoder_send_metadata(struct shout_data * sd,
+ char *song, size_t size);
void shout_ogg_encoder_encode(struct shout_data *sd,
const char *chunk, size_t len);
diff --git a/src/audioOutputs/audioOutput_shout_ogg.c b/src/audioOutputs/audioOutput_shout_ogg.c
index c5b08a8c8..d0d1b6880 100644
--- a/src/audioOutputs/audioOutput_shout_ogg.c
+++ b/src/audioOutputs/audioOutput_shout_ogg.c
@@ -186,7 +186,9 @@ int init_encoder(struct shout_data *sd)
return 0;
}
-int shout_ogg_encoder_send_metadata(struct shout_data * sd)
+int shout_ogg_encoder_send_metadata(struct shout_data * sd,
+ mpd_unused char * song,
+ mpd_unused size_t size)
{
ogg_vorbis_data *od = &sd->od;