# Xyremap

Abstract
Author wonkey_monkey
Version v0.5beta
Category Transformation

## Description

xyremap is a filter for remapping pixels using formulae written in reverse Polish notation (http://en.wikipedia.org/wiki/Reverse_Polish_notation)

## Syntax and Parameters

```xyremap(clip, string "x", string "y", string "m", int "w", int "h", bool "draft", bool "static")

x: a formula, written in reverse Polish notation, to calculate source x coordinate for each remapped pixel
y: same as above for the y coordinate
m: same as above, used to multiply (darken) the pixel value
w: output width (defaults to input width)
h: output height (defaults to input height)
draft: nearest-neighbour interpolation if true (otherwise defaults to bicubic interpolation)
static: if the remapping is the same for all frames (no animation using variables n or t), set this to true to increase rendering speed
```

## Examples

```xyremap's formulae map output pixels to input pixels, with the origin at the top left.

To shift an image to the right by 10 pixels, use:

xyremap(clip, "x 10 -")

Note that "-" is used instead of "+" because we are mapping from output to input pixels, not the other way around (which would be more intuitive).

Similarly to upscale a video in both dimensions:

xyremap(clip, "x 0.5 *", "y 0.5 *")

To scale up from the center:

xyremap(clip, "x w 0.5 * - 0.5 * u 0.5 * +", "y w 0.5 * - 0.5 * v 0.5 * +")
```

## Reverse Polish Notation=

```For a list of available operations in this implementation,
see the included rpn.html document or here: http://horman.net/avisynth/rpn.php

xyremap sets the following variables:

x: pixel x coordinate (note that this is the pixel center coordinate, so the leftmost pixel is x=0.5)
y: pixel y coordinate (note that this is the pixel center coordinate, so the topmost pixel is y=0.5)
a: pixel x coordinate normalised to [0-1]
b: pixel y coordinate normalised to [0-1]
c: pixel y coordinate normalised to [0-1*display_aspect_ratio]
n: frame number
t: t=n/framecount (so 0<=0<1)
w: output width
h: output height
u: input width
v: input height
```

## Changelog

```Version      Date            Changes
v0.5beta     2015/08/30      - some new RPN functions, a bug fix, and (approximately) gamma-aware interpolation
v0.4beta     2015/08/23      - new x86 RPN compiler; new functionality
v0.3         2015/03/15      - new parameter "static" to speed up non-animating remaps
v0.2         2012/11/01      - bug fixes to pixel interpolator, min/max functions, added new RPN parameters
v0.1         2012/10/14      - initial release
```