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]
This commit is contained in:
Eric Wollesen 2008-09-12 16:00:01 +02:00 committed by Max Kellermann
parent 1333c39244
commit 43ee3c3b36
3 changed files with 19 additions and 5 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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;