* includes all common video types and constants.
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: vlc_video.h,v 1.1 2003/06/26 12:19:59 sam Exp $
+ * $Id$
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
*
* 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
+ /** \name Picture format
+ * Describes 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 ? */
+ 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 */
-
- /* The picture heap we are attached to */
+ /**@}*/
+
+ /** \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 */
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 */
-
- /* 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 */
+ int i_pictures; /**< current heap size */
+
+ /* \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 */
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 * );
};
#define V_PIXELS p[V_PLANE].p_pixels
#define V_PITCH p[V_PLANE].i_pitch
-/*****************************************************************************
- * subpicture_t: video subtitle
- *****************************************************************************
+/**
+ * \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
+ *
* Any subtitle destined to be displayed by a video output thread should
* be stored in this structure from it's creation to it's effective display.
* Subtitle type and flags should only be modified by the output thread. Note
* that an empty subtitle MUST have its flags set to 0.
- *****************************************************************************/
+ */
struct subpicture_t
{
- /* Type and flags - should NOT be modified except by the vout thread */
- int i_type; /* type */
- int i_status; /* flags */
- subpicture_t * p_next; /* next subtitle to be displayed */
-
- /* Date properties */
- mtime_t i_start; /* beginning of display date */
- mtime_t i_stop; /* end of display date */
- vlc_bool_t b_ephemer; /* does the subtitle have a TTL ? */
-
- /* Display properties - these properties are only indicative and may be
+ /** \name Channel and content type */
+ /**@{*/
+ int i_channel; /**< subpicture channel */
+ int i_content; /**< content type */
+ /**@}*/
+
+ /** \name Type and flags
+ Should NOT be modified except by the vout thread */
+ /**@{*/
+ int i_type; /**< type */
+ int i_status; /**< flags */
+ subpicture_t * p_next; /**< next subtitle to be displayed */
+ /**@}*/
+
+ /** \name Date properties */
+ /**@{*/
+ mtime_t i_start; /**< beginning of display date */
+ mtime_t i_stop; /**< end of display date */
+ vlc_bool_t b_ephemer; /**< If this flag is set to true
+ the subtitle will be displayed
+ untill the next one appear */
+ /**@}*/
+
+ /** \name Display properties
+ * These properties are only indicative and may be
* changed by the video output thread, or simply ignored depending of the
* subtitle type. */
- int i_x; /* offset from alignment position */
- 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
-
- /* The subpicture rendering and destruction routines */
+ /**@{*/
+ int i_x; /**< offset from alignment position */
+ int i_y; /**< offset from alignment position */
+ int i_width; /**< picture width */
+ int i_height; /**< picture height */
+ /**@}*/
+
+ /** 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 * );
- /* Private data - the subtitle plugin might want to put stuff here to
+ /** Private data - the subtitle plugin might want to put stuff here to
* keep track of the subpicture */
subpicture_sys_t *p_sys; /* subpicture data */
};
#define RESERVED_SUBPICTURE 1 /* allocated and reserved */
#define READY_SUBPICTURE 2 /* ready for display */
+/* Subpicture channel */
+#define SUBT1_CHAN 1
+#define SUBT2_CHAN 2
+#define BEGIN_EXCLUSIVE_CHAN 3 /* exclusive subpic-channels list */
+#define POSITION_CHAN 3
+#define VOLUME_CHAN 4
+#define SOLO_CHAN 5
+#define END_EXCLUSIVE_CHAN 5 /*end of list */
+
+/* Subpicture content type */
+#define TEXT_CONTENT 0
+#define GRAPH_CONTENT 1 /* used for OSD icon, slider... */
+
+/*****************************************************************************
+ * 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 */