[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