summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-12-26 21:08:54 +0100
committerwm4 <wm4@nowhere>2013-01-13 20:04:12 +0100
commit926c6631ff35925c002d1e267abcbded38777d05 (patch)
treea345fe20bf7173e7bf086fcbf99712e8783066e4 /video
parent717d904bbc20e06e2c6c71613d59e065845ff209 (diff)
downloadmpv-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.c15
-rw-r--r--video/filter/vf.h3
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) {