From e7a515c8b11c643332406d60a13ab1fe06d2b226 Mon Sep 17 00:00:00 2001 From: Tim Phipps Date: Sun, 21 Mar 2010 18:21:47 +0100 Subject: Add support for MixRamp tags Adds mixrampdb and mixrampdelay commands. Reads MIXRAP_START and MIXRAMP_END tags from FLAC files and overlaps instead of crossfading. --- src/decoder_control.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'src/decoder_control.c') diff --git a/src/decoder_control.c b/src/decoder_control.c index eeb4670a0..7388d307f 100644 --- a/src/decoder_control.c +++ b/src/decoder_control.c @@ -22,6 +22,10 @@ #include "player_control.h" #include +#include + +#undef G_LOG_DOMAIN +#define G_LOG_DOMAIN "decoder_control" void dc_init(struct decoder_control *dc) @@ -33,6 +37,10 @@ dc_init(struct decoder_control *dc) dc->state = DECODE_STATE_STOP; dc->command = DECODE_COMMAND_NONE; + + dc->mixramp_start = NULL; + dc->mixramp_end = NULL; + dc->mixramp_prev_end = NULL; } void @@ -40,6 +48,15 @@ dc_deinit(struct decoder_control *dc) { g_cond_free(dc->cond); g_mutex_free(dc->mutex); + if (dc->mixramp_start) + free(dc->mixramp_start); + if (dc->mixramp_end) + free(dc->mixramp_end); + if (dc->mixramp_prev_end) + free(dc->mixramp_prev_end); + dc->mixramp_start = NULL; + dc->mixramp_end = NULL; + dc->mixramp_prev_end = NULL; } static void @@ -147,3 +164,36 @@ dc_quit(struct decoder_control *dc) g_thread_join(dc->thread); dc->thread = NULL; } + +void +dc_mixramp_start(struct decoder_control *dc, char *mixramp_start) +{ + assert(dc != NULL); + + if (dc->mixramp_start) + free(dc->mixramp_start); + dc->mixramp_start = mixramp_start; + g_debug("mixramp_start = %s", mixramp_start ? mixramp_start : "NULL"); +} + +void +dc_mixramp_end(struct decoder_control *dc, char *mixramp_end) +{ + assert(dc != NULL); + + if (dc->mixramp_end) + free(dc->mixramp_end); + dc->mixramp_end = mixramp_end; + g_debug("mixramp_end = %s", mixramp_end ? mixramp_end : "NULL"); +} + +void +dc_mixramp_prev_end(struct decoder_control *dc, char *mixramp_prev_end) +{ + assert(dc != NULL); + + if (dc->mixramp_prev_end) + free(dc->mixramp_prev_end); + dc->mixramp_prev_end = mixramp_prev_end; + g_debug("mixramp_prev_end = %s", mixramp_prev_end ? mixramp_prev_end : "NULL"); +} -- cgit v1.2.3