diff options
author | Paul B Mahol <onemda@gmail.com> | 2020-02-29 14:22:51 +0100 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2020-02-29 14:24:35 +0100 |
commit | 2dfd9445ff9b69a2b826e7b4c21c316689000147 (patch) | |
tree | f5daaefe3b96ae022824fa4c146d1ffe8734e8e8 /libavfilter | |
parent | 50a13b987b609f3280d2bc57cacbb67e2cf80521 (diff) | |
download | ffmpeg-2dfd9445ff9b69a2b826e7b4c21c316689000147.tar.gz |
avfilter/vf_v360: improve tetrahedron input format at frame borders
Diffstat (limited to 'libavfilter')
-rw-r--r-- | libavfilter/vf_v360.c | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/libavfilter/vf_v360.c b/libavfilter/vf_v360.c index 1cdbaf7330..90e45b4fd0 100644 --- a/libavfilter/vf_v360.c +++ b/libavfilter/vf_v360.c @@ -623,6 +623,39 @@ static inline int mod(int a, int b) } /** + * Reflect y operation. + * + * @param y input vertical position + * @param h input height + */ +static inline int reflecty(int y, int h) +{ + if (y < 0) { + return -y; + } else if (y >= h) { + return 2 * h - 1 - y; + } + + return y; +} + +/** + * Reflect x operation. + * + * @param x input horizontal position + * @param y input vertical position + * @param w input width + * @param h input height + */ +static inline int reflectx(int x, int y, int w, int h) +{ + if (y < 0 || y >= h) + return w - 1 - x; + + return mod(x, w); +} + +/** * Convert char to corresponding direction. * Used for cubemap options. */ @@ -2746,8 +2779,8 @@ static int xyz_to_tetrahedron(const V360Context *s, for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { - us[i][j] = mod(ui + j - 1, width); - vs[i][j] = av_clip(vi + i - 1, 0, height - 1); + us[i][j] = reflectx(ui + j - 1, vi + i - 1, width, height); + vs[i][j] = reflecty(vi + i - 1, height); } } |