mirror of
https://github.com/mpv-player/mpv
synced 2025-02-03 21:52:12 +00:00
DirectSound's GetVolume and SetVolume use 100ths of decibels and range from -10,000 to 0.
MPlayer uses a linear intensity value between 0.0 and 100.0. This patch converts the values properly rather than simply linearly mapping the range. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@16973 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
8572f14094
commit
35d0962444
@ -27,6 +27,7 @@
|
||||
#include <windows.h>
|
||||
#define DIRECTSOUND_VERSION 0x0600
|
||||
#include <dsound.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "libaf/af_format.h"
|
||||
@ -389,13 +390,13 @@ static int control(int cmd, void *arg)
|
||||
case AOCONTROL_GET_VOLUME: {
|
||||
ao_control_vol_t* vol = (ao_control_vol_t*)arg;
|
||||
IDirectSoundBuffer_GetVolume(hdsbuf, &volume);
|
||||
vol->left = vol->right = (float)(volume+10000) / 100.0;
|
||||
vol->left = vol->right = pow(10.0, (float)(volume+10000) / 5000.0);
|
||||
//printf("ao_dsound: volume: %f\n",vol->left);
|
||||
return CONTROL_OK;
|
||||
}
|
||||
case AOCONTROL_SET_VOLUME: {
|
||||
ao_control_vol_t* vol = (ao_control_vol_t*)arg;
|
||||
volume = (vol->right * 100.0)-10000;
|
||||
volume = (DWORD)(log10(vol->right) * 5000.0) - 10000;
|
||||
IDirectSoundBuffer_SetVolume(hdsbuf, volume);
|
||||
//printf("ao_dsound: volume: %f\n",vol->left);
|
||||
return CONTROL_OK;
|
||||
|
Loading…
Reference in New Issue
Block a user