From 32f52c6211334f64050987919cd1f51fd3d544fa Mon Sep 17 00:00:00 2001 From: Karl Heyes Date: Wed, 25 Feb 2004 20:23:07 +0000 Subject: [PATCH] send mp3 url metadata into a format specific routine svn path=/trunk/icecast/; revision=5864 --- src/format.h | 2 +- src/format_mp3.c | 15 +++++++++++++++ src/format_vorbis.c | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/format.h b/src/format.h index 1c44447b..84c60156 100644 --- a/src/format.h +++ b/src/format.h @@ -54,7 +54,7 @@ typedef struct _format_plugin_tag struct source_tag *source, client_t *client); void (*client_send_headers)(struct _format_plugin_tag *format, struct source_tag *source, client_t *client); - + void (*set_tag)(struct _format_plugin_tag *plugin, char *tag, char *value); void (*free_plugin)(struct _format_plugin_tag *self); /* for internal state management */ diff --git a/src/format_mp3.c b/src/format_mp3.c index 5548ceeb..071ee71d 100644 --- a/src/format_mp3.c +++ b/src/format_mp3.c @@ -63,6 +63,7 @@ static int format_mp3_write_buf_to_client(format_plugin_t *self, client_t *client, unsigned char *buf, int len); static void format_mp3_send_headers(format_plugin_t *self, source_t *source, client_t *client); +static void mp3_set_tag (format_plugin_t *plugin, char *tag, char *value); typedef struct { int use_metadata; @@ -88,6 +89,7 @@ format_plugin_t *format_mp3_get_plugin(http_parser_t *parser) plugin->create_client_data = format_mp3_create_client_data; plugin->client_send_headers = format_mp3_send_headers; plugin->free_plugin = format_mp3_free_plugin; + plugin->set_tag = mp3_set_tag; plugin->format_description = "MP3 audio"; plugin->_state = state; @@ -103,6 +105,19 @@ format_plugin_t *format_mp3_get_plugin(http_parser_t *parser) return plugin; } + +static void mp3_set_tag (format_plugin_t *plugin, char *tag, char *value) +{ + mp3_state *state = plugin->_state; + + thread_mutex_lock(&(state->lock)); + free(state->metadata); + state->metadata = strdup(value); + state->metadata_age++; + thread_mutex_unlock(&(state->lock)); +} + + static int send_metadata(client_t *client, mp3_client_data *client_state, mp3_state *source_state) { diff --git a/src/format_vorbis.c b/src/format_vorbis.c index 2f4cc761..40070f8d 100644 --- a/src/format_vorbis.c +++ b/src/format_vorbis.c @@ -77,6 +77,7 @@ format_plugin_t *format_vorbis_get_plugin(void) plugin->create_client_data = format_vorbis_create_client_data; plugin->client_send_headers = format_vorbis_send_headers; plugin->free_plugin = format_vorbis_free_plugin; + plugin->set_tag = NULL; plugin->format_description = "Ogg Vorbis"; state = (vstate_t *)calloc(1, sizeof(vstate_t));