[vlc-devel] [PATCH] wasapi: implement pass-through
Rémi Denis-Courmont
remi at remlab.net
Mon May 2 17:20:47 CEST 2016
Le 2016-05-02 16:34, Thomas Guillem a écrit :
> @@ -371,15 +395,37 @@ static HRESULT Start(aout_stream_t *s,
> audio_sample_format_t *restrict fmt,
> /* Configure audio stream */
> WAVEFORMATEXTENSIBLE wf;
> WAVEFORMATEX *pwf;
> + AUDCLNT_SHAREMODE shared_mode;
>
> - vlc_ToWave(&wf, fmt);
> - hr = IAudioClient_IsFormatSupported(sys->client,
> AUDCLNT_SHAREMODE_SHARED,
> - &wf.Format, &pwf);
> - if (FAILED(hr))
> + do
> {
> - msg_Err(s, "cannot negotiate audio format (error 0x%lx)",
> hr);
> - goto error;
> - }
> + if (AOUT_FMT_SPDIF(fmt) && var_InheritBool(s, "spdif"))
> + {
> + vlc_SpdifToWave(&wf, fmt);
> + shared_mode = AUDCLNT_SHAREMODE_EXCLUSIVE;
> + }
> + else
> + {
> + vlc_ToWave(&wf, fmt);
> + shared_mode = AUDCLNT_SHAREMODE_SHARED;
> + }
> +
> + hr = IAudioClient_IsFormatSupported(sys->client,
> shared_mode,
> + &wf.Format, &pwf);
> + if (FAILED(hr))
> + {
> + if (AOUT_FMT_SPDIF(fmt))
> + {
> + /* Device may not support SPDIF: try again with FL32
> */
> + fmt->i_format = VLC_CODEC_FL32;
> + }
> + else
> + {
> + msg_Err(s, "cannot negotiate audio format (error
> 0x%lx)", hr);
> + goto error;
> + }
> + }
> + } while (FAILED(hr));
Potentially infinite loop??
--
Rémi Denis-Courmont
http://www.remlab.net/
More information about the vlc-devel
mailing list