From 926c6631ff35925c002d1e267abcbded38777d05 Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 26 Dec 2012 21:08:54 +0100 Subject: vf: add vf_rescale_dsize() Needed because mplayer* basically tracks DAR, which makes it harder for filters which want to keep the SAR. The contents of this function are duplicated in a few filters, and will be used instead of custom code as the filters are updated later. --- video/filter/vf.c | 15 +++++++++++++++ video/filter/vf.h | 3 +++ 2 files changed, 18 insertions(+) (limited to 'video') diff --git a/video/filter/vf.c b/video/filter/vf.c index f286da8a4f..b7a2044ad1 100644 --- a/video/filter/vf.c +++ b/video/filter/vf.c @@ -30,6 +30,7 @@ #include "core/m_option.h" #include "core/m_struct.h" +#include "core/options.h" #include "video/img_format.h" #include "video/mp_image.h" @@ -476,6 +477,20 @@ void vf_uninit_filter_chain(vf_instance_t *vf) } } +// When cropping an image that had old_w/old_h/*d_width/*d_height to the new +// size new_w/new_h, adjust *d_width/*d_height such that the new image has +// the same pixel aspect ratio. +void vf_rescale_dsize(struct vf_instance *vf, int *d_width, int *d_height, + int old_w, int old_h, int new_w, int new_h) +{ + // No idea what this is about + if (vf->opts->screen_size_x || vf->opts->screen_size_y) + return; + + *d_width = *d_width * new_w / old_w; + *d_height = *d_height * new_h / old_h; +} + void vf_detc_init_pts_buf(struct vf_detc_pts_buf *p) { p->inpts_prev = MP_NOPTS_VALUE; diff --git a/video/filter/vf.h b/video/filter/vf.h index 358b8135f5..bca9ebfff5 100644 --- a/video/filter/vf.h +++ b/video/filter/vf.h @@ -141,6 +141,9 @@ int vf_config_wrapper(struct vf_instance *vf, int width, int height, int d_width, int d_height, unsigned int flags, unsigned int outfmt); +void vf_rescale_dsize(struct vf_instance *vf, int *d_width, int *d_height, + int old_w, int old_h, int new_w, int new_h); + static inline int norm_qscale(int qscale, int type) { switch (type) { -- cgit v1.2.3