Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d4d2bc072e | ||
|
|
bcccc8f66c | ||
|
|
848c63e2d5 | ||
|
|
f6d0310f9c | ||
|
|
3ef043392c | ||
|
|
864d6f312d | ||
|
|
f44c67de09 |
8
NEWS
8
NEWS
@@ -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)
|
ver 0.21.12 (2019/08/03)
|
||||||
* decoder
|
* decoder
|
||||||
- mad: update bit rate after seeking
|
- mad: update bit rate after seeking
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.musicpd"
|
package="org.musicpd"
|
||||||
android:installLocation="auto"
|
android:installLocation="auto"
|
||||||
android:versionCode="35"
|
android:versionCode="36"
|
||||||
android:versionName="0.21.12">
|
android:versionName="0.21.13">
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="26"/>
|
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="26"/>
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ author = 'Max Kellermann'
|
|||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = '0.21.12'
|
version = '0.21.13'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = version
|
release = version
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
project(
|
project(
|
||||||
'mpd',
|
'mpd',
|
||||||
['c', 'cpp'],
|
['c', 'cpp'],
|
||||||
version: '0.21.12',
|
version: '0.21.13',
|
||||||
meson_version: '>= 0.49.0',
|
meson_version: '>= 0.49.0',
|
||||||
default_options: [
|
default_options: [
|
||||||
'c_std=c99',
|
'c_std=c99',
|
||||||
|
|||||||
@@ -79,12 +79,14 @@ static inline int32_t
|
|||||||
mad_fixed_to_24_sample(mad_fixed_t sample) noexcept
|
mad_fixed_to_24_sample(mad_fixed_t sample) noexcept
|
||||||
{
|
{
|
||||||
static constexpr unsigned bits = 24;
|
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 */
|
/* round */
|
||||||
sample = sample + (1L << (MAD_F_FRACBITS - bits));
|
sample = sample + (1L << (MAD_F_FRACBITS - bits));
|
||||||
|
|
||||||
/* quantize */
|
/* quantize */
|
||||||
return Clamp(sample, MAD_F_MIN, MAD_F_MAX)
|
return Clamp(sample, MIN, MAX)
|
||||||
>> (MAD_F_FRACBITS + 1 - bits);
|
>> (MAD_F_FRACBITS + 1 - bits);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -298,11 +298,7 @@ CdioParanoiaInputStream::Read(void *ptr, size_t length)
|
|||||||
if (s_err) {
|
if (s_err) {
|
||||||
FormatError(cdio_domain,
|
FormatError(cdio_domain,
|
||||||
"paranoia_read: %s", s_err);
|
"paranoia_read: %s", s_err);
|
||||||
#if LIBCDIO_VERSION_NUM >= 90
|
|
||||||
cdio_cddap_free_messages(s_err);
|
cdio_cddap_free_messages(s_err);
|
||||||
#else
|
|
||||||
free(s_err);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
throw;
|
throw;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ if alsa_dep.found()
|
|||||||
input_plugins_sources += 'AlsaInputPlugin.cxx'
|
input_plugins_sources += 'AlsaInputPlugin.cxx'
|
||||||
endif
|
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())
|
conf.set('ENABLE_CDIO_PARANOIA', libcdio_paranoia_dep.found())
|
||||||
if libcdio_paranoia_dep.found()
|
if libcdio_paranoia_dep.found()
|
||||||
input_plugins_sources += 'CdioParanoiaInputPlugin.cxx'
|
input_plugins_sources += 'CdioParanoiaInputPlugin.cxx'
|
||||||
|
|||||||
@@ -34,11 +34,7 @@
|
|||||||
#include "util/Compiler.h"
|
#include "util/Compiler.h"
|
||||||
|
|
||||||
#include <cdio/version.h>
|
#include <cdio/version.h>
|
||||||
#if LIBCDIO_VERSION_NUM >= 90
|
|
||||||
#include <cdio/paranoia/paranoia.h>
|
#include <cdio/paranoia/paranoia.h>
|
||||||
#else
|
|
||||||
#include <cdio/paranoia.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|||||||
@@ -28,6 +28,8 @@
|
|||||||
#include "util/Domain.hxx"
|
#include "util/Domain.hxx"
|
||||||
#include "Log.hxx"
|
#include "Log.hxx"
|
||||||
|
|
||||||
|
#include <atomic>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include <jack/jack.h>
|
#include <jack/jack.h>
|
||||||
@@ -69,13 +71,13 @@ struct JackOutput final : AudioOutput {
|
|||||||
jack_client_t *client;
|
jack_client_t *client;
|
||||||
jack_ringbuffer_t *ringbuffer[MAX_PORTS];
|
jack_ringbuffer_t *ringbuffer[MAX_PORTS];
|
||||||
|
|
||||||
bool shutdown;
|
std::atomic_bool shutdown;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* While this flag is set, the "process" callback generates
|
* While this flag is set, the "process" callback generates
|
||||||
* silence.
|
* silence.
|
||||||
*/
|
*/
|
||||||
bool pause;
|
std::atomic_bool pause;
|
||||||
|
|
||||||
explicit JackOutput(const ConfigBlock &block);
|
explicit JackOutput(const ConfigBlock &block);
|
||||||
|
|
||||||
@@ -529,7 +531,10 @@ JackOutput::Start()
|
|||||||
jports = nullptr;
|
jports = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
AtScopeExit(jports) { free(jports); };
|
AtScopeExit(jports) {
|
||||||
|
if (jports != nullptr)
|
||||||
|
jack_free(jports);
|
||||||
|
};
|
||||||
|
|
||||||
assert(num_dports > 0);
|
assert(num_dports > 0);
|
||||||
|
|
||||||
@@ -602,7 +607,7 @@ JackOutput::WriteSamples(const float *src, size_t n_frames)
|
|||||||
const unsigned n_channels = audio_format.channels;
|
const unsigned n_channels = audio_format.channels;
|
||||||
|
|
||||||
float *dest[MAX_CHANNELS];
|
float *dest[MAX_CHANNELS];
|
||||||
size_t space = -1;
|
size_t space = SIZE_MAX;
|
||||||
for (unsigned i = 0; i < n_channels; ++i) {
|
for (unsigned i = 0; i < n_channels; ++i) {
|
||||||
jack_ringbuffer_data_t d[2];
|
jack_ringbuffer_data_t d[2];
|
||||||
jack_ringbuffer_get_write_vector(ringbuffer[i], d);
|
jack_ringbuffer_get_write_vector(ringbuffer[i], d);
|
||||||
|
|||||||
Reference in New Issue
Block a user