Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (C) Aaron Holtzman - Aug 1999
  3.  * Strongly modified, most parts rewritten: A'rpi/ESP-team - 2000-2001
  4.  * (C) MPlayer developers
  5.  *
  6.  * This file is part of MPlayer.
  7.  *
  8.  * MPlayer is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2 of the License, or
  11.  * (at your option) any later version.
  12.  *
  13.  * MPlayer is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License along
  19.  * with MPlayer; if not, write to the Free Software Foundation, Inc.,
  20.  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  21.  */
  22.  
  23. #ifndef MPLAYER_VIDEO_OUT_H
  24. #define MPLAYER_VIDEO_OUT_H
  25.  
  26. #include <inttypes.h>
  27. #include <stdarg.h>
  28.  
  29. //#include "sub/font_load.h"
  30. #include "../img_format.h"
  31. //#include "vidix/vidix.h"
  32.  
  33. #define VO_EVENT_EXPOSE 1
  34. #define VO_EVENT_RESIZE 2
  35. #define VO_EVENT_KEYPRESS 4
  36. #define VO_EVENT_REINIT 8
  37. #define VO_EVENT_MOVE 16
  38.  
  39. /* Obsolete: VOCTRL_QUERY_VAA 1 */
  40. /* does the device support the required format */
  41. #define VOCTRL_QUERY_FORMAT 2
  42. /* signal a device reset seek */
  43. #define VOCTRL_RESET 3
  44. /* true if vo driver can use GUI created windows */
  45. #define VOCTRL_GUISUPPORT 4
  46. #define VOCTRL_GUI_NOWINDOW 19
  47. /* used to switch to fullscreen */
  48. #define VOCTRL_FULLSCREEN 5
  49. /* signal a device pause */
  50. #define VOCTRL_PAUSE 7
  51. /* start/resume playback */
  52. #define VOCTRL_RESUME 8
  53. /* libmpcodecs direct rendering: */
  54. #define VOCTRL_GET_IMAGE 9
  55. #define VOCTRL_DRAW_IMAGE 13
  56. #define VOCTRL_SET_SPU_PALETTE 14
  57. /* decoding ahead: */
  58. #define VOCTRL_GET_NUM_FRAMES 10
  59. #define VOCTRL_GET_FRAME_NUM  11
  60. #define VOCTRL_SET_FRAME_NUM  12
  61. #define VOCTRL_GET_PANSCAN 15
  62. #define VOCTRL_SET_PANSCAN 16
  63. /* equalizer controls */
  64. #define VOCTRL_SET_EQUALIZER 17
  65. #define VOCTRL_GET_EQUALIZER 18
  66. //#define VOCTRL_GUI_NOWINDOW 19
  67. /* Frame duplication */
  68. #define VOCTRL_DUPLICATE_FRAME 20
  69. // ... 21
  70. #define VOCTRL_START_SLICE 21
  71.  
  72. #define VOCTRL_ONTOP 25
  73. #define VOCTRL_ROOTWIN 26
  74. #define VOCTRL_BORDER 27
  75. #define VOCTRL_DRAW_EOSD 28
  76. #define VOCTRL_GET_EOSD_RES 29
  77.  
  78. #define VOCTRL_SET_DEINTERLACE 30
  79. #define VOCTRL_GET_DEINTERLACE 31
  80.  
  81. #define VOCTRL_UPDATE_SCREENINFO 32
  82.  
  83. // Vo can be used by xover
  84. #define VOCTRL_XOVERLAY_SUPPORT 22
  85.  
  86. #define VOCTRL_XOVERLAY_SET_COLORKEY 24
  87. typedef struct {
  88.   uint32_t x11; // The raw x11 color
  89.   uint16_t r,g,b;
  90. } mp_colorkey_t;
  91.  
  92. #define VOCTRL_XOVERLAY_SET_WIN 23
  93. typedef struct {
  94.   int x,y;
  95.   int w,h;
  96. } mp_win_t;
  97.  
  98. #define VO_TRUE      1
  99. #define VO_FALSE     0
  100. #define VO_ERROR    -1
  101. #define VO_NOTAVAIL -2
  102. #define VO_NOTIMPL  -3
  103.  
  104. #define VOFLAG_FULLSCREEN         0x01
  105. #define VOFLAG_MODESWITCHING      0x02
  106. #define VOFLAG_SWSCALE            0x04
  107. #define VOFLAG_FLIPPING           0x08
  108. #define VOFLAG_HIDDEN             0x10  //< Use to create a hidden window
  109. #define VOFLAG_STEREO             0x20  //< Use to create a stereo-capable window
  110. #define VOFLAG_XOVERLAY_SUB_VO 0x10000
  111.  
  112. typedef struct vo_info_s
  113. {
  114.     /* driver name ("Matrox Millennium G200/G400" */
  115.     const char *name;
  116.     /* short name (for config strings) ("mga") */
  117.     const char *short_name;
  118.     /* author ("Aaron Holtzman <aholtzma@ess.engr.uvic.ca>") */
  119.     const char *author;
  120.     /* any additional comments */
  121.     const char *comment;
  122. } vo_info_t;
  123.  
  124. typedef struct vo_functions_s
  125. {
  126.     const vo_info_t *info;
  127.     /*
  128.      * Preinitializes driver (real INITIALIZATION)
  129.      *   arg - currently it's vo_subdevice
  130.      *   returns: zero on successful initialization, non-zero on error.
  131.      */
  132.     int (*preinit)(const char *arg);
  133.     /*
  134.      * Initialize (means CONFIGURE) the display driver.
  135.      * params:
  136.      *   width,height: image source size
  137.      *   d_width,d_height: size of the requested window size, just a hint
  138.      *   fullscreen: flag, 0=windowd 1=fullscreen, just a hint
  139.      *   title: window title, if available
  140.      *   format: fourcc of pixel format
  141.      * returns : zero on successful initialization, non-zero on error.
  142.      */
  143.     int (*config)(uint32_t width, uint32_t height, uint32_t d_width,
  144.                   uint32_t d_height, uint32_t fullscreen, char *title,
  145.                   uint32_t format);
  146.  
  147.     /*
  148.      * Control interface
  149.      */
  150.     int (*control)(uint32_t request, void *data, ...);
  151.  
  152.     /*
  153.      * Display a new RGB/BGR frame of the video to the screen.
  154.      * params:
  155.      *   src[0] - pointer to the image
  156.      */
  157.     int (*draw_frame)(uint8_t *src[]);
  158.  
  159.     /*
  160.      * Draw a planar YUV slice to the buffer:
  161.      * params:
  162.      *   src[3] = source image planes (Y,U,V)
  163.      *   stride[3] = source image planes line widths (in bytes)
  164.      *   w,h = width*height of area to be copied (in Y pixels)
  165.      *   x,y = position at the destination image (in Y pixels)
  166.      */
  167.     int (*draw_slice)(uint8_t *src[], int stride[], int w,int h, int x,int y);
  168.  
  169.     /*
  170.      * Draws OSD to the screen buffer
  171.      */
  172.     void (*draw_osd)(void);
  173.  
  174.     /*
  175.      * Blit/Flip buffer to the screen. Must be called after each frame!
  176.      */
  177.     void (*flip_page)(void);
  178.  
  179.     /*
  180.      * This func is called after every frames to handle keyboard and
  181.      * other events. It's called in PAUSE mode too!
  182.      */
  183.     void (*check_events)(void);
  184.  
  185.     /*
  186.      * Closes driver. Should restore the original state of the system.
  187.      */
  188.     void (*uninit)(void);
  189. } vo_functions_t;
  190.  
  191. const vo_functions_t* init_best_video_out(char** vo_list);
  192. int config_video_out(const vo_functions_t *vo, uint32_t width, uint32_t height,
  193.                      uint32_t d_width, uint32_t d_height, uint32_t flags,
  194.                      char *title, uint32_t format);
  195. void list_video_out(void);
  196.  
  197. // NULL terminated array of all drivers
  198. extern const vo_functions_t* const video_out_drivers[];
  199.  
  200. extern int vo_flags;
  201.  
  202. extern int vo_config_count;
  203.  
  204. extern int xinerama_screen;
  205. extern int xinerama_x;
  206. extern int xinerama_y;
  207.  
  208. // correct resolution/bpp on screen:  (should be autodetected by vo_init())
  209. extern int vo_depthonscreen;
  210. extern int vo_screenwidth;
  211. extern int vo_screenheight;
  212.  
  213. // requested resolution/bpp:  (-x -y -bpp options)
  214. extern int vo_dx;
  215. extern int vo_dy;
  216. extern int vo_dwidth;
  217. extern int vo_dheight;
  218. extern int vo_dbpp;
  219.  
  220. extern int vo_grabpointer;
  221. extern int vo_doublebuffering;
  222. extern int vo_directrendering;
  223. extern int vo_vsync;
  224. extern int vo_fsmode;
  225. extern float vo_panscan;
  226. extern int vo_adapter_num;
  227. extern int vo_refresh_rate;
  228. extern int vo_keepaspect;
  229. extern int vo_rootwin;
  230. extern int vo_ontop;
  231. extern int vo_border;
  232.  
  233. extern int vo_gamma_gamma;
  234. extern int vo_gamma_brightness;
  235. extern int vo_gamma_saturation;
  236. extern int vo_gamma_contrast;
  237. extern int vo_gamma_hue;
  238. extern int vo_gamma_red_intensity;
  239. extern int vo_gamma_green_intensity;
  240. extern int vo_gamma_blue_intensity;
  241.  
  242. extern int vo_nomouse_input;
  243. extern int enable_mouse_movements;
  244.  
  245. extern int vo_pts;
  246. extern float vo_fps;
  247.  
  248. extern char *vo_subdevice;
  249.  
  250. extern int vo_colorkey;
  251.  
  252. extern char *vo_winname;
  253. extern char *vo_wintitle;
  254.  
  255. extern int64_t WinID;
  256.  
  257. typedef struct {
  258.         float min;
  259.         float max;
  260.         } range_t;
  261.  
  262. float range_max(range_t *r);
  263. int in_range(range_t *r, float f);
  264. range_t *str2range(char *s);
  265. extern char *monitor_hfreq_str;
  266. extern char *monitor_vfreq_str;
  267. extern char *monitor_dotclock_str;
  268.  
  269. struct mp_keymap {
  270.   int from;
  271.   int to;
  272. };
  273. int lookup_keymap_table(const struct mp_keymap *map, int key);
  274. struct vo_rect {
  275.   int left, right, top, bottom, width, height;
  276. };
  277. void calc_src_dst_rects(int src_width, int src_height, struct vo_rect *src, struct vo_rect *dst,
  278.                         struct vo_rect *borders, const struct vo_rect *crop);
  279. void vo_mouse_movement(int posx, int posy);
  280.  
  281. #endif /* MPLAYER_VIDEO_OUT_H */
  282.