Skip to content

Commit fe54464

Browse files
Implement --sharpen for vo_default.
1 parent 234da20 commit fe54464

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

video/out/vo_default.c

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ struct priv {
170170
bool target_hint;
171171

172172
float corner_rounding;
173+
float sharpen;
174+
const struct pl_hook *sharpen_hook;
173175

174176
struct pl_hdr_metadata last_hdr_metadata;
175177
};
@@ -1875,6 +1877,8 @@ static void uninit(struct vo *vo)
18751877
pl_tex_destroy(p->gpu, &p->sub_tex[i]);
18761878
for (int i = 0; i < p->num_user_hooks; i++)
18771879
pl_mpv_user_shader_destroy(&p->user_hooks[i].hook);
1880+
if (p->sharpen_hook)
1881+
pl_mpv_user_shader_destroy(&p->sharpen_hook);
18781882

18791883
if (vo->hwdec_devs) {
18801884
ra_hwdec_mapper_free(&p->hwdec_mapper);
@@ -2202,6 +2206,41 @@ static void update_hook_opts(struct priv *p, char **opts, const char *shaderpath
22022206
}
22032207
}
22042208

2209+
static const struct pl_hook *create_sharpen_hook(struct priv *p, float param)
2210+
{
2211+
if (param == 0.0f)
2212+
return NULL;
2213+
2214+
const char *sharpen_shader = talloc_asprintf(p,
2215+
"//!HOOK MAIN\n"
2216+
"//!BIND HOOKED\n"
2217+
"//!DESC Sharpen (unsharp mask)\n"
2218+
"\n"
2219+
"vec4 hook()\n"
2220+
"{\n"
2221+
" float st1 = 1.2;\n"
2222+
" vec4 p = HOOKED_tex(HOOKED_pos);\n"
2223+
" vec4 sum1 = HOOKED_texOff(st1 * vec2(+1.0, +1.0))\n"
2224+
" + HOOKED_texOff(st1 * vec2(+1.0, -1.0))\n"
2225+
" + HOOKED_texOff(st1 * vec2(-1.0, +1.0))\n"
2226+
" + HOOKED_texOff(st1 * vec2(-1.0, -1.0));\n"
2227+
" float st2 = 1.5;\n"
2228+
" vec4 sum2 = HOOKED_texOff(st2 * vec2(+1.0, 0.0))\n"
2229+
" + HOOKED_texOff(st2 * vec2( 0.0, +1.0))\n"
2230+
" + HOOKED_texOff(st2 * vec2(-1.0, 0.0))\n"
2231+
" + HOOKED_texOff(st2 * vec2( 0.0, -1.0));\n"
2232+
" vec4 t = p * 0.859375 + sum2 * -0.1171875 + sum1 * -0.09765625;\n"
2233+
" return p + t * %f;\n"
2234+
"}\n",
2235+
param);
2236+
2237+
const struct pl_hook *hook = pl_mpv_user_shader_parse(p->gpu, sharpen_shader, strlen(sharpen_shader));
2238+
if (!hook)
2239+
MP_ERR(p, "Failed to create sharpen shader hook\n");
2240+
2241+
return hook;
2242+
}
2243+
22052244
static void update_render_options(struct vo *vo)
22062245
{
22072246
struct priv *p = vo->priv;
@@ -2352,6 +2391,20 @@ static void update_render_options(struct vo *vo)
23522391
}
23532392
}
23542393

2394+
if (p->sharpen != 0.0f) {
2395+
if (p->sharpen_hook)
2396+
pl_mpv_user_shader_destroy(&p->sharpen_hook);
2397+
2398+
p->sharpen_hook = create_sharpen_hook(p, p->sharpen);
2399+
if (p->sharpen_hook)
2400+
MP_TARRAY_APPEND(p, p->hooks, pars->params.num_hooks, p->sharpen_hook);
2401+
} else {
2402+
if (p->sharpen_hook) {
2403+
pl_mpv_user_shader_destroy(&p->sharpen_hook);
2404+
p->sharpen_hook = NULL;
2405+
}
2406+
}
2407+
23552408
pars->params.hooks = p->hooks;
23562409
}
23572410

@@ -2398,6 +2451,7 @@ const struct vo_driver video_out_default = {
23982451
{"image-lut-type", OPT_CHOICE_C(image_lut.type, lut_types)},
23992452
{"target-lut", OPT_STRING(target_lut.opt), .flags = M_OPT_FILE},
24002453
{"target-colorspace-hint", OPT_BOOL(target_hint)},
2454+
{"sharpen", OPT_FLOAT(sharpen)},
24012455
// No `target-lut-type` because we don't support non-RGB targets
24022456
{"libplacebo-opts", OPT_KEYVALUELIST(raw_opts)},
24032457
{0}

0 commit comments

Comments
 (0)