diff --git a/NEWS b/NEWS index 349010e53..f81782417 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,7 @@ ver 0.20.7 (not yet released) * database - simple: fix false positive directory loop detection with NFS +* enforce a reasonable minimum audio_buffer_size setting * fix random crashes when compiled with clang ver 0.20.6 (2017/03/10) diff --git a/src/Main.cxx b/src/Main.cxx index 0f9368b1a..5e7610880 100644 --- a/src/Main.cxx +++ b/src/Main.cxx @@ -121,6 +121,9 @@ static constexpr size_t KILOBYTE = 1024; static constexpr size_t MEGABYTE = 1024 * KILOBYTE; static constexpr size_t DEFAULT_BUFFER_SIZE = 4 * MEGABYTE; +static constexpr size_t MIN_BUFFER_SIZE = std::max(CHUNK_SIZE * 32, + 64 * KILOBYTE); + static constexpr unsigned DEFAULT_BUFFER_BEFORE_PLAY = 10; #ifdef ANDROID @@ -310,6 +313,13 @@ initialize_decoder_and_player(const ReplayGainConfig &replay_gain_config) "positive integer, line %i", param->value.c_str(), param->line); buffer_size = tmp * KILOBYTE; + + if (buffer_size < MIN_BUFFER_SIZE) { + FormatWarning(config_domain, "buffer size %lu is too small, using %lu bytes instead", + (unsigned long)buffer_size, + (unsigned long)MIN_BUFFER_SIZE); + buffer_size = MIN_BUFFER_SIZE; + } } else buffer_size = DEFAULT_BUFFER_SIZE;