aboutsummaryrefslogtreecommitdiff
path: root/src/output
diff options
context:
space:
mode:
Diffstat (limited to 'src/output')
-rw-r--r--src/output/alsa_output_plugin.c54
-rw-r--r--src/output/ao_output_plugin.c8
-rw-r--r--src/output/ffado_output_plugin.c5
-rw-r--r--src/output/jack_output_plugin.c15
-rw-r--r--src/output/mvp_output_plugin.c10
-rw-r--r--src/output/openal_output_plugin.c13
-rw-r--r--src/output/oss_output_plugin.c105
-rw-r--r--src/output/osx_output_plugin.c14
-rw-r--r--src/output/pulse_output_plugin.c4
-rw-r--r--src/output/roar_output_plugin.c21
-rw-r--r--src/output/solaris_output_plugin.c4
-rw-r--r--src/output/winmm_output_plugin.c15
12 files changed, 104 insertions, 164 deletions
diff --git a/src/output/alsa_output_plugin.c b/src/output/alsa_output_plugin.c
index 4470e05e..18f65143 100644
--- a/src/output/alsa_output_plugin.c
+++ b/src/output/alsa_output_plugin.c
@@ -24,6 +24,9 @@
#include "pcm_export.h"
#include <glib.h>
+
+#include <libavutil/samplefmt.h>
+
#include <alsa/asoundlib.h>
#undef G_LOG_DOMAIN
@@ -211,27 +214,20 @@ alsa_test_default_device(void)
return true;
}
-static snd_pcm_format_t
-get_bitformat(enum sample_format sample_format)
+static snd_pcm_format_t get_bitformat(enum AVSampleFormat sample_format)
{
switch (sample_format) {
- case SAMPLE_FORMAT_UNDEFINED:
- return SND_PCM_FORMAT_UNKNOWN;
-
- case SAMPLE_FORMAT_S8:
- return SND_PCM_FORMAT_S8;
-
- case SAMPLE_FORMAT_S16:
+ case AV_SAMPLE_FMT_U8:
+ return SND_PCM_FORMAT_U8;
+ case AV_SAMPLE_FMT_S16:
return SND_PCM_FORMAT_S16;
-
- case SAMPLE_FORMAT_S24_P32:
- return SND_PCM_FORMAT_S24;
-
- case SAMPLE_FORMAT_S32:
+ case AV_SAMPLE_FMT_S32:
return SND_PCM_FORMAT_S32;
-
- case SAMPLE_FORMAT_FLOAT:
+ case AV_SAMPLE_FMT_FLT:
return SND_PCM_FORMAT_FLOAT;
+ default:
+ return SND_PCM_FORMAT_UNKNOWN;
+
}
assert(false);
@@ -300,10 +296,9 @@ alsa_try_format_or_packed(snd_pcm_t *pcm, snd_pcm_hw_params_t *hwparams,
* Attempts to configure the specified sample format, and tries the
* reversed host byte order if was not supported.
*/
-static int
-alsa_output_try_format(snd_pcm_t *pcm, snd_pcm_hw_params_t *hwparams,
- enum sample_format sample_format,
- bool *packed_r, bool *reverse_endian_r)
+static int alsa_output_try_format(snd_pcm_t *pcm, snd_pcm_hw_params_t *hwparams,
+ enum AVSampleFormat sample_format,
+ bool *packed_r, bool *reverse_endian_r)
{
snd_pcm_format_t alsa_format = get_bitformat(sample_format);
if (alsa_format == SND_PCM_FORMAT_UNKNOWN)
@@ -343,18 +338,17 @@ alsa_output_setup_format(snd_pcm_t *pcm, snd_pcm_hw_params_t *hwparams,
/* if unsupported by the hardware, try other formats */
- static const enum sample_format probe_formats[] = {
- SAMPLE_FORMAT_S24_P32,
- SAMPLE_FORMAT_S32,
- SAMPLE_FORMAT_S16,
- SAMPLE_FORMAT_S8,
- SAMPLE_FORMAT_UNDEFINED,
+ static const enum AVSampleFormat probe_formats[] = {
+ AV_SAMPLE_FMT_S32,
+ AV_SAMPLE_FMT_S16,
+ AV_SAMPLE_FMT_U8,
+ AV_SAMPLE_FMT_NONE,
};
for (unsigned i = 0;
- err == -EINVAL && probe_formats[i] != SAMPLE_FORMAT_UNDEFINED;
+ err == -EINVAL && probe_formats[i] != AV_SAMPLE_FMT_NONE;
++i) {
- const enum sample_format mpd_format = probe_formats[i];
+ const enum AVSampleFormat mpd_format = probe_formats[i];
if (mpd_format == audio_format->format)
continue;
@@ -578,13 +572,13 @@ static bool
alsa_setup_or_dsd(struct alsa_data *ad, struct audio_format *audio_format,
GError **error_r)
{
- bool shift8 = false, packed, reverse_endian;
+ bool packed, reverse_endian;
const bool success = alsa_setup(ad, audio_format, &packed, &reverse_endian, error_r);
if (!success)
return false;
- pcm_export_open(&ad->export, audio_format->format, shift8, packed, reverse_endian);
+ pcm_export_open(&ad->export, audio_format->format, packed, reverse_endian);
return true;
}
diff --git a/src/output/ao_output_plugin.c b/src/output/ao_output_plugin.c
index d7e577fa..6f28ab3d 100644
--- a/src/output/ao_output_plugin.c
+++ b/src/output/ao_output_plugin.c
@@ -24,6 +24,8 @@
#include <ao/ao.h>
#include <glib.h>
+#include <libavutil/samplefmt.h>
+
#undef G_LOG_DOMAIN
#define G_LOG_DOMAIN "ao"
@@ -189,11 +191,11 @@ ao_output_open(struct audio_output *ao, struct audio_format *audio_format,
struct ao_data *ad = (struct ao_data *)ao;
switch (audio_format->format) {
- case SAMPLE_FORMAT_S8:
+ case AV_SAMPLE_FMT_U8:
format.bits = 8;
break;
- case SAMPLE_FORMAT_S16:
+ case AV_SAMPLE_FMT_S16:
format.bits = 16;
break;
@@ -201,7 +203,7 @@ ao_output_open(struct audio_output *ao, struct audio_format *audio_format,
/* support for 24 bit samples in libao is currently
dubious, and until we have sorted that out,
convert everything to 16 bit */
- audio_format->format = SAMPLE_FORMAT_S16;
+ audio_format->format = AV_SAMPLE_FMT_S16;
format.bits = 16;
break;
}
diff --git a/src/output/ffado_output_plugin.c b/src/output/ffado_output_plugin.c
index ba239a4a..58c367ca 100644
--- a/src/output/ffado_output_plugin.c
+++ b/src/output/ffado_output_plugin.c
@@ -35,6 +35,9 @@
#include "timer.h"
#include <glib.h>
+
+#include <libavutil/samplefmt.h>
+
#include <assert.h>
#include <libffado/ffado.h>
@@ -244,7 +247,7 @@ ffado_open(struct audio_output *ao, struct audio_format *audio_format,
/* will be converted to floating point, choose best input
format */
- audio_format->format = SAMPLE_FORMAT_S24_P32;
+ audio_format->format = AV_SAMPLE_FMT_S16;
ffado_device_info_t device_info;
memset(&device_info, 0, sizeof(device_info));
diff --git a/src/output/jack_output_plugin.c b/src/output/jack_output_plugin.c
index a24cb855..81a2ca3d 100644
--- a/src/output/jack_output_plugin.c
+++ b/src/output/jack_output_plugin.c
@@ -24,6 +24,9 @@
#include <assert.h>
#include <glib.h>
+
+#include <libavutil/samplefmt.h>
+
#include <jack/jack.h>
#include <jack/types.h>
#include <jack/ringbuffer.h>
@@ -197,9 +200,7 @@ set_audioformat(struct jack_data *jd, struct audio_format *audio_format)
else if (audio_format->channels > jd->num_source_ports)
audio_format->channels = 2;
- if (audio_format->format != SAMPLE_FORMAT_S16 &&
- audio_format->format != SAMPLE_FORMAT_S24_P32)
- audio_format->format = SAMPLE_FORMAT_S24_P32;
+ audio_format->format = AV_SAMPLE_FMT_S16;
}
static void
@@ -657,16 +658,10 @@ mpd_jack_write_samples(struct jack_data *jd, const void *src,
unsigned num_samples)
{
switch (jd->audio_format.format) {
- case SAMPLE_FORMAT_S16:
+ case AV_SAMPLE_FMT_S16:
mpd_jack_write_samples_16(jd, (const int16_t*)src,
num_samples);
break;
-
- case SAMPLE_FORMAT_S24_P32:
- mpd_jack_write_samples_24(jd, (const int32_t*)src,
- num_samples);
- break;
-
default:
assert(false);
}
diff --git a/src/output/mvp_output_plugin.c b/src/output/mvp_output_plugin.c
index 37e0f7c9..783c072d 100644
--- a/src/output/mvp_output_plugin.c
+++ b/src/output/mvp_output_plugin.c
@@ -29,6 +29,8 @@
#include <glib.h>
+#include <libavutil/samplefmt.h>
+
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
@@ -181,18 +183,14 @@ mvp_set_pcm_params(struct mvp_data *md, struct audio_format *audio_format,
/* 0,1=24bit(24) , 2,3=16bit */
switch (audio_format->format) {
- case SAMPLE_FORMAT_S16:
+ case AV_SAMPLE_FMT_S16:
mix[1] = 2;
break;
- case SAMPLE_FORMAT_S24_P32:
- mix[1] = 0;
- break;
-
default:
g_debug("unsupported sample format %s - falling back to 16 bit",
sample_format_to_string(audio_format->format));
- audio_format->format = SAMPLE_FORMAT_S16;
+ audio_format->format = AV_SAMPLE_FMT_S16;
mix[1] = 2;
break;
}
diff --git a/src/output/openal_output_plugin.c b/src/output/openal_output_plugin.c
index ebd35ef1..dac9e54e 100644
--- a/src/output/openal_output_plugin.c
+++ b/src/output/openal_output_plugin.c
@@ -23,6 +23,8 @@
#include <glib.h>
+#include <libavutil/samplefmt.h>
+
#ifndef HAVE_OSX
#include <AL/al.h>
#include <AL/alc.h>
@@ -56,15 +58,10 @@ openal_output_quark(void)
return g_quark_from_static_string("openal_output");
}
-static ALenum
-openal_audio_format(struct audio_format *audio_format)
+static ALenum openal_audio_format(struct audio_format *audio_format)
{
- /* note: cannot map SAMPLE_FORMAT_S8 to AL_FORMAT_STEREO8 or
- AL_FORMAT_MONO8 since OpenAL expects unsigned 8 bit
- samples, while MPD uses signed samples */
-
switch (audio_format->format) {
- case SAMPLE_FORMAT_S16:
+ case AV_SAMPLE_FMT_S16:
if (audio_format->channels == 2)
return AL_FORMAT_STEREO16;
if (audio_format->channels == 1)
@@ -76,7 +73,7 @@ openal_audio_format(struct audio_format *audio_format)
default:
/* fall back to 16 bit */
- audio_format->format = SAMPLE_FORMAT_S16;
+ audio_format->format = AV_SAMPLE_FMT_S16;
return openal_audio_format(audio_format);
}
}
diff --git a/src/output/oss_output_plugin.c b/src/output/oss_output_plugin.c
index aa9c00fc..84b1b485 100644
--- a/src/output/oss_output_plugin.c
+++ b/src/output/oss_output_plugin.c
@@ -26,6 +26,8 @@
#include <glib.h>
+#include <libavutil/samplefmt.h>
+
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
@@ -427,85 +429,57 @@ oss_setup_sample_rate(int fd, struct audio_format *audio_format,
* AFMT_QUERY if there is no direct counterpart.
*/
static int
-sample_format_to_oss(enum sample_format format)
+sample_format_to_oss(enum AVSampleFormat format)
{
switch (format) {
- case SAMPLE_FORMAT_UNDEFINED:
- case SAMPLE_FORMAT_FLOAT:
- return AFMT_QUERY;
-
- case SAMPLE_FORMAT_S8:
- return AFMT_S8;
-
- case SAMPLE_FORMAT_S16:
+ case AV_SAMPLE_FMT_U8:
+ return AFMT_U8;
+ case AV_SAMPLE_FMT_S16:
return AFMT_S16_NE;
-
- case SAMPLE_FORMAT_S24_P32:
-#ifdef AFMT_S24_NE
- return AFMT_S24_NE;
-#else
- return AFMT_QUERY;
-#endif
-
- case SAMPLE_FORMAT_S32:
+ case AV_SAMPLE_FMT_S32:
#ifdef AFMT_S32_NE
return AFMT_S32_NE;
#else
return AFMT_QUERY;
#endif
+ default:
+ return AFMT_QUERY;
}
return AFMT_QUERY;
}
/**
- * Convert an OSS sample format to its MPD counterpart. Returns
- * SAMPLE_FORMAT_UNDEFINED if there is no direct counterpart.
+ * Convert an OSS sample format to its libav counterpart. Returns
+ * AV_SAMPLE_FMT_NONE if there is no direct counterpart.
*/
-static enum sample_format
+static enum AVSampleFormat
sample_format_from_oss(int format)
{
switch (format) {
- case AFMT_S8:
- return SAMPLE_FORMAT_S8;
-
+ case AFMT_U8:
+ return AV_SAMPLE_FMT_U8;
case AFMT_S16_NE:
- return SAMPLE_FORMAT_S16;
-
-#ifdef AFMT_S24_PACKED
- case AFMT_S24_PACKED:
- return SAMPLE_FORMAT_S24_P32;
-#endif
-
-#ifdef AFMT_S24_NE
- case AFMT_S24_NE:
- return SAMPLE_FORMAT_S24_P32;
-#endif
-
+ return AV_SAMPLE_FMT_S16;
#ifdef AFMT_S32_NE
case AFMT_S32_NE:
- return SAMPLE_FORMAT_S32;
+ return AV_SAMPLE_FMT_S32;
#endif
-
default:
- return SAMPLE_FORMAT_UNDEFINED;
+ return AV_SAMPLE_FMT_NONE;
}
}
/**
* Probe one sample format.
- *
- * @return the selected sample format or SAMPLE_FORMAT_UNDEFINED on
- * error
*/
-static enum oss_setup_result
-oss_probe_sample_format(int fd, enum sample_format sample_format,
- enum sample_format *sample_format_r,
- int *oss_format_r,
+static enum oss_setup_result oss_probe_sample_format(int fd, enum AVSampleFormat sample_format,
+ enum AVSampleFormat *sample_format_r,
+ int *oss_format_r,
#ifdef AFMT_S24_PACKED
- struct pcm_export_state *export,
+ struct pcm_export_state *export,
#endif
- GError **error_r)
+ GError **error_r)
{
int oss_format = sample_format_to_oss(sample_format);
if (oss_format == AFMT_QUERY)
@@ -516,34 +490,16 @@ oss_probe_sample_format(int fd, enum sample_format sample_format,
&oss_format,
"Failed to set sample format", error_r);
-#ifdef AFMT_S24_PACKED
- if (result == UNSUPPORTED && sample_format == SAMPLE_FORMAT_S24_P32) {
- /* if the driver doesn't support padded 24 bit, try
- packed 24 bit */
- oss_format = AFMT_S24_PACKED;
- result = oss_try_ioctl_r(fd, SNDCTL_DSP_SAMPLESIZE,
- &oss_format,
- "Failed to set sample format", error_r);
- }
-#endif
-
if (result != SUCCESS)
return result;
sample_format = sample_format_from_oss(oss_format);
- if (sample_format == SAMPLE_FORMAT_UNDEFINED)
+ if (sample_format == AV_SAMPLE_FMT_NONE)
return UNSUPPORTED;
*sample_format_r = sample_format;
*oss_format_r = oss_format;
-#ifdef AFMT_S24_PACKED
- pcm_export_open(export, sample_format, false,
- oss_format == AFMT_S24_PACKED,
- oss_format == AFMT_S24_PACKED &&
- G_BYTE_ORDER != G_LITTLE_ENDIAN);
-#endif
-
return SUCCESS;
}
@@ -559,7 +515,7 @@ oss_setup_sample_format(int fd, struct audio_format *audio_format,
#endif
GError **error_r)
{
- enum sample_format mpd_format;
+ enum AVSampleFormat mpd_format;
enum oss_setup_result result =
oss_probe_sample_format(fd, audio_format->format,
&mpd_format, oss_format_r,
@@ -585,15 +541,14 @@ oss_setup_sample_format(int fd, struct audio_format *audio_format,
/* the requested sample format is not available - probe for
other formats supported by MPD */
- static const enum sample_format sample_formats[] = {
- SAMPLE_FORMAT_S24_P32,
- SAMPLE_FORMAT_S32,
- SAMPLE_FORMAT_S16,
- SAMPLE_FORMAT_S8,
- SAMPLE_FORMAT_UNDEFINED /* sentinel */
+ static const enum AVSampleFormat sample_formats[] = {
+ AV_SAMPLE_FMT_S32,
+ AV_SAMPLE_FMT_S16,
+ AV_SAMPLE_FMT_U8,
+ AV_SAMPLE_FMT_NONE /* sentinel */
};
- for (unsigned i = 0; sample_formats[i] != SAMPLE_FORMAT_UNDEFINED; ++i) {
+ for (unsigned i = 0; sample_formats[i] != AV_SAMPLE_FMT_NONE; ++i) {
mpd_format = sample_formats[i];
if (mpd_format == audio_format->format)
/* don't try that again */
diff --git a/src/output/osx_output_plugin.c b/src/output/osx_output_plugin.c
index fbba8174..11851186 100644
--- a/src/output/osx_output_plugin.c
+++ b/src/output/osx_output_plugin.c
@@ -23,6 +23,9 @@
#include "fifo_buffer.h"
#include <glib.h>
+
+#include <libavutil/samplefmt.h>
+
#include <CoreAudio/AudioHardware.h>
#include <AudioUnit/AudioUnit.h>
#include <CoreServices/CoreServices.h>
@@ -326,20 +329,17 @@ osx_output_open(struct audio_output *ao, struct audio_format *audio_format, GErr
stream_description.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger;
switch (audio_format->format) {
- case SAMPLE_FORMAT_S8:
+ case AV_SAMPLE_FMT_U8:
stream_description.mBitsPerChannel = 8;
break;
-
- case SAMPLE_FORMAT_S16:
+ case AV_SAMPLE_FMT_S16:
stream_description.mBitsPerChannel = 16;
break;
-
- case SAMPLE_FORMAT_S32:
+ case AV_SAMPLE_FMT_S32:
stream_description.mBitsPerChannel = 32;
break;
-
default:
- audio_format->format = SAMPLE_FORMAT_S32;
+ audio_format->format = AV_SAMPLE_FMT_S32;
stream_description.mBitsPerChannel = 32;
break;
}
diff --git a/src/output/pulse_output_plugin.c b/src/output/pulse_output_plugin.c
index 0dc9be0e..5f8ef1d5 100644
--- a/src/output/pulse_output_plugin.c
+++ b/src/output/pulse_output_plugin.c
@@ -25,6 +25,8 @@
#include <glib.h>
+#include <libavutil/samplefmt.h>
+
#include <pulse/thread-mainloop.h>
#include <pulse/context.h>
#include <pulse/stream.h>
@@ -616,7 +618,7 @@ pulse_output_open(struct audio_output *ao, struct audio_format *audio_format,
/* MPD doesn't support the other pulseaudio sample formats, so
we just force MPD to send us everything as 16 bit */
- audio_format->format = SAMPLE_FORMAT_S16;
+ audio_format->format = AV_SAMPLE_FMT_S16;
ss.format = PA_SAMPLE_S16NE;
ss.rate = audio_format->sample_rate;
diff --git a/src/output/roar_output_plugin.c b/src/output/roar_output_plugin.c
index 1c2c4832..90dc2ac0 100644
--- a/src/output/roar_output_plugin.c
+++ b/src/output/roar_output_plugin.c
@@ -154,27 +154,20 @@ roar_use_audio_format(struct roar_audio_info *info,
info->codec = ROAR_CODEC_PCM_S;
switch (audio_format->format) {
- case SAMPLE_FORMAT_UNDEFINED:
- info->bits = 16;
- audio_format->format = SAMPLE_FORMAT_S16;
- break;
-
- case SAMPLE_FORMAT_S8:
+ case AV_SAMPLE_FMT_U8:
info->bits = 8;
break;
-
- case SAMPLE_FORMAT_S16:
+ case AV_SAMPLE_FMT_S16:
info->bits = 16;
break;
-
- case SAMPLE_FORMAT_S24_P32:
+ case AV_SAMPLE_FMT_S32:
info->bits = 32;
- audio_format->format = SAMPLE_FORMAT_S32;
break;
-
- case SAMPLE_FORMAT_S32:
- info->bits = 32;
+ default:
+ info->bits = 16;
+ audio_format->format = AV_SAMPLE_FMT_S16;
break;
+
}
}
diff --git a/src/output/solaris_output_plugin.c b/src/output/solaris_output_plugin.c
index ce726009..2c3cc677 100644
--- a/src/output/solaris_output_plugin.c
+++ b/src/output/solaris_output_plugin.c
@@ -24,6 +24,8 @@
#include <glib.h>
+#include <libavutil/samplefmt.h>
+
#include <sys/stropts.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -114,7 +116,7 @@ solaris_output_open(struct audio_output *ao, struct audio_format *audio_format,
/* support only 16 bit mono/stereo for now; nothing else has
been tested */
- audio_format->format = SAMPLE_FORMAT_S16;
+ audio_format->format = AV_SAMPLE_FMT_S16;
/* open the device in non-blocking mode */
diff --git a/src/output/winmm_output_plugin.c b/src/output/winmm_output_plugin.c
index 4d95834b..f2c9cb6a 100644
--- a/src/output/winmm_output_plugin.c
+++ b/src/output/winmm_output_plugin.c
@@ -28,6 +28,8 @@
#include <string.h>
#include <windows.h>
+#include <libavutil/samplefmt.h>
+
#undef G_LOG_DOMAIN
#define G_LOG_DOMAIN "winmm_output"
@@ -157,15 +159,12 @@ winmm_output_open(struct audio_output *ao, struct audio_format *audio_format,
}
switch (audio_format->format) {
- case SAMPLE_FORMAT_S8:
- case SAMPLE_FORMAT_S16:
+ case AV_SAMPLE_FMT_U8:
+ case AV_SAMPLE_FMT_S16:
break;
-
- case SAMPLE_FORMAT_S24_P32:
- case SAMPLE_FORMAT_S32:
- case SAMPLE_FORMAT_UNDEFINED:
+ default:
/* we havn't tested formats other than S16 */
- audio_format->format = SAMPLE_FORMAT_S16;
+ audio_format->format = AV_SAMPLE_FMT_S16;
break;
}
@@ -179,7 +178,7 @@ winmm_output_open(struct audio_output *ao, struct audio_format *audio_format,
format.nSamplesPerSec = audio_format->sample_rate;
format.nBlockAlign = audio_format_frame_size(audio_format);
format.nAvgBytesPerSec = format.nSamplesPerSec * format.nBlockAlign;
- format.wBitsPerSample = audio_format_sample_size(audio_format) * 8;
+ format.wBitsPerSample = av_get_bytes_per_sample(audio_format->format) * 8;
format.cbSize = 0;
MMRESULT result = waveOutOpen(&wo->handle, wo->device_id, &format,