[vlc-devel] [PATCH 1/2] filter: declare the filter function called in video filter wrappers

Steve Lhomme robux4 at ycbcr.xyz
Mon Oct 12 16:04:42 CEST 2020


I would also like to add the proper set_subcategory() for each so there 
is no mismatch possible.

On 2020-10-12 15:58, Steve Lhomme wrote:
> By default it declares a static function. There are new variants for the rare
> cases where the function is not static.
> 
> For now the function to call cannot return an error to match the existing usage.
> 
> Also declare the close function to make sure there's more warnings when it's
> used with the wrong callback signature.
> ---
>   include/vlc_filter.h            | 23 +++++++++++++++++++++--
>   modules/video_chroma/i420_rgb.c | 18 +++++++++---------
>   2 files changed, 30 insertions(+), 11 deletions(-)
> 
> diff --git a/include/vlc_filter.h b/include/vlc_filter.h
> index 88df8ae5daa..1f130bcb7a1 100644
> --- a/include/vlc_filter.h
> +++ b/include/vlc_filter.h
> @@ -354,7 +354,7 @@ VLC_API void filter_DeleteBlend( vlc_blender_t * );
>    *
>    * Currently used by the chroma video filters
>    */
> -#define VIDEO_FILTER_WRAPPER_CLOSE( name, close_cb )                    \
> +#define VIDEO_FILTER_WRAPPER_CLOSE_FILT( name, close_cb )               \
>       static picture_t *name ## _Filter ( filter_t *p_filter,             \
>                                           picture_t *p_pic )              \
>       {                                                                   \
> @@ -371,7 +371,26 @@ VLC_API void filter_DeleteBlend( vlc_blender_t * );
>           .filter_video = name ## _Filter, .close = close_cb,             \
>       };
>   
> -#define VIDEO_FILTER_WRAPPER( name )   VIDEO_FILTER_WRAPPER_CLOSE( name, NULL )
> +#define VIDEO_FILTER_WRAPPER_CLOSE( name, close_cb )                    \
> +    static void name (filter_t *, picture_t *, picture_t *);            \
> +    static void close_cb (filter_t *);                                  \
> +    VIDEO_FILTER_WRAPPER_CLOSE_FILT( name, close_cb )
> +
> +#define VIDEO_FILTER_WRAPPER( name )                                    \
> +    static void name (filter_t *, picture_t *, picture_t *);            \
> +    VIDEO_FILTER_WRAPPER_CLOSE_FILT( name, NULL )
> +
> +/**
> + * Wrappers to use when the filter function is not a static function
> + */
> +#define VIDEO_FILTER_WRAPPER_EXT( name )                                \
> +    void name (filter_t *, picture_t *, picture_t *);                   \
> +    VIDEO_FILTER_WRAPPER_CLOSE_FILT( name, NULL )
> +
> +#define VIDEO_FILTER_WRAPPER_CLOSE_EXT( name, close_cb )                \
> +    void name (filter_t *, picture_t *, picture_t *);                   \
> +    static void close_cb (filter_t *);                                  \
> +    VIDEO_FILTER_WRAPPER_CLOSE_FILT( name, close_cb )
>   
>   /**
>    * Filter chain management API
> diff --git a/modules/video_chroma/i420_rgb.c b/modules/video_chroma/i420_rgb.c
> index 4ea5e2cec8c..dc79754f6ad 100644
> --- a/modules/video_chroma/i420_rgb.c
> +++ b/modules/video_chroma/i420_rgb.c
> @@ -78,16 +78,16 @@ vlc_module_begin ()
>   vlc_module_end ()
>   
>   #ifndef PLAIN
> -VIDEO_FILTER_WRAPPER_CLOSE( I420_R5G5B5, Deactivate )
> -VIDEO_FILTER_WRAPPER_CLOSE( I420_R5G6B5, Deactivate )
> -VIDEO_FILTER_WRAPPER_CLOSE( I420_A8R8G8B8, Deactivate )
> -VIDEO_FILTER_WRAPPER_CLOSE( I420_R8G8B8A8, Deactivate )
> -VIDEO_FILTER_WRAPPER_CLOSE( I420_B8G8R8A8, Deactivate )
> -VIDEO_FILTER_WRAPPER_CLOSE( I420_A8B8G8R8, Deactivate )
> +VIDEO_FILTER_WRAPPER_CLOSE_EXT( I420_R5G5B5, Deactivate )
> +VIDEO_FILTER_WRAPPER_CLOSE_EXT( I420_R5G6B5, Deactivate )
> +VIDEO_FILTER_WRAPPER_CLOSE_EXT( I420_A8R8G8B8, Deactivate )
> +VIDEO_FILTER_WRAPPER_CLOSE_EXT( I420_R8G8B8A8, Deactivate )
> +VIDEO_FILTER_WRAPPER_CLOSE_EXT( I420_B8G8R8A8, Deactivate )
> +VIDEO_FILTER_WRAPPER_CLOSE_EXT( I420_A8B8G8R8, Deactivate )
>   #else
> -VIDEO_FILTER_WRAPPER_CLOSE( I420_RGB8, Deactivate )
> -VIDEO_FILTER_WRAPPER_CLOSE( I420_RGB16, Deactivate )
> -VIDEO_FILTER_WRAPPER_CLOSE( I420_RGB32, Deactivate )
> +VIDEO_FILTER_WRAPPER_CLOSE_EXT( I420_RGB8, Deactivate )
> +VIDEO_FILTER_WRAPPER_CLOSE_EXT( I420_RGB16, Deactivate )
> +VIDEO_FILTER_WRAPPER_CLOSE_EXT( I420_RGB32, Deactivate )
>   #endif
>   
>   /*****************************************************************************
> -- 
> 2.26.2
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
> 


More information about the vlc-devel mailing list