Skip to content
Snippets Groups Projects
Commit 6c6beec6 authored by Laurent Aimar's avatar Laurent Aimar
Browse files

Added a way to flush video filters and video filter chains.

 It is not yet used, but it will be needed for filter that need to delay
frames.
parent 3683cc99
No related branches found
No related tags found
No related merge requests found
......@@ -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
......@@ -163,6 +165,15 @@ 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
......@@ -368,6 +379,11 @@ VLC_EXPORT( const es_format_t *, filter_chain_GetFmtOut, ( filter_chain_t * ) );
*/
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.
*
......
......@@ -136,6 +136,7 @@ filter_chain_New
filter_chain_Reset
filter_chain_SubFilter
filter_chain_VideoFilter
filter_chain_VideoFlush
filter_ConfigureBlend
filter_DeleteBlend
filter_NewBlend
......
......@@ -233,6 +233,17 @@ picture_t *filter_chain_VideoFilter( filter_chain_t *p_chain, picture_t *p_pic )
return p_pic;
}
void filter_chain_VideoFlush( filter_chain_t *p_chain )
{
for( chained_filter_t *f = p_chain->first; f != NULL; f = f->next )
{
filter_t *p_filter = &f->filter;
filter_FlushPictures( p_filter );
}
}
block_t *filter_chain_AudioFilter( filter_chain_t *p_chain, block_t *p_block )
{
for( chained_filter_t *f = p_chain->first; f != NULL; f = f->next )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment