struct
{
picture_t * (*pf_filter) ( filter_t *, picture_t * );
+ void (*pf_flush)( filter_t * );
picture_t * (*pf_buffer_new) ( filter_t * );
void (*pf_buffer_del) ( filter_t *, picture_t * );
/* Filter mouse state.
const vlc_mouse_t *p_new );
} video;
#define pf_video_filter u.video.pf_filter
+#define pf_video_flush u.video.pf_flush
#define pf_video_mouse u.video.pf_mouse
#define pf_video_buffer_new u.video.pf_buffer_new
#define pf_video_buffer_del u.video.pf_buffer_del
struct
{
- subpicture_t * (*pf_filter) ( filter_t *, mtime_t );
- subpicture_t * (*pf_buffer_new) ( filter_t * );
- void (*pf_buffer_del) ( filter_t *, subpicture_t * );
+ subpicture_t * (*pf_filter) ( filter_t *, mtime_t );
+ subpicture_t * (*pf_buffer_new)( filter_t * );
+ void (*pf_buffer_del)( filter_t *, subpicture_t * );
+ int (*pf_mouse) ( filter_t *,
+ const vlc_mouse_t *p_old,
+ const vlc_mouse_t *p_new,
+ const video_format_t * );
} sub;
#define pf_sub_filter u.sub.pf_filter
#define pf_sub_buffer_new u.sub.pf_buffer_new
#define pf_sub_buffer_del u.sub.pf_buffer_del
+#define pf_sub_mouse u.sub.pf_mouse
struct
{
#define pf_render_html u.render.pf_html
} u;
+
+ /* Input attachments
+ * XXX use filter_GetInputAttachments */
+ int (*pf_get_attachments)( filter_t *, input_attachment_t ***, int * );
+
/* Private structure for the owner of the decoder */
filter_owner_sys_t *p_owner;
};
p_filter->pf_video_buffer_del( p_filter, p_picture );
}
+/**
+ * This function will flush the state of a video filter.
+ */
+static inline void filter_FlushPictures( filter_t *p_filter )
+{
+ if( p_filter->pf_video_flush )
+ p_filter->pf_video_flush( p_filter );
+}
+
/**
* This function will return a new subpicture usable by p_filter as an output
* buffer. You have to release it using filter_DeleteSubpicture or by returning
return p_block;
}
+/**
+ * This function gives all input attachments at once.
+ *
+ * You MUST release the returned values
+ */
+static inline int filter_GetInputAttachments( filter_t *p_filter,
+ input_attachment_t ***ppp_attachment,
+ int *pi_attachment )
+{
+ if( !p_filter->pf_get_attachments )
+ return VLC_EGENERIC;
+ return p_filter->pf_get_attachments( p_filter,
+ ppp_attachment, pi_attachment );
+}
+
/**
* It creates a blend filter.
*
* Only the chroma properties of the dest format is used (chroma
* type, rgb masks and shifts)
*/
-VLC_EXPORT( filter_t *, filter_NewBlend, ( vlc_object_t *, const video_format_t *p_dst_chroma ) );
+VLC_EXPORT( filter_t *, filter_NewBlend, ( vlc_object_t *, const video_format_t *p_dst_chroma ) LIBVLC_USED );
/**
* It configures blend filter parameters that are allowed to changed
* \param p_buffer_allocation_data pointer to private allocation data
* \return pointer to a filter chain
*/
-VLC_EXPORT( filter_chain_t *, filter_chain_New, ( vlc_object_t *, const char *, bool, int (*)( filter_t *, void * ), void (*)( filter_t * ), void * ) );
+VLC_EXPORT( filter_chain_t *, filter_chain_New, ( vlc_object_t *, const char *, bool, int (*)( filter_t *, void * ), void (*)( filter_t * ), void * ) LIBVLC_USED );
#define filter_chain_New( a, b, c, d, e, f ) filter_chain_New( VLC_OBJECT( a ), b, c, d, e, f )
/**
*/
VLC_EXPORT( picture_t *, filter_chain_VideoFilter, ( filter_chain_t *, picture_t * ) );
+/**
+ * Flush a video filter chain.
+ */
+VLC_EXPORT( void, filter_chain_VideoFlush, ( filter_chain_t * ) );
+
/**
* Apply the filter chain to a audio block.
*
*/
VLC_EXPORT( int, filter_chain_MouseFilter, ( filter_chain_t *, vlc_mouse_t *, const vlc_mouse_t * ) );
+/**
+ * Inform the filter chain of mouse state.
+ *
+ * It makes sense only for a sub filter chain.
+ */
+VLC_EXPORT( int, filter_chain_MouseEvent, ( filter_chain_t *, const vlc_mouse_t *, const video_format_t * ) );
+
#endif /* _VLC_FILTER_H */