1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-22 06:42:03 +00:00

input: remove Linux joystick support

Why did this exist in the first place? Other than being completely
useless, this even caused some regressions in the past. For example,
there was the case of a laptop exposing its accelerometer as joystick
device, which led to extremely fun things due to the default mappings of
axis movement being mapped to seeking.

I suppose those who really want to use their joystick to control a media
player (???) can configure it as mouse device or so.
This commit is contained in:
wm4 2015-03-24 16:02:48 +01:00
parent 1e659a9f0f
commit 9b5a7241e8
15 changed files with 1 additions and 348 deletions

View File

@ -32,7 +32,7 @@ INTERACTIVE CONTROL
===================
mpv has a fully configurable, command-driven control layer which allows you
to control mpv using keyboard, mouse, joystick or remote control (there is no
to control mpv using keyboard, mouse, or remote control (there is no
LIRC support - configure remotes as input devices instead).
See the ``--input-`` options for ways to customize it.

View File

@ -2358,12 +2358,6 @@ Input
driver. Necessary to use the OSC, or to select the buttons in DVD menus.
Support depends on the VO in use.
``--input-joystick``, ``--no-input-joystick``
Enable/disable joystick support. Disabled by default.
``--input-js-dev``
Specifies the joystick device to use (default: ``/dev/input/js0``).
``--input-media-keys=<yes|no>``
(OS X only)
Enable/disable media keys support. Enabled by default (except for libmpv).

View File

@ -241,7 +241,6 @@ Command Line Switches
``-noar`` ``--no-input-appleremote``
``-noautosub`` ``--no-sub-auto``
``-noconsolecontrols`` ``--no-input-terminal``
``-nojoystick`` ``--no-input-joystick``
``-nosound`` ``--no-audio``
``-osdlevel`` ``--osd-level``
``-panscanrange`` ``--video-zoom``, ``--video-pan-x/y``

View File

@ -159,20 +159,6 @@
#AR_VDOWN add volume -2
#AR_VDOWN_HOLD add chapter -1
# Joystick section
# WARNING: joystick support has to be explicitly enabled at
# compiletime with --enable-joystick
#
#JOY_AXIS0_PLUS seek 10
#JOY_AXIS0_MINUS seek -10
#JOY_AXIS1_MINUS seek 60
#JOY_AXIS1_PLUS seek -60
#JOY_BTN0 cycle pause
#JOY_BTN1 cycle osd
#JOY_BTN2 add volume 2
#JOY_BTN3 add volume -2
# For dvdnav:// and bdnav://
# navigation controls during playback

View File

@ -74,22 +74,6 @@ l cycle tv-channel -1
n cycle tv-norm
#b tv_step_chanlist
##
## Joystick section
## WARNING: joystick support has to be explicitly enabled at
## compiletime with --enable-joystick
##
JOY_RIGHT seek 10
JOY_LEFT seek -10
JOY_UP seek 60
JOY_DOWN seek -60
JOY_BTN0 cycle pause
JOY_BTN1 osd
JOY_BTN2 add volume 1
JOY_BTN3 add volume -1
#JOY_BTN4 set_menu main
##
## Apple Remote section
##

View File

@ -163,8 +163,6 @@ struct input_opts {
// Autorepeat config (be aware of mp_input_set_repeat_info())
int ar_delay;
int ar_rate;
char *js_dev;
int use_joystick;
int use_alt_gr;
int use_appleremote;
int use_media_keys;
@ -182,11 +180,9 @@ const struct m_sub_options input_config = {
OPT_INT("ar-rate", ar_rate, CONF_GLOBAL),
OPT_PRINT("keylist", mp_print_key_list),
OPT_PRINT("cmdlist", mp_print_cmd_list),
OPT_STRING("js-dev", js_dev, CONF_GLOBAL),
OPT_FLAG("default-bindings", default_bindings, CONF_GLOBAL),
OPT_FLAG("test", test, CONF_GLOBAL),
OPT_INTRANGE("doubleclick-time", doubleclick_time, 0, 0, 1000),
OPT_FLAG("joystick", use_joystick, CONF_GLOBAL),
OPT_FLAG("right-alt-gr", use_alt_gr, CONF_GLOBAL),
OPT_INTRANGE("key-fifo-size", key_fifo_size, CONF_GLOBAL, 2, 65000),
OPT_FLAG("cursor", enable_mouse_movements, CONF_GLOBAL),
@ -1244,11 +1240,6 @@ void mp_input_load(struct input_ctx *ictx)
MP_VERBOSE(ictx, "Falling back on default (hardcoded) input config\n");
}
#if HAVE_JOYSTICK
if (input_conf->use_joystick)
mp_input_joystick_add(ictx, input_conf->js_dev);
#endif
if (input_conf->use_alt_gr) {
ictx->using_alt_gr = true;
}

View File

@ -257,7 +257,6 @@ void mp_input_run_cmd(struct input_ctx *ictx, const char **cmd);
void mp_input_set_repeat_info(struct input_ctx *ictx, int rate, int delay);
void mp_input_pipe_add(struct input_ctx *ictx, const char *filename);
void mp_input_joystick_add(struct input_ctx *ictx, char *dev);
struct mp_ipc_ctx;
struct mp_client_api;

View File

@ -1,216 +0,0 @@
/*
* This file is part of MPlayer.
*
* MPlayer is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* MPlayer is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with MPlayer; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "input.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <poll.h>
#include "common/common.h"
#include "common/msg.h"
#include "keycodes.h"
#ifndef JOY_AXIS_DELTA
#define JOY_AXIS_DELTA 500
#endif
#ifndef JS_DEV
#define JS_DEV "/dev/input/js0"
#endif
#include <linux/joystick.h>
struct ctx {
struct mp_log *log;
int axis[256];
int btns;
int fd;
};
static int close_js(void *ctx, int fd)
{
close(fd);
talloc_free(ctx);
return 0;
}
static struct ctx *joystick_init(struct input_ctx *ictx, struct mp_log *log, char *dev)
{
int fd,l=0;
int initialized = 0;
struct js_event ev;
mp_verbose(log, "Opening joystick device %s\n",dev ? dev : JS_DEV);
fd = open( dev ? dev : JS_DEV , O_RDONLY | O_NONBLOCK );
if(fd < 0) {
mp_err(log, "Can't open joystick device %s: %s\n",dev ? dev : JS_DEV,
mp_strerror(errno));
return NULL;
}
struct ctx *ctx = talloc_ptrtype(NULL, ctx);
*ctx = (struct ctx) {.log = log};
while(! initialized) {
l = 0;
while((unsigned int)l < sizeof(struct js_event)) {
int r = read(fd,((char*)&ev)+l,sizeof(struct js_event)-l);
if(r < 0) {
if(errno == EINTR)
continue;
else if(errno == EAGAIN) {
initialized = 1;
break;
}
MP_ERR(ctx, "Error while reading joystick device: %s\n",
mp_strerror(errno));
close(fd);
talloc_free(ctx);
return NULL;
}
l += r;
}
if((unsigned int)l < sizeof(struct js_event)) {
if(l > 0)
MP_WARN(ctx, "Joystick: We lose %d bytes of data\n",l);
break;
}
if(ev.type == JS_EVENT_BUTTON)
ctx->btns |= (ev.value << ev.number);
if(ev.type == JS_EVENT_AXIS)
ctx->axis[ev.number] = ev.value;
}
ctx->fd = fd;
return ctx;
}
static int mp_input_joystick_read(void *pctx, int fd) {
struct ctx *ctx = pctx;
struct js_event ev;
int l=0;
while((unsigned int)l < sizeof(struct js_event)) {
int r = read(fd,((char*)&ev)+l,sizeof(struct js_event)-l);
if(r <= 0) {
if(errno == EINTR)
continue;
else if(errno == EAGAIN)
return 0;
if( r < 0) {
MP_ERR(ctx, "Error while reading joystick device: %s\n",
mp_strerror(errno));
} else {
MP_ERR(ctx, "Error while reading joystick device: %s\n","EOF");
}
return -1;
}
l += r;
}
if((unsigned int)l < sizeof(struct js_event)) {
if(l > 0)
MP_WARN(ctx, "Joystick: We lose %d bytes of data\n",l);
return 0;
}
if(ev.type & JS_EVENT_INIT) {
MP_WARN(ctx, "Joystick: warning init event, we have lost sync with driver.\n");
ev.type &= ~JS_EVENT_INIT;
if(ev.type == JS_EVENT_BUTTON) {
int s = (ctx->btns >> ev.number) & 1;
if(s == ev.value) // State is the same : ignore
return 0;
}
if(ev.type == JS_EVENT_AXIS) {
if( ( ctx->axis[ev.number] == 1 && ev.value > JOY_AXIS_DELTA) ||
(ctx->axis[ev.number] == -1 && ev.value < -JOY_AXIS_DELTA) ||
(ctx->axis[ev.number] == 0 && ev.value >= -JOY_AXIS_DELTA && ev.value <= JOY_AXIS_DELTA)
) // State is the same : ignore
return 0;
}
}
if(ev.type & JS_EVENT_BUTTON) {
ctx->btns &= ~(1 << ev.number);
ctx->btns |= (ev.value << ev.number);
if(ev.value == 1)
return (MP_JOY_BTN0 + ev.number) | MP_KEY_STATE_DOWN;
else
return (MP_JOY_BTN0 + ev.number) | MP_KEY_STATE_UP;
} else if(ev.type & JS_EVENT_AXIS) {
if(ev.value < -JOY_AXIS_DELTA && ctx->axis[ev.number] != -1) {
ctx->axis[ev.number] = -1;
return (MP_JOY_AXIS0_MINUS+(2*ev.number)) | MP_KEY_STATE_DOWN;
} else if(ev.value > JOY_AXIS_DELTA && ctx->axis[ev.number] != 1) {
ctx->axis[ev.number] = 1;
return (MP_JOY_AXIS0_PLUS+(2*ev.number)) | MP_KEY_STATE_DOWN;
} else if(ev.value <= JOY_AXIS_DELTA && ev.value >= -JOY_AXIS_DELTA && ctx->axis[ev.number] != 0) {
int r = ctx->axis[ev.number] == 1 ? MP_JOY_AXIS0_PLUS+(2*ev.number) : MP_JOY_AXIS0_MINUS+(2*ev.number);
ctx->axis[ev.number] = 0;
return r | MP_KEY_STATE_UP;
} else
return 0;
} else {
MP_WARN(ctx, "Joystick warning unknown event type %d\n",ev.type);
return -1;
}
return 0;
}
static void read_joystick_thread(struct mp_input_src *src, void *param)
{
int wakeup_fd = mp_input_src_get_wakeup_fd(src);
struct ctx *ctx = joystick_init(src->input_ctx, src->log, param);
if (!ctx)
return;
mp_input_src_init_done(src);
while (1) {
struct pollfd fds[2] = {
{ .fd = ctx->fd, .events = POLLIN },
{ .fd = wakeup_fd, .events = POLLIN },
};
poll(fds, 2, -1);
if (!(fds[0].revents & POLLIN))
break;
int r = mp_input_joystick_read(ctx, ctx->fd);
if (r < 0)
break;
if (r > 0)
mp_input_put_key(src->input_ctx, r);
}
close_js(ctx, ctx->fd);
}
void mp_input_joystick_add(struct input_ctx *ictx, char *dev)
{
mp_input_add_thread_src(ictx, (void *)dev, read_joystick_thread);
}

View File

@ -118,42 +118,6 @@ static const struct key_name key_names[] = {
{ MP_MOUSE_BTN17_DBL, "MOUSE_BTN17_DBL" },
{ MP_MOUSE_BTN18_DBL, "MOUSE_BTN18_DBL" },
{ MP_MOUSE_BTN19_DBL, "MOUSE_BTN19_DBL" },
{ MP_JOY_AXIS1_MINUS, "JOY_UP" },
{ MP_JOY_AXIS1_PLUS, "JOY_DOWN" },
{ MP_JOY_AXIS0_MINUS, "JOY_LEFT" },
{ MP_JOY_AXIS0_PLUS, "JOY_RIGHT" },
{ MP_JOY_AXIS0_PLUS, "JOY_AXIS0_PLUS" },
{ MP_JOY_AXIS0_MINUS, "JOY_AXIS0_MINUS" },
{ MP_JOY_AXIS1_PLUS, "JOY_AXIS1_PLUS" },
{ MP_JOY_AXIS1_MINUS, "JOY_AXIS1_MINUS" },
{ MP_JOY_AXIS2_PLUS, "JOY_AXIS2_PLUS" },
{ MP_JOY_AXIS2_MINUS, "JOY_AXIS2_MINUS" },
{ MP_JOY_AXIS3_PLUS, "JOY_AXIS3_PLUS" },
{ MP_JOY_AXIS3_MINUS, "JOY_AXIS3_MINUS" },
{ MP_JOY_AXIS4_PLUS, "JOY_AXIS4_PLUS" },
{ MP_JOY_AXIS4_MINUS, "JOY_AXIS4_MINUS" },
{ MP_JOY_AXIS5_PLUS, "JOY_AXIS5_PLUS" },
{ MP_JOY_AXIS5_MINUS, "JOY_AXIS5_MINUS" },
{ MP_JOY_AXIS6_PLUS, "JOY_AXIS6_PLUS" },
{ MP_JOY_AXIS6_MINUS, "JOY_AXIS6_MINUS" },
{ MP_JOY_AXIS7_PLUS, "JOY_AXIS7_PLUS" },
{ MP_JOY_AXIS7_MINUS, "JOY_AXIS7_MINUS" },
{ MP_JOY_AXIS8_PLUS, "JOY_AXIS8_PLUS" },
{ MP_JOY_AXIS8_MINUS, "JOY_AXIS8_MINUS" },
{ MP_JOY_AXIS9_PLUS, "JOY_AXIS9_PLUS" },
{ MP_JOY_AXIS9_MINUS, "JOY_AXIS9_MINUS" },
{ MP_JOY_BTN0, "JOY_BTN0" },
{ MP_JOY_BTN1, "JOY_BTN1" },
{ MP_JOY_BTN2, "JOY_BTN2" },
{ MP_JOY_BTN3, "JOY_BTN3" },
{ MP_JOY_BTN4, "JOY_BTN4" },
{ MP_JOY_BTN5, "JOY_BTN5" },
{ MP_JOY_BTN6, "JOY_BTN6" },
{ MP_JOY_BTN7, "JOY_BTN7" },
{ MP_JOY_BTN8, "JOY_BTN8" },
{ MP_JOY_BTN9, "JOY_BTN9" },
{ MP_AR_PLAY, "AR_PLAY" },
{ MP_AR_PLAY_HOLD, "AR_PLAY_HOLD" },

View File

@ -97,43 +97,6 @@
#define MP_KEY_KPDEL (MP_KEY_KEYPAD+12)
#define MP_KEY_KPENTER (MP_KEY_KEYPAD+13)
// Joystick input module
#define MP_JOY_BASE (MP_KEY_BASE+0x70)
#define MP_JOY_AXIS0_PLUS (MP_JOY_BASE+0)
#define MP_JOY_AXIS0_MINUS (MP_JOY_BASE+1)
#define MP_JOY_AXIS1_PLUS (MP_JOY_BASE+2)
#define MP_JOY_AXIS1_MINUS (MP_JOY_BASE+3)
#define MP_JOY_AXIS2_PLUS (MP_JOY_BASE+4)
#define MP_JOY_AXIS2_MINUS (MP_JOY_BASE+5)
#define MP_JOY_AXIS3_PLUS (MP_JOY_BASE+6)
#define MP_JOY_AXIS3_MINUS (MP_JOY_BASE+7)
#define MP_JOY_AXIS4_PLUS (MP_JOY_BASE+8)
#define MP_JOY_AXIS4_MINUS (MP_JOY_BASE+9)
#define MP_JOY_AXIS5_PLUS (MP_JOY_BASE+10)
#define MP_JOY_AXIS5_MINUS (MP_JOY_BASE+11)
#define MP_JOY_AXIS6_PLUS (MP_JOY_BASE+12)
#define MP_JOY_AXIS6_MINUS (MP_JOY_BASE+13)
#define MP_JOY_AXIS7_PLUS (MP_JOY_BASE+14)
#define MP_JOY_AXIS7_MINUS (MP_JOY_BASE+15)
#define MP_JOY_AXIS8_PLUS (MP_JOY_BASE+16)
#define MP_JOY_AXIS8_MINUS (MP_JOY_BASE+17)
#define MP_JOY_AXIS9_PLUS (MP_JOY_BASE+18)
#define MP_JOY_AXIS9_MINUS (MP_JOY_BASE+19)
#define MP_JOY_BTN_BASE ((MP_KEY_BASE+0x90)|MP_NO_REPEAT_KEY)
#define MP_JOY_BTN0 (MP_JOY_BTN_BASE+0)
#define MP_JOY_BTN1 (MP_JOY_BTN_BASE+1)
#define MP_JOY_BTN2 (MP_JOY_BTN_BASE+2)
#define MP_JOY_BTN3 (MP_JOY_BTN_BASE+3)
#define MP_JOY_BTN4 (MP_JOY_BTN_BASE+4)
#define MP_JOY_BTN5 (MP_JOY_BTN_BASE+5)
#define MP_JOY_BTN6 (MP_JOY_BTN_BASE+6)
#define MP_JOY_BTN7 (MP_JOY_BTN_BASE+7)
#define MP_JOY_BTN8 (MP_JOY_BTN_BASE+8)
#define MP_JOY_BTN9 (MP_JOY_BTN_BASE+9)
// Mouse events from VOs
#define MP_MOUSE_BASE ((MP_KEY_BASE+0xA0)|MP_NO_REPEAT_KEY|MP_KEY_EMIT_ON_UP)
#define MP_MOUSE_BTN0 (MP_MOUSE_BASE+0)

View File

@ -164,7 +164,6 @@ options_state_machine() {
opt_yes_no _libguess "libguess"
opt_yes_no _termios "termios database for key codes"
opt_yes_no _iconv "iconv for encoding conversion"
opt_yes_no _joystick "joystick support" no
opt_yes_no _vm "X video mode extensions"
opt_yes_no _dvb "DVB input"
opt_yes_no _tv "TV interface (TV/DVB grabbers)" yes
@ -838,8 +837,6 @@ if test "$_vapoursynth" = no && test "$_vapoursynth_lazy" = no ; then
fi
check_trivial "VapourSynth core" $_vapoursynth_core VAPOURSYNTH_CORE
check_trivial "joystick" $_joystick JOYSTICK
check_trivial "encoding" $_encoding ENCODING
# needs dlopen on unix

View File

@ -73,7 +73,6 @@ SOURCES-$(GL_WAYLAND) += video/out/wayland_common.c \
video/out/gl_wayland.c
SOURCES-$(JACK) += audio/out/ao_jack.c
SOURCES-$(JOYSTICK) += input/joystick.c
SOURCES-$(OPENAL) += audio/out/ao_openal.c
SOURCES-$(OSS_AUDIO) += audio/out/ao_oss.c
SOURCES-$(PULSE) += audio/out/ao_pulse.c

View File

@ -616,7 +616,6 @@ const m_option_t mp_opts[] = {
OPT_REPLACED("noar", "no-input-appleremote"),
OPT_REPLACED("noautosub", "no-sub-auto"),
OPT_REPLACED("noconsolecontrols", "no-input-terminal"),
OPT_REPLACED("nojoystick", "no-input-joystick"),
OPT_REPLACED("nosound", "no-audio"),
OPT_REPLACED("osdlevel", "osd-level"),
OPT_REMOVED("panscanrange", "use --video-zoom, --video-pan-x/y"),

View File

@ -308,11 +308,6 @@ iconv support use --disable-iconv.",
'name' : '--encoding',
'desc' : 'Encoding',
'func': check_true,
}, {
'name' : '--joystick',
'desc' : 'joystick',
'func': check_cc(header_name='linux/joystick.h'),
'default': 'disable'
}, {
'name': '--libbluray',
'desc': 'Bluray support',

View File

@ -184,7 +184,6 @@ def build(ctx):
( "input/ipc.c", "!mingw" ),
( "input/keycodes.c" ),
( "input/pipe-win32.c", "waio" ),
( "input/joystick.c", "joystick" ),
## Misc
( "misc/bstr.c" ),