X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_filter.h;h=c2ec30f8174d357323b378fe8f7a88231dd626aa;hb=cefb8d380f509e68e4226ce71e3ad3592b7496a1;hp=c4d520024a070efeb6e51083672fa8e23baea477;hpb=ec87e89b5950679bb48b714ebffd2ae7040b999b;p=vlc diff --git a/include/vlc_filter.h b/include/vlc_filter.h index c4d520024a..c2ec30f817 100644 --- a/include/vlc_filter.h +++ b/include/vlc_filter.h @@ -65,6 +65,7 @@ struct filter_t 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. @@ -80,6 +81,7 @@ struct filter_t 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 @@ -101,7 +103,7 @@ struct filter_t struct { - subpicture_t * (*pf_filter) ( filter_t *, mtime_t ); + subpicture_t * (*pf_source) ( filter_t *, mtime_t ); subpicture_t * (*pf_buffer_new)( filter_t * ); void (*pf_buffer_del)( filter_t *, subpicture_t * ); int (*pf_mouse) ( filter_t *, @@ -109,17 +111,25 @@ struct filter_t const vlc_mouse_t *p_new, const video_format_t * ); } sub; -#define pf_sub_filter u.sub.pf_filter +#define pf_sub_source u.sub.pf_source #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 + { + subpicture_t * (*pf_filter) ( filter_t *, subpicture_t * ); + } subf; +#define pf_sub_filter u.subf.pf_filter + struct { int (*pf_text) ( filter_t *, subpicture_region_t *, - subpicture_region_t * ); + subpicture_region_t *, + const vlc_fourcc_t * ); int (*pf_html) ( filter_t *, subpicture_region_t *, - subpicture_region_t * ); + subpicture_region_t *, + const vlc_fourcc_t * ); } render; #define pf_render_text u.render.pf_text #define pf_render_html u.render.pf_html @@ -163,10 +173,19 @@ static inline void filter_DeletePicture( filter_t *p_filter, picture_t *p_pictur 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 - * it to the caller as a pf_sub_filter return value. + * it to the caller as a pf_sub_source return value. * Provided for convenience. * * \param p_filter filter_t object @@ -231,25 +250,25 @@ static inline int filter_GetInputAttachments( filter_t *p_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 ) LIBVLC_USED ); +VLC_API filter_t * filter_NewBlend( vlc_object_t *, const video_format_t *p_dst_chroma ) VLC_USED; /** * It configures blend filter parameters that are allowed to changed * after the creation. */ -VLC_EXPORT( int, filter_ConfigureBlend, ( filter_t *, int i_dst_width, int i_dst_height, const video_format_t *p_src ) ); +VLC_API int filter_ConfigureBlend( filter_t *, int i_dst_width, int i_dst_height, const video_format_t *p_src ); /** * It blends a picture into another one. * * The input picture is not modified and not released. */ -VLC_EXPORT( int, filter_Blend, ( filter_t *, picture_t *p_dst, int i_dst_x, int i_dst_y, const picture_t *p_src, int i_alpha ) ); +VLC_API int filter_Blend( filter_t *, picture_t *p_dst, int i_dst_x, int i_dst_y, const picture_t *p_src, int i_alpha ); /** * It destroys a blend filter created by filter_NewBlend. */ -VLC_EXPORT( void, filter_DeleteBlend, ( filter_t * ) ); +VLC_API void filter_DeleteBlend( filter_t * ); /** * Create a picture_t *(*)( filter_t *, picture_t * ) compatible wrapper @@ -290,7 +309,7 @@ typedef struct filter_chain_t filter_chain_t; * \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 * ) LIBVLC_USED ); +VLC_API filter_chain_t * filter_chain_New( vlc_object_t *, const char *, bool, int (*)( filter_t *, void * ), void (*)( filter_t * ), void * ) VLC_USED; #define filter_chain_New( a, b, c, d, e, f ) filter_chain_New( VLC_OBJECT( a ), b, c, d, e, f ) /** @@ -299,7 +318,7 @@ VLC_EXPORT( filter_chain_t *, filter_chain_New, ( vlc_object_t *, const char *, * * \param p_chain pointer to filter chain */ -VLC_EXPORT( void, filter_chain_Delete, ( filter_chain_t * ) ); +VLC_API void filter_chain_Delete( filter_chain_t * ); /** * Reset filter chain will delete all filters in the chain and @@ -309,7 +328,7 @@ VLC_EXPORT( void, filter_chain_Delete, ( filter_chain_t * ) ); * \param p_fmt_in new fmt_in params * \param p_fmt_out new fmt_out params */ -VLC_EXPORT( void, filter_chain_Reset, ( filter_chain_t *, const es_format_t *, const es_format_t * ) ); +VLC_API void filter_chain_Reset( filter_chain_t *, const es_format_t *, const es_format_t * ); /** * Append filter to the end of the chain. @@ -321,7 +340,7 @@ VLC_EXPORT( void, filter_chain_Reset, ( filter_chain_t *, const es_format_t *, c * \param p_fmt_out output es_format_t * \return pointer to filter chain */ -VLC_EXPORT( filter_t *, filter_chain_AppendFilter, ( filter_chain_t *, const char *, config_chain_t *, const es_format_t *, const es_format_t * ) ); +VLC_API filter_t * filter_chain_AppendFilter( filter_chain_t *, const char *, config_chain_t *, const es_format_t *, const es_format_t * ); /** * Append new filter to filter chain from string. @@ -330,7 +349,7 @@ VLC_EXPORT( filter_t *, filter_chain_AppendFilter, ( filter_chain_t *, const cha * \param psz_string string of filters * \return 0 for success */ -VLC_EXPORT( int, filter_chain_AppendFromString, ( filter_chain_t *, const char * ) ); +VLC_API int filter_chain_AppendFromString( filter_chain_t *, const char * ); /** * Delete filter from filter chain. This function also releases the filter @@ -341,7 +360,7 @@ VLC_EXPORT( int, filter_chain_AppendFromString, ( filter_chain_t *, const char * * \param p_filter pointer to filter object * \return VLC_SUCCESS on succes, else VLC_EGENERIC */ -VLC_EXPORT( int, filter_chain_DeleteFilter, ( filter_chain_t *, filter_t * ) ); +VLC_API int filter_chain_DeleteFilter( filter_chain_t *, filter_t * ); /** * Get the number of filters in the filter chain. @@ -349,7 +368,7 @@ VLC_EXPORT( int, filter_chain_DeleteFilter, ( filter_chain_t *, filter_t * ) ); * \param p_chain pointer to filter chain * \return number of filters in this filter chain */ -VLC_EXPORT( int, filter_chain_GetLength, ( filter_chain_t * ) ); +VLC_API int filter_chain_GetLength( filter_chain_t * ); /** * Get last p_fmt_out in the chain. @@ -357,7 +376,7 @@ VLC_EXPORT( int, filter_chain_GetLength, ( filter_chain_t * ) ); * \param p_chain pointer to filter chain * \return last p_fmt (es_format_t) of this filter chain */ -VLC_EXPORT( const es_format_t *, filter_chain_GetFmtOut, ( filter_chain_t * ) ); +VLC_API const es_format_t * filter_chain_GetFmtOut( filter_chain_t * ); /** * Apply the filter chain to a video picture. @@ -366,7 +385,12 @@ VLC_EXPORT( const es_format_t *, filter_chain_GetFmtOut, ( filter_chain_t * ) ); * \param p_picture picture to apply filters on * \return modified picture after applying all video filters */ -VLC_EXPORT( picture_t *, filter_chain_VideoFilter, ( filter_chain_t *, picture_t * ) ); +VLC_API picture_t * filter_chain_VideoFilter( filter_chain_t *, picture_t * ); + +/** + * Flush a video filter chain. + */ +VLC_API void filter_chain_VideoFlush( filter_chain_t * ); /** * Apply the filter chain to a audio block. @@ -375,7 +399,7 @@ VLC_EXPORT( picture_t *, filter_chain_VideoFilter, ( filter_chain_t *, picture_t * \param p_block audio frame to apply filters on * \return modified audio frame after applying all audio filters */ -VLC_EXPORT( block_t *, filter_chain_AudioFilter, ( filter_chain_t *, block_t * ) ); +VLC_API block_t * filter_chain_AudioFilter( filter_chain_t *, block_t * ); /** * Apply filter chain to subpictures. @@ -383,7 +407,16 @@ VLC_EXPORT( block_t *, filter_chain_AudioFilter, ( filter_chain_t *, block_t * ) * \param p_chain pointer to filter chain * \param display_date of subpictures */ -VLC_EXPORT( void, filter_chain_SubFilter, ( filter_chain_t *, mtime_t ) ); +VLC_API void filter_chain_SubSource( filter_chain_t *, mtime_t ); + +/** + * Apply filter chain to subpictures. + * + * \param p_chain pointer to filter chain + * \param p_subpicture subpicture to apply filters on + * \return modified subpicture after applying all subpicture filters + */ +VLC_API subpicture_t * filter_chain_SubFilter( filter_chain_t *, subpicture_t * ); /** * Apply the filter chain to a mouse state. @@ -393,14 +426,14 @@ VLC_EXPORT( void, filter_chain_SubFilter, ( filter_chain_t *, mtime_t ) ); * * The vlc_mouse_t* pointers may be the same. */ -VLC_EXPORT( int, filter_chain_MouseFilter, ( filter_chain_t *, vlc_mouse_t *, const vlc_mouse_t * ) ); +VLC_API 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. + * It makes sense only for a sub source chain. */ -VLC_EXPORT( int, filter_chain_MouseEvent, ( filter_chain_t *, const vlc_mouse_t *, const video_format_t * ) ); +VLC_API int filter_chain_MouseEvent( filter_chain_t *, const vlc_mouse_t *, const video_format_t * ); #endif /* _VLC_FILTER_H */