diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2008-12-22 00:46:02 +0200 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2008-12-22 00:46:02 +0200 |
commit | fccb0a7e45b61128262a396f2426bd7168fd198c (patch) | |
tree | ac09e6b90d4389717f32181f8b6f3848ffb149fe /libvo | |
parent | 71b25cca7644ab059393e9ee4682d79aab41ceba (diff) | |
parent | ce821bd91f0b0c67b96f5d3b8f3fda19e1015294 (diff) | |
download | mpv-fccb0a7e45b61128262a396f2426bd7168fd198c.tar.bz2 mpv-fccb0a7e45b61128262a396f2426bd7168fd198c.tar.xz |
Merge svn changes up to r28176
Conflicts:
libvo/video_out.c
libvo/x11_common.c
Diffstat (limited to 'libvo')
-rw-r--r-- | libvo/video_out.c | 67 | ||||
-rw-r--r-- | libvo/video_out.h | 6 | ||||
-rw-r--r-- | libvo/vo_macosx.m | 46 | ||||
-rw-r--r-- | libvo/w32_common.c | 34 | ||||
-rw-r--r-- | libvo/wskeys.h | 88 | ||||
-rw-r--r-- | libvo/x11_common.c | 333 |
6 files changed, 146 insertions, 428 deletions
diff --git a/libvo/video_out.c b/libvo/video_out.c index e587932959..dfdebf077e 100644 --- a/libvo/video_out.c +++ b/libvo/video_out.c @@ -49,7 +49,7 @@ char *vo_subdevice = NULL; int vo_directrendering=0; int vo_colorkey = 0x0000ff00; // default colorkey is green - // (0xff000000 means that colorkey has been disabled) + // (0xff000000 means that colorkey has been disabled) // // Externally visible list of all vo drivers @@ -118,10 +118,10 @@ const struct vo_driver *video_out_drivers[] = &video_out_direct3d, #endif #ifdef CONFIG_COREVIDEO - &video_out_macosx, + &video_out_macosx, #endif #ifdef CONFIG_QUARTZ - &video_out_quartz, + &video_out_quartz, #endif #ifdef CONFIG_XMGA &video_out_xmga, @@ -159,26 +159,26 @@ const struct vo_driver *video_out_drivers[] = &video_out_sdl, #endif #ifdef CONFIG_GGI - &video_out_ggi, + &video_out_ggi, #endif #ifdef CONFIG_FBDEV - &video_out_fbdev, - &video_out_fbdev2, + &video_out_fbdev, + &video_out_fbdev2, #endif #ifdef CONFIG_SVGALIB - &video_out_svga, + &video_out_svga, #endif #ifdef CONFIG_AA - &video_out_aa, + &video_out_aa, #endif #ifdef CONFIG_CACA - &video_out_caca, + &video_out_caca, #endif #ifdef CONFIG_DXR2 - &video_out_dxr2, + &video_out_dxr2, #endif #ifdef CONFIG_DXR3 - &video_out_dxr3, + &video_out_dxr3, #endif #ifdef CONFIG_IVTV &video_out_ivtv, @@ -187,56 +187,56 @@ const struct vo_driver *video_out_drivers[] = &video_out_v4l2, #endif #ifdef CONFIG_ZR - &video_out_zr, - &video_out_zr2, + &video_out_zr, + &video_out_zr2, #endif #ifdef CONFIG_BL - &video_out_bl, + &video_out_bl, #endif #ifdef CONFIG_VESA - &video_out_vesa, + &video_out_vesa, #endif #ifdef CONFIG_DIRECTFB - &video_out_directfb, + &video_out_directfb, #endif #ifdef CONFIG_DFBMGA &video_out_dfbmga, #endif #ifdef CONFIG_VIDIX #ifdef CONFIG_X11 - &video_out_xvidix, + &video_out_xvidix, #endif #if defined(__MINGW32__) || defined(__CYGWIN__) - &video_out_winvidix, + &video_out_winvidix, #endif - &video_out_cvidix, + &video_out_cvidix, #endif &video_out_null, - // should not be auto-selected + // should not be auto-selected #ifdef CONFIG_XVMC &video_out_xvmc, #endif - &video_out_mpegpes, + &video_out_mpegpes, #ifdef CONFIG_YUV4MPEG - &video_out_yuv4mpeg, + &video_out_yuv4mpeg, #endif #ifdef CONFIG_PNG - &video_out_png, + &video_out_png, #endif #ifdef CONFIG_JPEG - &video_out_jpeg, + &video_out_jpeg, #endif #ifdef CONFIG_GIF - &video_out_gif89a, + &video_out_gif89a, #endif #ifdef CONFIG_TGA &video_out_tga, #endif #ifdef CONFIG_PNM - &video_out_pnm, + &video_out_pnm, #endif #ifdef CONFIG_MD5SUM - &video_out_md5sum, + &video_out_md5sum, #endif NULL }; @@ -389,7 +389,18 @@ int vo_config(struct vo *vo, uint32_t width, uint32_t height, return ret; } -#if defined(CONFIG_FBDEV)||defined(CONFIG_VESA) +/** + * \brief lookup an integer in a table, table must have 0 as the last key + * \param key key to search for + * \result translation corresponding to key or "to" value of last mapping + * if not found. + */ +int lookup_keymap_table(const struct keymap *map, int key) { + while (map->from && map->from != key) map++; + return map->to; +} + +#if defined(CONFIG_FBDEV) || defined(CONFIG_VESA) /* Borrowed from vo_fbdev.c Monitor ranges related functions*/ diff --git a/libvo/video_out.h b/libvo/video_out.h index cc9544f4fb..465697927f 100644 --- a/libvo/video_out.h +++ b/libvo/video_out.h @@ -298,4 +298,10 @@ extern char *monitor_hfreq_str; extern char *monitor_vfreq_str; extern char *monitor_dotclock_str; +struct keymap { + int from; + int to; +}; +int lookup_keymap_table(const struct keymap *map, int key); + #endif /* MPLAYER_VIDEO_OUT_H */ diff --git a/libvo/vo_macosx.m b/libvo/vo_macosx.m index 24ffdc1e1f..83537e70c6 100644 --- a/libvo/vo_macosx.m +++ b/libvo/vo_macosx.m @@ -28,6 +28,7 @@ #include "m_option.h" #include "mp_fifo.h" #include "libvo/sub.h" +#include "subopt-helper.h" #include "input/input.h" #include "input/mouse.h" @@ -314,30 +315,31 @@ static void uninit(void) } } +static opt_t subopts[] = { +{"device_id", OPT_ARG_INT, &screen_id, (opt_test_f)int_non_neg}, +{"shared_buffer", OPT_ARG_BOOL, &shared_buffer, NULL}, +{NULL} +}; + static int preinit(const char *arg) { - int parse_err = 0; - - if(arg) - { - char *parse_pos = (char *)&arg[0]; - while (parse_pos[0] && !parse_err) - { - if (strncmp (parse_pos, "device_id=", 10) == 0) - { - parse_pos = &parse_pos[10]; - screen_id = strtol(parse_pos, &parse_pos, 0); - screen_force = YES; - } - if (strncmp (parse_pos, "shared_buffer", 13) == 0) - { - parse_pos = &parse_pos[13]; - shared_buffer = YES; - } - if (parse_pos[0] == ':') parse_pos = &parse_pos[1]; - else if (parse_pos[0]) parse_err = 1; - } - } + + // set defaults + screen_id = 0; + shared_buffer = false; + + if (subopt_parse(arg, subopts) != 0) { + mp_msg(MSGT_VO, MSGL_FATAL, + "\n-vo macosx command line help:\n" + "Example: mplayer -vo macosx:device_id=1:shared_buffer\n" + "\nOptions:\n" + " device_id=<0-...>\n" + " Set screen device id for fullscreen.\n" + " shared_buffer\n" + " Write output to a shared memory buffer instead of displaying it.\n" + "\n" ); + return -1; + } NSApplicationLoad(); autoreleasepool = [[NSAutoreleasePool alloc] init]; diff --git a/libvo/w32_common.c b/libvo/w32_common.c index c2502d3f47..e51fd6d2c0 100644 --- a/libvo/w32_common.c +++ b/libvo/w32_common.c @@ -43,9 +43,24 @@ static HMONITOR (WINAPI* myMonitorFromWindow)(HWND, DWORD); static BOOL (WINAPI* myGetMonitorInfo)(HMONITOR, LPMONITORINFO); static BOOL (WINAPI* myEnumDisplayMonitors)(HDC, LPCRECT, MONITORENUMPROC, LPARAM); +static const struct keymap vk_map[] = { + // special keys + {VK_ESCAPE, KEY_ESC}, {VK_BACK, KEY_BS}, {VK_TAB, KEY_TAB}, {VK_CONTROL, KEY_CTRL}, + + // cursor keys + {VK_LEFT, KEY_LEFT}, {VK_UP, KEY_UP}, {VK_RIGHT, KEY_RIGHT}, {VK_DOWN, KEY_DOWN}, + + // navigation block + {VK_INSERT, KEY_INSERT}, {VK_DELETE, KEY_DELETE}, {VK_HOME, KEY_HOME}, {VK_END, KEY_END}, + {VK_PRIOR, KEY_PAGE_UP}, {VK_NEXT, KEY_PAGE_DOWN}, + + {0, 0} +}; + static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { RECT r; POINT p; + int mpkey; switch (message) { case WM_ERASEBKGND: // no need to erase background seperately return 1; @@ -91,22 +106,9 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM l } break; case WM_KEYDOWN: - switch (wParam) { - case VK_LEFT: mplayer_put_key(KEY_LEFT); break; - case VK_UP: mplayer_put_key(KEY_UP); break; - case VK_RIGHT: mplayer_put_key(KEY_RIGHT); break; - case VK_DOWN: mplayer_put_key(KEY_DOWN); break; - case VK_TAB: mplayer_put_key(KEY_TAB); break; - case VK_CONTROL: mplayer_put_key(KEY_CTRL); break; - case VK_BACK: mplayer_put_key(KEY_BS); break; - case VK_DELETE: mplayer_put_key(KEY_DELETE); break; - case VK_INSERT: mplayer_put_key(KEY_INSERT); break; - case VK_HOME: mplayer_put_key(KEY_HOME); break; - case VK_END: mplayer_put_key(KEY_END); break; - case VK_PRIOR: mplayer_put_key(KEY_PAGE_UP); break; - case VK_NEXT: mplayer_put_key(KEY_PAGE_DOWN); break; - case VK_ESCAPE: mplayer_put_key(KEY_ESC); break; - } + mpkey = lookup_keymap_table(vk_map, wParam); + if (mpkey) + mplayer_put_key(mpkey); break; case WM_CHAR: mplayer_put_key(wParam); diff --git a/libvo/wskeys.h b/libvo/wskeys.h index f226ccc2e9..31d650d63f 100644 --- a/libvo/wskeys.h +++ b/libvo/wskeys.h @@ -2,94 +2,6 @@ #ifndef MPLAYER_WSKEYS_H #define MPLAYER_WSKEYS_H -#define wsosbrackets '[' -#define wscsbrackets ']' - -#define wsq 'q' -#define wsa 'a' -#define wsz 'z' -#define wsw 'w' -#define wss 's' -#define wsx 'x' -#define wse 'e' -#define wsd 'd' -#define wsr 'r' -#define wsf 'f' -#define wsv 'v' -#define wst 't' -#define wsg 'g' -#define wsb 'b' -#define wsy 'y' -#define wsh 'h' -#define wsn 'n' -#define wsu 'u' -#define wsj 'j' -#define wsm 'm' -#define wsi 'i' -#define wsk 'k' -#define wso 'o' -#define wsl 'l' -#define wsp 'p' - -#define wsQ 'Q' -#define wsA 'A' -#define wsZ 'Z' -#define wsW 'W' -#define wsS 'S' -#define wsX 'X' -#define wsE 'E' -#define wsD 'D' -#define wsR 'R' -#define wsF 'F' -#define wsV 'V' -#define wsT 'T' -#define wsG 'G' -#define wsB 'B' -#define wsY 'Y' -#define wsH 'H' -#define wsN 'N' -#define wsU 'U' -#define wsJ 'J' -#define wsM 'M' -#define wsI 'I' -#define wsK 'K' -#define wsO 'O' -#define wsL 'L' -#define wsP 'P' - -#define wsSpace ' ' -#define wsMinus '-' -#define wsPlus '+' -#define wsMul '*' -#define wsDiv '/' -#define wsLess '<' -#define wsMore '>' - -#define wsGrave '`' -#define wsTilde '~' -#define wsExclSign '!' -#define wsAt '@' -#define wsHash '#' -#define wsDollar '$' -#define wsPercent '%' -#define wsCircumflex '^' -#define wsAmpersand '&' -#define wsobracket '(' -#define wscbracket ')' -#define wsUnder '_' -#define wsocbracket '{' -#define wsccbracket '}' -#define wsColon ':' -#define wsSemicolon ';' -#define wsDblQuote '\"' -#define wsAcute '\'' -#define wsComma ',' -#define wsPoint '.' -#define wsQuestSign '?' -#define wsBSlash '\\' -#define wsPipe '|' -#define wsEqual '=' - #define wsUp 0x52 + 256 #define wsDown 0x54 + 256 #define wsLeft 0x51 + 256 diff --git a/libvo/x11_common.c b/libvo/x11_common.c index 2dc594419a..9e6e31bd59 100644 --- a/libvo/x11_common.c +++ b/libvo/x11_common.c @@ -522,289 +522,74 @@ void vo_uninit(struct vo_x11_state *x11) #include "wskeys.h" #ifdef XF86XK_AudioPause +static const struct keymap keysym_map[] = { + {XF86XK_MenuKB, KEY_MENU}, + {XF86XK_AudioPlay, KEY_PLAY}, {XF86XK_AudioPause, KEY_PAUSE}, {XF86XK_AudioStop, KEY_STOP}, + {XF86XK_AudioPrev, KEY_PREV}, {XF86XK_AudioNext, KEY_NEXT}, + {XF86XK_AudioMute, KEY_MUTE}, {XF86XK_AudioLowerVolume, KEY_VOLUME_DOWN}, {XF86XK_AudioRaiseVolume, KEY_VOLUME_UP}, + {0, 0} +}; + static void vo_x11_putkey_ext(struct vo *vo, int keysym) { struct mp_fifo *f = vo->key_fifo; - switch (keysym) - { - case XF86XK_MenuKB: - mplayer_put_key(f, KEY_MENU); - break; - case XF86XK_AudioPlay: - mplayer_put_key(f, KEY_PLAY); - break; - case XF86XK_AudioPause: - mplayer_put_key(f, KEY_PAUSE); - break; - case XF86XK_AudioStop: - mplayer_put_key(f, KEY_STOP); - break; - case XF86XK_AudioPrev: - mplayer_put_key(f, KEY_PREV); - break; - case XF86XK_AudioNext: - mplayer_put_key(f, KEY_NEXT); - break; - case XF86XK_AudioMute: - mplayer_put_key(f, KEY_MUTE); - break; - case XF86XK_AudioLowerVolume: - mplayer_put_key(f, KEY_VOLUME_DOWN); - break; - case XF86XK_AudioRaiseVolume: - mplayer_put_key(f, KEY_VOLUME_UP); - break; - default: - break; - } + int mpkey = lookup_keymap_table(keysym_map, keysym); + if (mpkey) + mplayer_put_key(f, mpkey); } #endif +static const struct keymap keymap[] = { + // special keys + {wsEscape, KEY_ESC}, {wsBackSpace, KEY_BS}, {wsTab, KEY_TAB}, {wsEnter, KEY_ENTER}, + + // cursor keys + {wsLeft, KEY_LEFT}, {wsRight, KEY_RIGHT}, {wsUp, KEY_UP}, {wsDown, KEY_DOWN}, + + // navigation block + {wsInsert, KEY_INSERT}, {wsDelete, KEY_DELETE}, {wsHome, KEY_HOME}, {wsEnd, KEY_END}, + {wsPageUp, KEY_PAGE_UP}, {wsPageDown, KEY_PAGE_DOWN}, + + // F-keys + {wsF1, KEY_F+1}, {wsF2, KEY_F+2}, {wsF3, KEY_F+3}, {wsF4, KEY_F+4}, + {wsF5, KEY_F+5}, {wsF6, KEY_F+6}, {wsF7, KEY_F+7}, {wsF8, KEY_F+8}, + {wsF9, KEY_F+9}, {wsF10, KEY_F+10}, {wsF11, KEY_F+11}, {wsF12, KEY_F+12}, + + // numpad independent of numlock + {wsGrayMinus, '-'}, {wsGrayPlus, '+'}, {wsGrayMul, '*'}, {wsGrayDiv, '/'}, + {wsGrayEnter, KEY_KPENTER}, + + // numpad with numlock + {wsGray0, KEY_KP0}, {wsGray1, KEY_KP1}, {wsGray2, KEY_KP2}, + {wsGray3, KEY_KP3}, {wsGray4, KEY_KP4}, {wsGray5, KEY_KP5}, + {wsGray6, KEY_KP6}, {wsGray7, KEY_KP7}, {wsGray8, KEY_KP8}, + {wsGray9, KEY_KP9}, {wsGrayDecimal, KEY_KPDEC}, + + // numpad without numlock + {wsGrayInsert, KEY_KPINS}, {wsGrayEnd, KEY_KP1}, {wsGrayDown, KEY_KP2}, + {wsGrayPgDn, KEY_KP3}, {wsGrayLeft, KEY_KP4}, {wsGray5Dup, KEY_KP5}, + {wsGrayRight, KEY_KP6}, {wsGrayHome, KEY_KP7}, {wsGrayUp, KEY_KP8}, + {wsGrayPgUp, KEY_KP9}, {wsGrayDelete, KEY_KPDEL}, + + {0, 0} +}; + void vo_x11_putkey(struct vo *vo, int key) { - struct mp_fifo *f = vo->key_fifo; - switch (key) - { - case wsLeft: - mplayer_put_key(f, KEY_LEFT); - break; - case wsRight: - mplayer_put_key(f, KEY_RIGHT); - break; - case wsUp: - mplayer_put_key(f, KEY_UP); - break; - case wsDown: - mplayer_put_key(f, KEY_DOWN); - break; - case wsSpace: - mplayer_put_key(f, ' '); - break; - case wsEscape: - mplayer_put_key(f, KEY_ESC); - break; - case wsTab: - mplayer_put_key(f, KEY_TAB); - break; - case wsEnter: - mplayer_put_key(f, KEY_ENTER); - break; - case wsBackSpace: - mplayer_put_key(f, KEY_BS); - break; - case wsDelete: - mplayer_put_key(f, KEY_DELETE); - break; - case wsInsert: - mplayer_put_key(f, KEY_INSERT); - break; - case wsHome: - mplayer_put_key(f, KEY_HOME); - break; - case wsEnd: - mplayer_put_key(f, KEY_END); - break; - case wsPageUp: - mplayer_put_key(f, KEY_PAGE_UP); - break; - case wsPageDown: - mplayer_put_key(f, KEY_PAGE_DOWN); - break; - case wsF1: - mplayer_put_key(f, KEY_F + 1); - break; - case wsF2: - mplayer_put_key(f, KEY_F + 2); - break; - case wsF3: - mplayer_put_key(f, KEY_F + 3); - break; - case wsF4: - mplayer_put_key(f, KEY_F + 4); - break; - case wsF5: - mplayer_put_key(f, KEY_F + 5); - break; - case wsF6: - mplayer_put_key(f, KEY_F + 6); - break; - case wsF7: - mplayer_put_key(f, KEY_F + 7); - break; - case wsF8: - mplayer_put_key(f, KEY_F + 8); - break; - case wsF9: - mplayer_put_key(f, KEY_F + 9); - break; - case wsF10: - mplayer_put_key(f, KEY_F + 10); - break; - case wsF11: - mplayer_put_key(f, KEY_F + 11); - break; - case wsF12: - mplayer_put_key(f, KEY_F + 12); - break; - case wsMinus: - case wsGrayMinus: - mplayer_put_key(f, '-'); - break; - case wsPlus: - case wsGrayPlus: - mplayer_put_key(f, '+'); - break; - case wsGrayMul: - case wsMul: - mplayer_put_key(f, '*'); - break; - case wsGrayDiv: - case wsDiv: - mplayer_put_key(f, '/'); - break; - case wsLess: - mplayer_put_key(f, '<'); - break; - case wsMore: - mplayer_put_key(f, '>'); - break; - case wsGray0: - mplayer_put_key(f, KEY_KP0); - break; - case wsGrayEnd: - case wsGray1: - mplayer_put_key(f, KEY_KP1); - break; - case wsGrayDown: - case wsGray2: - mplayer_put_key(f, KEY_KP2); - break; - case wsGrayPgDn: - case wsGray3: - mplayer_put_key(f, KEY_KP3); - break; - case wsGrayLeft: - case wsGray4: - mplayer_put_key(f, KEY_KP4); - break; - case wsGray5Dup: - case wsGray5: - mplayer_put_key(f, KEY_KP5); - break; - case wsGrayRight: - case wsGray6: - mplayer_put_key(f, KEY_KP6); - break; - case wsGrayHome: - case wsGray7: - mplayer_put_key(f, KEY_KP7); - break; - case wsGrayUp: - case wsGray8: - mplayer_put_key(f, KEY_KP8); - break; - case wsGrayPgUp: - case wsGray9: - mplayer_put_key(f, KEY_KP9); - break; - case wsGrayDecimal: - mplayer_put_key(f, KEY_KPDEC); - break; - case wsGrayInsert: - mplayer_put_key(f, KEY_KPINS); - break; - case wsGrayDelete: - mplayer_put_key(f, KEY_KPDEL); - break; - case wsGrayEnter: - mplayer_put_key(f, KEY_KPENTER); - break; - case wsGrave: - mplayer_put_key(f, '`'); - break; - case wsTilde: - mplayer_put_key(f, '~'); - break; - case wsExclSign: - mplayer_put_key(f, '!'); - break; - case wsAt: - mplayer_put_key(f, '@'); - break; - case wsHash: - mplayer_put_key(f, '#'); - break; - case wsDollar: - mplayer_put_key(f, '$'); - break; - case wsPercent: - mplayer_put_key(f, '%'); - break; - case wsCircumflex: - mplayer_put_key(f, '^'); - break; - case wsAmpersand: - mplayer_put_key(f, '&'); - break; - case wsobracket: - mplayer_put_key(f, '('); - break; - case wscbracket: - mplayer_put_key(f, ')'); - break; - case wsUnder: - mplayer_put_key(f, '_'); - break; - case wsocbracket: - mplayer_put_key(f, '{'); - break; - case wsccbracket: - mplayer_put_key(f, '}'); - break; - case wsColon: - mplayer_put_key(f, ':'); - break; - case wsSemicolon: - mplayer_put_key(f, ';'); - break; - case wsDblQuote: - mplayer_put_key(f, '\"'); - break; - case wsAcute: - mplayer_put_key(f, '\''); - break; - case wsComma: - mplayer_put_key(f, ','); - break; - case wsPoint: - mplayer_put_key(f, '.'); - break; - case wsQuestSign: - mplayer_put_key(f, '?'); - break; - case wsBSlash: - mplayer_put_key(f, '\\'); - break; - case wsPipe: - mplayer_put_key(f, '|'); - break; - case wsEqual: - mplayer_put_key(f, '='); - break; - case wsosbrackets: - mplayer_put_key(f, '['); - break; - case wscsbrackets: - mplayer_put_key(f, ']'); - break; - - - default: - if ((key >= 'a' && key <= 'z') || (key >= 'A' && key <= 'Z') || - (key >= '0' && key <= '9')) - mplayer_put_key(f, key); - } + static const char *passthrough_keys = " -+*/<>`~!@#$%^&()_{}:;\"\',.?\\|=[]"; + int mpkey = 0; + int i; + if ((key >= 'a' && key <= 'z') || + (key >= 'A' && key <= 'Z') || + (key >= '0' && key <= '9') || + (key > 0 && key < 256 && strchr(passthrough_keys, key))) + mpkey = key; + + if (!mpkey) + mpkey = lookup_keymap_table(keymap, key); + if (mpkey) + mplayer_put_key(vo->key_fifo, mpkey); } |