]> git.sesse.net Git - vlc/blobdiff - include/vlc_osd.h
Render subpictures in the right order to improve overlap support.
[vlc] / include / vlc_osd.h
index a30d0c5e01f89ab4bcd7167bbc19ea57f210fb64..d1322f7b7731320b7a2131c689e5966441a54b59 100644 (file)
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
-#if !defined( __LIBVLC__ )
-  #error You are not libvlc or one of its plugins. You cannot include this file
-#endif
-
-#ifndef _VLC_OSD_H
-#define _VLC_OSD_H 1
+#ifndef VLC_OSD_H
+#define VLC_OSD_H 1
 
 #include "vlc_vout.h"
 
 extern "C" {
 # endif
 
+/**
+ * \file
+ * This file defines SPU subpicture and OSD functions and object types.
+ */
+
 /**********************************************************************
  * Base SPU structures
  **********************************************************************/
@@ -63,11 +64,13 @@ struct spu_t
     vlc_mutex_t  subpicture_lock;                  /**< subpicture heap lock */
     subpicture_t p_subpicture[VOUT_MAX_SUBPICTURES];        /**< subpictures */
     int i_channel;             /**< number of subpicture channels registered */
+    int64_t i_subpicture_order; /**< number of created subpicture since spu creation */
 
     filter_t *p_blend;                            /**< alpha blending module */
     filter_t *p_text;                              /**< text renderer module */
-    filter_t *p_scale;                                   /**< scaling module */
-    bool b_force_crop;               /**< force cropping of subpicture */
+    filter_t *p_scale_yuvp;                     /**< scaling module for YUVP */
+    filter_t *p_scale;                    /**< scaling module (all but YUVP) */
+    bool b_force_crop;                     /**< force cropping of subpicture */
     int i_crop_x, i_crop_y, i_crop_width, i_crop_height;       /**< cropping */
 
     int i_margin;                        /**< force position of a subpicture */
@@ -77,8 +80,7 @@ struct spu_t
     int ( *pf_control ) ( spu_t *, int, va_list );
 
     /* Supciture filters */
-    filter_t *pp_filter[10];
-    int      i_filter;
+    filter_chain_t *p_chain;
 };
 
 static inline int spu_vaControl( spu_t *p_spu, int i_query, va_list args )
@@ -118,12 +120,17 @@ VLC_EXPORT( void, spu_DisplaySubpicture, ( spu_t *, subpicture_t * ) );
 
 #define spu_CreateRegion(a,b) __spu_CreateRegion(VLC_OBJECT(a),b)
 VLC_EXPORT( subpicture_region_t *,__spu_CreateRegion, ( vlc_object_t *, video_format_t * ) );
-#define spu_MakeRegion(a,b,c) __spu_MakeRegion(VLC_OBJECT(a),b,c)
-VLC_EXPORT( subpicture_region_t *,__spu_MakeRegion, ( vlc_object_t *, video_format_t *, picture_t * ) );
 #define spu_DestroyRegion(a,b) __spu_DestroyRegion(VLC_OBJECT(a),b)
 VLC_EXPORT( void, __spu_DestroyRegion, ( vlc_object_t *, subpicture_region_t * ) );
-VLC_EXPORT( subpicture_t *, spu_SortSubpictures, ( spu_t *, mtime_t, bool ) );
-VLC_EXPORT( void, spu_RenderSubpictures, ( spu_t *,  video_format_t *, picture_t *, picture_t *, subpicture_t *, int, int ) );
+VLC_EXPORT( subpicture_t *, spu_SortSubpictures, ( spu_t *, mtime_t display_date, bool b_paused, bool b_subtitle_only ) );
+
+/**
+ * This function renders a list of subpicture_t on the provided picture.
+ *
+ * \param p_fmt_dst is the format of the destination picture.
+ * \param p_fmt_src is the format of the original(source) video.
+ */
+VLC_EXPORT( void, spu_RenderSubpictures, ( spu_t *,  picture_t *, const video_format_t *p_fmt_dst, subpicture_t *p_list, const video_format_t *p_fmt_src ) );
 
 /** @}*/
 
@@ -595,7 +602,7 @@ static inline void osd_SetMenuUpdate( osd_menu_t *p_osd, bool b_value )
  */
 VLC_EXPORT( int, osd_ShowTextRelative, ( spu_t *, int, char *, text_style_t *, int, int, int, mtime_t ) );
 VLC_EXPORT( int, osd_ShowTextAbsolute, ( spu_t *, int, char *, text_style_t *, int, int, int, mtime_t, mtime_t ) );
-VLC_EXPORT( void,osd_Message, ( spu_t *, int, char *, ... ) ATTRIBUTE_FORMAT( 3, 4 ) );
+VLC_EXPORT( void,osd_Message, ( spu_t *, int, char *, ... ) LIBVLC_FORMAT( 3, 4 ) );
 
 /**
  * Default feedback images
@@ -650,7 +657,7 @@ VLC_EXPORT( int, vout_ShowTextAbsolute, ( vout_thread_t *, int, const char *, te
  * \param i_channel Subpicture channel
  * \param psz_format printf style formatting
  **/
-VLC_EXPORT( void,  __vout_OSDMessage, ( vlc_object_t *, int, const char *, ... ) ATTRIBUTE_FORMAT( 3, 4 ) );
+VLC_EXPORT( void,  __vout_OSDMessage, ( vlc_object_t *, int, const char *, ... ) LIBVLC_FORMAT( 3, 4 ) );
 
 /**
  * Same as __vlc_OSDMessage() but with automatic casting