diff --git a/core/linux-dist/evdev_gamepad.h b/core/linux-dist/evdev_gamepad.h index 51a3293ce..9fe2c22d1 100644 --- a/core/linux-dist/evdev_gamepad.h +++ b/core/linux-dist/evdev_gamepad.h @@ -6,6 +6,33 @@ #include #include +class DefaultEvdevInputMapping : public InputMapping +{ +public: + DefaultEvdevInputMapping() { + name = "Default"; + set_button(DC_BTN_START, BTN_START); + set_button(DC_BTN_A, BTN_SOUTH); + set_button(DC_BTN_B, BTN_EAST); + set_button(DC_BTN_X, BTN_WEST); + set_button(DC_BTN_Y, BTN_NORTH); + set_button(DC_BTN_C, BTN_C); + set_button(DC_BTN_Z, BTN_Z); + set_button(DC_DPAD_UP, BTN_DPAD_UP); + set_button(DC_DPAD_DOWN, BTN_DPAD_DOWN); + set_button(DC_DPAD_LEFT, BTN_DPAD_LEFT); + set_button(DC_DPAD_RIGHT, BTN_DPAD_RIGHT); + set_button(EMU_BTN_MENU, BTN_SELECT); + + set_axis(DC_AXIS_X, ABS_X, false); + set_axis(DC_AXIS_Y, ABS_Y, false); + set_axis(DC_AXIS_LT, ABS_Z, false); + set_axis(DC_AXIS_RT, ABS_RZ, false); + set_axis(DC_AXIS_X2, ABS_RX, false); + set_axis(DC_AXIS_Y2, ABS_RY, false); + } +}; + class EvdevGamepadDevice : public GamepadDevice { public: @@ -58,7 +85,7 @@ public: input_mapper = std::make_shared(*input_mapper); } else - input_mapper = std::make_shared(); + input_mapper = std::make_shared(); input_mapper->name = _name + " mapping"; save_mapping(); } diff --git a/core/oslib/audiobackend_omx.cpp b/core/oslib/audiobackend_omx.cpp index f86f73700..6295c7a2b 100644 --- a/core/oslib/audiobackend_omx.cpp +++ b/core/oslib/audiobackend_omx.cpp @@ -223,9 +223,9 @@ static void omx_init() WARN_LOG(AUDIO, "OMX: failed to empty buffer[%u]. Error 0x%X", i, error); } - char* output_device = "local"; + const char* output_device = "local"; if(settings.omx.Audio_HDMI) - output_device = (char*)"hdmi"; + output_device = (const char*)"hdmi"; // Set audio destination OMX_CONFIG_BRCMAUDIODESTINATIONTYPE ar_dest; @@ -255,7 +255,7 @@ static u32 omx_push(const void* frame, u32 samples, bool wait) while(data_size > 0) { - size_t copy_size = std::min(buffer_size, data_size); + size_t copy_size = std::min(buffer_size - buffer_length, data_size); // Don't have more than maximum audio latency u32 latency = omx_get_latency(); @@ -265,11 +265,12 @@ static u32 omx_push(const void* frame, u32 samples, bool wait) } else if(latency == 0) { - WARN_LOG(AUDIO, "OMX: underrun occurred"); + INFO_LOG(AUDIO, "OMX: underrun occurred"); } memcpy(audio_buffers[audio_buffer_idx]->pBuffer + buffer_length, frame, copy_size); buffer_length += copy_size; + frame = (char *)frame + copy_size; // Flush buffer and swap if(buffer_length >= buffer_size) @@ -279,7 +280,7 @@ static u32 omx_push(const void* frame, u32 samples, bool wait) OMX_ERRORTYPE error = OMX_EmptyThisBuffer(omx_handle, audio_buffers[audio_buffer_idx]); if(error != OMX_ErrorNone) - WARN_LOG(AUDIO, "OMX: failed to empty buffer[%u]. Error 0x%X", audio_buffer_idx, error); + INFO_LOG(AUDIO, "OMX: failed to empty buffer[%u]. Error 0x%X", audio_buffer_idx, error); audio_buffer_idx = (audio_buffer_idx + 1) % buffer_count; buffer_length = 0;