From ff0680c9b432f087f7fa57cc8f27fdeb4ac578f8 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 27 Jul 2013 21:16:34 +0200 Subject: vf: fix unintended overwriting of image info The symptom was that "-vf scale,format=rgba" broke the vsfilter colorspace hack in sd_ass. vf->reconfig is allowed to overwrite its input parameter for convenience (maybe that was a bad idea). --- video/filter/vf.c | 5 +++-- video/filter/vf.h | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/video/filter/vf.c b/video/filter/vf.c index c6c3766baf..294c306448 100644 --- a/video/filter/vf.c +++ b/video/filter/vf.c @@ -432,7 +432,7 @@ void vf_chain_seek_reset(struct vf_instance *vf) vf_forget_frames(cur); } -int vf_reconfig_wrapper(struct vf_instance *vf, struct mp_image_params *p, +int vf_reconfig_wrapper(struct vf_instance *vf, const struct mp_image_params *p, int flags) { vf_forget_frames(vf); @@ -446,7 +446,8 @@ int vf_reconfig_wrapper(struct vf_instance *vf, struct mp_image_params *p, int r; if (vf->reconfig) { - r = vf->reconfig(vf, p, flags); + struct mp_image_params params = *p; + r = vf->reconfig(vf, ¶ms, flags); } else { r = vf->config(vf, p->w, p->h, p->d_w, p->d_h, flags, p->imgfmt); r = r ? 0 : -1; diff --git a/video/filter/vf.h b/video/filter/vf.h index 067e857f0d..d115890f64 100644 --- a/video/filter/vf.h +++ b/video/filter/vf.h @@ -147,8 +147,8 @@ vf_instance_t *vf_find_by_label(vf_instance_t *chain, const char *label); void vf_uninit_filter(vf_instance_t *vf); void vf_uninit_filter_chain(vf_instance_t *vf); -int vf_reconfig_wrapper(struct vf_instance *vf, struct mp_image_params *params, - int flags); +int vf_reconfig_wrapper(struct vf_instance *vf, + const struct mp_image_params *params, int flags); void vf_print_filter_chain(int msglevel, struct vf_instance *vf); void vf_rescale_dsize(int *d_width, int *d_height, int old_w, int old_h, -- cgit v1.2.3