(ffmpeg core) Use bitmasks

This commit is contained in:
twinaphex 2020-07-14 01:27:19 +02:00
parent 06064a0527
commit b6432cd8b4
1 changed files with 31 additions and 15 deletions

View File

@ -67,6 +67,8 @@ extern "C" {
s ##_version() & 0xFF); s ##_version() & 0xFF);
static bool reset_triggered; static bool reset_triggered;
static bool libretro_supports_bitmasks = false;
static void fallback_log(enum retro_log_level level, const char *fmt, ...) static void fallback_log(enum retro_log_level level, const char *fmt, ...)
{ {
va_list va; va_list va;
@ -240,10 +242,15 @@ void CORE_PREFIX(retro_init)(void)
reset_triggered = false; reset_triggered = false;
av_register_all(); av_register_all();
if (CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_INPUT_BITMASKS, NULL))
libretro_supports_bitmasks = true;
} }
void CORE_PREFIX(retro_deinit)(void) void CORE_PREFIX(retro_deinit)(void)
{} {
libretro_supports_bitmasks = false;
}
unsigned CORE_PREFIX(retro_api_version)(void) unsigned CORE_PREFIX(retro_api_version)(void)
{ {
@ -561,6 +568,7 @@ void CORE_PREFIX(retro_run)(void)
double min_pts; double min_pts;
int16_t audio_buffer[2048]; int16_t audio_buffer[2048];
bool left, right, up, down, l, r; bool left, right, up, down, l, r;
int16_t ret = 0;
size_t to_read_frames = 0; size_t to_read_frames = 0;
int seek_frames = 0; int seek_frames = 0;
bool updated = false; bool updated = false;
@ -591,20 +599,28 @@ void CORE_PREFIX(retro_run)(void)
CORE_PREFIX(input_poll_cb)(); CORE_PREFIX(input_poll_cb)();
left = CORE_PREFIX(input_state_cb)(0, RETRO_DEVICE_JOYPAD, 0, if (libretro_supports_bitmasks)
RETRO_DEVICE_ID_JOYPAD_LEFT); ret = CORE_PREFIX(input_state_cb)(0, RETRO_DEVICE_JOYPAD,
right = CORE_PREFIX(input_state_cb)(0, RETRO_DEVICE_JOYPAD, 0, 0, RETRO_DEVICE_ID_JOYPAD_MASK);
RETRO_DEVICE_ID_JOYPAD_RIGHT); else
up = CORE_PREFIX(input_state_cb)(0, RETRO_DEVICE_JOYPAD, 0, {
RETRO_DEVICE_ID_JOYPAD_UP) || unsigned i;
CORE_PREFIX(input_state_cb)(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_WHEELUP); for (i = RETRO_DEVICE_ID_JOYPAD_B; i <= RETRO_DEVICE_ID_JOYPAD_R; i++)
down = CORE_PREFIX(input_state_cb)(0, RETRO_DEVICE_JOYPAD, 0, if (CORE_PREFIX(input_state_cb)(0, RETRO_DEVICE_JOYPAD, 0, i))
RETRO_DEVICE_ID_JOYPAD_DOWN) || ret |= (1 << i);
CORE_PREFIX(input_state_cb)(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_WHEELDOWN); }
l = CORE_PREFIX(input_state_cb)(0, RETRO_DEVICE_JOYPAD, 0,
RETRO_DEVICE_ID_JOYPAD_L); if (CORE_PREFIX(input_state_cb)(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_WHEELUP))
r = CORE_PREFIX(input_state_cb)(0, RETRO_DEVICE_JOYPAD, 0, ret |= (1 << RETRO_DEVICE_ID_JOYPAD_UP);
RETRO_DEVICE_ID_JOYPAD_R); if (CORE_PREFIX(input_state_cb)(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_WHEELDOWN))
ret |= (1 << RETRO_DEVICE_ID_JOYPAD_DOWN);
left = ret & (1 << RETRO_DEVICE_ID_JOYPAD_LEFT);
right = ret & (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT);
up = ret & (1 << RETRO_DEVICE_ID_JOYPAD_UP);
down = ret & (1 << RETRO_DEVICE_ID_JOYPAD_DOWN);
l = ret & (1 << RETRO_DEVICE_ID_JOYPAD_L);
r = ret & (1 << RETRO_DEVICE_ID_JOYPAD_R);
if (left && !last_left) if (left && !last_left)
seek_frames -= 10 * media.interpolate_fps; seek_frames -= 10 * media.interpolate_fps;