[vlc-devel] [PATCH 12/14] filter_chain: add a specific function to clear (empty) a filter chain
Rémi Denis-Courmont
remi at remlab.net
Tue Sep 17 17:33:40 CEST 2019
Le tiistaina 17. syyskuuta 2019, 17.22.40 EEST Steve Lhomme a écrit :
> filter_chain_Reset is reserved for restating new input/output formats and
> does not allow empty format anymore.
>
> filter_chain_Clear doesn't change the input/output formats, only remove all
> the filters.
> ---
> include/vlc_filter.h | 11 +++++++++--
> modules/video_chroma/chain.c | 4 ++--
> src/libvlccore.sym | 1 +
> src/misc/filter_chain.c | 27 +++++++++++++--------------
> src/video_output/vout_subpictures.c | 6 +++---
> 5 files changed, 28 insertions(+), 21 deletions(-)
>
> diff --git a/include/vlc_filter.h b/include/vlc_filter.h
> index 6363ccf3048..f2618cc1e1a 100644
> --- a/include/vlc_filter.h
> +++ b/include/vlc_filter.h
> @@ -350,11 +350,18 @@ VLC_API void filter_chain_Delete( filter_chain_t * );
> * reset p_fmt_in and p_fmt_out to the new values.
> *
> * \param p_chain pointer to filter chain
> - * \param p_fmt_in new fmt_in params, may be NULL to leave input fmt
> unchanged - * \param p_fmt_out new fmt_out params, may be NULL to leave
> output fmt unchanged + * \param p_fmt_in new fmt_in params
> + * \param p_fmt_out new fmt_out params
> */
> VLC_API void filter_chain_Reset( filter_chain_t *, const es_format_t *,
> const es_format_t * );
>
> +/**
> + * Remove all existing filters
> + *
> + * \param p_chain pointer to filter chain
> + */
> +VLC_API void filter_chain_Clear(filter_chain_t *);
> +
> /**
> * Append a filter to the chain.
> *
> diff --git a/modules/video_chroma/chain.c b/modules/video_chroma/chain.c
> index 52b12d447d3..899081a4fce 100644
> --- a/modules/video_chroma/chain.c
> +++ b/modules/video_chroma/chain.c
> @@ -457,7 +457,7 @@ static int CreateChain( filter_t *p_parent, const
> es_format_t *p_fmt_mid ) return VLC_SUCCESS;
> error:
> //Clean up.
> - filter_chain_Reset( p_sys->p_chain, NULL, NULL );
> + filter_chain_Clear( p_sys->p_chain );
> return VLC_EGENERIC;
> }
>
> @@ -491,7 +491,7 @@ static int CreateResizeChromaChain( filter_t *p_parent,
> const es_format_t *p_fmt NULL, &p_parent->fmt_out );
>
> if( i_ret != VLC_SUCCESS )
> - filter_chain_Reset( p_sys->p_chain, NULL, NULL );
> + filter_chain_Clear( p_sys->p_chain );
> return i_ret;
> }
>
> diff --git a/src/libvlccore.sym b/src/libvlccore.sym
> index f278fe6e9de..e5241c411d0 100644
> --- a/src/libvlccore.sym
> +++ b/src/libvlccore.sym
> @@ -112,6 +112,7 @@ filter_chain_IsEmpty
> filter_chain_MouseFilter
> filter_chain_NewVideo
> filter_chain_Reset
> +filter_chain_Clear
> filter_chain_SubFilter
> filter_chain_VideoFilter
> filter_chain_VideoFlush
> diff --git a/src/misc/filter_chain.c b/src/misc/filter_chain.c
> index d0b08fc69eb..1b61178e24a 100644
> --- a/src/misc/filter_chain.c
> +++ b/src/misc/filter_chain.c
> @@ -149,13 +149,18 @@ filter_chain_t *filter_chain_NewVideo( vlc_object_t
> *obj, bool allow_change, return chain;
> }
>
> +void filter_chain_Clear( filter_chain_t *p_chain )
> +{
> + while( p_chain->first != NULL )
> + filter_chain_DeleteFilter( p_chain, &p_chain->first->filter );
> +}
> +
> /**
> * Filter chain destruction
> */
> void filter_chain_Delete( filter_chain_t *p_chain )
> {
> - while( p_chain->first != NULL )
> - filter_chain_DeleteFilter( p_chain, &p_chain->first->filter );
> + filter_chain_Clear( p_chain );
>
> es_format_Clean( &p_chain->fmt_in );
> es_format_Clean( &p_chain->fmt_out );
> @@ -168,19 +173,13 @@ void filter_chain_Delete( filter_chain_t *p_chain )
> void filter_chain_Reset( filter_chain_t *p_chain, const es_format_t
> *p_fmt_in, const es_format_t *p_fmt_out )
> {
> - while( p_chain->first != NULL )
> - filter_chain_DeleteFilter( p_chain, &p_chain->first->filter );
> + filter_chain_Clear( p_chain );
>
> - if( p_fmt_in )
> - {
> - es_format_Clean( &p_chain->fmt_in );
> - es_format_Copy( &p_chain->fmt_in, p_fmt_in );
> - }
> - if( p_fmt_out )
> - {
> - es_format_Clean( &p_chain->fmt_out );
> - es_format_Copy( &p_chain->fmt_out, p_fmt_out );
> - }
> + es_format_Clean( &p_chain->fmt_in );
> + es_format_Copy( &p_chain->fmt_in, p_fmt_in );
> +
> + es_format_Clean( &p_chain->fmt_out );
> + es_format_Copy( &p_chain->fmt_out, p_fmt_out );
Missing non-NULL assertions IMO.
> }
>
> static filter_t *filter_chain_AppendInner( filter_chain_t *chain,
> diff --git a/src/video_output/vout_subpictures.c
> b/src/video_output/vout_subpictures.c index d7e7c6fdd87..3e98e9f9766 100644
> --- a/src/video_output/vout_subpictures.c
> +++ b/src/video_output/vout_subpictures.c
> @@ -1806,7 +1806,7 @@ void spu_PutSubpicture(spu_t *spu, subpicture_t
> *subpic) filter_chain_ForEach(sys->filter_chain,
> SubFilterDelProxyCallbacks,
> sys->vout);
> - filter_chain_Reset(sys->filter_chain, NULL, NULL);
> + filter_chain_Clear(sys->filter_chain);
>
> filter_chain_AppendFromString(spu->p->filter_chain,
> chain_update); if (sys->vout)
> @@ -1815,7 +1815,7 @@ void spu_PutSubpicture(spu_t *spu, subpicture_t
> *subpic) sys->vout);
> }
> else
> - filter_chain_Reset(sys->filter_chain, NULL, NULL);
> + filter_chain_Clear(sys->filter_chain);
>
> /* "sub-source" was formerly "sub-filter", so now the "sub-filter"
> configuration may contain sub-filters or sub-sources configurations. @@
> -1913,7 +1913,7 @@ subpicture_t *spu_Render(spu_t *spu,
> filter_chain_ForEach(sys->source_chain,
> SubSourceDelProxyCallbacks,
> sys->vout);
> - filter_chain_Reset(sys->source_chain, NULL, NULL);
> + filter_chain_Clear(sys->source_chain);
>
> filter_chain_AppendFromString(spu->p->source_chain, chain_update);
> if (sys->vout)
--
Rémi Denis-Courmont
http://www.remlab.net/
More information about the vlc-devel
mailing list