summaryrefslogtreecommitdiffstats
path: root/libmpcodecs/vf_dsize.c
diff options
context:
space:
mode:
authorrfelker <rfelker@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-04-27 18:55:04 +0000
committerrfelker <rfelker@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-04-27 18:55:04 +0000
commit007449236fb9f4c18d021445a930f8773a624959 (patch)
tree0a5cecce1214362835cbf2b10e69fb024d3a3cf1 /libmpcodecs/vf_dsize.c
parent987378835fe2306b92851b61a3559c16ecdf3ce7 (diff)
downloadmpv-007449236fb9f4c18d021445a930f8773a624959.tar.bz2
mpv-007449236fb9f4c18d021445a930f8773a624959.tar.xz
display size/aspect adjusting filter
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@10007 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs/vf_dsize.c')
-rw-r--r--libmpcodecs/vf_dsize.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/libmpcodecs/vf_dsize.c b/libmpcodecs/vf_dsize.c
new file mode 100644
index 0000000000..7806dc81d3
--- /dev/null
+++ b/libmpcodecs/vf_dsize.c
@@ -0,0 +1,66 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <inttypes.h>
+
+#include "../config.h"
+#include "../mp_msg.h"
+
+#include "img_format.h"
+#include "mp_image.h"
+#include "vf.h"
+
+struct vf_priv_s {
+ int w, h;
+ float aspect;
+};
+
+static int config(struct vf_instance_s* vf,
+ int width, int height, int d_width, int d_height,
+ unsigned int flags, unsigned int outfmt)
+{
+ if (vf->priv->w && vf->priv->h) {
+ d_width = vf->priv->w;
+ d_height = vf->priv->h;
+ } else {
+ if (vf->priv->aspect * height > width) {
+ d_width = height * vf->priv->aspect;
+ d_height = height;
+ } else {
+ d_height = width / vf->priv->aspect;
+ d_width = width;
+ }
+ }
+ return vf_next_config(vf, width, height, d_width, d_height, flags, outfmt);
+}
+
+static int open(vf_instance_t *vf, char* args)
+{
+ vf->config = config;
+ vf->draw_slice = vf_next_draw_slice;
+ //vf->default_caps = 0;
+ vf->priv = calloc(sizeof(struct vf_priv_s), 1);
+ vf->priv->aspect = 4.0/3.0;
+ if (args) {
+ if (strchr(args, '/')) {
+ int w, h;
+ sscanf(args, "%d/%d", &w, &h);
+ vf->priv->aspect = (float)w/h;
+ } else if (strchr(args, '.')) {
+ sscanf(args, "%f", &vf->priv->aspect);
+ } else {
+ sscanf(args, "%d:%d", &vf->priv->w, &vf->priv->h);
+ }
+ }
+ return 1;
+}
+
+vf_info_t vf_info_dsize = {
+ "reset displaysize/aspect",
+ "dsize",
+ "Rich Felker",
+ "",
+ open,
+ NULL
+};
+