X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvideo_output.h;h=4c7bcfa970f7e164045b5788db97ed0a307c61ac;hb=440f9992ee947ea5fd0debbf35fdd1011c6404b3;hp=6f5c41bebe3cc32d91a8582fef4621f72c973e3f;hpb=f666ec10f18fd59c8f836a429fd23232a79be31a;p=vlc diff --git a/include/video_output.h b/include/video_output.h index 6f5c41bebe..4c7bcfa970 100644 --- a/include/video_output.h +++ b/include/video_output.h @@ -5,6 +5,7 @@ * thread, and destroy a previously oppenned video output thread. ***************************************************************************** * Copyright (C) 1999, 2000 VideoLAN + * $Id: video_output.h,v 1.61 2001/05/30 17:03:11 sam Exp $ * * Authors: Vincent Seguin * @@ -23,6 +24,23 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *****************************************************************************/ +/***************************************************************************** + * vout_bank_t, p_vout_bank (global variable) + ***************************************************************************** + * This global variable is accessed by any function using the video output. + *****************************************************************************/ +typedef struct vout_bank_s +{ + /* Array to all the video outputs */ + struct vout_thread_s *pp_vout[ VOUT_MAX_THREADS ]; + + int i_count; + vlc_mutex_t lock; /* Global lock */ + +} vout_bank_t; + +extern vout_bank_t *p_vout_bank; + /***************************************************************************** * vout_yuv_convert_t: YUV conversion function ***************************************************************************** @@ -49,12 +67,16 @@ typedef void (vout_yuv_convert_t)( p_vout_thread_t p_vout, void *p_pic, ***************************************************************************** * These tables are used by conversion and scaling functions. *****************************************************************************/ +typedef int (yuv_init_t) ( p_vout_thread_t p_vout ); +typedef int (yuv_reset_t) ( p_vout_thread_t p_vout ); +typedef void (yuv_end_t) ( p_vout_thread_t p_vout ); + typedef struct vout_yuv_s { /* 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 */ + vout_yuv_convert_t *pf_yuv420; /* YUV 4:2:0 converter */ + vout_yuv_convert_t *pf_yuv422; /* YUV 4:2:2 converter */ + vout_yuv_convert_t *pf_yuv444; /* YUV 4:4:4 converter */ /* Pre-calculated conversion tables */ void * p_base; /* base for all conversion tables */ @@ -71,6 +93,13 @@ typedef struct vout_yuv_s /* Temporary conversion buffer and offset array */ void * p_buffer; /* conversion buffer */ int * p_offset; /* offset array */ + + /* Plugin used and shortcuts to access its capabilities */ + struct module_s * p_module; + yuv_init_t * pf_init; /* initialize YUV tables */ + yuv_reset_t * pf_reset; /* reset YUV tables */ + yuv_end_t * pf_end; /* free YUV tables */ + } vout_yuv_t; /***************************************************************************** @@ -94,6 +123,28 @@ typedef struct vout_buffer_s byte_t * p_data; /* memory address */ } vout_buffer_t; +/***************************************************************************** + * vout_fifo_t + *****************************************************************************/ +typedef struct vout_fifo_s +{ + /* See the fifo types below */ + int i_type; + boolean_t b_die; + int i_fifo; /* Just to keep track of the fifo index */ + + int i_width; + int i_height; + + vlc_mutex_t data_lock; + vlc_cond_t data_wait; + +} vout_fifo_t; + +#define VOUT_EMPTY_FIFO 0 +#define VOUT_YUV_FIFO 1 +#define VOUT_SPU_FIFO 2 + /***************************************************************************** * vout_thread_t: video output thread descriptor ***************************************************************************** @@ -101,26 +152,6 @@ typedef struct vout_buffer_s * is represented by a video output thread, and described using the following * structure. *****************************************************************************/ -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 ); - -struct macroblock_s; -typedef void (vdec_DecodeMacroblock_t) ( struct vdec_thread_s *p_vdec, - struct macroblock_s *p_mb ); - typedef struct vout_thread_s { /* Thread properties and lock */ @@ -133,8 +164,6 @@ typedef struct vout_thread_s vlc_mutex_t change_lock; /* thread change lock */ int * pi_status; /* temporary status flag */ p_vout_sys_t p_sys; /* system output method */ - vdec_DecodeMacroblock_t * - vdec_DecodeMacroblock; /* decoder function to use */ /* Current display properties */ u16 i_changes; /* changes made to the thread */ @@ -144,6 +173,8 @@ typedef struct vout_thread_s int i_screen_depth; /* significant bpp: 8, 15, 16 or 24 */ int i_bytes_per_pixel;/* real screen depth: 1, 2, 3 or 4 */ float f_gamma; /* gamma */ + boolean_t b_need_render; /* does the output method need a YUV + * conversion ? */ /* Color masks and shifts in RGB mode - masks are set by system * initialization, shifts are calculated. A pixel color value can be @@ -162,27 +193,28 @@ 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 */ + /* Plugin used and shortcuts to access its capabilities */ + struct module_s * p_module; + int ( *pf_create ) ( struct vout_thread_s * ); + int ( *pf_init ) ( struct vout_thread_s * ); + void ( *pf_end ) ( struct vout_thread_s * ); + void ( *pf_destroy ) ( struct vout_thread_s * ); + int ( *pf_manage ) ( struct vout_thread_s * ); + void ( *pf_display ) ( struct vout_thread_s * ); + void ( *pf_setpalette ) ( struct vout_thread_s *, u16 *red, + u16 *green, u16 *blue, u16 *transp ); + void ( *pf_setbuffers ) ( struct vout_thread_s *, void *, void * ); /* Pictures and rendering properties */ boolean_t b_grayscale; /* color or grayscale display */ + boolean_t b_YCbr; /* use YUV to YCbr instead of RGB */ boolean_t b_info; /* print additional information */ boolean_t b_interface; /* render interface */ boolean_t b_scale; /* allow picture scaling */ + boolean_t b_fullscreen; /* toogle fullscreen dusplay */ mtime_t render_time; /* last picture render time */ + /* Idle screens management */ mtime_t last_display_date; /* last non idle display date */ mtime_t last_idle_date; /* last idle display date */ @@ -202,6 +234,7 @@ typedef struct vout_thread_s subpicture_t p_subpicture[VOUT_MAX_PICTURES]; /* subpictures */ int i_pictures; /* current heap size */ vout_yuv_t yuv; /* translation tables */ + picture_t * p_rendered_pic; /* picture currently being rendered */ /* Bitmap fonts */ p_vout_font_t p_default_font; /* default font */ @@ -218,9 +251,11 @@ typedef struct vout_thread_s #define VOUT_GRAYSCALE_CHANGE 0x0002 /* b_grayscale changed */ #define VOUT_INTF_CHANGE 0x0004 /* b_interface changed */ #define VOUT_SCALE_CHANGE 0x0008 /* b_scale changed */ +#define VOUT_GAMMA_CHANGE 0x0010 /* gamma changed */ +#define VOUT_CURSOR_CHANGE 0x0020 /* b_cursor changed */ +#define VOUT_FULLSCREEN_CHANGE 0x0040 /* b_fullscreen changed */ #define VOUT_SIZE_CHANGE 0x0200 /* size changed */ #define VOUT_DEPTH_CHANGE 0x0400 /* depth changed */ -#define VOUT_GAMMA_CHANGE 0x0010 /* gamma changed */ #define VOUT_YUV_CHANGE 0x0800 /* change yuv tables */ /* Disabled for thread deadlocks issues --Meuuh */ @@ -240,20 +275,25 @@ typedef struct vout_thread_s /***************************************************************************** * Prototypes *****************************************************************************/ -vout_thread_t * vout_CreateThread ( char *psz_display, int i_root_window, - 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 ); -void vout_DestroyPicture ( vout_thread_t *p_vout, picture_t *p_pic ); -void vout_DisplayPicture ( vout_thread_t *p_vout, picture_t *p_pic ); -void vout_DatePicture ( vout_thread_t *p_vout, picture_t *p_pic, mtime_t date ); -void vout_LinkPicture ( vout_thread_t *p_vout, picture_t *p_pic ); -void vout_UnlinkPicture ( vout_thread_t *p_vout, picture_t *p_pic ); +void vout_InitBank ( void ); +void vout_EndBank ( void ); + +vout_thread_t * vout_CreateThread ( int *pi_status ); +void vout_DestroyThread ( vout_thread_t *p_vout, int *pi_status ); + +vout_fifo_t * vout_CreateFifo ( void ); +void vout_DestroyFifo ( vout_fifo_t *p_fifo ); +void vout_FreeFifo ( vout_fifo_t *p_fifo ); + +picture_t * vout_CreatePicture ( vout_thread_t *p_vout, int i_type, + int i_width, int i_height ); +void vout_DestroyPicture ( vout_thread_t *p_vout, picture_t *p_pic ); +void vout_DisplayPicture ( vout_thread_t *p_vout, picture_t *p_pic ); +void vout_DatePicture ( vout_thread_t *p_vout, picture_t *p_pic, mtime_t date ); +void vout_LinkPicture ( vout_thread_t *p_vout, picture_t *p_pic ); +void vout_UnlinkPicture ( vout_thread_t *p_vout, picture_t *p_pic ); + subpicture_t * vout_CreateSubPicture ( vout_thread_t *p_vout, int i_type, int i_size ); void vout_DestroySubPicture ( vout_thread_t *p_vout, subpicture_t *p_subpic ); void vout_DisplaySubPicture ( vout_thread_t *p_vout, subpicture_t *p_subpic ); -void vout_SetBuffers ( vout_thread_t *p_vout, void *p_buf1, void *p_buf2 ); -