Compare commits

..

7 Commits

Author SHA1 Message Date
Max Kellermann
d4d2bc072e release v0.21.13 2019-08-06 11:35:42 +02:00
Max Kellermann
bcccc8f66c output/jack: use jack_free() for Windows compatibility 2019-08-06 11:34:56 +02:00
Max Kellermann
848c63e2d5 output/jack: use std::atomic_bool for "shutdown" and "pause"
Without this, the compiler may optimize accesses away.
2019-08-06 11:34:00 +02:00
Max Kellermann
f6d0310f9c output/jack: use SIZE_MAX instead of (size_t)-1 2019-08-06 11:33:52 +02:00
Max Kellermann
3ef043392c input/cdio_paranoia: drop support for libcdio-paranoia older than 10.2+0.93+1
Version 10.2+0.93+1 was released five years ago in 2014 and is the
first version to feature cdio_cddap_free_messages().  There is no way
to check the libcdio-paranoia version at compile time, so let's just
remove support for older versions instead of attempting to fix the
cdio_cddap_free_messages() check at build time.

Closes https://github.com/MusicPlayerDaemon/MPD/issues/613
2019-08-06 11:09:36 +02:00
Max Kellermann
864d6f312d Revert "decoder/mad: use MAD_F_MIN and MAD_F_MAX"
This reverts commit f7ed7446ae.  It was
a bad idea, because MAD_F_MIN and MAD_F_MAX do not represent the
clamping limits, but the theoretical minimum and maximum values of the
mad_fixed_t data type.

Closes https://github.com/MusicPlayerDaemon/MPD/issues/617
2019-08-05 13:07:41 +02:00
Max Kellermann
f44c67de09 increment version number to 0.21.13 2019-08-05 13:05:54 +02:00
9 changed files with 25 additions and 18 deletions

8
NEWS
View File

@@ -1,3 +1,11 @@
ver 0.21.13 (2019/08/06)
* input
- cdio_paranoia: require libcdio-paranoia 10.2+0.93+1
* decoder
- mad: fix crackling sound (0.21.12 regression)
* output
- jack: improved Windows compatibility
ver 0.21.12 (2019/08/03)
* decoder
- mad: update bit rate after seeking

View File

@@ -2,8 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.musicpd"
android:installLocation="auto"
android:versionCode="35"
android:versionName="0.21.12">
android:versionCode="36"
android:versionName="0.21.13">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="26"/>

View File

@@ -38,7 +38,7 @@ author = 'Max Kellermann'
# built documents.
#
# The short X.Y version.
version = '0.21.12'
version = '0.21.13'
# The full version, including alpha/beta/rc tags.
release = version

View File

@@ -1,7 +1,7 @@
project(
'mpd',
['c', 'cpp'],
version: '0.21.12',
version: '0.21.13',
meson_version: '>= 0.49.0',
default_options: [
'c_std=c99',

View File

@@ -79,12 +79,14 @@ static inline int32_t
mad_fixed_to_24_sample(mad_fixed_t sample) noexcept
{
static constexpr unsigned bits = 24;
static constexpr mad_fixed_t MIN = -MAD_F_ONE;
static constexpr mad_fixed_t MAX = MAD_F_ONE - 1;
/* round */
sample = sample + (1L << (MAD_F_FRACBITS - bits));
/* quantize */
return Clamp(sample, MAD_F_MIN, MAD_F_MAX)
return Clamp(sample, MIN, MAX)
>> (MAD_F_FRACBITS + 1 - bits);
}

View File

@@ -298,11 +298,7 @@ CdioParanoiaInputStream::Read(void *ptr, size_t length)
if (s_err) {
FormatError(cdio_domain,
"paranoia_read: %s", s_err);
#if LIBCDIO_VERSION_NUM >= 90
cdio_cddap_free_messages(s_err);
#else
free(s_err);
#endif
}
throw;

View File

@@ -6,7 +6,7 @@ if alsa_dep.found()
input_plugins_sources += 'AlsaInputPlugin.cxx'
endif
libcdio_paranoia_dep = dependency('libcdio_paranoia', version: '>= 0.4', required: get_option('cdio_paranoia'))
libcdio_paranoia_dep = dependency('libcdio_paranoia', version: '>= 10.2+0.93+1', required: get_option('cdio_paranoia'))
conf.set('ENABLE_CDIO_PARANOIA', libcdio_paranoia_dep.found())
if libcdio_paranoia_dep.found()
input_plugins_sources += 'CdioParanoiaInputPlugin.cxx'

View File

@@ -34,11 +34,7 @@
#include "util/Compiler.h"
#include <cdio/version.h>
#if LIBCDIO_VERSION_NUM >= 90
#include <cdio/paranoia/paranoia.h>
#else
#include <cdio/paranoia.h>
#endif
#include <stdexcept>
#include <utility>

View File

@@ -28,6 +28,8 @@
#include "util/Domain.hxx"
#include "Log.hxx"
#include <atomic>
#include <assert.h>
#include <jack/jack.h>
@@ -69,13 +71,13 @@ struct JackOutput final : AudioOutput {
jack_client_t *client;
jack_ringbuffer_t *ringbuffer[MAX_PORTS];
bool shutdown;
std::atomic_bool shutdown;
/**
* While this flag is set, the "process" callback generates
* silence.
*/
bool pause;
std::atomic_bool pause;
explicit JackOutput(const ConfigBlock &block);
@@ -529,7 +531,10 @@ JackOutput::Start()
jports = nullptr;
}
AtScopeExit(jports) { free(jports); };
AtScopeExit(jports) {
if (jports != nullptr)
jack_free(jports);
};
assert(num_dports > 0);
@@ -602,7 +607,7 @@ JackOutput::WriteSamples(const float *src, size_t n_frames)
const unsigned n_channels = audio_format.channels;
float *dest[MAX_CHANNELS];
size_t space = -1;
size_t space = SIZE_MAX;
for (unsigned i = 0; i < n_channels; ++i) {
jack_ringbuffer_data_t d[2];
jack_ringbuffer_get_write_vector(ringbuffer[i], d);