From c3fab7231177600db0b89929bcf5edaee1d96405 Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Sat, 16 May 2009 19:23:34 +0200 Subject: [PATCH] Split vlc_vout.h into vlc_picture.h and vlc_subpicture.h --- include/vlc_picture.h | 282 ++++++++++++++++++++++++++++ include/vlc_subpicture.h | 181 ++++++++++++++++++ include/vlc_vout.h | 391 +-------------------------------------- src/Makefile.am | 2 + 4 files changed, 467 insertions(+), 389 deletions(-) create mode 100644 include/vlc_picture.h create mode 100644 include/vlc_subpicture.h diff --git a/include/vlc_picture.h b/include/vlc_picture.h new file mode 100644 index 0000000000..0d4ce3deed --- /dev/null +++ b/include/vlc_picture.h @@ -0,0 +1,282 @@ +/***************************************************************************** + * vlc_picture.h: picture definitions + ***************************************************************************** + * Copyright (C) 1999 - 2009 the VideoLAN team + * $Id$ + * + * Authors: Vincent Seguin + * Samuel Hocevar + * Olivier Aubert + * + * This program is free software; you can redistribute it and/or modify + * 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 + * GNU General Public License for more details. + * + * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_PICTURE_H +#define VLC_PICTURE_H 1 + +/** + * \file + * This file defines picture structures and functions in vlc + */ + +#include + +/** Description of a planar graphic field */ +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, 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; + +/** + * 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 +{ + /** + * 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 */ + + /** \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 ? */ + bool b_slow; /**< is picture in slow memory ? */ + /**@}*/ + + /** \name Picture management properties + * These properties can be modified using the video output thread API, + * but should never be written directly */ + /**@{*/ + unsigned i_refcount; /**< link reference counter */ + mtime_t date; /**< display date */ + bool b_force; + /**@}*/ + + /** \name Picture dynamic properties + * Those properties can be changed by the decoder + * @{ + */ + bool b_progressive; /**< is it a progressive frame ? */ + unsigned int i_nb_fields; /**< # of displayed fields */ + bool b_top_field_first; /**< which field is first */ + uint8_t *p_q; /**< quantification table */ + int i_qstride; /**< quantification stride */ + int i_qtype; /**< quantification style */ + /**@}*/ + + /** 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 + * 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; +}; + +/** + * This function will create a new picture. + * The picture created will implement a default release management compatible + * with picture_Hold and picture_Release. This default management will release + * picture_sys_t *p_sys field if non NULL. + */ +VLC_EXPORT( picture_t *, picture_New, ( vlc_fourcc_t i_chroma, int i_width, int i_height, int i_aspect ) ); + +/** + * This function will force the destruction a picture. + * The value of the picture reference count should be 0 before entering this + * function. + * Unless used for reimplementing pf_release, you should not use this + * function but picture_Release. + */ +VLC_EXPORT( void, picture_Delete, ( picture_t * ) ); + +/** + * This function will increase the picture reference count. + * It will not have any effect on picture obtained from vout + */ +static inline void picture_Hold( picture_t *p_picture ) +{ + if( p_picture->pf_release ) + p_picture->i_refcount++; +} +/** + * This function will release a picture. + * It will not have any effect on picture obtained from vout + */ +static inline void picture_Release( picture_t *p_picture ) +{ + /* FIXME why do we let pf_release handle the i_refcount ? */ + if( p_picture->pf_release ) + p_picture->pf_release( p_picture ); +} + +/** + * Cleanup quantization matrix data and set to 0 + */ +static inline void picture_CleanupQuant( picture_t *p_pic ) +{ + free( p_pic->p_q ); + p_pic->p_q = NULL; + p_pic->i_qstride = 0; + p_pic->i_qtype = 0; +} + +/** + * This function will copy all picture dynamic properties. + */ +static inline void picture_CopyProperties( picture_t *p_dst, const picture_t *p_src ) +{ + p_dst->date = p_src->date; + p_dst->b_force = p_src->b_force; + + p_dst->b_progressive = p_src->b_progressive; + p_dst->i_nb_fields = p_src->i_nb_fields; + p_dst->b_top_field_first = p_src->b_top_field_first; + + /* FIXME: copy ->p_q and ->p_qstride */ +} + +/** + * This function will copy the picture pixels. + * You can safely copy between pictures that do not have the same size, + * only the compatible(smaller) part will be copied. + */ +VLC_EXPORT( void, picture_CopyPixels, ( picture_t *p_dst, const picture_t *p_src ) ); +VLC_EXPORT( void, plane_CopyPixels, ( plane_t *p_dst, const plane_t *p_src ) ); + +/** + * This function will copy both picture dynamic properties and pixels. + * You have to notice that sometime a simple picture_Hold may do what + * you want without the copy overhead. + * Provided for convenience. + * + * \param p_dst pointer to the destination picture. + * \param p_src pointer to the source picture. + */ +static inline void picture_Copy( picture_t *p_dst, const picture_t *p_src ) +{ + picture_CopyPixels( p_dst, p_src ); + picture_CopyProperties( p_dst, p_src ); +} + +/** + * This function will export a picture to an encoded bitstream. + * + * pp_image will contain the encoded bitstream in psz_format format. + * + * p_fmt can be NULL otherwise it will be set with the format used for the + * picture before encoding. + * + * i_override_width/height allow to override the width and/or the height of the + * picture to be encoded. If at most one of them is > 0 then the picture aspect + * ratio will be kept. + */ +VLC_EXPORT( int, picture_Export, ( vlc_object_t *p_obj, block_t **pp_image, video_format_t *p_fmt, picture_t *p_picture, vlc_fourcc_t i_format, int i_override_width, int i_override_height ) ); + +/***************************************************************************** + * Flags used to describe the status of a picture + *****************************************************************************/ + +/* Picture type + * FIXME are the values meaningfull ? */ +enum +{ + EMPTY_PICTURE = 0, /* empty buffer */ + MEMORY_PICTURE = 100, /* heap-allocated buffer */ + DIRECT_PICTURE = 200, /* direct buffer */ +}; + +/* Picture status */ +enum +{ + FREE_PICTURE, /* free and not allocated */ + RESERVED_PICTURE, /* allocated and reserved */ + READY_PICTURE, /* ready for display */ + DISPLAYED_PICTURE, /* been displayed but is linked */ + DESTROYED_PICTURE, /* allocated but no more used */ +}; + +/* Quantification type */ +enum +{ + QTYPE_NONE, + + QTYPE_MPEG1, + QTYPE_MPEG2, + QTYPE_H264, +}; + +/***************************************************************************** + * Shortcuts to access image components + *****************************************************************************/ + +/* Plane indices */ +enum +{ + Y_PLANE = 0, + U_PLANE = 1, + V_PLANE = 2, + A_PLANE = 3, +}; + +/* Shortcuts */ +#define Y_PIXELS p[Y_PLANE].p_pixels +#define Y_PITCH p[Y_PLANE].i_pitch +#define U_PIXELS p[U_PLANE].p_pixels +#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 + +/**@}*/ + +#endif /* VLC_PICTURE_H */ diff --git a/include/vlc_subpicture.h b/include/vlc_subpicture.h new file mode 100644 index 0000000000..26f0cf6caf --- /dev/null +++ b/include/vlc_subpicture.h @@ -0,0 +1,181 @@ +/***************************************************************************** + * vlc_subpicture.h: subpicture definitions + ***************************************************************************** + * Copyright (C) 1999 - 2009 the VideoLAN team + * $Id$ + * + * Authors: Vincent Seguin + * Samuel Hocevar + * Olivier Aubert + * + * This program is free software; you can redistribute it and/or modify + * 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 + * GNU General Public License for more details. + * + * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef VLC_SUBPICTURE_H +#define VLC_SUBPICTURE_H 1 + +/** + * \file + * This file defines subpicture structures and functions in vlc + */ + +#include + +/** + * \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 spu core private + */ +typedef struct subpicture_region_private_t subpicture_region_private_t; + +/** + * 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 +{ + video_format_t fmt; /**< format of the picture */ + picture_t *p_picture; /**< picture comprising this region */ + + int i_x; /**< position of region */ + int i_y; /**< position of region */ + int i_align; /**< alignment within a region */ + int i_alpha; /**< transparency */ + + char *psz_text; /**< text string comprising this region */ + char *psz_html; /**< HTML version of subtitle (NULL = use psz_text) */ + text_style_t *p_style; /**< a description of the text style formatting */ + + subpicture_region_t *p_next; /**< next region in the list */ + subpicture_region_private_t *p_private; /**< Private data for spu_t *only* */ +}; + +/* Subpicture region position flags */ +#define SUBPICTURE_ALIGN_LEFT 0x1 +#define SUBPICTURE_ALIGN_RIGHT 0x2 +#define SUBPICTURE_ALIGN_TOP 0x4 +#define SUBPICTURE_ALIGN_BOTTOM 0x8 +#define SUBPICTURE_ALIGN_MASK ( SUBPICTURE_ALIGN_LEFT|SUBPICTURE_ALIGN_RIGHT| \ + SUBPICTURE_ALIGN_TOP |SUBPICTURE_ALIGN_BOTTOM ) + +/** + * This function will create a new subpicture region. + * + * You must use subpicture_region_Delete to destroy it. + */ +VLC_EXPORT( subpicture_region_t *, subpicture_region_New, ( const video_format_t *p_fmt ) ); + +/** + * This function will destroy a subpicture region allocated by + * subpicture_region_New. + * + * You may give it NULL. + */ +VLC_EXPORT( void, subpicture_region_Delete, ( subpicture_region_t *p_region ) ); + +/** + * This function will destroy a list of subpicture regions allocated by + * subpicture_region_New. + * + * Provided for convenience. + */ +VLC_EXPORT( void, subpicture_region_ChainDelete, ( subpicture_region_t *p_head ) ); + +/** + * 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 +{ + /** \name Channel ID */ + /**@{*/ + int i_channel; /**< subpicture channel ID */ + /**@}*/ + + /** \name Type and flags + Should NOT be modified except by the vout thread */ + /**@{*/ + int64_t i_order; /** an increasing unique number */ + 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 */ + bool b_ephemer; /**< If this flag is set to true the subtitle + will be displayed untill the next one appear */ + bool b_fade; /**< enable fading */ + /**@}*/ + + 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 + * subtitle type. */ + /**@{*/ + int i_original_picture_width; /**< original width of the movie */ + int i_original_picture_height;/**< original height of the movie */ + bool b_subtitle; /**< the picture is a movie subtitle */ + bool b_absolute; /**< position is absolute */ + int i_alpha; /**< transparency */ + /**@}*/ + + /** 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 */ + void (*pf_pre_render) ( spu_t *, subpicture_t *, const video_format_t * ); + void (*pf_update_regions)( spu_t *, + subpicture_t *, const video_format_t *, mtime_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 */ +}; + + +/** + * This function create a new empty subpicture. + * + * You must use subpicture_Delete to destroy it. + */ +VLC_EXPORT( subpicture_t *, subpicture_New, ( void ) ); + +/** + * This function delete a subpicture created by subpicture_New. + * You may give it NULL. + */ +VLC_EXPORT( void, subpicture_Delete, ( subpicture_t *p_subpic ) ); + +/**@}*/ + +#endif /* _VLC_VIDEO_H */ diff --git a/include/vlc_vout.h b/include/vlc_vout.h index 36b4b11de2..c7f9624ea0 100644 --- a/include/vlc_vout.h +++ b/include/vlc_vout.h @@ -31,197 +31,9 @@ * This file defines common video output structures and functions in vlc */ -#include +#include #include - -/** Description of a planar graphic field */ -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, 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; - -/** - * 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 -{ - /** - * 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 */ - - /** \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 ? */ - bool b_slow; /**< is picture in slow memory ? */ - /**@}*/ - - /** \name Picture management properties - * These properties can be modified using the video output thread API, - * but should never be written directly */ - /**@{*/ - unsigned i_refcount; /**< link reference counter */ - mtime_t date; /**< display date */ - bool b_force; - /**@}*/ - - /** \name Picture dynamic properties - * Those properties can be changed by the decoder - * @{ - */ - bool b_progressive; /**< is it a progressive frame ? */ - unsigned int i_nb_fields; /**< # of displayed fields */ - bool b_top_field_first; /**< which field is first */ - uint8_t *p_q; /**< quantification table */ - int i_qstride; /**< quantification stride */ - int i_qtype; /**< quantification style */ - /**@}*/ - - /** 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 - * 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; -}; - -/** - * This function will create a new picture. - * The picture created will implement a default release management compatible - * with picture_Hold and picture_Release. This default management will release - * picture_sys_t *p_sys field if non NULL. - */ -VLC_EXPORT( picture_t *, picture_New, ( vlc_fourcc_t i_chroma, int i_width, int i_height, int i_aspect ) ); - -/** - * This function will force the destruction a picture. - * The value of the picture reference count should be 0 before entering this - * function. - * Unless used for reimplementing pf_release, you should not use this - * function but picture_Release. - */ -VLC_EXPORT( void, picture_Delete, ( picture_t * ) ); - -/** - * This function will increase the picture reference count. - * It will not have any effect on picture obtained from vout - */ -static inline void picture_Hold( picture_t *p_picture ) -{ - if( p_picture->pf_release ) - p_picture->i_refcount++; -} -/** - * This function will release a picture. - * It will not have any effect on picture obtained from vout - */ -static inline void picture_Release( picture_t *p_picture ) -{ - /* FIXME why do we let pf_release handle the i_refcount ? */ - if( p_picture->pf_release ) - p_picture->pf_release( p_picture ); -} - -/** - * Cleanup quantization matrix data and set to 0 - */ -static inline void picture_CleanupQuant( picture_t *p_pic ) -{ - free( p_pic->p_q ); - p_pic->p_q = NULL; - p_pic->i_qstride = 0; - p_pic->i_qtype = 0; -} - -/** - * This function will copy all picture dynamic properties. - */ -static inline void picture_CopyProperties( picture_t *p_dst, const picture_t *p_src ) -{ - p_dst->date = p_src->date; - p_dst->b_force = p_src->b_force; - - p_dst->b_progressive = p_src->b_progressive; - p_dst->i_nb_fields = p_src->i_nb_fields; - p_dst->b_top_field_first = p_src->b_top_field_first; - - /* FIXME: copy ->p_q and ->p_qstride */ -} - -/** - * This function will copy the picture pixels. - * You can safely copy between pictures that do not have the same size, - * only the compatible(smaller) part will be copied. - */ -VLC_EXPORT( void, picture_CopyPixels, ( picture_t *p_dst, const picture_t *p_src ) ); -VLC_EXPORT( void, plane_CopyPixels, ( plane_t *p_dst, const plane_t *p_src ) ); - -/** - * This function will copy both picture dynamic properties and pixels. - * You have to notice that sometime a simple picture_Hold may do what - * you want without the copy overhead. - * Provided for convenience. - * - * \param p_dst pointer to the destination picture. - * \param p_src pointer to the source picture. - */ -static inline void picture_Copy( picture_t *p_dst, const picture_t *p_src ) -{ - picture_CopyPixels( p_dst, p_src ); - picture_CopyProperties( p_dst, p_src ); -} - -/** - * This function will export a picture to an encoded bitstream. - * - * pp_image will contain the encoded bitstream in psz_format format. - * - * p_fmt can be NULL otherwise it will be set with the format used for the - * picture before encoding. - * - * i_override_width/height allow to override the width and/or the height of the - * picture to be encoded. If at most one of them is > 0 then the picture aspect - * ratio will be kept. - */ -VLC_EXPORT( int, picture_Export, ( vlc_object_t *p_obj, block_t **pp_image, video_format_t *p_fmt, picture_t *p_picture, vlc_fourcc_t i_format, int i_override_width, int i_override_height ) ); - +#include /** * Video picture heap, either render (to store pictures used @@ -255,205 +67,6 @@ struct picture_heap_t void (* pf_setpalette) ( vout_thread_t *, uint16_t *, uint16_t *, uint16_t * ); }; -/***************************************************************************** - * Flags used to describe the status of a picture - *****************************************************************************/ - -/* Picture type - * FIXME are the values meaningfull ? */ -enum -{ - EMPTY_PICTURE = 0, /* empty buffer */ - MEMORY_PICTURE = 100, /* heap-allocated buffer */ - DIRECT_PICTURE = 200, /* direct buffer */ -}; - -/* Picture status */ -enum -{ - FREE_PICTURE, /* free and not allocated */ - RESERVED_PICTURE, /* allocated and reserved */ - READY_PICTURE, /* ready for display */ - DISPLAYED_PICTURE, /* been displayed but is linked */ - DESTROYED_PICTURE, /* allocated but no more used */ -}; - -/* Quantification type */ -enum -{ - QTYPE_NONE, - - QTYPE_MPEG1, - QTYPE_MPEG2, - QTYPE_H264, -}; - -/***************************************************************************** - * Shortcuts to access image components - *****************************************************************************/ - -/* Plane indices */ -enum -{ - Y_PLANE = 0, - U_PLANE = 1, - V_PLANE = 2, - A_PLANE = 3, -}; - -/* Shortcuts */ -#define Y_PIXELS p[Y_PLANE].p_pixels -#define Y_PITCH p[Y_PLANE].i_pitch -#define U_PIXELS p[U_PLANE].p_pixels -#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 spu core private - */ -typedef struct subpicture_region_private_t subpicture_region_private_t; - -/** - * 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 -{ - video_format_t fmt; /**< format of the picture */ - picture_t *p_picture; /**< picture comprising this region */ - - int i_x; /**< position of region */ - int i_y; /**< position of region */ - int i_align; /**< alignment within a region */ - int i_alpha; /**< transparency */ - - char *psz_text; /**< text string comprising this region */ - char *psz_html; /**< HTML version of subtitle (NULL = use psz_text) */ - text_style_t *p_style; /**< a description of the text style formatting */ - - subpicture_region_t *p_next; /**< next region in the list */ - subpicture_region_private_t *p_private; /**< Private data for spu_t *only* */ -}; - -/* Subpicture region position flags */ -#define SUBPICTURE_ALIGN_LEFT 0x1 -#define SUBPICTURE_ALIGN_RIGHT 0x2 -#define SUBPICTURE_ALIGN_TOP 0x4 -#define SUBPICTURE_ALIGN_BOTTOM 0x8 -#define SUBPICTURE_ALIGN_MASK ( SUBPICTURE_ALIGN_LEFT|SUBPICTURE_ALIGN_RIGHT| \ - SUBPICTURE_ALIGN_TOP |SUBPICTURE_ALIGN_BOTTOM ) - -/** - * This function will create a new subpicture region. - * - * You must use subpicture_region_Delete to destroy it. - */ -VLC_EXPORT( subpicture_region_t *, subpicture_region_New, ( const video_format_t *p_fmt ) ); - -/** - * This function will destroy a subpicture region allocated by - * subpicture_region_New. - * - * You may give it NULL. - */ -VLC_EXPORT( void, subpicture_region_Delete, ( subpicture_region_t *p_region ) ); - -/** - * This function will destroy a list of subpicture regions allocated by - * subpicture_region_New. - * - * Provided for convenience. - */ -VLC_EXPORT( void, subpicture_region_ChainDelete, ( subpicture_region_t *p_head ) ); - -/** - * 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 -{ - /** \name Channel ID */ - /**@{*/ - int i_channel; /**< subpicture channel ID */ - /**@}*/ - - /** \name Type and flags - Should NOT be modified except by the vout thread */ - /**@{*/ - int64_t i_order; /** an increasing unique number */ - 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 */ - bool b_ephemer; /**< If this flag is set to true the subtitle - will be displayed untill the next one appear */ - bool b_fade; /**< enable fading */ - /**@}*/ - - 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 - * subtitle type. */ - /**@{*/ - int i_original_picture_width; /**< original width of the movie */ - int i_original_picture_height;/**< original height of the movie */ - bool b_subtitle; /**< the picture is a movie subtitle */ - bool b_absolute; /**< position is absolute */ - int i_alpha; /**< transparency */ - /**@}*/ - - /** 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 */ - void (*pf_pre_render) ( spu_t *, subpicture_t *, const video_format_t * ); - void (*pf_update_regions)( spu_t *, - subpicture_t *, const video_format_t *, mtime_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 */ -}; - - -/** - * This function create a new empty subpicture. - * - * You must use subpicture_Delete to destroy it. - */ -VLC_EXPORT( subpicture_t *, subpicture_New, ( void ) ); - -/** - * This function delete a subpicture created by subpicture_New. - * You may give it NULL. - */ -VLC_EXPORT( void, subpicture_Delete, ( subpicture_t *p_subpic ) ); - /* Default subpicture channel ID */ #define DEFAULT_CHAN 1 diff --git a/src/Makefile.am b/src/Makefile.am index 0285f8e884..fe37e4744b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -71,6 +71,7 @@ pluginsinclude_HEADERS = \ ../include/vlc_modules.h \ ../include/vlc_mtime.h \ ../include/vlc_objects.h \ + ../include/vlc_picture.h \ ../include/vlc_playlist.h \ ../include/vlc_plugin.h \ ../include/vlc_rand.h \ @@ -78,6 +79,7 @@ pluginsinclude_HEADERS = \ ../include/vlc_sout.h \ ../include/vlc_stream.h \ ../include/vlc_strings.h \ + ../include/vlc_subpicture.h \ ../include/vlc_threads.h \ ../include/vlc_url.h \ ../include/vlc_variables.h \ -- 2.39.5