diff options
author | rfelker <rfelker@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-04-27 18:55:04 +0000 |
---|---|---|
committer | rfelker <rfelker@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-04-27 18:55:04 +0000 |
commit | 007449236fb9f4c18d021445a930f8773a624959 (patch) | |
tree | 0a5cecce1214362835cbf2b10e69fb024d3a3cf1 /libmpcodecs/vf_dsize.c | |
parent | 987378835fe2306b92851b61a3559c16ecdf3ce7 (diff) | |
download | mpv-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.c | 66 |
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 +}; + |