diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/conf.c | 1 | ||||
-rw-r--r-- | src/conf.h | 1 | ||||
-rw-r--r-- | src/inputPlugins/mp3_plugin.c | 17 |
3 files changed, 17 insertions, 2 deletions
diff --git a/src/conf.c b/src/conf.c index 0b3e0df5f..d354634ef 100644 --- a/src/conf.c +++ b/src/conf.c @@ -173,6 +173,7 @@ void initConf(void) registerConfigParam(CONF_ID3V1_ENCODING, 0, 0); registerConfigParam(CONF_METADATA_TO_USE, 0, 0); registerConfigParam(CONF_SAVE_ABSOLUTE_PATHS, 0, 0); + registerConfigParam(CONF_GAPLESS_MP3_PLAYBACK, 0, 0); } static void addBlockParam(ConfigParam * param, char *name, char *value, diff --git a/src/conf.h b/src/conf.h index 166b1d4b6..7d26cadf7 100644 --- a/src/conf.h +++ b/src/conf.h @@ -59,6 +59,7 @@ #define CONF_ID3V1_ENCODING "id3v1_encoding" #define CONF_METADATA_TO_USE "metadata_to_use" #define CONF_SAVE_ABSOLUTE_PATHS "save_absolute_paths_in_playlists" +#define CONF_GAPLESS_MP3_PLAYBACK "gapless_mp3_playback" typedef struct _BlockParam { char *name; diff --git a/src/inputPlugins/mp3_plugin.c b/src/inputPlugins/mp3_plugin.c index 4b3ab6c8c..4e37f9a1c 100644 --- a/src/inputPlugins/mp3_plugin.c +++ b/src/inputPlugins/mp3_plugin.c @@ -31,6 +31,7 @@ #include "../utils.h" #include "../replayGain.h" #include "../tag.h" +#include "../conf.h" #include <stdio.h> #include <stdlib.h> @@ -55,6 +56,10 @@ /* the number of samples of silence the decoder inserts at start */ #define DECODERDELAY 529 +#define DEFAULT_GAPLESS_MP3_PLAYBACK 1 + +static int gaplessPlayback; + /* this is stolen from mpg321! */ struct audio_dither { mad_fixed_t error[3]; @@ -113,6 +118,14 @@ static signed long audio_linear_dither(unsigned int bits, mad_fixed_t sample, /* end of stolen stuff from mpg321 */ +static int mp3_plugin_init(void) +{ + gaplessPlayback = getBoolConfigParam(CONF_GAPLESS_MP3_PLAYBACK); + if (gaplessPlayback == -1) gaplessPlayback = DEFAULT_GAPLESS_MP3_PLAYBACK; + else if (gaplessPlayback < 0) exit(EXIT_FAILURE); + return 1; +} + /* decoder stuff is based on madlld */ #define MP3_DATA_OUTPUT_BUFFER_SIZE 4096 @@ -679,7 +692,7 @@ static int decodeFirstFrame(mp3DecodeData * data, DecoderControl * dc, data->foundXing = 1; data->muteFrame = MUTEFRAME_SKIP; - if (data->inStream->seekable && + if (gaplessPlayback && data->inStream->seekable && parse_lame(&lame, &ptr, &bitlen)) { data->dropSamplesAtStart = lame.encoderDelay + DECODERDELAY; data->dropSamplesAtEnd = lame.encoderPadding; @@ -1063,7 +1076,7 @@ static char *mp3_mimeTypes[] = { "audio/mpeg", NULL }; InputPlugin mp3Plugin = { "mp3", - NULL, + mp3_plugin_init, NULL, NULL, mp3_decode, |