# HG changeset patch # User reimar # Date 1200683129 0 # Node ID 2ee33590afe617e5adc1bf9c662e2557d88b1d0e # Parent 70ab55da268900c0c4868668f4a7dff3fcfcd878 Add a fragment program for 5x5 unsharp masking diff -r 70ab55da2689 -r 2ee33590afe6 DOCS/man/en/mplayer.1 --- a/DOCS/man/en/mplayer.1 Fri Jan 18 18:38:02 2008 +0000 +++ b/DOCS/man/en/mplayer.1 Fri Jan 18 19:05:29 2008 +0000 @@ -3657,6 +3657,8 @@ Might be faster on some cards. .br 4: Use experimental unsharp masking with 3x3 support and a strength of 0.5. +.br +5: Use experimental unsharp masking with 5x5 support and a strength of 0.5. .RE .IPs cscale= Select the scaling function to use for chrominance scaling. diff -r 70ab55da2689 -r 2ee33590afe6 libvo/gl_common.c --- a/libvo/gl_common.c Fri Jan 18 18:38:02 2008 +0000 +++ b/libvo/gl_common.c Fri Jan 18 19:05:29 2008 +0000 @@ -770,6 +770,30 @@ "SUB b.r, a.r, b.r;" "MAD yuv.%c, b.r, %s, a.r;"; +static const char *unsharp_filt_template2 = + "PARAM dcoord = {%f, %f, %f, %f};" + "PARAM dcoord2 = {%f, 0, 0, %f};" + "ADD coord, fragment.texcoord[%c].xyxy, dcoord;" + "SUB coord2, fragment.texcoord[%c].xyxy, dcoord;" + "TEX a.r, fragment.texcoord[%c], texture[%c], %s;" + "TEX b.r, coord.xyxy, texture[%c], %s;" + "TEX b.g, coord.zwzw, texture[%c], %s;" + "ADD b.r, b.r, b.g;" + "TEX b.b, coord2.xyxy, texture[%c], %s;" + "TEX b.g, coord2.zwzw, texture[%c], %s;" + "ADD b.r, b.r, b.b;" + "ADD b.a, b.r, b.g;" + "ADD coord, fragment.texcoord[%c].xyxy, dcoord2;" + "SUB coord2, fragment.texcoord[%c].xyxy, dcoord2;" + "TEX b.r, coord.xyxy, texture[%c], %s;" + "TEX b.g, coord.zwzw, texture[%c], %s;" + "ADD b.r, b.r, b.g;" + "TEX b.b, coord2.xyxy, texture[%c], %s;" + "TEX b.g, coord2.zwzw, texture[%c], %s;" + "DP4 b.r, b, {-0.1171875, -0.1171875, -0.1171875, -0.01953125};" + "MAD b.r, a.r, {0.859375}, b.r;" + "MAD yuv.%c, b.r, %s, a.r;"; + static const char *yuv_prog_template = "PARAM ycoef = {%.4f, %.4f, %.4f};" "PARAM ucoef = {%.4f, %.4f, %.4f};" @@ -827,6 +851,7 @@ case YUV_SCALER_BILIN: case YUV_SCALER_BICUB_NOTEX: case YUV_SCALER_UNSHARP: + case YUV_SCALER_UNSHARP2: break; case YUV_SCALER_BICUB: case YUV_SCALER_BICUB_X: @@ -1055,6 +1080,15 @@ in_tex, ttype, in_tex, ttype, in_tex, ttype, in_tex, ttype, in_tex, ttype, out_comp, "{0.5}"); break; + case YUV_SCALER_UNSHARP2: + snprintf(*prog_pos, *remain, unsharp_filt_template2, + 1.2 * ptw, 1.2 * pth, 1.2 * ptw, -1.2 * pth, + 1.5 * ptw, 1.5 * pth, + in_tex, in_tex, in_tex, + in_tex, ttype, in_tex, ttype, in_tex, ttype, in_tex, ttype, + in_tex, ttype, in_tex, in_tex, in_tex, ttype, in_tex, ttype, in_tex, ttype, + in_tex, ttype, out_comp, "{0.5}"); + break; } *remain -= strlen(*prog_pos); *prog_pos += strlen(*prog_pos); diff -r 70ab55da2689 -r 2ee33590afe6 libvo/gl_common.h --- a/libvo/gl_common.h Fri Jan 18 18:38:02 2008 +0000 +++ b/libvo/gl_common.h Fri Jan 18 19:05:29 2008 +0000 @@ -244,6 +244,7 @@ //! use cubic scaling without additional lookup texture #define YUV_SCALER_BICUB_NOTEX 3 #define YUV_SCALER_UNSHARP 4 +#define YUV_SCALER_UNSHARP2 5 //! mask for conversion type #define YUV_CONVERSION_MASK 0xF //! mask for scaler type