1 /*******************************************************************************
2 * video_output.h : video output thread
4 *******************************************************************************
5 * This module describes the programming interface for video output threads.
6 * It includes functions allowing to open a new thread, send pictures to a
7 * thread, and destroy a previously oppenned video output thread.
8 *******************************************************************************/
10 /*******************************************************************************
11 * vout_thread_t: video output thread descriptor
12 *******************************************************************************
13 * Any independant video output device, such as an X11 window or a GGI device,
14 * is represented by a video output thread, and described using following
16 *******************************************************************************/
17 typedef struct vout_thread_s
19 /* Thread properties and locks */
20 boolean_t b_die; /* `die' flag */
21 boolean_t b_error; /* `error' flag */
22 boolean_t b_active; /* `active' flag */
23 pthread_t thread_id; /* id for pthread functions */
24 pthread_mutex_t lock; /* thread lock */
25 int * pi_status; /* temporary status flag */
27 /* Common display properties */
28 boolean_t b_info; /* print additionnal informations */
29 boolean_t b_grayscale; /* color or grayscale display */
30 int i_width; /* current output method width */
31 int i_height; /* current output method height */
32 int i_bytes_per_line;/* bytes per line (including virtual) */
33 int i_screen_depth; /* bits per pixel */
34 int i_bytes_per_pixel; /* real screen depth */
35 float f_x_ratio; /* horizontal display ratio */
36 float f_y_ratio; /* vertical display ratio */
37 float f_gamma; /* gamma */
39 /* Changed properties values - some of them are treated directly by the
40 * thread, the over may be ignored or handled by vout_SysManage */
41 boolean_t b_gamma_change; /* gamma change indicator */
42 int i_new_width; /* new width */
43 int i_new_height; /* new height */
46 /* Statistics - these numbers are not supposed to be accurate */
47 count_t c_loops; /* number of loops */
48 count_t c_idle_loops; /* number of idle loops */
49 count_t c_fps_samples; /* picture counts */
50 mtime_t fps_sample[ VOUT_FPS_SAMPLES ]; /* FPS samples dates */
54 /* Video debugging informations */
55 mtime_t picture_render_time; /* last picture rendering time */
59 p_vout_sys_t p_sys; /* system output method */
62 picture_t p_picture[VOUT_MAX_PICTURES]; /* pictures */
64 /* YUV translation tables - they have to be casted to the appropriate width
65 * on use. All tables are allocated in the same memory block, based at
66 * p_trans_base, and shifted depending of the output thread configuration */
67 byte_t * p_trans_base; /* base for all translation tables */
73 /* YUV translation tables, for optimized C YUV transform ?? */
76 /*******************************************************************************
78 *******************************************************************************/
79 vout_thread_t * vout_CreateThread (
81 char *psz_display, Window root_window,
83 int i_width, int i_height, int *pi_status
86 void vout_DestroyThread ( vout_thread_t *p_vout, int *pi_status );
88 picture_t * vout_CreatePicture ( vout_thread_t *p_vout, int i_type,
89 int i_width, int i_height, int i_bytes_per_line );
90 void vout_DestroyPicture ( vout_thread_t *p_vout, picture_t *p_pic );
91 void vout_DisplayPicture ( vout_thread_t *p_vout, picture_t *p_pic );
92 void vout_LinkPicture ( vout_thread_t *p_vout, picture_t *p_pic );
93 void vout_UnlinkPicture ( vout_thread_t *p_vout, picture_t *p_pic );