aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/conf.c1
-rw-r--r--src/conf.h1
-rw-r--r--src/inputPlugins/mp3_plugin.c17
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,