Merge release 0.15.16 into v0.16.x
Conflicts: NEWS configure.ac src/output/jack_plugin.c src/update.c
This commit is contained in:
commit
6dcec36621
6
NEWS
6
NEWS
@ -141,9 +141,13 @@ ver 0.16 (2010/12/11)
|
|||||||
* make single mode 'sticky'
|
* make single mode 'sticky'
|
||||||
|
|
||||||
|
|
||||||
ver 0.15.16 (2010/??/??)
|
ver 0.15.16 (2011/03/13)
|
||||||
|
* output:
|
||||||
|
- ao: initialize the ao_sample_format struct
|
||||||
|
- jack: fix crash with mono playback
|
||||||
* encoders:
|
* encoders:
|
||||||
- lame: explicitly configure the output sample rate
|
- lame: explicitly configure the output sample rate
|
||||||
|
* update: log all file permission problems
|
||||||
|
|
||||||
|
|
||||||
ver 0.15.15 (2010/11/08)
|
ver 0.15.15 (2010/11/08)
|
||||||
|
@ -26,6 +26,9 @@
|
|||||||
#undef G_LOG_DOMAIN
|
#undef G_LOG_DOMAIN
|
||||||
#define G_LOG_DOMAIN "ao"
|
#define G_LOG_DOMAIN "ao"
|
||||||
|
|
||||||
|
/* An ao_sample_format, with all fields set to zero: */
|
||||||
|
static const ao_sample_format OUR_AO_FORMAT_INITIALIZER;
|
||||||
|
|
||||||
static unsigned ao_output_ref;
|
static unsigned ao_output_ref;
|
||||||
|
|
||||||
struct ao_data {
|
struct ao_data {
|
||||||
@ -167,7 +170,7 @@ static bool
|
|||||||
ao_output_open(void *data, struct audio_format *audio_format,
|
ao_output_open(void *data, struct audio_format *audio_format,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
ao_sample_format format;
|
ao_sample_format format = OUR_AO_FORMAT_INITIALIZER;
|
||||||
struct ao_data *ad = (struct ao_data *)data;
|
struct ao_data *ad = (struct ao_data *)data;
|
||||||
|
|
||||||
switch (audio_format->format) {
|
switch (audio_format->format) {
|
||||||
|
@ -40,7 +40,7 @@ enum {
|
|||||||
MAX_PORTS = 16,
|
MAX_PORTS = 16,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const size_t sample_size = sizeof(jack_default_audio_sample_t);
|
static const size_t jack_sample_size = sizeof(jack_default_audio_sample_t);
|
||||||
|
|
||||||
struct jack_data {
|
struct jack_data {
|
||||||
/**
|
/**
|
||||||
@ -103,9 +103,9 @@ mpd_jack_available(const struct jack_data *jd)
|
|||||||
min = current;
|
min = current;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(min % sample_size == 0);
|
assert(min % jack_sample_size == 0);
|
||||||
|
|
||||||
return min / sample_size;
|
return min / jack_sample_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -123,7 +123,7 @@ mpd_jack_process(jack_nframes_t nframes, void *arg)
|
|||||||
const jack_nframes_t available = mpd_jack_available(jd);
|
const jack_nframes_t available = mpd_jack_available(jd);
|
||||||
for (unsigned i = 0; i < jd->audio_format.channels; ++i)
|
for (unsigned i = 0; i < jd->audio_format.channels; ++i)
|
||||||
jack_ringbuffer_read_advance(jd->ringbuffer[i],
|
jack_ringbuffer_read_advance(jd->ringbuffer[i],
|
||||||
available * sample_size);
|
available * jack_sample_size);
|
||||||
|
|
||||||
/* generate silence while MPD is paused */
|
/* generate silence while MPD is paused */
|
||||||
|
|
||||||
@ -144,7 +144,7 @@ mpd_jack_process(jack_nframes_t nframes, void *arg)
|
|||||||
for (unsigned i = 0; i < jd->audio_format.channels; ++i) {
|
for (unsigned i = 0; i < jd->audio_format.channels; ++i) {
|
||||||
out = jack_port_get_buffer(jd->ports[i], nframes);
|
out = jack_port_get_buffer(jd->ports[i], nframes);
|
||||||
jack_ringbuffer_read(jd->ringbuffer[i],
|
jack_ringbuffer_read(jd->ringbuffer[i],
|
||||||
(char *)out, available * sample_size);
|
(char *)out, available * jack_sample_size);
|
||||||
|
|
||||||
for (jack_nframes_t f = available; f < nframes; ++f)
|
for (jack_nframes_t f = available; f < nframes; ++f)
|
||||||
/* ringbuffer underrun, fill with silence */
|
/* ringbuffer underrun, fill with silence */
|
||||||
@ -675,7 +675,7 @@ mpd_jack_play(void *data, const void *chunk, size_t size, GError **error_r)
|
|||||||
space = space1;
|
space = space1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (space >= frame_size)
|
if (space >= jack_sample_size)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* XXX do something more intelligent to
|
/* XXX do something more intelligent to
|
||||||
@ -683,7 +683,7 @@ mpd_jack_play(void *data, const void *chunk, size_t size, GError **error_r)
|
|||||||
g_usleep(1000);
|
g_usleep(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
space /= sample_size;
|
space /= jack_sample_size;
|
||||||
if (space < size)
|
if (space < size)
|
||||||
size = space;
|
size = space;
|
||||||
|
|
||||||
|
@ -20,9 +20,9 @@
|
|||||||
#ifndef MPD_PIPE_H
|
#ifndef MPD_PIPE_H
|
||||||
#define MPD_PIPE_H
|
#define MPD_PIPE_H
|
||||||
|
|
||||||
#ifndef NDEBUG
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
struct audio_format;
|
struct audio_format;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -300,6 +300,9 @@ stat_directory(const struct directory *directory, struct stat *st)
|
|||||||
if (path_fs == NULL)
|
if (path_fs == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
ret = stat(path_fs, st);
|
ret = stat(path_fs, st);
|
||||||
|
if (ret < 0)
|
||||||
|
g_warning("Failed to stat %s: %s", path_fs, g_strerror(errno));
|
||||||
|
|
||||||
g_free(path_fs);
|
g_free(path_fs);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -316,6 +319,9 @@ stat_directory_child(const struct directory *parent, const char *name,
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
ret = stat(path_fs, st);
|
ret = stat(path_fs, st);
|
||||||
|
if (ret < 0)
|
||||||
|
g_warning("Failed to stat %s: %s", path_fs, g_strerror(errno));
|
||||||
|
|
||||||
g_free(path_fs);
|
g_free(path_fs);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user