aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c60
1 files changed, 55 insertions, 5 deletions
diff --git a/src/main.c b/src/main.c
index bfe89ae2a..9b1203a92 100644
--- a/src/main.c
+++ b/src/main.c
@@ -30,7 +30,6 @@
#include "conf.h"
#include "path.h"
#include "mapper.h"
-#include "playerData.h"
#include "pipe.h"
#include "decoder_thread.h"
#include "decoder_control.h"
@@ -70,6 +69,11 @@
#include <locale.h>
#endif
+enum {
+ DEFAULT_BUFFER_SIZE = 2048,
+ DEFAULT_BUFFER_BEFORE_PLAY = 10,
+};
+
GThread *main_task;
GMainLoop *main_loop;
@@ -111,6 +115,55 @@ static void openDB(Options * options, char *argv0)
}
}
+/**
+ * Initialize the decoder and player core, including the music pipe.
+ */
+static void
+initialize_decoder_and_player(void)
+{
+ struct config_param *param;
+ char *test;
+ size_t buffer_size;
+ float perc;
+ unsigned buffered_chunks;
+ unsigned buffered_before_play;
+
+ param = config_get_param(CONF_AUDIO_BUFFER_SIZE);
+ if (param != NULL) {
+ buffer_size = strtol(param->value, &test, 10);
+ if (*test != '\0' || buffer_size <= 0)
+ g_error("buffer size \"%s\" is not a positive integer, "
+ "line %i\n", param->value, param->line);
+ } else
+ buffer_size = DEFAULT_BUFFER_SIZE;
+
+ buffer_size *= 1024;
+
+ buffered_chunks = buffer_size / CHUNK_SIZE;
+
+ if (buffered_chunks >= 1 << 15)
+ g_error("buffer size \"%li\" is too big\n", (long)buffer_size);
+
+ param = config_get_param(CONF_BUFFER_BEFORE_PLAY);
+ if (param != NULL) {
+ perc = strtod(param->value, &test);
+ if (*test != '%' || perc < 0 || perc > 100) {
+ FATAL("buffered before play \"%s\" is not a positive "
+ "percentage and less than 100 percent, line %i"
+ "\n", param->value, param->line);
+ }
+ } else
+ perc = DEFAULT_BUFFER_BEFORE_PLAY;
+
+ buffered_before_play = (perc / 100) * buffered_chunks;
+ if (buffered_before_play > buffered_chunks)
+ buffered_before_play = buffered_chunks;
+
+ pc_init(buffered_before_play);
+ music_pipe_init(buffered_chunks, &pc.notify);
+ dc_init();
+}
+
static gboolean
timer_save_state_file(G_GNUC_UNUSED gpointer data)
{
@@ -189,10 +242,7 @@ int main(int argc, char *argv[])
openDB(&options, argv[0]);
command_init();
- initPlayerData();
- pc_init(buffered_before_play);
- music_pipe_init(buffered_chunks, &pc.notify);
- dc_init();
+ initialize_decoder_and_player();
initAudioConfig();
initAudioDriver();
volume_init();