Changes for input on rising edge only
Pausing, changing audio and changing subtitles are only performed on the rising edge of a button press only. They no longer change whilst the button is pressed. Signed-off-by: Mahyar Koshkouei <mahyar.koshkouei@gmail.com>
This commit is contained in:
parent
a907c8756f
commit
f50d33ac68
|
@ -31,8 +31,17 @@ static unsigned int event_waiting = 0;
|
||||||
|
|
||||||
/* Save the current playback time for context changes */
|
/* Save the current playback time for context changes */
|
||||||
static int64_t *playback_time = 0;
|
static int64_t *playback_time = 0;
|
||||||
|
|
||||||
|
/* filepath required globaly as mpv is reopened on context change */
|
||||||
static char *filepath = NULL;
|
static char *filepath = NULL;
|
||||||
|
|
||||||
|
struct Input
|
||||||
|
{
|
||||||
|
unsigned int l : 1;
|
||||||
|
unsigned int r : 1;
|
||||||
|
unsigned int a : 1;
|
||||||
|
};
|
||||||
|
|
||||||
static void fallback_log(enum retro_log_level level, const char *fmt, ...)
|
static void fallback_log(enum retro_log_level level, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
(void)level;
|
(void)level;
|
||||||
|
@ -292,8 +301,37 @@ static void audio_callback(void)
|
||||||
|
|
||||||
static void retropad_update_input(void)
|
static void retropad_update_input(void)
|
||||||
{
|
{
|
||||||
|
struct Input current;
|
||||||
|
static struct Input last;
|
||||||
|
|
||||||
input_poll_cb();
|
input_poll_cb();
|
||||||
|
|
||||||
|
/* Commands that are called on rising edge only */
|
||||||
|
|
||||||
|
/* A ternary operator is used since input_state_cb returns an int16_t, but
|
||||||
|
* we only care about whether the button is on or off which is why we store
|
||||||
|
* the value in a single bit for each button.
|
||||||
|
*
|
||||||
|
* Unsure if saving the memory is worth the extra checks, costing CPU time,
|
||||||
|
* but both are incredibly miniscule anyway.
|
||||||
|
*/
|
||||||
|
current.l = input_state_cb(0, RETRO_DEVICE_JOYPAD,
|
||||||
|
0, RETRO_DEVICE_ID_JOYPAD_L) != 0 ? 1 : 0;
|
||||||
|
current.r = input_state_cb(0, RETRO_DEVICE_JOYPAD,
|
||||||
|
0, RETRO_DEVICE_ID_JOYPAD_R) != 0 ? 1 : 0;
|
||||||
|
current.a = input_state_cb(0, RETRO_DEVICE_JOYPAD,
|
||||||
|
0, RETRO_DEVICE_ID_JOYPAD_A) != 0 ? 1 : 0;
|
||||||
|
|
||||||
|
if(current.l == 1 && last.l == 0)
|
||||||
|
mpv_command_string(mpv, "cycle audio");
|
||||||
|
|
||||||
|
if(current.r == 1 && last.r == 0)
|
||||||
|
mpv_command_string(mpv, "cycle sub");
|
||||||
|
|
||||||
|
if(current.a == 1 && last.a == 0)
|
||||||
|
mpv_command_string(mpv, "cycle pause");
|
||||||
|
|
||||||
|
/* Press and hold commands with small delay */
|
||||||
if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0,
|
if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0,
|
||||||
RETRO_DEVICE_ID_JOYPAD_LEFT))
|
RETRO_DEVICE_ID_JOYPAD_LEFT))
|
||||||
mpv_command_string(mpv, "seek -5");
|
mpv_command_string(mpv, "seek -5");
|
||||||
|
@ -310,21 +348,17 @@ static void retropad_update_input(void)
|
||||||
RETRO_DEVICE_ID_JOYPAD_DOWN))
|
RETRO_DEVICE_ID_JOYPAD_DOWN))
|
||||||
mpv_command_string(mpv, "seek -60");
|
mpv_command_string(mpv, "seek -60");
|
||||||
|
|
||||||
if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0,
|
/* Press and hold commands */
|
||||||
RETRO_DEVICE_ID_JOYPAD_L))
|
|
||||||
mpv_command_string(mpv, "cycle audio");
|
|
||||||
|
|
||||||
if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0,
|
|
||||||
RETRO_DEVICE_ID_JOYPAD_R))
|
|
||||||
mpv_command_string(mpv, "cycle sub");
|
|
||||||
|
|
||||||
if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0,
|
|
||||||
RETRO_DEVICE_ID_JOYPAD_A))
|
|
||||||
mpv_command_string(mpv, "cycle pause");
|
|
||||||
|
|
||||||
if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0,
|
if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0,
|
||||||
RETRO_DEVICE_ID_JOYPAD_X))
|
RETRO_DEVICE_ID_JOYPAD_X))
|
||||||
mpv_command_string(mpv, "show-progress");
|
mpv_command_string(mpv, "show-progress");
|
||||||
|
|
||||||
|
/* Instead of copying the structs as though they were a union, we assign
|
||||||
|
* each variable one-by-one to avoid endian issues.
|
||||||
|
*/
|
||||||
|
last.l = current.l;
|
||||||
|
last.r = current.r;
|
||||||
|
last.a = current.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
void retro_run(void)
|
void retro_run(void)
|
||||||
|
|
Loading…
Reference in New Issue