video_out.h
Go to the documentation of this file.
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;
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  */
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 */
int vo_gamma_blue_intensity
const vo_info_t * info
Definition: video_out.h:126
struct vo_functions_s vo_functions_t
const char * s
Definition: avisynth_c.h:668
int vo_flags
int vo_colorkey
const char * author
Definition: video_out.h:119
int vo_gamma_brightness
float max
Definition: video_out.h:259
int vo_screenheight
int xinerama_y
float min
Definition: video_out.h:258
int vo_gamma_red_intensity
int vo_nomouse_input
title('Sinusoid at 1/4 the Spampling Rate')
uint16_t r
Definition: video_out.h:89
int vo_dwidth
Sinusoidal phase f
int vo_dbpp
int vo_gamma_hue
char * monitor_vfreq_str
int vo_doublebuffering
int stride
Definition: mace.c:144
int vo_vsync
int vo_grabpointer
output residual component w
float vo_fps
int vo_ontop
int enable_mouse_movements
uint8_t
static av_cold int uninit(AVCodecContext *avctx)
Definition: crystalhd.c:334
#define b
Definition: input.c:42
int width
Definition: video_out.h:275
int vo_rootwin
int in_range(range_t *r, float f)
int w
Definition: video_out.h:95
Discrete Time axis x
int vo_screenwidth
int vo_directrendering
int config_video_out(const vo_functions_t *vo, uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format)
int vo_adapter_num
static void draw_frame(AVFilterContext *ctx, AVFrame *main_buf, AVFrame *alpha_buf)
Definition: vf_alphamerge.c:98
char * vo_winname
int vo_dy
int vo_pts
int vo_refresh_rate
Spectrum Plot time data
const char * r
Definition: vf_curves.c:94
void calc_src_dst_rects(int src_width, int src_height, struct vo_rect *src, struct vo_rect *dst, struct vo_rect *borders, const struct vo_rect *crop)
const char * arg
const char * short_name
Definition: video_out.h:117
int vo_border
struct vo_info_s vo_info_t
int vo_config_count
Note except for filters that can have queued request_frame does not push and as a the filter_frame method will be called and do the work Legacy the filter_frame method was it was made of draw_slice(that could be called several times on distinct parts of the frame) and end_frame
int xinerama_screen
int xinerama_x
FFT buffer for g
Definition: stft_peak.m:17
int vo_depthonscreen
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample format(the sample packing is implied by the sample format) and sample rate.The lists are not just lists
float range_max(range_t *r)
int vo_fsmode
static int width
Definition: tests/utils.c:158
void vo_mouse_movement(int posx, int posy)
AVS_Value src
Definition: avisynth_c.h:523
typedef void(RENAME(mix_any_func_type))
char * monitor_dotclock_str
BYTE int const BYTE int int int height
Definition: avisynth_c.h:713
static int config(struct vf_instance *vf, int width, int height, int d_width, int d_height, unsigned int flags, unsigned int outfmt)
Definition: vf_dint.c:45
int from
Definition: video_out.h:270
int lookup_keymap_table(const struct mp_keymap *map, int key)
int vo_gamma_contrast
int vo_dheight
static int flags
Definition: cpu.c:23
char * vo_wintitle
int64_t WinID
char * monitor_hfreq_str
int vo_gamma_green_intensity
int vo_keepaspect
range_t * str2range(char *s)
int vo_dx
int vo_gamma_gamma
function y
Definition: D.m:1
uint32_t x11
Definition: video_out.h:88
int y
Definition: video_out.h:94
else dst[i][x+y *dst_stride[i]]
Definition: vf_mcdeint.c:160
float vo_panscan
const vo_functions_t *const video_out_drivers[]
const vo_functions_t * init_best_video_out(char **vo_list)
char * vo_subdevice
int vo_gamma_saturation
const char * name
Definition: video_out.h:115
const char * comment
Definition: video_out.h:121
void list_video_out(void)
static int control(struct vf_instance *vf, int request, void *data)
Definition: vf_eq.c:157