[vlc-devel] [PATCH 4/5] wasapi: add 24bits support
Rémi Denis-Courmont
remi at remlab.net
Fri Oct 25 12:47:55 CEST 2019
Here by people here in this decade.
Le 25 octobre 2019 13:35:36 GMT+03:00, Thomas Guillem <thomas at gllm.fr> a écrit :
>
>On Fri, Oct 25, 2019, at 12:17, Rémi Denis-Courmont wrote:
>> I disagree and this contradicts earlier decisions here.
>
>Yes that is what you said in the first reply and I asked you:
>
>Who ? when ? Do you have a trace of this decision ?
>
>>
>> Le 25 octobre 2019 10:16:28 GMT+03:00, Thomas Guillem
><thomas at gllm.fr> a écrit :
>>>
>>> On Thu, Oct 24, 2019, at 18:29, Rémi Denis-Courmont wrote:
>>>> So what? Some cards don't support PCM at all, or only some really
>weird formats. That's why we use the OS-provided HAL.
>>>
>>> In that case, we can also add support for such format.
>>>
>>> Yes, we must use the OS-provided HAL by default. But we can still
>add an advanced option to enable exclusive mode. I know a lot of
>audiophile would like to play their 24bit 96khz directly. Even if I
>know that 16bit 48khz cover fully the hearing range.
>>>
>>>>
>>>> I don't think this belongs in VLC. We already decided to drop
>24-bits PCM earlier.
>>>
>>> Who ? when ? Do you have a trace ?
>>>
>>>>
>>>> Le 24 octobre 2019 15:37:12 GMT+03:00, Thomas Guillem
><thomas at gllm.fr> a écrit :
>>>>> But don't use VLC_CODEC_S24N as this fourcc is not handled by any
>audio
>>>>> filters. Instead, request VLC_CODEC_S32N to VLC and do the
>conversion
>>>>> internally.
>>>>>
>>>>> This commit is needed by the next commit since some sound cards
>only support
>>>>> 24bits. modules/audio_output/wasapi.c | 30
>+++++++++++++++++++++++++++---
>>>>> 1 file changed, 27 insertions(+), 3 deletions(-)
>>>>>
>>>>> diff --git a/modules/audio_output/wasapi.c
>b/modules/audio_output/wasapi.c
>>>>> index d6105169b8e..daa946f8afc 100644
>>>>> --- a/modules/audio_output/wasapi.c
>>>>> +++ b/modules/audio_output/wasapi.c
>>>>> @@ -106,6 +106,7 @@ typedef struct aout_stream_sys
>>>>> unsigned block_align;
>>>>> UINT64 written; /**< Frames written to the buffer */
>>>>> UINT32 frames; /**< Total buffer size (frames) */
>>>>> + bool s24s32; /**< Output configured as S24N, but input as
>S32N */
>>>>> } aout_stream_sys_t;
>>>>>
>>>>> static void ResetTimer(aout_stream_t *s)
>>>>> @@ -268,7 +269,28 @@ static HRESULT Play(aout_stream_t *s, block_t
>*block, vlc_tick_t date)
>>>>>
>>>>> const size_t copy = frames * sys->block_align;
>>>>>
>>>>> - memcpy(dst, block->p_buffer, copy);
>>>>> + if (!sys->s24s32)
>>>>> + {
>>>>> + memcpy(dst, block->p_buffer, copy);
>>>>> + block->p_buffer += copy;
>>>>> + block->i_buffer -= copy;
>>>>> + }
>>>>> + else
>>>>> + {
>>>>> + /* Convert back S32L to S24L. The following is doing
>the opposite
>>>>> + * of S24LDecode() from codec/araw.c */
>>>>> + BYTE *end = dst + copy;
>>>>> + while (dst < end)
>>>>> + {
>>>>> + dst[0] = block->p_buffer[1];
>>>>> + dst[1] = block->p_buffer[2];
>>>>> + dst[2] = block->p_buffer[3];
>>>>> + dst += 3;
>>>>> + block->p_buffer += 4;
>>>>> + block->i_buffer -= 4;
>>>>> + }
>>>>> +
>>>>> + }
>>>>> hr = IAudioRenderClient_ReleaseBuffer(render, frames, 0);
>>>>> if (FAILED(hr))
>>>>> {
>>>>> @@ -276,8 +298,6 @@ static HRESULT Play(aout_stream_t *s, block_t
>*block, vlc_tick_t date)
>>>>> break;
>>>>> }
>>>>>
>>>>> - block->p_buffer += copy;
>>>>> - block->i_buffer -= copy;
>>>>> block->i_nb_samples -= frames;
>>>>> sys->written += frames;
>>>>> if (block->i_nb_samples == 0)
>>>>> @@ -512,6 +532,7 @@ static int vlc_FromWave(const WAVEFORMATEX
>*restrict wf,
>>>>> switch (wf->wBitsPerSample)
>>>>> {
>>>>> case 32:
>>>>> + case 24:
>>>>> audio->i_format = VLC_CODEC_S32N;
>>>>> break;
>>>>> case 16:
>>>>> @@ -679,6 +700,9 @@ static HRESULT Start(aout_stream_t *s,
>audio_sample_format_t *restrict pfmt,
>>>>> sys->format = fmt.i_format;
>>>>> sys->block_align = pwf->nBlockAlign;
>>>>> sys->rate = pwf->nSamplesPerSec;
>>>>> + sys->s24s32 = pwf->wBitsPerSample == 24 && fmt.i_format ==
>VLC_CODEC_S32N;
>>>>> + if (sys->s24s32)
>>>>> + msg_Dbg(s, "audio device configured as s24");
>>>>>
>>>>> hr = IAudioClient_Initialize(sys->client, shared_mode, 0,
>buffer_duration,
>>>>> 0, pwf, sid);
>>>>
>>>> --
>>>> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez
>excuser ma brièveté.
>>>> _______________________________________________
>>>> vlc-devel mailing list
>>>> To unsubscribe or modify your subscription options:
>>>> https://mailman.videolan.org/listinfo/vlc-devel
>>>
>>
>> --
>> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez
>excuser ma brièveté.
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
--
Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20191025/c1cd363f/attachment.html>
More information about the vlc-devel
mailing list