]> git.sesse.net Git - vlc/blobdiff - include/video_output.h
* COMPLETE CVS BREAKAGE !! The MAIN branch is going to be a playground
[vlc] / include / video_output.h
index dd4885a797f9290ed339ddbc98a66030cceb5713..e3e2be0a336c13f7dfced84233c3694e2c9c1201 100644 (file)
@@ -5,7 +5,7 @@
  * thread, and destroy a previously oppenned video output thread.
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: video_output.h,v 1.63 2001/10/01 16:18:48 massiot Exp $
+ * $Id: video_output.h,v 1.64 2001/12/09 17:01:35 sam Exp $
  *
  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  *
@@ -42,64 +42,31 @@ typedef struct vout_bank_s
 extern vout_bank_t *p_vout_bank;
 
 /*****************************************************************************
- * vout_yuv_convert_t: YUV conversion function
+ * vout_chroma_t: Chroma conversion function
  *****************************************************************************
- * This is the prototype common to all conversion functions. The type of p_pic
- * will change depending on the processed screen depth.
+ * This is the prototype common to all conversion functions.
  * Parameters:
- *      p_vout                          video output thread
- *      p_pic                           picture address
- *      p_y, p_u, p_v                   Y,U,V samples addresses
- *      i_width, i_height               Y samples extension
- *      i_pic_width, i_pic_height       picture extension
- *      i_pic_line_width                picture total line width
- *      i_matrix_coefficients           matrix coefficients
+ *      p_source                        source picture
+ *      p_dest                          destination picture
  * Picture width and source dimensions must be multiples of 16.
  *****************************************************************************/
-typedef void (vout_yuv_convert_t)( p_vout_thread_t p_vout, void *p_pic,
-                                   yuv_data_t *p_y, yuv_data_t *p_u, yuv_data_t *p_v,
-                                   int i_width, int i_height,
-                                   int i_pic_width, int i_pic_height, int i_pic_line_width,
-                                   int i_matrix_coefficients );
+typedef void (vout_chroma_convert_t)( picture_t *p_source, picture_t *p_dest );
 
-/*****************************************************************************
- * vout_yuv_t: pre-calculated YUV conversion tables
- *****************************************************************************
- * 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
+typedef struct vout_chroma_s
 {
     /* conversion functions */
-    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 */
-    union
-    {
-        u8 *            p_gray8;                        /* gray 8 bits table */
-        u16 *           p_gray16;                      /* gray 16 bits table */
-        u32 *           p_gray32;                      /* gray 32 bits table */
-        u8 *            p_rgb8;                          /* RGB 8 bits table */
-        u16 *           p_rgb16;                        /* RGB 16 bits table */
-        u32 *           p_rgb32;                        /* RGB 32 bits table */
-    } yuv;
-
-    /* Temporary conversion buffer and offset array */
-    void *              p_buffer;                       /* conversion buffer */
-    int *               p_offset;                            /* offset array */
+    vout_chroma_convert_t *pf_convert;
+
+    /* Private module-dependant data */
+    p_chroma_sys_t      p_sys;                               /* private data */
 
     /* 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;
+    int  ( * pf_init )  ( struct vout_thread_s * );
+    int  ( * pf_reset ) ( struct vout_thread_s * );
+    void ( * pf_end )   ( struct vout_thread_s * );
+
+} vout_chroma_t;
 
 /*****************************************************************************
  * vout_buffer_t: rendering buffer
@@ -132,9 +99,6 @@ typedef struct vout_fifo_s
     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;
 
@@ -164,16 +128,15 @@ typedef struct vout_thread_s
     int *               pi_status;                  /* temporary status flag */
     p_vout_sys_t        p_sys;                       /* system output method */
                                                                    
+    /* Current input properties */
+    int                 i_width;                      /* current input width */
+    int                 i_height;                    /* current input height */
+    int                 i_chroma;                    /* current input chroma */
+    int                 i_aspect_ratio;        /* current input aspect ratio */
+
     /* Current display properties */
     u16                 i_changes;             /* changes made to the thread */
-    int                 i_width;              /* current output method width */
-    int                 i_height;            /* current output method height */
-    int                 i_bytes_per_line;  /* bytes per line (incl. virtual) */
-    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
@@ -194,46 +157,36 @@ typedef struct vout_thread_s
 
     /* 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 * );
+    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 *,
+                                          struct picture_s * );
+    void             ( *pf_setpalette ) ( struct vout_thread_s *,
+                                          u16 *, u16 *, u16 * );
 
     /* 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 */
+    boolean_t           b_fullscreen;           /* toogle fullscreen display */
     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 */
-    mtime_t             init_display_date;
-
     /* Statistics - these numbers are not supposed to be accurate, but are a
      * good indication of the thread status */
     count_t             c_fps_samples;                     /* picture counts */
     mtime_t             p_fps_sample[VOUT_FPS_SAMPLES]; /* FPS samples dates */
 
-    /* Rendering buffers */
-    int                 i_buffer_index;                      /* buffer index */
-    vout_buffer_t       p_buffer[2];                   /* buffers properties */
-
     /* Video heap and translation tables */
     picture_t           p_picture[VOUT_MAX_PICTURES];            /* pictures */
     subpicture_t        p_subpicture[VOUT_MAX_PICTURES];      /* subpictures */
+    int                 i_directbuffers;       /* number of pictures in VRAM */
     int                 i_pictures;                     /* current heap size */
-    vout_yuv_t          yuv;                           /* translation tables */
-    picture_t *         p_rendered_pic;  /* picture currently being rendered */
+
+    vout_chroma_t       chroma;                        /* translation tables */
 
     /* Bitmap fonts */
     p_vout_font_t       p_default_font;                      /* default font */
@@ -258,7 +211,7 @@ typedef struct vout_thread_s
 #define VOUT_FULLSCREEN_CHANGE  0x0040               /* b_fullscreen changed */
 #define VOUT_SIZE_CHANGE        0x0200                       /* size changed */
 #define VOUT_DEPTH_CHANGE       0x0400                      /* depth changed */
-#define VOUT_YUV_CHANGE         0x0800                  /* change yuv tables */
+#define VOUT_CHROMA_CHANGE      0x0800               /* change chroma tables */
 
 /* Disabled for thread deadlocks issues --Meuuh */
 //#define VOUT_NODISPLAY_CHANGE   0xff00    /* changes which forbidden display */
@@ -279,25 +232,28 @@ typedef struct vout_thread_s
 /*****************************************************************************
  * Prototypes
  *****************************************************************************/
-void            vout_InitBank           ( void );
-void            vout_EndBank            ( void );
-
-vout_thread_t * vout_CreateThread   ( int *pi_status, int i_width, int i_height );
-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_InitBank       ( void );
+void            vout_EndBank        ( void );
+
+vout_thread_t * vout_CreateThread   ( int *pi_status, int, int, int, int );
+void            vout_DestroyThread  ( vout_thread_t *, int *pi_status );
+
+vout_fifo_t *   vout_CreateFifo     ( void );
+void            vout_DestroyFifo    ( vout_fifo_t * );
+void            vout_FreeFifo       ( vout_fifo_t * );
+
+picture_t *     vout_CreatePicture  ( vout_thread_t *, int, int, int, int );
+void            vout_DestroyPicture ( vout_thread_t *, picture_t * );
+void            vout_DisplayPicture ( vout_thread_t *, picture_t * );
+void            vout_DatePicture    ( vout_thread_t *, picture_t *, mtime_t );
+void            vout_LinkPicture    ( vout_thread_t *, picture_t * );
+void            vout_UnlinkPicture  ( vout_thread_t *, picture_t * );
+picture_t *     vout_RenderPicture  ( vout_thread_t *, picture_t *,
+                                                       subpicture_t * );
+
+subpicture_t *  vout_CreateSubPicture   ( vout_thread_t *, int, int );
+void            vout_DestroySubPicture  ( vout_thread_t *, subpicture_t * );
+void            vout_DisplaySubPicture  ( vout_thread_t *, subpicture_t * );
+subpicture_t *  vout_SortSubPictures    ( vout_thread_t *, mtime_t );
+void            vout_RenderSubPictures  ( picture_t *, subpicture_t * );