diff options
Diffstat (limited to 'src/output')
-rw-r--r-- | src/output/alsa_output_plugin.c | 54 | ||||
-rw-r--r-- | src/output/ao_output_plugin.c | 8 | ||||
-rw-r--r-- | src/output/ffado_output_plugin.c | 5 | ||||
-rw-r--r-- | src/output/jack_output_plugin.c | 15 | ||||
-rw-r--r-- | src/output/mvp_output_plugin.c | 10 | ||||
-rw-r--r-- | src/output/openal_output_plugin.c | 13 | ||||
-rw-r--r-- | src/output/oss_output_plugin.c | 105 | ||||
-rw-r--r-- | src/output/osx_output_plugin.c | 14 | ||||
-rw-r--r-- | src/output/pulse_output_plugin.c | 4 | ||||
-rw-r--r-- | src/output/roar_output_plugin.c | 21 | ||||
-rw-r--r-- | src/output/solaris_output_plugin.c | 4 | ||||
-rw-r--r-- | src/output/winmm_output_plugin.c | 15 |
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, |