X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fvideo_filter%2Fgrain.c;h=a180ae3631fd2013ff8a81fb88955e3e29755192;hb=108b63da194d86f0e7273c36a1fbb9fccf544a4a;hp=651df6a13c3bf8dfbc62092c749651b350635ce0;hpb=e142a23e5a3d4d2c8602e3e9ef8e3c68274170b1;p=vlc diff --git a/modules/video_filter/grain.c b/modules/video_filter/grain.c index 651df6a13c..a180ae3631 100644 --- a/modules/video_filter/grain.c +++ b/modules/video_filter/grain.c @@ -68,11 +68,11 @@ vlc_module_begin() set_category(CAT_VIDEO) set_subcategory(SUBCAT_VIDEO_VFILTER) add_float_with_range(CFG_PREFIX "variance", 2.0, VARIANCE_MIN, VARIANCE_MAX, - NULL, VARIANCE_TEXT, VARIANCE_LONGTEXT, false) + VARIANCE_TEXT, VARIANCE_LONGTEXT, false) add_integer_with_range(CFG_PREFIX "period-min", 1, PERIOD_MIN, PERIOD_MAX, - NULL, PERIOD_MIN_TEXT, PERIOD_MIN_LONGTEXT, false) + PERIOD_MIN_TEXT, PERIOD_MIN_LONGTEXT, false) add_integer_with_range(CFG_PREFIX "period-max", 3*PERIOD_MAX/4, PERIOD_MIN, PERIOD_MAX, - NULL, PERIOD_MAX_TEXT, PERIOD_MAX_LONGTEXT, false) + PERIOD_MAX_TEXT, PERIOD_MAX_LONGTEXT, false) set_callbacks(Open, Close) vlc_module_end() @@ -156,6 +156,7 @@ static void BlockBlendC(uint8_t *dst, size_t dst_pitch, #ifdef CAN_COMPILE_SSE2 #define _STRING(x) #x #define STRING(x) _STRING(x) +VLC_SSE static void BlockBlendSse2(uint8_t *dst, size_t dst_pitch, const uint8_t *src, size_t src_pitch, const int16_t *noise) @@ -186,7 +187,7 @@ static void BlockBlendSse2(uint8_t *dst, size_t dst_pitch, [src1]"r"(&src[(2*i+0) * src_pitch]), [src2]"r"(&src[(2*i+1) * src_pitch]), [noise]"r"(&noise[2*i * BANK_SIZE]) - : "memory"); + : "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "memory"); } #else # error "BLEND_SIZE unsupported" @@ -258,7 +259,7 @@ static picture_t *Filter(filter_t *filter, picture_t *src) } vlc_mutex_lock(&sys->cfg.lock); - const double variance = __MIN(__MAX(sys->cfg.variance, VARIANCE_MIN), VARIANCE_MAX); + const double variance = VLC_CLIP(sys->cfg.variance, VARIANCE_MIN, VARIANCE_MAX); vlc_mutex_unlock(&sys->cfg.lock); const int scale = 256 * sqrt(variance); @@ -352,7 +353,7 @@ static int Generate(int16_t *bank, int h_min, int h_max, int v_min, int v_max) vq = (int)( v * correction * 127 + 0.5); else vq = -(int)(-v * correction * 127 + 0.5); - bank[i * N + j] = __MIN(__MAX(vq, INT16_MIN), INT16_MAX); + bank[i * N + j] = VLC_CLIP(vq, INT16_MIN, INT16_MAX); } } //mtime_t mul_duration = mdate() - tmul_0; @@ -382,7 +383,7 @@ static int Open(vlc_object_t *object) const vlc_chroma_description_t *chroma = vlc_fourcc_GetChromaDescription(filter->fmt_in.video.i_chroma); - if (!chroma || chroma->plane_count < 3) { + if (!chroma || chroma->plane_count < 3 || chroma->pixel_size != 1) { msg_Err(filter, "Unsupported chroma (%4.4s)", (char*)&(filter->fmt_in.video.i_chroma)); return VLC_EGENERIC; @@ -397,8 +398,8 @@ static int Open(vlc_object_t *object) int cutoff_low = BANK_SIZE - var_InheritInteger(filter, CFG_PREFIX "period-max"); int cutoff_high= BANK_SIZE - var_InheritInteger(filter, CFG_PREFIX "period-min"); - cutoff_low = __MIN(__MAX(cutoff_low, 1), BANK_SIZE - 1); - cutoff_high = __MIN(__MAX(cutoff_high, 1), BANK_SIZE - 1); + cutoff_low = VLC_CLIP(cutoff_low, 1, BANK_SIZE - 1); + cutoff_high = VLC_CLIP(cutoff_high, 1, BANK_SIZE - 1); if (Generate(sys->bank, cutoff_low, cutoff_high, cutoff_low, cutoff_high)) { free(sys); return VLC_EGENERIC; @@ -427,6 +428,7 @@ static void Close(vlc_object_t *object) filter_t *filter = (filter_t *)object; filter_sys_t *sys = filter->p_sys; + var_DelCallback(filter, CFG_PREFIX "variance", Callback, NULL); vlc_mutex_destroy(&sys->cfg.lock); free(sys); }