X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_video.h;h=35f7351fe376904d3c3ab10b95fee7297c4c9f13;hb=3793e3726479b56b294d7946f0599725dd8f2654;hp=db437fa85bc07100f24b0f7604da821e1c8604d9;hpb=3ea1b0e909ff073d21a53e83e80fdfb57e5533ad;p=vlc diff --git a/include/vlc_video.h b/include/vlc_video.h index db437fa85b..35f7351fe3 100644 --- a/include/vlc_video.h +++ b/include/vlc_video.h @@ -3,7 +3,7 @@ * This header is required by all modules which have to handle pictures. It * includes all common video types and constants. ***************************************************************************** - * Copyright (C) 1999, 2000 VideoLAN + * Copyright (C) 1999 - 2005 the VideoLAN team * $Id$ * * Authors: Vincent Seguin @@ -20,7 +20,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ #ifndef _VLC_VIDEO_H #define _VLC_VIDEO_H 1 @@ -35,13 +35,14 @@ typedef struct plane_t uint8_t *p_pixels; /**< Start of the plane's data */ /* Variables used for fast memcpy operations */ - int i_lines; /**< Number of lines */ + int i_lines; /**< Number of lines, including margins */ int i_pitch; /**< Number of bytes in a line, including margins */ /** Size of a macropixel, defaults to 1 */ int i_pixel_pitch; /* Variables used for pictures with margins */ + int i_visible_lines; /**< How many visible lines are there ? */ int i_visible_pitch; /**< How many visible pixels are there ? */ } plane_t; @@ -56,7 +57,7 @@ typedef struct plane_t */ struct picture_t { - /** + /** * The properties of the picture */ video_frame_format_t format; @@ -106,6 +107,12 @@ struct picture_t /** Private data - the video output plugin might want to put stuff here to * keep track of the picture */ picture_sys_t * p_sys; + + /** This way the picture_Release can be overloaded */ + void (*pf_release)( picture_t * ); + + /** Next picture in a FIFO a pictures */ + struct picture_t *p_next; }; /** @@ -132,9 +139,9 @@ struct picture_heap_t vlc_bool_t b_allow_modify_pics; /* Stuff used for truecolor RGB planes */ - int i_rmask, i_rrshift, i_lrshift; - int i_gmask, i_rgshift, i_lgshift; - int i_bmask, i_rbshift, i_lbshift; + uint32_t i_rmask; int i_rrshift, i_lrshift; + uint32_t i_gmask; int i_rgshift, i_lgshift; + uint32_t i_bmask; int i_rbshift, i_lbshift; /** Stuff used for palettized RGB planes */ void (* pf_setpalette) ( vout_thread_t *, uint16_t *, uint16_t *, uint16_t * ); @@ -195,17 +202,18 @@ struct picture_heap_t */ 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 */ + int i_align; /**< alignment within a region */ - subpicture_region_t *p_next; /**< next region in the list */ - /**@}*/ + char *psz_text; /**< text string comprising this region */ + text_style_t *p_style; /* a description of the text style formatting */ + subpicture_region_t *p_next; /**< next region in the list */ + subpicture_region_t *p_cache; /**< modified version of this region */ }; /** @@ -235,9 +243,9 @@ struct subpicture_t /**@{*/ 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 */ + vlc_bool_t b_ephemer; /**< If this flag is set to true the subtitle + will be displayed untill the next one appear */ + vlc_bool_t b_fade; /**< enable fading */ /**@}*/ subpicture_region_t *p_region; /**< region list composing this subtitle */ @@ -247,12 +255,15 @@ struct subpicture_t * 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 */ - int b_absolute; /**< position is absolute */ - int i_flags; /**< position flags */ + int i_x; /**< offset from alignment position */ + int i_y; /**< offset from alignment position */ + int i_width; /**< picture width */ + int i_height; /**< picture height */ + int i_alpha; /**< transparency */ + int i_original_picture_width; /**< original width of the movie */ + int i_original_picture_height;/**< original height of the movie */ + vlc_bool_t b_absolute; /**< position is absolute */ + int i_flags; /**< position flags */ /**@}*/ /** Pointer to function that renders this subtitle in a picture */ @@ -263,6 +274,8 @@ struct subpicture_t /** Pointer to functions for region management */ subpicture_region_t * ( *pf_create_region ) ( vlc_object_t *, video_format_t * ); + subpicture_region_t * ( *pf_make_region ) ( vlc_object_t *, + video_format_t *, picture_t * ); void ( *pf_destroy_region ) ( vlc_object_t *, subpicture_region_t * ); /** Private data - the subtitle plugin might want to put stuff here to @@ -282,18 +295,131 @@ struct subpicture_t #define RESERVED_SUBPICTURE 1 /* allocated and reserved */ #define READY_SUBPICTURE 2 /* ready for display */ +/* Subpicture position flags */ +#define SUBPICTURE_ALIGN_LEFT 0x1 +#define SUBPICTURE_ALIGN_RIGHT 0x2 +#define SUBPICTURE_ALIGN_TOP 0x4 +#define SUBPICTURE_ALIGN_BOTTOM 0x8 + /***************************************************************************** * Prototypes *****************************************************************************/ /** - * vout_AspectRatio + * vout_CopyPicture + * + * Copy the source picture onto the destination picture. + * \param p_this a vlc object + * \param p_dst pointer to the destination picture. + * \param p_src pointer to the source picture. + */ +#define vout_CopyPicture(a,b,c) __vout_CopyPicture(VLC_OBJECT(a),b,c) +VLC_EXPORT( void, __vout_CopyPicture, ( vlc_object_t *p_this, picture_t *p_dst, picture_t *p_src ) ); + +/** + * vout_InitPicture + * + * Initialise different fields of a picture_t (but does not allocate memory). + * \param p_this a vlc object + * \param p_pic pointer to the picture structure. + * \param i_chroma the wanted chroma for the picture. + * \param i_width the wanted width for the picture. + * \param i_height the wanted height for the picture. + * \param i_aspect the wanted aspect ratio for the picture. + */ +#define vout_InitPicture(a,b,c,d,e,f) \ + __vout_InitPicture(VLC_OBJECT(a),b,c,d,e,f) +VLC_EXPORT( int, __vout_InitPicture, ( vlc_object_t *p_this, picture_t *p_pic, uint32_t i_chroma, int i_width, int i_height, int i_aspect ) ); + +/** + * vout_AllocatePicture + * + * Initialise different fields of a picture_t and allocates the picture buffer. + * \param p_this a vlc object + * \param p_pic pointer to the picture structure. + * \param i_chroma the wanted chroma for the picture. + * \param i_width the wanted width for the picture. + * \param i_height the wanted height for the picture. + * \param i_aspect the wanted aspect ratio for the picture. + */ +#define vout_AllocatePicture(a,b,c,d,e,f) \ + __vout_AllocatePicture(VLC_OBJECT(a),b,c,d,e,f) +VLC_EXPORT( int, __vout_AllocatePicture,( vlc_object_t *p_this, picture_t *p_pic, uint32_t i_chroma, int i_width, int i_height, int i_aspect ) ); + +/** + * vout_ShowTextRelative + * + * Show text on the video for some time + * \param p_vout pointer to the vout the text is to be showed on + * \param i_channel Subpicture channel + * \param psz_string The text to be shown + * \param p_style Pointer to a struct with text style info + * \param i_flags flags for alignment and such + * \param i_hmargin horizontal margin in pixels + * \param i_vmargin vertical margin in pixels + * \param i_duration Amount of time the text is to be shown. + */ +VLC_EXPORT( int, vout_ShowTextRelative, ( vout_thread_t *, int, char *, text_style_t *, int, int, int, mtime_t ) ); + +/** + * vout_ShowTextAbsolute + * + * Show text on the video from a given start date to a given end date + * \param p_vout pointer to the vout the text is to be showed on + * \param i_channel Subpicture channel + * \param psz_string The text to be shown + * \param p_style Pointer to a struct with text style info + * \param i_flags flags for alignment and such + * \param i_hmargin horizontal margin in pixels + * \param i_vmargin vertical margin in pixels + * \param i_start the time when this string is to appear on the video + * \param i_stop the time when this string should stop to be displayed + * if this is 0 the string will be shown untill the next string + * is about to be shown + */ +VLC_EXPORT( int, vout_ShowTextAbsolute, ( vout_thread_t *, int, char *, text_style_t *, int, int, int, mtime_t, mtime_t ) ); + +/** + * vout_OSDMessage + * + * Write an informative message at the default location, + * for the default duration and only if the OSD option is enabled. + * \param p_caller The object that called the function. + * \param i_channel Subpicture channel + * \param psz_format printf style formatting + **/ +VLC_EXPORT( void, __vout_OSDMessage, ( vlc_object_t *, int, char *, ... ) ); + +/** + * Same as __vlc_OSDMessage() but with automatic casting + */ +#if defined(HAVE_VARIADIC_MACROS) +# define vout_OSDMessage( obj, chan, fmt, args...) __vout_OSDMessage( VLC_OBJECT(obj), chan, fmt, ## args ) +#else +# define vout_OSDMessage __vout_OSDMessage +#endif + +/** + * vout_OSDSlider + * + * Display a slider on the video output. + * \param p_this The object that called the function. + * \param i_channel Subpicture channel + * \param i_postion Current position in the slider + * \param i_type Types are: OSD_HOR_SLIDER and OSD_VERT_SLIDER. + * @see vlc_osd.h + */ +VLC_EXPORT( void, vout_OSDSlider, ( vlc_object_t *, int, int , short ) ); + +/** + * vout_OSDIcon * - * 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. + * Display an Icon on the video output. + * \param p_this The object that called the function. + * \param i_channel Subpicture channel + * \param i_type Types are: OSD_PLAY_ICON, OSD_PAUSE_ICON, OSD_SPEAKER_ICON, OSD_MUTE_ICON + * @see vlc_osd.h */ -VLC_EXPORT( void, vout_AspectRatio, ( unsigned int i_aspect, unsigned int *i_aspect_x, unsigned int *i_aspect_y ) ); +VLC_EXPORT( void, vout_OSDIcon, ( vlc_object_t *, int, short ) ); /**@}*/