]> git.sesse.net Git - vlc/blobdiff - include/video_output.h
* Fixed the BeOS compile typo.
[vlc] / include / video_output.h
index f5182d0c38780e505c00a1e572c5ae1e33f04962..4c7bcfa970f7e164045b5788db97ed0a307c61ac 100644 (file)
@@ -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 <seguin@via.ecp.fr>
  *
  * 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
  *****************************************************************************
@@ -56,9 +74,9 @@ 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 */
@@ -105,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
  *****************************************************************************
@@ -112,18 +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 struct vout_thread_s
 {
     /* Thread properties and lock */
@@ -165,21 +193,25 @@ 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 */
+    /* 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 */
 
 
@@ -219,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 */
@@ -241,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 );
-