Change shared-mode settings
This commit is contained in:
parent
39adab8cc1
commit
eebd7bbeea
|
@ -505,10 +505,11 @@ static void *wasapi_init(const char *dev_id, unsigned rate, unsigned latency,
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
bool com_initialized = false;
|
bool com_initialized = false;
|
||||||
UINT32 frame_count = 0;
|
UINT32 frame_count = 0;
|
||||||
|
REFERENCE_TIME dev_period = 0;
|
||||||
BYTE *dest = NULL;
|
BYTE *dest = NULL;
|
||||||
settings_t *settings = config_get_ptr();
|
settings_t *settings = config_get_ptr();
|
||||||
bool float_format = settings->bools.audio_wasapi_float_format;
|
bool float_format = settings->bools.audio_wasapi_float_format;
|
||||||
unsigned sh_buffer_length = settings->uints.audio_wasapi_sh_buffer_length;
|
int sh_buffer_length = settings->ints.audio_wasapi_sh_buffer_length;
|
||||||
wasapi_t *w = (wasapi_t*)calloc(1, sizeof(wasapi_t));
|
wasapi_t *w = (wasapi_t*)calloc(1, sizeof(wasapi_t));
|
||||||
w->exclusive = settings->bools.audio_wasapi_exclusive_mode;
|
w->exclusive = settings->bools.audio_wasapi_exclusive_mode;
|
||||||
|
|
||||||
|
@ -545,6 +546,14 @@ static void *wasapi_init(const char *dev_id, unsigned rate, unsigned latency,
|
||||||
}
|
}
|
||||||
else if (sh_buffer_length)
|
else if (sh_buffer_length)
|
||||||
{
|
{
|
||||||
|
if (sh_buffer_length < 0)
|
||||||
|
{
|
||||||
|
hr = w->client->lpVtbl->GetDevicePeriod(w->client, &dev_period, NULL);
|
||||||
|
WASAPI_HR_CHECK(hr, "IAudioClient::GetDevicePeriod", goto error);
|
||||||
|
|
||||||
|
sh_buffer_length = dev_period * rate / 10000000;
|
||||||
|
}
|
||||||
|
|
||||||
w->buffer = fifo_new(sh_buffer_length * w->frame_size);
|
w->buffer = fifo_new(sh_buffer_length * w->frame_size);
|
||||||
WASAPI_CHECK(w->buffer, "Out of memory", goto error);
|
WASAPI_CHECK(w->buffer, "Out of memory", goto error);
|
||||||
|
|
||||||
|
@ -963,11 +972,9 @@ static size_t wasapi_write_avail(void *wh)
|
||||||
static size_t wasapi_buffer_size(void *wh)
|
static size_t wasapi_buffer_size(void *wh)
|
||||||
{
|
{
|
||||||
wasapi_t *w = (wasapi_t*)wh;
|
wasapi_t *w = (wasapi_t*)wh;
|
||||||
settings_t *settings = config_get_ptr();
|
|
||||||
unsigned sh_buffer_length = settings->uints.audio_wasapi_sh_buffer_length;
|
|
||||||
|
|
||||||
if (!w->exclusive && w->buffer)
|
if (!w->exclusive && w->buffer)
|
||||||
return sh_buffer_length * w->frame_size;
|
return w->buffer->size;
|
||||||
|
|
||||||
return w->engine_buffer_size;
|
return w->engine_buffer_size;
|
||||||
}
|
}
|
||||||
|
|
|
@ -416,9 +416,9 @@ static const float audio_volume = 0.0;
|
||||||
|
|
||||||
#ifdef HAVE_WASAPI
|
#ifdef HAVE_WASAPI
|
||||||
/* WASAPI defaults */
|
/* WASAPI defaults */
|
||||||
static const bool wasapi_exclusive_mode = true;
|
static const bool wasapi_exclusive_mode = true;
|
||||||
static const bool wasapi_float_format = false;
|
static const bool wasapi_float_format = false;
|
||||||
static const unsigned wasapi_sh_buffer_length = 0;
|
static const int wasapi_sh_buffer_length = -16; /* auto */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* MISC */
|
/* MISC */
|
||||||
|
|
|
@ -1356,9 +1356,6 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
|
||||||
#endif
|
#endif
|
||||||
SETTING_UINT("bundle_assets_extract_version_current", &settings->uints.bundle_assets_extract_version_current, true, 0, false);
|
SETTING_UINT("bundle_assets_extract_version_current", &settings->uints.bundle_assets_extract_version_current, true, 0, false);
|
||||||
SETTING_UINT("bundle_assets_extract_last_version", &settings->uints.bundle_assets_extract_last_version, true, 0, false);
|
SETTING_UINT("bundle_assets_extract_last_version", &settings->uints.bundle_assets_extract_last_version, true, 0, false);
|
||||||
#ifdef HAVE_WASAPI
|
|
||||||
SETTING_UINT("audio_wasapi_sh_buffer_length", &settings->uints.audio_wasapi_sh_buffer_length, true, wasapi_sh_buffer_length, false);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
*size = count;
|
*size = count;
|
||||||
|
|
||||||
|
@ -1374,6 +1371,9 @@ static struct config_int_setting *populate_settings_int(settings_t *settings, in
|
||||||
#ifdef HAVE_NETWORKING
|
#ifdef HAVE_NETWORKING
|
||||||
SETTING_INT("netplay_check_frames", &settings->ints.netplay_check_frames, true, netplay_check_frames, false);
|
SETTING_INT("netplay_check_frames", &settings->ints.netplay_check_frames, true, netplay_check_frames, false);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_WASAPI
|
||||||
|
SETTING_INT("audio_wasapi_sh_buffer_length", &settings->ints.audio_wasapi_sh_buffer_length, true, wasapi_sh_buffer_length, false);
|
||||||
|
#endif
|
||||||
|
|
||||||
*size = count;
|
*size = count;
|
||||||
|
|
||||||
|
|
|
@ -245,6 +245,10 @@ typedef struct settings
|
||||||
int location_update_interval_ms;
|
int location_update_interval_ms;
|
||||||
int location_update_interval_distance;
|
int location_update_interval_distance;
|
||||||
int state_slot;
|
int state_slot;
|
||||||
|
|
||||||
|
#ifdef HAVE_WASAPI
|
||||||
|
int audio_wasapi_sh_buffer_length;
|
||||||
|
#endif
|
||||||
} ints;
|
} ints;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
|
@ -311,10 +315,6 @@ typedef struct settings
|
||||||
|
|
||||||
unsigned camera_width;
|
unsigned camera_width;
|
||||||
unsigned camera_height;
|
unsigned camera_height;
|
||||||
|
|
||||||
#ifdef HAVE_WASAPI
|
|
||||||
unsigned audio_wasapi_sh_buffer_length; /* in frames (0 disables buffering) */
|
|
||||||
#endif
|
|
||||||
} uints;
|
} uints;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
|
|
|
@ -2267,7 +2267,7 @@ MSG_HASH(
|
||||||
)
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_SUBLABEL_AUDIO_WASAPI_SH_BUFFER_LENGTH,
|
MENU_ENUM_SUBLABEL_AUDIO_WASAPI_SH_BUFFER_LENGTH,
|
||||||
"The audio buffer length when using the WASAPI driver in shared mode."
|
"The intermediate buffer length (in frames) when using the WASAPI driver in shared mode."
|
||||||
)
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_SUBLABEL_AUDIO_SYNC,
|
MENU_ENUM_SUBLABEL_AUDIO_SYNC,
|
||||||
|
|
|
@ -5525,7 +5525,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
|
||||||
PARSE_ONLY_BOOL, false);
|
PARSE_ONLY_BOOL, false);
|
||||||
menu_displaylist_parse_settings_enum(menu, info,
|
menu_displaylist_parse_settings_enum(menu, info,
|
||||||
MENU_ENUM_LABEL_AUDIO_WASAPI_SH_BUFFER_LENGTH,
|
MENU_ENUM_LABEL_AUDIO_WASAPI_SH_BUFFER_LENGTH,
|
||||||
PARSE_ONLY_UINT, false);
|
PARSE_ONLY_INT, false);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
info->need_refresh = true;
|
info->need_refresh = true;
|
||||||
|
|
|
@ -174,6 +174,24 @@ static void setting_get_string_representation_uint_custom_viewport_height(void *
|
||||||
*setting->value.target.unsigned_integer);
|
*setting->value.target.unsigned_integer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_WASAPI
|
||||||
|
static void setting_get_string_representation_int_audio_wasapi_sh_buffer_length(void *data,
|
||||||
|
char *s, size_t len)
|
||||||
|
{
|
||||||
|
rarch_setting_t *setting = (rarch_setting_t*)data;
|
||||||
|
if (!setting)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (*setting->value.target.integer > 0)
|
||||||
|
snprintf(s, len, "%d",
|
||||||
|
*setting->value.target.integer);
|
||||||
|
else if (*setting->value.target.integer == 0)
|
||||||
|
strlcpy(s, "0 (Off)", len);
|
||||||
|
else
|
||||||
|
strlcpy(s, "Auto", len);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int setting_uint_action_left_custom_viewport_width(void *data, bool wraparound)
|
static int setting_uint_action_left_custom_viewport_width(void *data, bool wraparound)
|
||||||
{
|
{
|
||||||
video_viewport_t vp;
|
video_viewport_t vp;
|
||||||
|
@ -4011,12 +4029,12 @@ static bool setting_append_list(
|
||||||
parent_group,
|
parent_group,
|
||||||
general_write_handler,
|
general_write_handler,
|
||||||
general_read_handler,
|
general_read_handler,
|
||||||
SD_FLAG_ADVANCED
|
SD_FLAG_NONE
|
||||||
);
|
);
|
||||||
|
|
||||||
CONFIG_UINT(
|
CONFIG_INT(
|
||||||
list, list_info,
|
list, list_info,
|
||||||
&settings->uints.audio_wasapi_sh_buffer_length,
|
&settings->ints.audio_wasapi_sh_buffer_length,
|
||||||
MENU_ENUM_LABEL_AUDIO_WASAPI_SH_BUFFER_LENGTH,
|
MENU_ENUM_LABEL_AUDIO_WASAPI_SH_BUFFER_LENGTH,
|
||||||
MENU_ENUM_LABEL_VALUE_AUDIO_WASAPI_SH_BUFFER_LENGTH,
|
MENU_ENUM_LABEL_VALUE_AUDIO_WASAPI_SH_BUFFER_LENGTH,
|
||||||
wasapi_sh_buffer_length,
|
wasapi_sh_buffer_length,
|
||||||
|
@ -4025,8 +4043,10 @@ static bool setting_append_list(
|
||||||
parent_group,
|
parent_group,
|
||||||
general_write_handler,
|
general_write_handler,
|
||||||
general_read_handler);
|
general_read_handler);
|
||||||
menu_settings_list_current_add_range(list, list_info, 0, 1024, 16.0, true, true);
|
menu_settings_list_current_add_range(list, list_info, -16.0f, 0.0f, 16.0f, true, false);
|
||||||
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
|
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
|
||||||
|
(*list)[list_info->index - 1].get_string_representation =
|
||||||
|
&setting_get_string_representation_int_audio_wasapi_sh_buffer_length;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue