]> git.sesse.net Git - vlc/blobdiff - include/vlc_video.h
* all: removed obsolete b_blocking in intf_dialogs_arg_t
[vlc] / include / vlc_video.h
index 7a3a69d35e64e97487700a7b741b615a8a0a3f8f..db437fa85bc07100f24b0f7604da821e1c8604d9 100644 (file)
@@ -4,7 +4,7 @@
  * includes all common video types and constants.
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: vlc_video.h,v 1.2 2003/07/15 18:12:05 sigmunau Exp $
+ * $Id$
  *
  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  *
@@ -12,7 +12,7 @@
  * 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
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  *****************************************************************************/
+#ifndef _VLC_VIDEO_H
+#define _VLC_VIDEO_H 1
 
-/*****************************************************************************
- * plane_t: description of a planar graphic field
- *****************************************************************************/
+#include "vlc_es.h"
+
+/**
+ * Description of a planar graphic field
+ */
 typedef struct plane_t
 {
-    uint8_t *p_pixels;                          /* Start of the plane's data */
+    uint8_t *p_pixels;                        /**< Start of the plane's data */
 
     /* Variables used for fast memcpy operations */
-    int i_lines;                                          /* Number of lines */
-    int i_pitch;             /* Number of bytes in a line, including margins */
+    int i_lines;                                        /**< Number of lines */
+    int i_pitch;           /**< Number of bytes in a line, including margins */
 
-    /* Size of a macropixel, defaults to 1 */
+    /** Size of a macropixel, defaults to 1 */
     int i_pixel_pitch;
 
     /* Variables used for pictures with margins */
-    int i_visible_pitch;              /* How many visible pixels are there ? */
+    int i_visible_pitch;            /**< How many visible pixels are there ? */
 
 } plane_t;
 
-/*****************************************************************************
- * picture_t: video picture
- *****************************************************************************
+/**
+ * Video picture
+ *
  * Any picture destined to be displayed by a video output thread should be
  * stored in this structure from it's creation to it's effective display.
  * Picture type and flags should only be modified by the output thread. Note
  * that an empty picture MUST have its flags set to 0.
- *****************************************************************************/
+ */
 struct picture_t
 {
-    /* Picture data - data can always be freely modified, but p_data may
+    /** 
+     * The properties of the picture
+     */
+    video_frame_format_t format;
+
+    /** Picture data - data can always be freely modified, but p_data may
      * NEVER be modified. A direct buffer can be handled as the plugin
      * wishes, it can even swap p_pixels buffers. */
     uint8_t        *p_data;
-    void           *p_data_orig;                  /* pointer before memalign */
-    plane_t         p[ VOUT_MAX_PLANES ];       /* description of the planes */
-    int             i_planes;                  /* number of allocated planes */
-
-    /* Type and flags - should NOT be modified except by the vout thread */
-    int             i_status;                               /* picture flags */
-    int             i_type;                  /* is picture a direct buffer ? */
-    int             i_matrix_coefficients;     /* in YUV type, encoding type */
-
-    /* Picture management properties - these properties can be modified using
-     * the video output thread API, but should never be written directly */
-    int             i_refcount;                    /* link reference counter */
-    mtime_t         date;                                    /* display date */
+    void           *p_data_orig;                /**< pointer before memalign */
+    plane_t         p[ VOUT_MAX_PLANES ];     /**< description of the planes */
+    int             i_planes;                /**< number of allocated planes */
+
+    /** \name Type and flags
+     * Should NOT be modified except by the vout thread
+     * @{*/
+    int             i_status;                             /**< picture flags */
+    int             i_type;                /**< is picture a direct buffer ? */
+    vlc_bool_t      b_slow;                 /**< is picture in slow memory ? */
+    int             i_matrix_coefficients;   /**< in YUV type, encoding type */
+    /**@}*/
+
+    /** \name Picture management properties
+     * These properties can be modified using the video output thread API,
+     * but should never be written directly */
+    /**@{*/
+    int             i_refcount;                  /**< link reference counter */
+    mtime_t         date;                                  /**< display date */
     vlc_bool_t      b_force;
+    /**@}*/
 
-    /* Picture dynamic properties - those properties can be changed by the
-     * decoder */
-    vlc_bool_t      b_progressive;            /* is it a progressive frame ? */
-    unsigned int    i_nb_fields;                    /* # of displayed fields */
-    vlc_bool_t      b_top_field_first;               /* which field is first */
+    /** \name Picture dynamic properties
+     * Those properties can be changed by the decoder
+     * @{
+     */
+    vlc_bool_t      b_progressive;          /**< is it a progressive frame ? */
+    unsigned int    i_nb_fields;                  /**< # of displayed fields */
+    vlc_bool_t      b_top_field_first;             /**< which field is first */
+    /**@}*/
 
-    /* The picture heap we are attached to */
+    /** The picture heap we are attached to */
     picture_heap_t* p_heap;
 
     /* Some vouts require the picture to be locked before it can be modified */
     int (* pf_lock) ( vout_thread_t *, picture_t * );
     int (* pf_unlock) ( vout_thread_t *, picture_t * );
 
-    /* Private data - the video output plugin might want to put stuff here to
+    /** Private data - the video output plugin might want to put stuff here to
      * keep track of the picture */
     picture_sys_t * p_sys;
 };
 
-/*****************************************************************************
- * picture_heap_t: video picture heap, either render (to store pictures used
+/**
+ * Video picture heap, either render (to store pictures used
  * by the decoder) or output (to store pictures displayed by the vout plugin)
- *****************************************************************************/
+ */
 struct picture_heap_t
 {
-    int i_pictures;                                     /* current heap size */
+    int i_pictures;                                   /**< current heap size */
 
-    /* Picture static properties - those properties are fixed at initialization
-     * and should NOT be modified */
-    unsigned int i_width;                                   /* picture width */
-    unsigned int i_height;                                 /* picture height */
-    vlc_fourcc_t i_chroma;                                 /* picture chroma */
-    unsigned int i_aspect;                                   /* aspect ratio */
+    /* \name Picture static properties
+     * Those properties are fixed at initialization and should NOT be modified
+     * @{
+     */
+    unsigned int i_width;                                 /**< picture width */
+    unsigned int i_height;                               /**< picture height */
+    vlc_fourcc_t i_chroma;                               /**< picture chroma */
+    unsigned int i_aspect;                                 /**< aspect ratio */
+    /**@}*/
 
     /* Real pictures */
-    picture_t*      pp_picture[VOUT_MAX_PICTURES];               /* pictures */
-    int             i_last_used_pic;                /* last used pic in heap */
+    picture_t*      pp_picture[VOUT_MAX_PICTURES];             /**< pictures */
+    int             i_last_used_pic;              /**< last used pic in heap */
     vlc_bool_t      b_allow_modify_pics;
 
     /* Stuff used for truecolor RGB planes */
@@ -114,7 +136,7 @@ struct picture_heap_t
     int i_gmask, i_rgshift, i_lgshift;
     int i_bmask, i_rbshift, i_lbshift;
 
-    /* Stuff used for palettized RGB planes */
+    /** Stuff used for palettized RGB planes */
     void (* pf_setpalette) ( vout_thread_t *, uint16_t *, uint16_t *, uint16_t * );
 };
 
@@ -144,6 +166,7 @@ struct picture_heap_t
 #define Y_PLANE      0
 #define U_PLANE      1
 #define V_PLANE      2
+#define A_PLANE      3
 
 /* Shortcuts */
 #define Y_PIXELS     p[Y_PLANE].p_pixels
@@ -152,6 +175,38 @@ struct picture_heap_t
 #define U_PITCH      p[U_PLANE].i_pitch
 #define V_PIXELS     p[V_PLANE].p_pixels
 #define V_PITCH      p[V_PLANE].i_pitch
+#define A_PIXELS     p[A_PLANE].p_pixels
+#define A_PITCH      p[A_PLANE].i_pitch
+
+/**
+ * \defgroup subpicture Video Subpictures
+ * Subpictures are pictures that should be displayed on top of the video, like
+ * subtitles and OSD
+ * \ingroup video_output
+ * @{
+ */
+
+/**
+ * Video subtitle region
+ *
+ * A subtitle region is defined by a picture (graphic) and its rendering
+ * coordinates.
+ * Subtitles contain a list of regions.
+ */
+struct subpicture_region_t
+{
+    /** \name Region properties */
+    /**@{*/
+    video_format_t  fmt;                          /**< format of the picture */
+    picture_t       picture;             /**< picture comprising this region */
+
+    int             i_x;                             /**< position of region */
+    int             i_y;                             /**< position of region */
+
+    subpicture_region_t *p_next;                /**< next region in the list */
+    /**@}*/
+
+};
 
 /**
  * Video subtitle
@@ -163,6 +218,11 @@ struct picture_heap_t
  */
 struct subpicture_t
 {
+    /** \name Channel ID */
+    /**@{*/
+    int             i_channel;                    /**< subpicture channel ID */
+    /**@}*/
+
     /** \name Type and flags
        Should NOT be modified except by the vout thread */
     /**@{*/
@@ -180,6 +240,8 @@ struct subpicture_t
                                       untill the next one appear */
     /**@}*/
 
+    subpicture_region_t *p_region;  /**< region list composing this subtitle */
+
     /** \name Display properties
      * These properties are only indicative and may be
      * changed by the video output thread, or simply ignored depending of the
@@ -189,29 +251,20 @@ struct subpicture_t
     int             i_y;                 /**< offset from alignment position */
     int             i_width;                              /**< picture width */
     int             i_height;                            /**< picture height */
-    /**@}*/
-#if 0
-    /* Additionnal properties depending of the subpicture type */
-    union
-    {
-        /* Text subpictures properties - text is stored in data area, in ASCIIZ
-         * format */
-        struct
-        {
-            vout_font_t *       p_font;            /* font, NULL for default */
-            int                 i_style;                       /* text style */
-            uint32_t            i_char_color;             /* character color */
-            uint32_t            i_border_color;              /* border color */
-            uint32_t            i_bg_color;              /* background color */
-        } text;
-    } type;
-#endif
+    int             b_absolute;                    /**< position is absolute */
+    int             i_flags;                             /**< position flags */
+     /**@}*/
 
     /** Pointer to function that renders this subtitle in a picture */
     void ( *pf_render )  ( vout_thread_t *, picture_t *, const subpicture_t * );
     /** Pointer to function that cleans up the private data of this subtitle */
     void ( *pf_destroy ) ( subpicture_t * );
 
+    /** Pointer to functions for region management */
+    subpicture_region_t * ( *pf_create_region ) ( vlc_object_t *,
+                                                  video_format_t * );
+    void ( *pf_destroy_region ) ( vlc_object_t *, subpicture_region_t * );
+
     /** Private data - the subtitle plugin might want to put stuff here to
      * keep track of the subpicture */
     subpicture_sys_t *p_sys;                              /* subpicture data */
@@ -221,8 +274,27 @@ struct subpicture_t
 #define EMPTY_SUBPICTURE       0     /* subtitle slot is empty and available */
 #define MEMORY_SUBPICTURE      100            /* subpicture stored in memory */
 
+/* Default subpicture channel ID */
+#define DEFAULT_CHAN           1
+
 /* Subpicture status */
 #define FREE_SUBPICTURE        0                   /* free and not allocated */
 #define RESERVED_SUBPICTURE    1                   /* allocated and reserved */
 #define READY_SUBPICTURE       2                        /* ready for display */
 
+/*****************************************************************************
+ * Prototypes
+ *****************************************************************************/
+/**
+ * vout_AspectRatio
+ *
+ * Set the i_aspect_x and i_aspect_y from the encoded aspect ratio i_aspect.
+ * \param i_aspect the encoded aspect ratio
+ * \param i_aspect_x the decoded x-axis portion of i_aspect. This is set.
+ * \param i_aspect_y the decoded y-axis portion of i_aspect  This is set.
+ */
+VLC_EXPORT( void,  vout_AspectRatio, ( unsigned int i_aspect, unsigned int *i_aspect_x, unsigned int *i_aspect_y ) );
+
+/**@}*/
+
+#endif /* _VLC_VIDEO_H */