xine-lib: xine-lib-1.2.13/include/xine/video_out.h Source File

xine-lib 1.2.13-20230125hg15249

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