# HG changeset patch # User reimar # Date 1211627978 0 # Node ID ba086caf1230974aac20f54a2f09dcb57e3153b6 # Parent 315e911d5762af26a90a9eafc9bbad2e02be76f8 Add a filter strength parameter for blurring/sharpening scalers. diff -r 315e911d5762 -r ba086caf1230 libvo/gl_common.c --- a/libvo/gl_common.c Sat May 24 11:04:18 2008 +0000 +++ b/libvo/gl_common.c Sat May 24 11:19:38 2008 +0000 @@ -768,7 +768,7 @@ "TEX b.g, coord2.zwzw, texture[%c], %s;" "DP3 b, b, {0.25, 0.25, 0.25};" "SUB b.r, a.r, b.r;" - "MAD yuv.%c, b.r, %s, a.r;"; + "MAD yuv.%c, b.r, {%f}, a.r;"; static const char *unsharp_filt_template2 = "PARAM dcoord%c = {%f, %f, %f, %f};" @@ -792,7 +792,7 @@ "TEX b.g, coord2.zwzw, texture[%c], %s;" "DP4 b.r, b, {-0.1171875, -0.1171875, -0.1171875, -0.09765625};" "MAD b.r, a.r, {0.859375}, b.r;" - "MAD yuv.%c, b.r, %s, a.r;"; + "MAD yuv.%c, b.r, {%f}, a.r;"; static const char *yuv_prog_template = "PARAM ycoef = {%.4f, %.4f, %.4f};" @@ -1030,7 +1030,8 @@ * \param texh height of the in_tex texture */ static void add_scaler(int scaler, char **prog_pos, int *remain, char *texs, - char in_tex, char out_comp, int rect, int texw, int texh) { + char in_tex, char out_comp, int rect, int texw, int texh, + double strength) { const char *ttype = rect ? "RECT" : "2D"; const float ptw = rect ? 1.0 : 1.0 / texw; const float pth = rect ? 1.0 : 1.0 / texh; @@ -1076,7 +1077,7 @@ out_comp, 0.5 * ptw, 0.5 * pth, 0.5 * ptw, -0.5 * pth, in_tex, out_comp, in_tex, out_comp, in_tex, in_tex, ttype, in_tex, ttype, in_tex, ttype, in_tex, ttype, - in_tex, ttype, out_comp, "{0.5}"); + in_tex, ttype, out_comp, strength); break; case YUV_SCALER_UNSHARP2: snprintf(*prog_pos, *remain, unsharp_filt_template2, @@ -1086,7 +1087,7 @@ in_tex, ttype, in_tex, ttype, in_tex, ttype, in_tex, ttype, in_tex, ttype, in_tex, out_comp, in_tex, out_comp, in_tex, ttype, in_tex, ttype, in_tex, ttype, - in_tex, ttype, out_comp, "{0.5}"); + in_tex, ttype, out_comp, strength); break; } *remain -= strlen(*prog_pos); @@ -1203,11 +1204,11 @@ prog_pos = yuv_prog + sizeof(prog_hdr) - 1; prog_remain = MAX_PROGSZ - sizeof(prog_hdr); add_scaler(YUV_LUM_SCALER(type), &prog_pos, &prog_remain, lum_scale_texs, - '0', 'r', rect, texw, texh); + '0', 'r', rect, texw, texh, params->filter_strength); add_scaler(YUV_CHROM_SCALER(type), &prog_pos, &prog_remain, chrom_scale_texs, - '1', 'g', rect, texw / 2, texh / 2); + '1', 'g', rect, texw / 2, texh / 2, params->filter_strength); add_scaler(YUV_CHROM_SCALER(type), &prog_pos, &prog_remain, chrom_scale_texs, - '2', 'b', rect, texw / 2, texh / 2); + '2', 'b', rect, texw / 2, texh / 2, params->filter_strength); get_yuv2rgb_coeffs(params, &ry, &ru, &rv, &rc, &gy, &gu, &gv, &gc, &by, &bu, &bv, &bc); switch (YUV_CONVERSION(type)) { diff -r 315e911d5762 -r ba086caf1230 libvo/gl_common.h --- a/libvo/gl_common.h Sat May 24 11:04:18 2008 +0000 +++ b/libvo/gl_common.h Sat May 24 11:19:38 2008 +0000 @@ -275,6 +275,7 @@ float bgamma; int texw; int texh; + float filter_strength; } gl_conversion_params_t; void glSetupYUVConversion(gl_conversion_params_t *params); diff -r 315e911d5762 -r ba086caf1230 libvo/vo_gl.c --- a/libvo/vo_gl.c Sat May 24 11:04:18 2008 +0000 +++ b/libvo/vo_gl.c Sat May 24 11:19:38 2008 +0000 @@ -74,6 +74,7 @@ static int use_yuv; static int lscale; static int cscale; +static float filter_strength; static int yuvconvtype; static int use_rectangle; static int err_shown; @@ -181,7 +182,7 @@ float bgamma = exp(log(8.0) * eq_bgamma / 100.0); gl_conversion_params_t params = {gl_target, yuvconvtype, bri, cont, hue, sat, rgamma, ggamma, bgamma, - texture_width, texture_height}; + texture_width, texture_height, filter_strength}; glSetupYUVConversion(¶ms); if (custom_prog) { FILE *f = fopen(custom_prog, "r"); @@ -809,6 +810,7 @@ {"yuv", OPT_ARG_INT, &use_yuv, (opt_test_f)int_non_neg}, {"lscale", OPT_ARG_INT, &lscale, (opt_test_f)int_non_neg}, {"cscale", OPT_ARG_INT, &cscale, (opt_test_f)int_non_neg}, + {"filter-strength", OPT_ARG_FLOAT, &filter_strength, NULL}, {"ati-hack", OPT_ARG_BOOL, &ati_hack, NULL}, {"force-pbo", OPT_ARG_BOOL, &force_pbo, NULL}, {"glfinish", OPT_ARG_BOOL, &use_glFinish, NULL}, @@ -831,6 +833,7 @@ use_yuv = 0; lscale = 0; cscale = 0; + filter_strength = 0.5; use_rectangle = 0; use_glFinish = 0; ati_hack = 0;