[vlc-devel] [PATCH v5 2/2] video-filtering_sharpening: remove precalc_table, replace locks with atomic accesses
Thomas Guillem
thomas at gllm.fr
Tue Apr 11 19:01:19 CEST 2017
On Tue, Apr 11, 2017, at 20:27, victorien.lecouviour.tuffet at gmail.com
wrote:
> From: Victorien Le Couviour--Tuffet
> <victorien.lecouviour.tuffet at gmail.com>
>
> precalc_table wasn't used
> ---
> modules/video_filter/sharpen.c | 35 ++++++++++-------------------------
> 1 file changed, 10 insertions(+), 25 deletions(-)
>
> diff --git a/modules/video_filter/sharpen.c
> b/modules/video_filter/sharpen.c
> index 6ca9020195..bb69ca2ffb 100644
> --- a/modules/video_filter/sharpen.c
> +++ b/modules/video_filter/sharpen.c
> @@ -38,6 +38,7 @@
> #endif
>
> #include <vlc_common.h>
> +#include <vlc_atomic.h>
> #include <vlc_plugin.h>
> #include <vlc_filter.h>
> #include <vlc_picture.h>
> @@ -69,8 +70,9 @@ vlc_module_begin ()
> set_category( CAT_VIDEO )
> set_subcategory( SUBCAT_VIDEO_VFILTER )
> set_capability( "video filter", 0 )
> - add_float_with_range( "sharpen-sigma", 0.05, 0.0, 2.0,
> + add_float_with_range( FILTER_PREFIX "sigma", 0.05, 0.0, 2.0,
> SIG_TEXT, SIG_LONGTEXT, false )
> + change_safe()
> add_shortcut( "sharpen" )
> set_callbacks( Create, Destroy )
> vlc_module_end ()
> @@ -88,18 +90,9 @@ static const char *const ppsz_filter_options[] = {
>
> struct filter_sys_t
> {
> - vlc_mutex_t lock;
> - int tab_precalc[512];
> + int sigma;
You should use an atomic_int
> };
>
> -static void init_precalc_table(filter_sys_t *p_filter, float sigma)
> -{
> - for(int i = 0; i < 512; ++i)
> - {
> - p_filter->tab_precalc[i] = (i - 256) * sigma;
> - }
> -}
> -
> /*****************************************************************************
> * Create: allocates Sharpen video thread output method
> *****************************************************************************
> @@ -129,10 +122,9 @@ static int Create( vlc_object_t *p_this )
> config_ChainParse( p_filter, FILTER_PREFIX, ppsz_filter_options,
> p_filter->p_cfg );
>
> - float sigma = var_CreateGetFloatCommand( p_filter, FILTER_PREFIX
> "sigma" );
> - init_precalc_table(p_filter->p_sys, sigma);
> + p_filter->p_sys->sigma =
> + var_CreateGetFloatCommand(p_filter, FILTER_PREFIX "sigma") * (1
> << 20);
You should use atomic_init()
>
> - vlc_mutex_init( &p_filter->p_sys->lock );
> var_AddCallback( p_filter, FILTER_PREFIX "sigma",
> SharpenCallback, p_filter->p_sys );
>
> @@ -151,7 +143,6 @@ static void Destroy( vlc_object_t *p_this )
> filter_sys_t *p_sys = p_filter->p_sys;
>
> var_DelCallback( p_filter, FILTER_PREFIX "sigma", SharpenCallback,
> p_sys );
> - vlc_mutex_destroy( &p_sys->lock );
> free( p_sys );
> }
>
> @@ -193,7 +184,7 @@ static void Destroy( vlc_object_t *p_this )
> (p_src[(i + 1) * i_src_line_len + j + 1] * v[0]);
> \
> \
> pix = pix >= 0 ? VLC_CLIP(pix, 0, maxval) :
> -VLC_CLIP(pix * -1, 0, maxval); \
> - p_out[i * i_out_line_len + j] = VLC_CLIP( p_src[i *
> i_src_line_len + j] + ((pix * sigma) >> 20), 0, maxval); \
> + p_out[i * i_out_line_len + j] = VLC_CLIP( p_src[i *
> i_src_line_len + j] + ((pix * atomic_load(&p_filter->p_sys->sigma)) >>
> 20), 0, maxval); \
> }
> \
> p_out[i * i_out_line_len + i_visible_pitch / 2 - 1] =
> \
> p_src[i * i_src_line_len + i_visible_pitch / 2 - 1];
> \
> @@ -209,7 +200,6 @@ static picture_t *Filter( filter_t *p_filter,
> picture_t *p_pic )
> const int v[2] = { -1, 3 /* 2^3 = 8 */ };
> const unsigned i_visible_lines = p_pic->p[Y_PLANE].i_visible_lines;
> const unsigned i_visible_pitch = p_pic->p[Y_PLANE].i_visible_pitch;
> - const int sigma = var_GetFloat( p_filter, FILTER_PREFIX "sigma" ) *
> (1 << 20);
>
> p_outpic = filter_NewPicture( p_filter );
> if( !p_outpic )
> @@ -218,9 +208,6 @@ static picture_t *Filter( filter_t *p_filter,
> picture_t *p_pic )
> return NULL;
> }
>
> - /* perform convolution only on Y plane. Avoid border line. */
> - vlc_mutex_lock( &p_filter->p_sys->lock );
> -
> if (!IS_YUV_420_10BITS(p_pic->format.i_chroma))
> {
> typedef uint8_t data_t;
> @@ -234,8 +221,6 @@ static picture_t *Filter( filter_t *p_filter,
> picture_t *p_pic )
> SHARPEN_FRAME(1023);
> }
>
> - vlc_mutex_unlock( &p_filter->p_sys->lock );
> -
> plane_CopyPixels( &p_outpic->p[U_PLANE], &p_pic->p[U_PLANE] );
> plane_CopyPixels( &p_outpic->p[V_PLANE], &p_pic->p[V_PLANE] );
>
> @@ -249,8 +234,8 @@ static int SharpenCallback( vlc_object_t *p_this,
> char const *psz_var,
> VLC_UNUSED(p_this); VLC_UNUSED(oldval); VLC_UNUSED(psz_var);
> filter_sys_t *p_sys = (filter_sys_t *)p_data;
>
> - vlc_mutex_lock( &p_sys->lock );
> - init_precalc_table( p_sys, VLC_CLIP( newval.f_float, 0.f, 2.f ) );
> - vlc_mutex_unlock( &p_sys->lock );
> + atomic_store(&p_sys->sigma,
> + VLC_CLIP(newval.f_float, 0.f, 2.f) * (1 << 20));
Maybe you should factor VLC_CLIP(x, 0.f, 2.f) * (1 << 20) between here
and the open function.
> +
> return VLC_SUCCESS;
> }
> --
> 2.12.0
>
> _______________________________________________
> 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