summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-07-27 21:16:34 +0200
committerwm4 <wm4@nowhere>2013-07-28 18:44:20 +0200
commitff0680c9b432f087f7fa57cc8f27fdeb4ac578f8 (patch)
treedae9a07c8b02601b815f3c844c5095df79f825bd
parentca678dce4d3170a65ac184574bd12130aed06e82 (diff)
downloadmpv-ff0680c9b432f087f7fa57cc8f27fdeb4ac578f8.tar.bz2
mpv-ff0680c9b432f087f7fa57cc8f27fdeb4ac578f8.tar.xz
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).
-rw-r--r--video/filter/vf.c5
-rw-r--r--video/filter/vf.h4
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, &params, 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,