vlc/vlc-2.1 | branch: master | Pierre Ynard <[email protected]> | Sun Sep 22 10:06:09 2013 +0200| [b550d447dde2e8c9025f92f3e98c5cacade7daf6] | committer: Pierre Ynard
directsound: use software gain only when amplifying This way we get the features of both worlds: from 0% to 100% you get quick volume change with no saturation, and you can still get amplification over 100%. Fixes #9371 (cherry picked from commit 9b2c48deeb04fa8c3005900bd8f285b50e20539d) Signed-off-by: Pierre Ynard <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc/vlc-2.1.git/?a=commit;h=b550d447dde2e8c9025f92f3e98c5cacade7daf6 --- modules/audio_output/directx.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/modules/audio_output/directx.c b/modules/audio_output/directx.c index 55b54f5..8582942 100644 --- a/modules/audio_output/directx.c +++ b/modules/audio_output/directx.c @@ -356,8 +356,13 @@ static int VolumeSet( audio_output_t *p_aout, float volume ) aout_sys_t *sys = p_aout->sys; int ret = 0; - /* millibels from linear amplification map 200% on DSBVOLUME_MAX */ - LONG mb = lroundf( 6000.f * log10f( volume / 2.f )); + /* Directsound doesn't support amplification, so we use software + gain if we need it and only for this */ + float gain = volume > 1.f ? volume * volume * volume : 1.f; + aout_GainRequest( p_aout, gain ); + + /* millibels from linear amplification */ + LONG mb = lroundf( 6000.f * log10f( __MIN( volume, 1.f ) )); /* Clamp to allowed DirectSound range */ static_assert( DSBVOLUME_MIN < DSBVOLUME_MAX, "DSBVOLUME_* confused" ); @@ -527,7 +532,6 @@ static int CreateDSBuffer( audio_output_t *p_aout, int i_format, waveformat.Format.wBitsPerSample; waveformat.Format.wFormatTag = WAVE_FORMAT_IEEE_FLOAT; waveformat.SubFormat = _KSDATAFORMAT_SUBTYPE_IEEE_FLOAT; - aout_GainRequest(p_aout, 8.f); break; case VLC_CODEC_S16N: @@ -536,7 +540,6 @@ static int CreateDSBuffer( audio_output_t *p_aout, int i_format, waveformat.Format.wBitsPerSample; waveformat.Format.wFormatTag = WAVE_FORMAT_PCM; waveformat.SubFormat = _KSDATAFORMAT_SUBTYPE_PCM; - aout_GainRequest(p_aout, 8.f); break; } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
