mirror of https://github.com/mpv-player/mpv
vo: make cscale follow scale by default
This commit is contained in:
parent
8121d41245
commit
4bedcd36f6
|
@ -64,6 +64,7 @@ Interface changes
|
||||||
- rename `--cache-dir` and `--cache-unlink-files` to `--demuxer-cache-dir` and
|
- rename `--cache-dir` and `--cache-unlink-files` to `--demuxer-cache-dir` and
|
||||||
`--demuxer-cache-unlink-files`
|
`--demuxer-cache-unlink-files`
|
||||||
- enable `--correct-downscaling`, `--linear-downscaling`, `--sigmoid-upscaling`
|
- enable `--correct-downscaling`, `--linear-downscaling`, `--sigmoid-upscaling`
|
||||||
|
- `--cscale` defaults to `--scale` if not defined
|
||||||
--- mpv 0.36.0 ---
|
--- mpv 0.36.0 ---
|
||||||
- add `--target-contrast`
|
- add `--target-contrast`
|
||||||
- Target luminance value is now also applied when ICC profile is used.
|
- Target luminance value is now also applied when ICC profile is used.
|
||||||
|
|
|
@ -5314,7 +5314,8 @@ them.
|
||||||
|
|
||||||
``--cscale=<filter>``
|
``--cscale=<filter>``
|
||||||
As ``--scale``, but for interpolating chroma information. If the image is
|
As ``--scale``, but for interpolating chroma information. If the image is
|
||||||
not subsampled, this option is ignored entirely.
|
not subsampled, this option is ignored entirely. If this option is unset,
|
||||||
|
the filter implied by ``--scale`` will be applied.
|
||||||
|
|
||||||
``--dscale=<filter>``
|
``--dscale=<filter>``
|
||||||
Like ``--scale``, but apply these filters on downscaling instead. If this
|
Like ``--scale``, but apply these filters on downscaling instead. If this
|
||||||
|
|
|
@ -307,7 +307,7 @@ static const struct gl_video_opts gl_video_opts_def = {
|
||||||
.cutoff = 0.001}, // scale
|
.cutoff = 0.001}, // scale
|
||||||
{{NULL, .params={NAN, NAN}}, {.params = {NAN, NAN}},
|
{{NULL, .params={NAN, NAN}}, {.params = {NAN, NAN}},
|
||||||
.cutoff = 0.001}, // dscale
|
.cutoff = 0.001}, // dscale
|
||||||
{{"bilinear", .params={NAN, NAN}}, {.params = {NAN, NAN}},
|
{{NULL, .params={NAN, NAN}}, {.params = {NAN, NAN}},
|
||||||
.cutoff = 0.001}, // cscale
|
.cutoff = 0.001}, // cscale
|
||||||
{{"mitchell", .params={NAN, NAN}}, {.params = {NAN, NAN}},
|
{{"mitchell", .params={NAN, NAN}}, {.params = {NAN, NAN}},
|
||||||
.clamp = 1, }, // tscale
|
.clamp = 1, }, // tscale
|
||||||
|
@ -1733,6 +1733,12 @@ static void reinit_scaler(struct gl_video *p, struct scaler *scaler,
|
||||||
conf = &p->opts.scaler[SCALER_SCALE];
|
conf = &p->opts.scaler[SCALER_SCALE];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (conf && scaler->index == SCALER_CSCALE && (!conf->kernel.name ||
|
||||||
|
!conf->kernel.name[0]))
|
||||||
|
{
|
||||||
|
conf = &p->opts.scaler[SCALER_SCALE];
|
||||||
|
}
|
||||||
|
|
||||||
struct filter_kernel bare_window;
|
struct filter_kernel bare_window;
|
||||||
const struct filter_kernel *t_kernel = mp_find_filter_kernel(conf->kernel.name);
|
const struct filter_kernel *t_kernel = mp_find_filter_kernel(conf->kernel.name);
|
||||||
const struct filter_window *t_window = mp_find_filter_window(conf->window.name);
|
const struct filter_window *t_window = mp_find_filter_window(conf->window.name);
|
||||||
|
@ -2302,6 +2308,13 @@ static void pass_read_video(struct gl_video *p)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const struct scaler_config *conf = &p->opts.scaler[scaler_id];
|
const struct scaler_config *conf = &p->opts.scaler[scaler_id];
|
||||||
|
|
||||||
|
if (scaler_id == SCALER_CSCALE && (!conf->kernel.name ||
|
||||||
|
!conf->kernel.name[0]))
|
||||||
|
{
|
||||||
|
conf = &p->opts.scaler[SCALER_SCALE];
|
||||||
|
}
|
||||||
|
|
||||||
struct scaler *scaler = &p->scaler[scaler_id];
|
struct scaler *scaler = &p->scaler[scaler_id];
|
||||||
|
|
||||||
// bilinear scaling is a free no-op thanks to GPU sampling
|
// bilinear scaling is a free no-op thanks to GPU sampling
|
||||||
|
@ -4180,6 +4193,8 @@ static int validate_scaler_opt(struct mp_log *log, const m_option_t *opt,
|
||||||
r = M_OPT_EXIT;
|
r = M_OPT_EXIT;
|
||||||
} else if (bstr_equals0(name, "dscale") && !param.len) {
|
} else if (bstr_equals0(name, "dscale") && !param.len) {
|
||||||
return r; // empty dscale means "use same as upscaler"
|
return r; // empty dscale means "use same as upscaler"
|
||||||
|
} else if (bstr_equals0(name, "cscale") && !param.len) {
|
||||||
|
return r; // empty cscale means "use same as upscaler"
|
||||||
} else {
|
} else {
|
||||||
snprintf(s, sizeof(s), "%.*s", BSTR_P(param));
|
snprintf(s, sizeof(s), "%.*s", BSTR_P(param));
|
||||||
if (!handle_scaler_opt(s, tscale))
|
if (!handle_scaler_opt(s, tscale))
|
||||||
|
|
|
@ -1740,7 +1740,9 @@ static const struct pl_filter_config *map_scaler(struct priv *p,
|
||||||
|
|
||||||
const struct gl_video_opts *opts = p->opts_cache->opts;
|
const struct gl_video_opts *opts = p->opts_cache->opts;
|
||||||
const struct scaler_config *cfg = &opts->scaler[unit];
|
const struct scaler_config *cfg = &opts->scaler[unit];
|
||||||
if (unit == SCALER_DSCALE && (!cfg->kernel.name || !strcmp(cfg->kernel.name, "")))
|
if (unit == SCALER_DSCALE && (!cfg->kernel.name || !cfg->kernel.name[0]))
|
||||||
|
cfg = &opts->scaler[SCALER_SCALE];
|
||||||
|
if (unit == SCALER_CSCALE && (!cfg->kernel.name || !cfg->kernel.name[0]))
|
||||||
cfg = &opts->scaler[SCALER_SCALE];
|
cfg = &opts->scaler[SCALER_SCALE];
|
||||||
|
|
||||||
for (int i = 0; fixed_presets[i].name; i++) {
|
for (int i = 0; fixed_presets[i].name; i++) {
|
||||||
|
|
Loading…
Reference in New Issue