vo_opengl: add tscale-interpolates-only sub-option

This commit is contained in:
wm4 2016-01-25 21:46:01 +01:00
parent bd1fb6f9b1
commit 521110054d
4 changed files with 13 additions and 1 deletions

View File

@ -28,6 +28,7 @@ Interface changes
- VO opengl custom shaders must now use "sample_pixel" as function name, - VO opengl custom shaders must now use "sample_pixel" as function name,
instead of "sample" instead of "sample"
- change VO opengl scaler-resizes-only default to enabled - change VO opengl scaler-resizes-only default to enabled
- add VO opengl "tscale-interpolates-only" suboption
--- mpv 0.15.0 --- --- mpv 0.15.0 ---
- change "yadif" video filter defaults - change "yadif" video filter defaults
--- mpv 0.14.0 --- --- mpv 0.14.0 ---

View File

@ -549,6 +549,10 @@ Available video output drivers are:
manifest themselves as short flashes or fringes of black, mostly manifest themselves as short flashes or fringes of black, mostly
around moving edges) in exchange for potentially adding more blur. around moving edges) in exchange for potentially adding more blur.
``tscale-interpolates-only=<yes|no>``
If set, then don't perform interpolation if the playback rate matches
the the display refresh rate (default: yes).
``dscale-radius``, ``cscale-radius``, ``tscale-radius``, etc. ``dscale-radius``, ``cscale-radius``, ``tscale-radius``, etc.
Set filter parameters for ``dscale``, ``cscale`` and ``tscale``, Set filter parameters for ``dscale``, ``cscale`` and ``tscale``,
respectively. respectively.

View File

@ -338,6 +338,7 @@ const struct gl_video_opts gl_video_opts_def = {
.clamp = 1, }, // tscale .clamp = 1, }, // tscale
}, },
.scaler_resizes_only = 1, .scaler_resizes_only = 1,
.tscale_interpolates_only = 1,
.scaler_lut_size = 6, .scaler_lut_size = 6,
.alpha_mode = 3, .alpha_mode = 3,
.background = {0, 0, 0, 255}, .background = {0, 0, 0, 255},
@ -363,6 +364,7 @@ const struct gl_video_opts gl_video_opts_hq_def = {
.clamp = 1, }, // tscale .clamp = 1, }, // tscale
}, },
.scaler_resizes_only = 1, .scaler_resizes_only = 1,
.tscale_interpolates_only = 1,
.scaler_lut_size = 6, .scaler_lut_size = 6,
.alpha_mode = 3, .alpha_mode = 3,
.background = {0, 0, 0, 255}, .background = {0, 0, 0, 255},
@ -406,6 +408,7 @@ const struct m_sub_options gl_video_conf = {
SCALER_OPTS("tscale", 3), SCALER_OPTS("tscale", 3),
OPT_INTRANGE("scaler-lut-size", scaler_lut_size, 0, 4, 10), OPT_INTRANGE("scaler-lut-size", scaler_lut_size, 0, 4, 10),
OPT_FLAG("scaler-resizes-only", scaler_resizes_only, 0), OPT_FLAG("scaler-resizes-only", scaler_resizes_only, 0),
OPT_FLAG("tscale-interpolates-only", tscale_interpolates_only, 0),
OPT_FLAG("linear-scaling", linear_scaling, 0), OPT_FLAG("linear-scaling", linear_scaling, 0),
OPT_FLAG("correct-downscaling", correct_downscaling, 0), OPT_FLAG("correct-downscaling", correct_downscaling, 0),
OPT_FLAG("sigmoid-upscaling", sigmoid_upscaling, 0), OPT_FLAG("sigmoid-upscaling", sigmoid_upscaling, 0),
@ -2182,8 +2185,11 @@ void gl_video_render_frame(struct gl_video *p, struct vo_frame *frame, int fbo)
if (has_frame) { if (has_frame) {
gl_sc_set_vao(p->sc, &p->vao); gl_sc_set_vao(p->sc, &p->vao);
bool same_rate = !(frame->repeat || frame->num_vsyncs > 1);
if (p->opts.interpolation && frame->display_synced && if (p->opts.interpolation && frame->display_synced &&
(p->frames_drawn || !frame->still)) (p->frames_drawn || !frame->still) &&
(!same_rate || !p->opts.tscale_interpolates_only))
{ {
gl_video_interpolate_frame(p, frame, fbo); gl_video_interpolate_frame(p, frame, fbo);
} else { } else {

View File

@ -83,6 +83,7 @@ struct gl_video_opts {
float sigmoid_center; float sigmoid_center;
float sigmoid_slope; float sigmoid_slope;
int scaler_resizes_only; int scaler_resizes_only;
int tscale_interpolates_only;
int pbo; int pbo;
int dither_depth; int dither_depth;
int dither_algo; int dither_algo;