diff options
author | wm4 <wm4@nowhere> | 2012-12-26 21:08:54 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2013-01-13 20:04:12 +0100 |
commit | 926c6631ff35925c002d1e267abcbded38777d05 (patch) | |
tree | a345fe20bf7173e7bf086fcbf99712e8783066e4 /video | |
parent | 717d904bbc20e06e2c6c71613d59e065845ff209 (diff) | |
download | mpv-926c6631ff35925c002d1e267abcbded38777d05.tar.bz2 mpv-926c6631ff35925c002d1e267abcbded38777d05.tar.xz |
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.
Diffstat (limited to 'video')
-rw-r--r-- | video/filter/vf.c | 15 | ||||
-rw-r--r-- | video/filter/vf.h | 3 |
2 files changed, 18 insertions, 0 deletions
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) { |