/*****************************************************************************
* 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, USA.
*****************************************************************************/
/*****************************************************************************
- * vout_yuv_convert_t: YUV convertion function
+ * vout_yuv_convert_t: YUV conversion function
*****************************************************************************
- * This is the prototype common to all convertion functions. The type of p_pic
- * will change depending of the screen depth treated.
+ * This is the prototype common to all conversion functions. The type of p_pic
+ * will change depending on the processed screen depth.
* Parameters:
* p_vout video output thread
* p_pic picture address
int i_matrix_coefficients );
/*****************************************************************************
- * vout_yuv_t: pre-calculated YUV convertion tables
+ * vout_yuv_t: pre-calculated YUV conversion tables
*****************************************************************************
- * These tables are used by convertion and scaling functions.
+ * These tables are used by conversion and scaling functions.
*****************************************************************************/
typedef struct vout_yuv_s
{
- /* Convertion functions */
+ /* conversion functions */
vout_yuv_convert_t * p_Convert420; /* YUV 4:2:0 converter */
vout_yuv_convert_t * p_Convert422; /* YUV 4:2:2 converter */
vout_yuv_convert_t * p_Convert444; /* YUV 4:4:4 converter */
- /* Pre-calculated convertion tables */
+ /* Pre-calculated conversion tables */
void * p_base; /* base for all conversion tables */
union
{
u32 * p_rgb32; /* RGB 32 bits table */
} yuv;
- /* Temporary convertion buffer and offset array */
- void * p_buffer; /* convertion buffer */
+ /* Temporary conversion buffer and offset array */
+ void * p_buffer; /* conversion buffer */
int * p_offset; /* offset array */
} vout_yuv_t;
/*****************************************************************************
* 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.
+ * This structure stores information about a buffer. Buffers are not completely
+ * cleared between displays, and modified areas need to be stored.
*****************************************************************************/
typedef struct vout_buffer_s
{
/* Picture area */
int i_pic_x, i_pic_y; /* picture position */
- int i_pic_width, i_pic_height; /* picture extension */
+ int i_pic_width, i_pic_height; /* picture size */
/* Other areas - only vertical extensions of areas are stored */
int i_areas; /* number of areas */
* 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, void *p_data );
+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 int (yuv_sys_init_t) ( p_vout_thread_t p_vout );
+typedef int (yuv_sys_reset_t) ( p_vout_thread_t p_vout );
+typedef void (yuv_sys_end_t) ( p_vout_thread_t p_vout );
typedef struct vout_thread_s
{
u32 i_gray_pixel; /* gray */
u32 i_blue_pixel; /* blue */
+ /* Plugins */
+ 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; /* set 8bpp palette */
+
+ yuv_sys_init_t * p_yuv_init; /* initialize YUV tables */
+ yuv_sys_reset_t * p_yuv_reset; /* reset YUV tables */
+ yuv_sys_end_t * p_yuv_end; /* free YUV tables */
+
/* Pictures and rendering properties */
boolean_t b_grayscale; /* color or grayscale display */
- boolean_t b_info; /* print additionnal informations */
+ boolean_t b_info; /* print additional information */
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 */
int i_buffer_index; /* buffer index */
vout_buffer_t p_buffer[2]; /* buffers properties */
- /* Videos heap and translation tables */
+ /* Video 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 */
+
+ /* Synchronization 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 *p_data );
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 );