mirror of
https://gitlab.xiph.org/xiph/icecast-server.git
synced 2024-12-04 14:46:30 -05:00
Commit some other work so it compiles again (incomplete mp3 metadata relaying)
svn path=/trunk/icecast/; revision=4353
This commit is contained in:
parent
76fc62810e
commit
469ac14e11
@ -14,6 +14,7 @@
|
|||||||
#include "source.h"
|
#include "source.h"
|
||||||
#include "format.h"
|
#include "format.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
#include "httpp.h"
|
||||||
|
|
||||||
#include "format_vorbis.h"
|
#include "format_vorbis.h"
|
||||||
#include "format_mp3.h"
|
#include "format_mp3.h"
|
||||||
@ -53,7 +54,8 @@ char *format_get_mimetype(format_type_t type)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
format_plugin_t *format_get_plugin(format_type_t type, char *mount)
|
format_plugin_t *format_get_plugin(format_type_t type, char *mount,
|
||||||
|
http_parser_t *parser)
|
||||||
{
|
{
|
||||||
format_plugin_t *plugin;
|
format_plugin_t *plugin;
|
||||||
|
|
||||||
@ -63,7 +65,7 @@ format_plugin_t *format_get_plugin(format_type_t type, char *mount)
|
|||||||
if (plugin) plugin->mount = mount;
|
if (plugin) plugin->mount = mount;
|
||||||
break;
|
break;
|
||||||
case FORMAT_TYPE_MP3:
|
case FORMAT_TYPE_MP3:
|
||||||
plugin = format_mp3_get_plugin();
|
plugin = format_mp3_get_plugin(parser);
|
||||||
if (plugin) plugin->mount = mount;
|
if (plugin) plugin->mount = mount;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
#include "refbuf.h"
|
#include "refbuf.h"
|
||||||
|
#include "httpp.h"
|
||||||
|
|
||||||
struct source_tag;
|
struct source_tag;
|
||||||
|
|
||||||
@ -50,7 +51,8 @@ typedef struct _format_plugin_tag
|
|||||||
|
|
||||||
format_type_t format_get_type(char *contenttype);
|
format_type_t format_get_type(char *contenttype);
|
||||||
char *format_get_mimetype(format_type_t type);
|
char *format_get_mimetype(format_type_t type);
|
||||||
format_plugin_t *format_get_plugin(format_type_t type, char *mount);
|
format_plugin_t *format_get_plugin(format_type_t type, char *mount,
|
||||||
|
http_parser_t *parser);
|
||||||
|
|
||||||
int format_generic_write_buf_to_client(format_plugin_t *format,
|
int format_generic_write_buf_to_client(format_plugin_t *format,
|
||||||
client_t *client, unsigned char *buf, int len);
|
client_t *client, unsigned char *buf, int len);
|
||||||
|
@ -23,6 +23,9 @@
|
|||||||
|
|
||||||
#define CATMODULE "format-mp3"
|
#define CATMODULE "format-mp3"
|
||||||
|
|
||||||
|
/* Note that this seems to be 8192 in shoutcast - perhaps we want to be the
|
||||||
|
* same for compability with crappy clients?
|
||||||
|
*/
|
||||||
#define ICY_METADATA_INTERVAL 16000
|
#define ICY_METADATA_INTERVAL 16000
|
||||||
|
|
||||||
static void format_mp3_free_plugin(format_plugin_t *self);
|
static void format_mp3_free_plugin(format_plugin_t *self);
|
||||||
@ -48,8 +51,9 @@ typedef struct {
|
|||||||
#define alloca _alloca
|
#define alloca _alloca
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
format_plugin_t *format_mp3_get_plugin(void)
|
format_plugin_t *format_mp3_get_plugin(http_parser_t *parser)
|
||||||
{
|
{
|
||||||
|
char *metadata;
|
||||||
format_plugin_t *plugin;
|
format_plugin_t *plugin;
|
||||||
mp3_state *state = calloc(1, sizeof(mp3_state));
|
mp3_state *state = calloc(1, sizeof(mp3_state));
|
||||||
|
|
||||||
@ -71,6 +75,10 @@ format_plugin_t *format_mp3_get_plugin(void)
|
|||||||
state->metadata = strdup("");
|
state->metadata = strdup("");
|
||||||
thread_mutex_create(&(state->lock));
|
thread_mutex_create(&(state->lock));
|
||||||
|
|
||||||
|
metadata = httpp_getvar(parser, "icy-metaint");
|
||||||
|
if(metadata)
|
||||||
|
state->inline_metadata_interval = atoi(metadata);
|
||||||
|
|
||||||
return plugin;
|
return plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,16 +208,23 @@ static int format_mp3_get_buffer(format_plugin_t *self, char *data,
|
|||||||
unsigned long len, refbuf_t **buffer)
|
unsigned long len, refbuf_t **buffer)
|
||||||
{
|
{
|
||||||
refbuf_t *refbuf;
|
refbuf_t *refbuf;
|
||||||
|
mp3_state *state = self->_state;
|
||||||
|
|
||||||
if(!data) {
|
if(!data) {
|
||||||
*buffer = NULL;
|
*buffer = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
refbuf = refbuf_new(len);
|
if(state->inline_metadata_interval) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
refbuf = refbuf_new(len);
|
||||||
|
|
||||||
memcpy(refbuf->data, data, len);
|
memcpy(refbuf->data, data, len);
|
||||||
|
|
||||||
*buffer = refbuf;
|
*buffer = refbuf;
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static refbuf_queue_t *format_mp3_get_predata(format_plugin_t *self)
|
static refbuf_queue_t *format_mp3_get_predata(format_plugin_t *self)
|
||||||
|
@ -9,9 +9,11 @@
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
char *metadata;
|
char *metadata;
|
||||||
int metadata_age;
|
int metadata_age;
|
||||||
|
int metadata_formatted;
|
||||||
|
int inline_metadata_interval;
|
||||||
mutex_t lock;
|
mutex_t lock;
|
||||||
} mp3_state;
|
} mp3_state;
|
||||||
|
|
||||||
format_plugin_t *format_mp3_get_plugin(void);
|
format_plugin_t *format_mp3_get_plugin(http_parser_t *parser);
|
||||||
|
|
||||||
#endif /* __FORMAT_MP3_H__ */
|
#endif /* __FORMAT_MP3_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user