/*****************************************************************************
* video_output.h : video output thread
- * (c)1999 VideoLAN
- *****************************************************************************
* This module describes the programming interface for video output threads.
* It includes functions allowing to open a new thread, send pictures to a
* thread, and destroy a previously oppenned video output thread.
+ *****************************************************************************
+ * Copyright (C) 1999, 2000 VideoLAN
+ *
+ * Authors:
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
*****************************************************************************/
/*****************************************************************************
* vout_buffer_t: rendering buffer
*****************************************************************************
* This structure store informations about a buffer. Buffers are not completely
- * cleared between displays, and modified areas needs to be stored.
+ * cleared between displays, and modified areas need to be stored.
*****************************************************************************/
typedef struct vout_buffer_s
{
* vout_thread_t: video output thread descriptor
*****************************************************************************
* Any independant video output device, such as an X11 window or a GGI device,
- * is represented by a video output thread, and described using following
+ * is represented by a video output thread, and described using the following
* structure.
*****************************************************************************/
-typedef void (vout_set_palette_t)( p_vout_thread_t p_vout,
- u16 *red, u16 *green, u16 *blue, u16 *transp );
+typedef int (vout_sys_create_t) ( p_vout_thread_t p_vout,
+ char *psz_display, int i_root_window );
+typedef int (vout_sys_init_t) ( p_vout_thread_t p_vout );
+typedef void (vout_sys_end_t) ( p_vout_thread_t p_vout );
+typedef void (vout_sys_destroy_t) ( p_vout_thread_t p_vout );
+typedef int (vout_sys_manage_t) ( p_vout_thread_t p_vout );
+typedef void (vout_sys_display_t) ( p_vout_thread_t p_vout );
+typedef void (vout_set_palette_t) ( p_vout_thread_t p_vout, u16 *red,
+ u16 *green, u16 *blue, u16 *transp );
typedef struct vout_thread_s
{
u32 i_gray_pixel; /* gray */
u32 i_blue_pixel; /* blue */
+ /* Plugins */
+ void * p_vout_plugin; /* video output plugin */
+ vout_sys_create_t * p_sys_create; /* allocate output method */
+ vout_sys_init_t * p_sys_init; /* initialize output method */
+ vout_sys_end_t * p_sys_end; /* terminate output method */
+ vout_sys_destroy_t * p_sys_destroy; /* destroy output method */
+ vout_sys_manage_t * p_sys_manage; /* handle events */
+ vout_sys_display_t * p_sys_display; /* display rendered image */
+ vout_set_palette_t * p_set_palette; /* sets 8bpp palette */
+
/* Pictures and rendering properties */
boolean_t b_grayscale; /* color or grayscale display */
boolean_t b_info; /* print additionnal informations */
boolean_t b_interface; /* render interface */
boolean_t b_scale; /* allow picture scaling */
- vout_set_palette_t *p_set_palette; /* sets 8bpp palette */
/* Idle screens management */
mtime_t last_display_date; /* last non idle display date */
* good indication of the thread status */
mtime_t render_time; /* last picture render time */
count_t c_fps_samples; /* picture counts */
- mtime_t p_fps_sample[ VOUT_FPS_SAMPLES ];/* FPS samples dates */
+ mtime_t p_fps_sample[VOUT_FPS_SAMPLES]; /* FPS samples dates */
#endif
/* Rendering buffers */
/* Videos heap and translation tables */
picture_t p_picture[VOUT_MAX_PICTURES]; /* pictures */
subpicture_t p_subpicture[VOUT_MAX_PICTURES]; /* subpictures */
+ int i_pictures; /* current heap size */
vout_yuv_t yuv; /* translation tables */
/* Bitmap fonts */
p_vout_font_t p_default_font; /* default font */
p_vout_font_t p_large_font; /* large font */
+
+ /* Synchronisation informations - synchro level is updated by the vout
+ * thread and read by decoder threads */
+ int i_synchro_level; /* trashing level */
} vout_thread_t;
/* Flags for changes - these flags are set in the i_changes field when another
* Prototypes
*****************************************************************************/
vout_thread_t * vout_CreateThread ( char *psz_display, int i_root_window,
- int i_width, int i_height, int *pi_status );
+ int i_width, int i_height, int *pi_status, int i_method );
void vout_DestroyThread ( vout_thread_t *p_vout, int *pi_status );
picture_t * vout_CreatePicture ( vout_thread_t *p_vout, int i_type,
int i_width, int i_height );