xine-lib  1.2.9
video_out.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2000-2017 the xine project
3  *
4  * This file is part of xine, a free video player.
5  *
6  * xine is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * xine is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
19  *
20  *
21  * xine version of video_out.h
22  *
23  * vo_frame : frame containing yuv data and timing info,
24  * transferred between video_decoder and video_output
25  *
26  * vo_driver : lowlevel, platform-specific video output code
27  *
28  * vo_port : generic frame_handling code, uses
29  * a vo_driver for output
30  */
31 
32 #ifndef HAVE_VIDEO_OUT_H
33 #define HAVE_VIDEO_OUT_H
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 
39 #include <pthread.h>
40 
41 #include <xine.h>
42 #include <xine/buffer.h>
43 
44 #ifdef XINE_COMPILE
45 # include <xine/plugin_catalog.h>
46 #endif
47 
48 typedef struct vo_frame_s vo_frame_t;
49 typedef struct vo_driver_s vo_driver_t;
51 typedef struct vo_overlay_s vo_overlay_t;
53 
54 /* public part, video drivers may add private fields
55  *
56  * Remember that adding new functions to this structure requires
57  * adaption of the post plugin decoration layer. Be sure to look into
58  * src/xine-engine/post.[ch].
59  */
60 struct vo_frame_s {
61  /*
62  * member functions
63  */
64 
65  /* Provide a copy of the frame's image in an image format already known to xine. data's member */
66  /* have already been intialized to frame's content on entry, so it's usually only necessary to */
67  /* change format and img_size. In case img is set, it will point to a memory block of suitable */
68  /* size (size has been determined by a previous call with img == NULL). img content and img_size */
69  /* must adhere to the specification of _x_get_current_frame_data(). */
70  /* Currently this is needed for all image formats except XINE_IMGFMT_YV12 and XINE_IMGFMT_YUY2. */
72 
73  /* Duplicate picture data and acceleration specific data of a frame. */
74  /* if the image format isn't already known by Xine. Currently this is needed */
75  /* For all image formats except XINE_IMGFMT_YV12 and XINE_IMGFMT_YUY2 */
77 
78  /* tell video driver to copy/convert the whole of this frame, may be NULL */
79  /* at least one of proc_frame() and proc_slice() MUST set the variable proc_called to 1 */
80  void (*proc_frame) (vo_frame_t *vo_img);
81 
82  /* tell video driver to copy/convert a slice of this frame, may be NULL */
83  /* at least one of proc_frame() and proc_slice() MUST set the variable proc_called to 1 */
84  void (*proc_slice) (vo_frame_t *vo_img, uint8_t **src);
85 
86  /* tell video driver that the decoder starts a new field */
87  void (*field) (vo_frame_t *vo_img, int which_field);
88 
89  /* append this frame to the display queue,
90  returns number of frames to skip if decoder is late */
91  /* when the frame does not originate from a stream, it is legal to pass an anonymous stream */
92  int (*draw) (vo_frame_t *vo_img, xine_stream_t *stream);
93 
94  /* lock frame as reference, must be paired with free.
95  * most decoders/drivers do not need to call this function since
96  * newly allocated frames are already locked once.
97  */
98  void (*lock) (vo_frame_t *vo_img);
99 
100  /* this frame is no longer used by the decoder, video driver, etc */
101  void (*free) (vo_frame_t *vo_img);
102 
103  /* free memory/resources for this frame */
104  void (*dispose) (vo_frame_t *vo_img);
105 
106  /*
107  * public variables to decoders and vo drivers
108  * changing anything here will require recompiling them both
109  */
110  int64_t pts; /* presentation time stamp (1/90000 sec) */
111  int64_t vpts; /* virtual pts, generated by metronom */
112  int bad_frame; /* e.g. frame skipped or based on skipped frame */
113  int duration; /* frame length in time, in 1/90000 sec */
114 
115  /* yv12 (planar) base[0]: y, base[1]: u, base[2]: v */
116  /* yuy2 (interleaved) base[0]: yuyv..., base[1]: --, base[2]: -- */
117  uint8_t *base[3];
118  int pitches[3];
119 
120  /* info that can be used for interlaced output (e.g. tv-out) */
123  /* note: progressive_frame is set wrong on many mpeg2 streams. for
124  * that reason, this flag should be interpreted as a "hint".
125  */
128 
129  /* cropping to be done */
131 
133  pthread_mutex_t mutex; /* protect access to lock_count */
134 
135  /* extra info coming from input or demuxers */
137 
138  /* additional information to be able to duplicate frames: */
139  int width, height;
140  double ratio; /* aspect ratio */
141  int format; /* IMGFMT_YV12 or IMGFMT_YUY2 */
142 
143  int drawn; /* used by decoder, frame has already been drawn */
144  int flags; /* remember the frame flags */
145  int proc_called; /* track use of proc_*() methods */
146 
147  /* Used to carry private data for accelerated plugins.*/
148  void *accel_data;
149 
150  /* "backward" references to where this frame originates from */
154 
155  /* displacement for overlays */
157 
158  /* pointer to the next frame in display order, used by some vo deint */
160 
161  /*
162  * that part is used only by video_out.c for frame management
163  * obs: changing anything here will require recompiling vo drivers
164  */
165  struct vo_frame_s *next;
166 
167  int id; /* debugging - track this frame */
168  int is_first;
169 };
170 
171 
172 /*
173  * Remember that adding new functions to this structure requires
174  * adaption of the post plugin decoration layer. Be sure to look into
175  * src/xine-engine/post.[ch].
176  */
178 
179  uint32_t (*get_capabilities) (xine_video_port_t *self); /* for constants see below */
180 
181  /* open display driver for video output */
182  /* when you are not a full-blown stream, but still need to open the port
183  * (e.g. you are a post plugin) it is legal to pass an anonymous stream */
184  void (*open) (xine_video_port_t *self, xine_stream_t *stream);
185 
186  /*
187  * get_frame - allocate an image buffer from display driver
188  *
189  * params : width == width of video to display.
190  * height == height of video to display.
191  * ratio == aspect ration information
192  * format == FOURCC descriptor of image format
193  * flags == field/prediction flags
194  */
195  vo_frame_t* (*get_frame) (xine_video_port_t *self, uint32_t width,
196  uint32_t height, double ratio,
197  int format, int flags);
198 
199  /* create a new grab video frame */
200  xine_grab_video_frame_t* (*new_grab_video_frame) (xine_video_port_t *self);
201 
202  /* retrieves the last displayed frame (useful for taking snapshots) */
203  vo_frame_t* (*get_last_frame) (xine_video_port_t *self);
204 
205  /* overlay stuff */
206  void (*enable_ovl) (xine_video_port_t *self, int ovl_enable);
207 
208  /* get overlay manager */
209  video_overlay_manager_t* (*get_overlay_manager) (xine_video_port_t *self);
210 
211  /* flush video_out fifo */
212  void (*flush) (xine_video_port_t *self);
213 
214  /* trigger immediate drawing */
216 
217  /* Get/Set video property
218  *
219  * See VO_PROP_* bellow
220  */
221  int (*get_property) (xine_video_port_t *self, int property);
222  int (*set_property) (xine_video_port_t *self, int property, int value);
223 
224  /* return true if port is opened for this stream, stream can be anonymous */
225  int (*status) (xine_video_port_t *self, xine_stream_t *stream,
226  int *width, int *height, int64_t *img_duration);
227 
228  /* video driver is no longer used by decoder => close */
229  /* when you are not a full-blown stream, but still need to close the port
230  * (e.g. you are a post plugin) it is legal to pass an anonymous stream */
231  void (*close) (xine_video_port_t *self, xine_stream_t *stream);
232 
233  /* called on xine exit */
234  void (*exit) (xine_video_port_t *self);
235 
236  /* the driver in use */
238 
239 };
240 
241 /* constants for the get/set property functions */
242 #define VO_PROP_INTERLACED 0
243 #define VO_PROP_ASPECT_RATIO 1
244 #define VO_PROP_HUE 2
245 #define VO_PROP_SATURATION 3
246 #define VO_PROP_CONTRAST 4
247 #define VO_PROP_BRIGHTNESS 5
248 #define VO_PROP_COLORKEY 6
249 #define VO_PROP_AUTOPAINT_COLORKEY 7
250 #define VO_PROP_ZOOM_X 8
251 #define VO_PROP_PAN_SCAN 9
252 #define VO_PROP_TVMODE 10
253 #define VO_PROP_MAX_NUM_FRAMES 11
254 #define VO_PROP_GAMMA 12
255 #define VO_PROP_ZOOM_Y 13
256 /* while this is set, vo shall drop all incoming and queued frames.
257  * when receiving a value of -1 for this, driver shall unref any held frames,
258  * and return their count. drivers not needing this will silently return
259  * -1 or 0.
260  */
261 #define VO_PROP_DISCARD_FRAMES 14
262 #define VO_PROP_WINDOW_WIDTH 15 /* read-only */
263 #define VO_PROP_WINDOW_HEIGHT 16 /* read-only */
264 #define VO_PROP_BUFS_IN_FIFO 17 /* read-only */
265 #define VO_PROP_NUM_STREAMS 18 /* read-only */
266 #define VO_PROP_OUTPUT_WIDTH 19 /* read-only */
267 #define VO_PROP_OUTPUT_HEIGHT 20 /* read-only */
268 #define VO_PROP_OUTPUT_XOFFSET 21 /* read-only */
269 #define VO_PROP_OUTPUT_YOFFSET 22 /* read-only */
270 #define VO_PROP_SHARPNESS 24
271 #define VO_PROP_NOISE_REDUCTION 25
272 #define VO_PROP_BUFS_TOTAL 26 /* read-only */
273 #define VO_PROP_BUFS_FREE 27 /* read-only */
274 #define VO_PROP_MAX_VIDEO_WIDTH 28 /* read-only */
275 #define VO_PROP_MAX_VIDEO_HEIGHT 29 /* read-only */
276 #define VO_NUM_PROPERTIES 30
277 
278 /* number of colors in the overlay palette. Currently limited to 256
279  at most, because some alphablend functions use an 8-bit index into
280  the palette. This should probably be classified as a bug. */
281 #define OVL_PALETTE_SIZE 256
282 
283 #define OVL_MAX_OPACITY 0x0f
284 
285 /* number of recent frames to keep in memory
286  these frames are needed by some deinterlace algorithms
287  FIXME: we need a method to flush the recent frames (new stream)
288 */
289 #define VO_NUM_RECENT_FRAMES 2
290 
291 /* get_frame flags */
292 #define VO_TOP_FIELD 1
293 #define VO_BOTTOM_FIELD 2
294 #define VO_BOTH_FIELDS (VO_TOP_FIELD | VO_BOTTOM_FIELD)
295 #define VO_PAN_SCAN_FLAG 4
296 #define VO_INTERLACED_FLAG 8
297 #define VO_NEW_SEQUENCE_FLAG 16 /* set after MPEG2 Sequence Header Code (used by XvMC) */
298 #define VO_CHROMA_422 32 /* used by VDPAU, default is chroma_420 */
299 #define VO_STILL_IMAGE 64
300 
301 /* ((mpeg_color_matrix << 1) | color_range) inside frame.flags bits 12-8 */
302 #define VO_FULLRANGE 0x100
303 #define VO_GET_FLAGS_CM(flags) ((flags >> 8) & 31)
304 #define VO_SET_FLAGS_CM(cm,flags) flags = ((flags) & ~0x1f00) | (((cm) & 31) << 8)
305 
306 /* video driver capabilities */
307 #define VO_CAP_YV12 0x00000001 /* driver can handle YUV 4:2:0 pictures */
308 #define VO_CAP_YUY2 0x00000002 /* driver can handle YUY2 pictures */
309 #define VO_CAP_XVMC_MOCOMP 0x00000004 /* driver can use XvMC motion compensation */
310 #define VO_CAP_XVMC_IDCT 0x00000008 /* driver can use XvMC idct acceleration */
311 #define VO_CAP_UNSCALED_OVERLAY 0x00000010 /* driver can blend overlay at output resolution */
312 #define VO_CAP_CROP 0x00000020 /* driver can crop */
313 #define VO_CAP_XXMC 0x00000040 /* driver can use extended XvMC */
314 #define VO_CAP_VDPAU_H264 0x00000080 /* driver can use VDPAU for H264 */
315 #define VO_CAP_VDPAU_MPEG12 0x00000100 /* driver can use VDPAU for mpeg1/2 */
316 #define VO_CAP_VDPAU_VC1 0x00000200 /* driver can use VDPAU for VC1 */
317 #define VO_CAP_VDPAU_MPEG4 0x00000400 /* driver can use VDPAU for mpeg4-part2 */
318 #define VO_CAP_VAAPI 0x00000800 /* driver can use VAAPI */
319 #define VO_CAP_COLOR_MATRIX 0x00004000 /* driver can use alternative yuv->rgb matrices */
320 #define VO_CAP_FULLRANGE 0x00008000 /* driver handles fullrange yuv */
321 #define VO_CAP_HUE 0x00010000
322 #define VO_CAP_SATURATION 0x00020000
323 #define VO_CAP_CONTRAST 0x00040000
324 #define VO_CAP_BRIGHTNESS 0x00080000
325 #define VO_CAP_COLORKEY 0x00100000
326 #define VO_CAP_AUTOPAINT_COLORKEY 0x00200000
327 #define VO_CAP_ZOOM_X 0x00400000
328 #define VO_CAP_ZOOM_Y 0x00800000
329 #define VO_CAP_CUSTOM_EXTENT_OVERLAY 0x01000000 /* driver can blend custom extent overlay to output extent */
330 #define VO_CAP_ARGB_LAYER_OVERLAY 0x02000000 /* driver supports true color overlay */
331 #define VO_CAP_VIDEO_WINDOW_OVERLAY 0x04000000 /* driver can scale video to an area within overlay */
332 #define VO_CAP_GAMMA 0x08000000
333 #define VO_CAP_SHARPNESS 0x10000000
334 #define VO_CAP_NOISE_REDUCTION 0x20000000
335 
336 
337 /*
338  * vo_driver_s contains the functions every display driver
339  * has to implement. The vo_new_port function (see below)
340  * should then be used to construct a vo_port using this
341  * driver. Some of the function pointers will be copied
342  * directly into xine_video_port_s, others will be called
343  * from generic vo functions.
344  */
345 
346 #define VIDEO_OUT_DRIVER_IFACE_VERSION 22
347 
348 struct vo_driver_s {
349 
350  uint32_t (*get_capabilities) (vo_driver_t *self); /* for constants see above */
351 
352  /*
353  * allocate an vo_frame_t struct,
354  * the driver must supply the copy, field and dispose functions
355  */
356  vo_frame_t* (*alloc_frame) (vo_driver_t *self);
357 
358  /*
359  * check if the given image fullfills the format specified
360  * (re-)allocate memory if necessary
361  */
363  uint32_t width, uint32_t height,
364  double ratio, int format, int flags);
365 
366  /* display a given frame */
367  void (*display_frame) (vo_driver_t *self, vo_frame_t *vo_img);
368 
369  /* overlay_begin and overlay_end are used by drivers suporting
370  * persistent overlays. they can be optimized to update only when
371  * overlay image has changed.
372  *
373  * sequence of operation (pseudo-code):
374  * overlay_begin(this,img,true_if_something_changed_since_last_blend );
375  * while(visible_overlays)
376  * overlay_blend(this,img,overlay[i]);
377  * overlay_end(this,img);
378  *
379  * any function pointer from this group may be set to NULL.
380  */
381  void (*overlay_begin) (vo_driver_t *self, vo_frame_t *vo_img, int changed);
382  void (*overlay_blend) (vo_driver_t *self, vo_frame_t *vo_img, vo_overlay_t *overlay);
383  void (*overlay_end) (vo_driver_t *self, vo_frame_t *vo_img);
384 
385  /*
386  * these can be used by the gui directly:
387  */
388  int (*get_property) (vo_driver_t *self, int property);
389  int (*set_property) (vo_driver_t *self,
390  int property, int value);
392  int property, int *min, int *max);
393 
394  /*
395  * general purpose communication channel between gui and driver
396  *
397  * this should be used to propagate events, display data, window sizes
398  * etc. to the driver
399  */
400  int (*gui_data_exchange) (vo_driver_t *self, int data_type,
401  void *data);
402 
403  /* check if a redraw is needed (due to resize)
404  * this is only used for still frames, normal video playback
405  * must call that inside display_frame() function.
406  */
407  int (*redraw_needed) (vo_driver_t *self);
408 
409  /* Create a new grab video frame */
410  xine_grab_video_frame_t* (*new_grab_video_frame)(vo_driver_t *self);
411 
412  /*
413  * free all resources, close driver
414  */
415  void (*dispose) (vo_driver_t *self);
416 
423 #ifdef XINE_COMPILE
425 #else
426  void *node;
427 #endif
428 };
429 
431 
432  /*
433  * open a new instance of this plugin class
434  */
435  vo_driver_t* (*open_plugin) (video_driver_class_t *self, const void *visual);
436 
440  const char *identifier;
441 
447  const char *description;
448 
452  const char *text_domain;
453 
454  /*
455  * free all class-related resources
456  */
457  void (*dispose) (video_driver_class_t *self);
458 };
459 
460 #define default_video_driver_class_dispose (void (*) (video_driver_class_t *this_gen))free
461 
462 typedef struct rle_elem_s {
463  uint16_t len;
464  uint16_t color;
465 } rle_elem_t;
466 
467 typedef struct argb_layer_s {
468  pthread_mutex_t mutex;
469  uint32_t *buffer;
470  /* dirty area */
471  int x1, y1;
472  int x2, y2;
474 } argb_layer_t;
475 
476 struct vo_overlay_s {
477 
478  rle_elem_t *rle; /* rle code buffer */
479  int data_size; /* useful for deciding realloc */
480  int num_rle; /* number of active rle codes */
481  int x; /* x start of subpicture area */
482  int y; /* y start of subpicture area */
483  int width; /* width of subpicture area */
484  int height; /* height of subpicture area */
485 
486  /* area within osd extent to scale video to */
491 
492  /* extent of reference coordinate system */
495 
496  uint32_t color[OVL_PALETTE_SIZE]; /* color lookup table */
497  uint8_t trans[OVL_PALETTE_SIZE]; /* mixer key table */
498  int rgb_clut; /* true if clut was converted to rgb */
499 
500  /* define a highlight area with different colors */
501  int hili_top;
507  int hili_rgb_clut; /* true if clut was converted to rgb */
508 
509  int unscaled; /* true if it should be blended unscaled */
510 
512 };
513 
515 
516 /* API to video_overlay manager
517  *
518  * Remember that adding new functions to this structure requires
519  * adaption of the post plugin decoration layer. Be sure to look into
520  * src/xine-engine/post.[ch].
521  */
523  void (*init) (video_overlay_manager_t *this_gen);
524 
525  void (*dispose) (video_overlay_manager_t *this_gen);
526 
527  int32_t (*get_handle) (video_overlay_manager_t *this_gen, int object_type );
528 
529  void (*free_handle) (video_overlay_manager_t *this_gen, int32_t handle);
530 
531  int32_t (*add_event) (video_overlay_manager_t *this_gen, void *event);
532 
533  void (*flush_events) (video_overlay_manager_t *this_gen );
534 
535  int (*redraw_needed) (video_overlay_manager_t *this_gen, int64_t vpts );
536 
537  void (*multiple_overlay_blend) (video_overlay_manager_t *this_gen, int64_t vpts,
538  vo_driver_t *output, vo_frame_t *vo_img, int enabled);
539 };
540 
546 xine_video_port_t *_x_vo_new_port (xine_t *xine, vo_driver_t *driver, int grabonly);
547 
548 #ifdef __cplusplus
549 }
550 #endif
551 
552 #endif
553 
int is_first
Definition: video_out.h:168
void(* proc_frame)(vo_frame_t *vo_img)
Definition: video_out.h:80
int x
Definition: video_out.h:481
int lock_counter
Definition: video_out.h:132
int crop_left
Definition: video_out.h:130
int(* set_property)(xine_video_port_t *self, int property, int value)
Definition: video_out.h:222
int extent_width
Definition: video_out.h:493
unsigned int height
Definition: gfontrle.c:5
uint32_t(* get_capabilities)(vo_driver_t *self)
Definition: video_out.h:350
vo_driver_t * driver
Definition: video_out.h:237
int crop_top
Definition: video_out.h:130
int ref_count
Definition: video_out.h:473
int rgb_clut
Definition: video_out.h:498
double ratio
Definition: video_out.h:140
int x1
Definition: video_out.h:471
uint32_t * buffer
Definition: video_out.h:469
int hili_top
Definition: video_out.h:501
int proc_called
Definition: video_out.h:145
int width
Definition: video_out.h:139
int picture_coding_type
Definition: video_out.h:127
int(* status)(xine_video_port_t *self, xine_stream_t *stream, int *width, int *height, int64_t *img_duration)
Definition: video_out.h:225
Definition: video_out.h:476
void(* exit)(xine_video_port_t *self)
Definition: video_out.h:234
void(* update_frame_format)(vo_driver_t *self, vo_frame_t *img, uint32_t width, uint32_t height, double ratio, int format, int flags)
Definition: video_out.h:362
const char * identifier
short human readable identifier for this plugin class
Definition: video_out.h:440
void(* dispose)(vo_frame_t *vo_img)
Definition: video_out.h:104
int y
Definition: video_out.h:482
int pitches[3]
Definition: video_out.h:118
int64_t vpts
Definition: video_out.h:111
void(* free)(vo_frame_t *vo_img)
Definition: video_out.h:101
int y2
Definition: video_out.h:472
uint16_t len
Definition: video_out.h:463
xine_stream_t * stream
Definition: video_out.h:153
void * accel_data
Definition: video_out.h:148
int data_size
Definition: video_out.h:479
int crop_right
Definition: video_out.h:130
int width
Definition: video_out.h:483
struct rle_elem_s rle_elem_t
const char * text_domain
Optional non-standard catalog to use with dgettext() for description.
Definition: video_out.h:452
void(* init)(video_overlay_manager_t *this_gen)
Definition: video_out.h:523
int hili_left
Definition: video_out.h:503
const char * description
human readable (verbose = 1 line) description for this plugin class
Definition: video_out.h:447
uint8_t trans[256]
Definition: video_out.h:497
void(* field)(vo_frame_t *vo_img, int which_field)
Definition: video_out.h:87
Definition: plugin_catalog.h:44
xine_video_port_t * port
Definition: video_out.h:151
int overlay_offset_y
Definition: video_out.h:156
uint32_t hili_color[256]
Definition: video_out.h:505
rle_elem_t * rle
Definition: video_out.h:478
int(* gui_data_exchange)(vo_driver_t *self, int data_type, void *data)
Definition: video_out.h:400
void(* overlay_end)(vo_driver_t *self, vo_frame_t *vo_img)
Definition: video_out.h:383
Definition: xine.h:529
int y1
Definition: video_out.h:471
enabled
Definition: xine_plugin.c:91
int video_window_y
Definition: video_out.h:488
int drawn
Definition: video_out.h:143
void(* multiple_overlay_blend)(video_overlay_manager_t *this_gen, int64_t vpts, vo_driver_t *output, vo_frame_t *vo_img, int enabled)
Definition: video_out.h:537
int hili_bottom
Definition: video_out.h:502
int height
Definition: video_out.h:139
int repeat_first_field
Definition: video_out.h:122
struct argb_layer_s argb_layer_t
int video_window_x
Definition: video_out.h:487
int format
Definition: video_out.h:141
void(* trigger_drawing)(xine_video_port_t *self)
Definition: video_out.h:215
int video_window_height
Definition: video_out.h:490
int video_window_width
Definition: video_out.h:489
void(* flush)(xine_video_port_t *self)
Definition: video_out.h:212
extra_info_t * extra_info
Definition: video_out.h:136
int(* redraw_needed)(video_overlay_manager_t *this_gen, int64_t vpts)
Definition: video_out.h:535
void(* dispose)(video_overlay_manager_t *this_gen)
Definition: video_out.h:525
Definition: video_out.h:50
int(* set_property)(vo_driver_t *self, int property, int value)
Definition: video_out.h:389
void(* get_property_min_max)(vo_driver_t *self, int property, int *min, int *max)
Definition: video_out.h:391
int flags
Definition: video_out.h:144
Definition: xine_internal.h:210
xine_video_port_t * _x_vo_new_port(xine_t *xine, vo_driver_t *driver, int grabonly)
Build a video output port from a given video driver.
Definition: video_out.c:2860
Definition: video_out.h:522
#define OVL_PALETTE_SIZE
Definition: video_out.h:281
void(* proc_duplicate_frame_data)(vo_frame_t *vo_img, vo_frame_t *src)
Definition: video_out.h:76
Definition: video_out.h:177
void(* enable_ovl)(xine_video_port_t *self, int ovl_enable)
Definition: video_out.h:206
int32_t(* get_handle)(video_overlay_manager_t *this_gen, int object_type)
Definition: video_out.h:527
int extent_height
Definition: video_out.h:494
void(* flush_events)(video_overlay_manager_t *this_gen)
Definition: video_out.h:533
void(* free_handle)(video_overlay_manager_t *this_gen, int32_t handle)
Definition: video_out.h:529
Definition: video_out.h:60
uint32_t(* get_capabilities)(xine_video_port_t *self)
Definition: video_out.h:179
Definition: xine.h:462
pthread_mutex_t mutex
Definition: video_out.h:133
int(* get_property)(vo_driver_t *self, int property)
Definition: video_out.h:388
int id
Definition: video_out.h:167
plugin_node_t * node
Pointer to the loaded plugin node.
Definition: video_out.h:424
struct vo_frame_s * future_frame
Definition: video_out.h:159
struct vo_frame_s * next
Definition: video_out.h:165
int crop_bottom
Definition: video_out.h:130
void(* proc_slice)(vo_frame_t *vo_img, uint8_t **src)
Definition: video_out.h:84
int bad_frame
Definition: video_out.h:112
unsigned int width
Definition: gfontrle.c:4
int x2
Definition: video_out.h:472
int top_field_first
Definition: video_out.h:121
int64_t pts
Definition: video_out.h:110
int progressive_frame
Definition: video_out.h:126
Definition: video_out.h:348
uint16_t color
Definition: video_out.h:464
int hili_right
Definition: video_out.h:504
Definition: xine_internal.h:81
int hili_rgb_clut
Definition: video_out.h:507
void(* display_frame)(vo_driver_t *self, vo_frame_t *vo_img)
Definition: video_out.h:367
void(* open)(xine_video_port_t *self, xine_stream_t *stream)
Definition: video_out.h:184
void(* dispose)(video_driver_class_t *self)
Definition: video_out.h:457
int32_t(* add_event)(video_overlay_manager_t *this_gen, void *event)
Definition: video_out.h:531
int(* draw)(vo_frame_t *vo_img, xine_stream_t *stream)
Definition: video_out.h:92
void(* close)(xine_video_port_t *self, xine_stream_t *stream)
Definition: video_out.h:231
uint8_t hili_trans[256]
Definition: video_out.h:506
void(* overlay_blend)(vo_driver_t *self, vo_frame_t *vo_img, vo_overlay_t *overlay)
Definition: video_out.h:382
void(* lock)(vo_frame_t *vo_img)
Definition: video_out.h:98
vo_driver_t * driver
Definition: video_out.h:152
int num_rle
Definition: video_out.h:480
uint8_t * base[3]
Definition: video_out.h:117
int unscaled
Definition: video_out.h:509
Definition: video_out.h:430
pthread_mutex_t mutex
Definition: video_out.h:468
int(* redraw_needed)(vo_driver_t *self)
Definition: video_out.h:407
int duration
Definition: video_out.h:113
void(* dispose)(vo_driver_t *self)
Definition: video_out.h:415
Definition: video_out.h:462
int overlay_offset_x
Definition: video_out.h:156
argb_layer_t * argb_layer
Definition: video_out.h:511
int height
Definition: video_out.h:484
Structure to pass information from input or demuxer plugins to output frames (past decoder)...
Definition: buffer.h:314
void(* overlay_begin)(vo_driver_t *self, vo_frame_t *vo_img, int changed)
Definition: video_out.h:381
uint32_t color[256]
Definition: video_out.h:496
Definition: video_out.h:467
void set_argb_layer_ptr(argb_layer_t **dst, argb_layer_t *src)
Definition: osd.c:324
void(* proc_provide_standard_frame_data)(vo_frame_t *vo_img, xine_current_frame_data_t *data)
Definition: video_out.h:71
int(* get_property)(xine_video_port_t *self, int property)
Definition: video_out.h:221