diff --git a/audio/out/ao_alsa.c b/audio/out/ao_alsa.c index 5816ee5f5f..0d1c589e34 100644 --- a/audio/out/ao_alsa.c +++ b/audio/out/ao_alsa.c @@ -436,6 +436,8 @@ static int init(struct ao *ao) (p->alsa, alsa_hwparams, SND_PCM_ACCESS_RW_INTERLEAVED); CHECK_ALSA_ERROR("Unable to set access type"); + ao->format = af_fmt_from_planar(ao->format); + p->alsa_fmt = find_alsa_format(ao->format); if (p->alsa_fmt == SND_PCM_FORMAT_UNKNOWN) { p->alsa_fmt = SND_PCM_FORMAT_S16; diff --git a/audio/out/ao_coreaudio.c b/audio/out/ao_coreaudio.c index da526ada20..4823eb43e1 100644 --- a/audio/out/ao_coreaudio.c +++ b/audio/out/ao_coreaudio.c @@ -285,6 +285,8 @@ static int init(struct ao *ao) // Save selected device id p->device = selected_device; + ao->format = af_fmt_from_planar(ao->format); + bool supports_digital = false; /* Probe whether device support S/PDIF stream output if input is AC3 stream. */ if (AF_FORMAT_IS_AC3(ao->format)) { diff --git a/audio/out/ao_dsound.c b/audio/out/ao_dsound.c index 464947c0dc..58812d80e6 100644 --- a/audio/out/ao_dsound.c +++ b/audio/out/ao_dsound.c @@ -388,7 +388,7 @@ static int init(struct ao *ao) WAVEFORMATEXTENSIBLE wformat; DSBUFFERDESC dsbpridesc; DSBUFFERDESC dsbdesc; - int format = ao->format; + int format = af_fmt_from_planar(ao->format); int rate = ao->samplerate; if (AF_FORMAT_IS_AC3(format)) diff --git a/audio/out/ao_lavc.c b/audio/out/ao_lavc.c index 4364b9054d..b849f9b2b4 100644 --- a/audio/out/ao_lavc.c +++ b/audio/out/ao_lavc.c @@ -105,6 +105,7 @@ static int init(struct ao *ao) ac->stream->codec->channel_layout = mp_chmap_to_lavc(&ao->channels); ac->stream->codec->sample_fmt = AV_SAMPLE_FMT_NONE; + ao->format = af_fmt_from_planar(ao->format); { // first check if the selected format is somewhere in the list of diff --git a/audio/out/ao_null.c b/audio/out/ao_null.c index ff6b12a1a6..75e812b238 100644 --- a/audio/out/ao_null.c +++ b/audio/out/ao_null.c @@ -51,6 +51,8 @@ static int init(struct ao *ao) struct priv *priv = talloc_zero(ao, struct priv); ao->priv = priv; + ao->format = af_fmt_from_planar(ao->format); + struct mp_chmap_sel sel = {0}; mp_chmap_sel_add_any(&sel); if (!ao_chmap_sel_adjust(ao, &sel, &ao->channels)) diff --git a/audio/out/ao_oss.c b/audio/out/ao_oss.c index db9847851d..a97424c1cb 100644 --- a/audio/out/ao_oss.c +++ b/audio/out/ao_oss.c @@ -261,6 +261,8 @@ static int init(struct ao *ao) fcntl(p->audio_fd, F_SETFD, FD_CLOEXEC); #endif + ao->format = af_fmt_from_planar(ao->format); + if (AF_FORMAT_IS_AC3(ao->format)) { ioctl(p->audio_fd, SNDCTL_DSP_SPEED, &ao->samplerate); } diff --git a/audio/out/ao_pcm.c b/audio/out/ao_pcm.c index f7d793700d..e94e6b569a 100644 --- a/audio/out/ao_pcm.c +++ b/audio/out/ao_pcm.c @@ -118,6 +118,9 @@ static int init(struct ao *ao) if (!priv->outputfilename) priv->outputfilename = talloc_strdup(priv, priv->waveheader ? "audiodump.wav" : "audiodump.pcm"); + + ao->format = af_fmt_from_planar(ao->format); + if (priv->waveheader) { // WAV files must have one of the following formats diff --git a/audio/out/ao_portaudio.c b/audio/out/ao_portaudio.c index 8b235f8806..d75fad0aca 100644 --- a/audio/out/ao_portaudio.c +++ b/audio/out/ao_portaudio.c @@ -242,6 +242,8 @@ static int init(struct ao *ao) = Pa_GetDeviceInfo(pa_device)->defaultHighOutputLatency, }; + ao->format = af_fmt_from_planar(ao->format); + const struct format_map *fmt = format_maps; while (fmt->pa_format) { if (fmt->mp_format == ao->format) { diff --git a/audio/out/ao_pulse.c b/audio/out/ao_pulse.c index a4da2a179b..1d7fcdd382 100644 --- a/audio/out/ao_pulse.c +++ b/audio/out/ao_pulse.c @@ -286,6 +286,8 @@ static int init(struct ao *ao) ss.channels = ao->channels.num; ss.rate = ao->samplerate; + ao->format = af_fmt_from_planar(ao->format); + const struct format_map *fmt_map = format_maps; while (fmt_map->mp_format != ao->format) { if (fmt_map->mp_format == AF_FORMAT_UNKNOWN) { diff --git a/audio/out/ao_rsound.c b/audio/out/ao_rsound.c index 162fb21feb..95fadf7188 100644 --- a/audio/out/ao_rsound.c +++ b/audio/out/ao_rsound.c @@ -114,6 +114,8 @@ static int init(struct ao *ao) rsd_set_param(priv->rd, RSD_SAMPLERATE, &ao->samplerate); rsd_set_param(priv->rd, RSD_CHANNELS, &ao->channels.num); + ao->format = af_fmt_from_planar(ao->format); + int rsd_format = set_format(ao); rsd_set_param(priv->rd, RSD_FORMAT, &rsd_format); diff --git a/audio/out/ao_sdl.c b/audio/out/ao_sdl.c index a42c0812cb..d95a82615b 100644 --- a/audio/out/ao_sdl.c +++ b/audio/out/ao_sdl.c @@ -144,6 +144,8 @@ static int init(struct ao *ao) return -1; } + ao->format = af_fmt_from_planar(ao->format); + SDL_AudioSpec desired, obtained; switch (ao->format) { diff --git a/audio/out/ao_sndio.c b/audio/out/ao_sndio.c index ab9eaf8197..1786c0158d 100644 --- a/audio/out/ao_sndio.c +++ b/audio/out/ao_sndio.c @@ -130,6 +130,9 @@ static int init(struct ao *ao) MP_ERR(ao, "can't open sndio %s\n", p->dev); goto error; } + + ao->format = af_fmt_from_planar(ao->format); + sio_initpar(&p->par); for (i = 0, ap = af_to_par;; i++, ap++) { if (i == sizeof(af_to_par) / sizeof(struct af_to_par)) { diff --git a/audio/out/ao_wasapi.c b/audio/out/ao_wasapi.c index c605e1cd5d..5d9f33278c 100644 --- a/audio/out/ao_wasapi.c +++ b/audio/out/ao_wasapi.c @@ -1231,6 +1231,7 @@ static void uninit(struct ao *ao, bool immed) static int init(struct ao *ao) { mp_msg(MSGT_AO, MSGL_V, "ao-wasapi: init!\n"); + ao->format = af_fmt_from_planar(ao->format); struct mp_chmap_sel sel = {0}; mp_chmap_sel_add_waveext(&sel); if (!ao_chmap_sel_adjust(ao, &sel, &ao->channels))