X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_video.h;h=14c497dc4417dc679d676f9f0b07d6a8405d3905;hb=01aca2cc006e2c2ef00bc5ca723180e27ab15a76;hp=bbbe2594610e8eb8fe28807755ff123525b283b7;hpb=50b658157c6d80cc1a9a5e0e1eae28a94d42e420;p=vlc diff --git a/include/vlc_video.h b/include/vlc_video.h index bbbe259461..14c497dc44 100644 --- a/include/vlc_video.h +++ b/include/vlc_video.h @@ -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,11 +57,10 @@ typedef struct plane_t */ struct picture_t { - /** \name Picture format - * Describes the properties of the picture - * @{*/ + /** + * 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 @@ -75,6 +75,7 @@ struct picture_t * @{*/ 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 */ /**@}*/ @@ -106,6 +107,9 @@ 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 * ); }; /** @@ -166,6 +170,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 @@ -174,6 +179,8 @@ 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 @@ -183,6 +190,30 @@ struct picture_heap_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 +{ + /** \name Region properties */ + /**@{*/ + video_format_t fmt; /**< format of the picture */ + picture_t picture; /**< picture comprising this region */ + + char *psz_text; /**< text string 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 */ + subpicture_region_t *p_cache; /**< modified version of this region */ + /**@}*/ +}; + /** * Video subtitle * @@ -193,10 +224,9 @@ struct picture_heap_t */ struct subpicture_t { - /** \name Channel and content type */ + /** \name Channel ID */ /**@{*/ - int i_channel; /**< subpicture channel */ - int i_content; /**< content type */ + int i_channel; /**< subpicture channel ID */ /**@}*/ /** \name Type and flags @@ -214,24 +244,36 @@ struct subpicture_t 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 */ + /** \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 */ - /**@}*/ + 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_original_picture_width; /**< original width of the movie */ + int i_original_picture_height;/**< original height of the movie */ + 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 */ @@ -241,36 +283,63 @@ 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 */ -/* 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... */ +/* 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 * - * 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. + * 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. */ -VLC_EXPORT( void, vout_AspectRatio, ( unsigned int i_aspect, unsigned int *i_aspect_x, unsigned int *i_aspect_y ) ); +#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 ) ); /**@}*/